BIP32/BIP44: added support HD Wallets for testnet

This commit is contained in:
Alexey Karyabkin 2018-06-14 14:52:19 +04:00
parent 27d53ea105
commit 46d08dbf5e

View File

@ -95,13 +95,17 @@ def create_seed(passphrase, password=''):
# #
# создание родительского приватного ключа # создание родительского приватного ключа
def create_master_key_hdwallet(seed): def create_master_key_hdwallet(seed, testnet=False):
if testnet:
version = TESTNET_PRIVATE_WALLET_VERSION
else:
version = MAINNET_PRIVATE_WALLET_VERSION
key = b'Bitcoin seed' key = b'Bitcoin seed'
intermediary = hmac_sha512(key, seed) intermediary = hmac_sha512(key, seed)
master_key = intermediary[:32] master_key = intermediary[:32]
chain_code = intermediary[32:] chain_code = intermediary[32:]
if validate_private_key(master_key) and validate_private_key(chain_code): if validate_private_key(master_key) and validate_private_key(chain_code):
return dict(version=MAINNET_PRIVATE_WALLET_VERSION, return dict(version=version,
key=master_key, key=master_key,
depth=0, depth=0,
child=0, child=0,
@ -115,8 +119,12 @@ def create_master_key_hdwallet(seed):
## Надо удалить в будущем как дублирование. И добавить в реализации ООП как метод ## Надо удалить в будущем как дублирование. И добавить в реализации ООП как метод
def create_parent_pubkey_hdwallet(master_key): def create_parent_pubkey_hdwallet(master_key):
if master_key['is_private']: if master_key['is_private']:
if master_key['version'] == TESTNET_PRIVATE_WALLET_VERSION:
version = TESTNET_PUBLIC_WALLET_VERSION
else:
version = MAINNET_PUBLIC_WALLET_VERSION
pubkey = priv2pub(master_key['key'], True) pubkey = priv2pub(master_key['key'], True)
return dict(version=MAINNET_PUBLIC_WALLET_VERSION, return dict(version=version,
key=pubkey, key=pubkey,
depth=master_key['depth'], depth=master_key['depth'],
child=master_key['child'], child=master_key['child'],
@ -134,7 +142,7 @@ def create_child_privkey(key, child_idx):
child_privkey = add_private_keys(expanded_pubkey[:32], key['key']) child_privkey = add_private_keys(expanded_pubkey[:32], key['key'])
if validate_private_key(child_privkey): if validate_private_key(child_privkey):
finger_print = hash160(priv2pub(key['key']))[:4] finger_print = hash160(priv2pub(key['key']))[:4]
return dict(version=MAINNET_PRIVATE_WALLET_VERSION, return dict(version=key['version'],
key=child_pubkey, key=child_pubkey,
depth=key['depth'] + 1, depth=key['depth'] + 1,
child=child_idx, child=child_idx,
@ -153,7 +161,7 @@ def create_child_pubkey(key, child_idx):
child_pubkey = add_public_keys(ext_value, key['key']) child_pubkey = add_public_keys(ext_value, key['key'])
if is_valid_pub(child_pubkey): if is_valid_pub(child_pubkey):
finger_print = hash160(key['key'])[:4] finger_print = hash160(key['key'])[:4]
return dict(version=MAINNET_PUBLIC_WALLET_VERSION, return dict(version=key['version'],
key=child_pubkey, key=child_pubkey,
depth=key['depth'] + 1, depth=key['depth'] + 1,
child=child_idx, child=child_idx,