티스토리 뷰
원하는 문자로 시작하는 주소를 채굴하고 니모닉을 리턴하는 함수를 작성해 보았습니다.
passphrase 는 옵션이지만,
씨드는 반드시 True Random Number 를 던지는 것이 중요합니다.
from bitcoin import *
from mnemonic import Mnemonic
m = Mnemonic('english')
def buildaddr(seed, passphrase, prefix) :
for i in range(10000000) :
ent = sha256(seed + str(i))[0:32]
priv = sha256(ent + passphrase)
addr = privtoaddr(priv)
if i % 500 == 0 :
print(i, priv, addr)
if addr.startswith(prefix):
print('** done ** ')
print('addr: ', addr)
words = m.to_mnemonic(bytes.fromhex(ent))
print('words: ', words)
print('passphrase: ', passphrase)
print('')
print('== verify ==')
print('ent: ', ent)
print('bytearray.hex(m.to_entropy(words)): ', bytearray.hex(m.to_entropy(words)))
print('priv: ', priv)
print('sha256(ent + passphrase): ', sha256(ent + passphrase))
print('addr: ', addr)
print('privtoaddr: ', privtoaddr(priv))
break
# 사용예시
seed = '9f5b4b695ef703c44fc147810e569b3062ef23f5f3f5de0ca2fc059' # True Random Number
prefix = '1min'
passphrase = 'xxxx'
buildaddr(seed, passphrase, prefix)
이렇게 만들어진 니모닉은 잘 메모해서 관리하시고요
passphrase 는 마음 안에 고이 간직해 두시면 걱정이 없을 것 같습니다!

실행 결과 예시
>>> buildaddr('true random number required', '1234', '1Hi')
0 e7c44915756861b130499dd4e189e93247b66170ee28b0e6fd003e7bc3b04598 1C7uGR5kWnia7Jn7djWBFdnubHmEGwNs8S
500 ff6ba48e6717569506f755b4ccb9feb739c3c9d698c4b6cbfa6148d93eab5290 1FRVPVpWMAc7hk53MeGXwUcP1Dw3EGotWT
1000 dceab180cb13059276822a8a72b5efae47bc54ad2a1cad7172dc4117544b78c1 1KSvbGPCo1aExZaWgH1cjwcn4cdWkKN4U9
1500 7ca847cea9282eedb0d58ed6343ef6377d32be122f452474bffac130bb945e3f 17aWGQkrQY2C6Qv7L96HKXZEukDnJEfcYC
2000 53430b9beb89b2fb41855c7fbc022348797f730b44186612ce3a9297572f9f4d 1BYwNboFjEsNC7jZD88LERNVa9Jzk4wb7Y
2500 f68557abe550250541f8ec6187014fbf35f4901368adec6d3b3faedd7ba11303 1EYcHzjMzaXwAURjdYM15q6BcqjnwRVG6m
** done **
addr: 1HihLLaZd6J2DZchmK7SmdtQ1WA8QykV41
words: prosper push lunch found knee style bonus deal nuclear come buzz rely
passphrase: 1234
== verify ==
ent: ac95d614ae17b9af8659c19745c07e5a
bytearray.hex(m.to_entropy(words)): ac95d614ae17b9af8659c19745c07e5a
priv: 255f0ccc215cdbe359150725778ca1c02cb9639f6640f3a33b85208ce8ff0202
sha256(ent + passphrase): 255f0ccc215cdbe359150725778ca1c02cb9639f6640f3a33b85208ce8ff0202
addr: 1HihLLaZd6J2DZchmK7SmdtQ1WA8QykV41
privtoaddr: 1HihLLaZd6J2DZchmK7SmdtQ1WA8QykV41
>>>
728x90
반응형
'비트코인 공부' 카테고리의 다른 글
A deep dive into Fee (10) | 2022.10.29 |
---|---|
제네시스 블록에 숨겨진 메세지 (0) | 2022.10.04 |
Mining & Difficulty (0) | 2022.09.13 |
지구를 구하는 것은 그린피스가 아니고 비트코인이다 (4) | 2022.09.11 |
니모닉(Mnemonic), 조금 더 깊게 들어가 보자 (0) | 2022.09.08 |
댓글