don't stop believing

blockchain 테스트에 사용한 python 함수 - leftPad64 본문

Python/Basic

blockchain 테스트에 사용한 python 함수 - leftPad64

Tongchun 2018. 12. 18. 14:53

blockchain 테스트에 사용한 python 함수를 설명합니다.

  • getDateStrings - 날짜 - 년, 월, 일, 시, 분, 초를 확인하는 함수입니다.
  • getLogfileNameWithPath - 로그 기록을 위해 폴더를 생성하고 경로를 반환합니다.
  • getRequestId - ramdom으로 숫자를 반환합니다.
  • moveFile - 특정 파일을 로그 폴더로 이동시킵니다.
  • saveResultData - 데이터를 파일에 저장합니다.
  • convertToHex - String을 hex로 변환합니다.
  • leftPad64 - 왼쪽에 (또는 오른쪽에) 0을 채워 고정된 길이로 만듭니다.
  • getTestConfig - json 형태의 config 파일을 만들고 불러옵니다.
  • waitingCount - time.sleep() 할 때 동적으로 카운트를 셉니다.
  • callRPC - requests 모듈을 사용해 http API를 호출합니다.
  • callWS - websocket 모듈을 사용해 API 통신을 합니다.


Blockchain에서는 SHA-2 (Secure Hash Algorithm 2)를 사용합니다. 

보통 sha256를 사용하며 암호화 하여 변환하게 되면 고정된 길이(64)의 데이터가 나오게 됩니다.

python3 에서 sha256을 확인해 본다면 아래와 같습니다.

import hashlib

m = hashlib.sha256()
m.update(b'nGle')
m.hexdigest()
# '0a70521ebae01cdf404485c2ef7f958a2a90d42655799ba9c444804d4b9755df'


간혹 hex 데이터를 sha256 데이터의 형태로 변환해야 할 때가 있습니다.

이럴때는 hex 데이터의 왼쪽이나 오른쪽에 0을 추가해 길이가 64인 데이터를 만들어 줘야 합니다.

# coding=utf-8 class nGleUtils(): def leftPad64(self, hexData, prefix=False): '''왼쪽에 0을 체워 64자의 hex 데이터를 만듭니다.''' # hex 데이터의 0x를 제거합니다. if hexData[:2] == "0x": hexData = hexData[2:] # prefix가 True일 경우 0x를 추가해줍니다. if prefix: return "0x" + "{:0>64}".format(hexData) else: return "{:0>64}".format(hexData) def rightPad64(self, hexData, prefix=False): '''오른쪽에 0을 체워 64자의 hex 데이터를 만듭니다.''' # hex 데이터의 0x를 제거합니다. if hexData[:2] == "0x": hexData = hexData[2:] # prefix가 True일 경우 0x를 추가해줍니다. if prefix: return "0x" + "{:0<64}".format(hexData) else: return "{:0<64}".format(hexData) if __name__== "__main__": ngle = nGleUtils() hexData = "0x4869206e476c6521" # hexData의 왼쪽에 0을 체워 길이를 64로 맞춥니다. # prefix=True를 input에 추가해 hex 데이터로 만들어 줍니다. leftPad = ngle.leftPad64(hexData, prefix=True) print(leftPad) # hexData의 오른쪽을 0으로 채줘 길이를 64로 만들어 줍니다. rightPad = ngle.rightPad64(hexData) print(rightPad)


왼쪽을 채워야 할 경우 leftPad64(), 오른쪽을 채울 경우엔 rightPad64()를 사용합니다.

실행하면 아래와 같습니다.

$ python leftPad64.py 
0x0000000000000000000000000000000000000000000000004869206e476c6521
4869206e476c6521000000000000000000000000000000000000000000000000

hex 데이터 형식이 필요할 경우 prefix=True를 input으로 추가해 결과 데이터에 "0x"를 붙여 줍니다.



Comments