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을 확인해 본다면 아래와 같습니다.

1
2
3
4
5
6
import hashlib
m = hashlib.sha256()
m.update(b'nGle')
m.hexdigest()
# '0a70521ebae01cdf404485c2ef7f958a2a90d42655799ba9c444804d4b9755df'
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# 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)
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


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

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

1
2
3
$ python leftPad64.py
0x0000000000000000000000000000000000000000000000004869206e476c6521
4869206e476c6521000000000000000000000000000000000000000000000000
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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



Comments