๋น๋ฐํค๋ฅผ ์ง๋ ฌํํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
๋น๋ฐํค ์ง๋ ฌํ
- ๋น๋ฐํค๋ฅผ ์ง๋ ฌํํ ์ด์ ๋ ๊ทธ๋ฅ ์๋ค.
- ๋คํธ์ํฌ๋ก ์ ํํ ์ผ์ด ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋น๋ฐํค ์ ํ๋ ์ง๊ฐ์ด ํธ๋ฆด ์ ์๋ ์ํ์ด ๋งค์ฐ ํฌ๋ค.
- ๊ทธ๋ฐ๋ฐ๋ ํด๋น ๊ธฐ๋ฅ์ด ์๋ ์ด์ ๋, ์ง๊ฐ์ ์ฎ๊ธฐ๊ณ ์ถ์ ๊ฒฝ์ฐ๊ฐ ์์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ข ์ด์ง๊ฐ > ์ํํธ์จ์ด ์ง๊ฐ
- ์ด๋ฐ ๊ฒฝ์ฐ๋ฅผ ์ํด WIF ํฌ๋งท์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ด์ผ ํ๋ค.
def encode_base58_checksum(b):
return encode_base58(b + hash256(b)[:4])
def encode_base58(s):
count = 0
for c in s: # <1>
if c == 0:
count += 1
else:
break
num = int.from_bytes(s, 'big')
prefix = '1' * count
result = ''
while num > 0: # <2>
num, mod = divmod(num, 58)
result = BASE58_ALPHABET[mod] + result
return prefix + result # <3>
def hash256(s):
'''two rounds of sha256'''
return hashlib.sha256(hashlib.sha256(s).digest()).digest()
class PrivateKey:
def __init__(self, secret):
self.secret = secret
self.point = secret * G
def wif(self, compressed=True, testnet=False):
secret_bytes = self.secret.to_bytes(32, 'big')
if testnet:
prefix = b'\xef'
else:
prefix = b'\x80'
if compressed:
suffix = b'\x01'
else:
suffix = b''
return encode_base58_checksum(prefix + secret_bytes + suffix)