36 lines
1.5 KiB
Python
36 lines
1.5 KiB
Python
import json
|
|
from unittest import TestCase
|
|
|
|
from multimerchant.network import BitcoinMainNet
|
|
from multimerchant.wallet import Wallet
|
|
from multimerchant.wallet.utils import ensure_bytes
|
|
|
|
|
|
class TestBIP32(TestCase):
|
|
def _test_wallet(self, wallet, data):
|
|
self.assertEqual(
|
|
wallet.serialize_b58(private=True), data['private_key'])
|
|
self.assertEqual(
|
|
wallet.serialize_b58(private=False), data['public_key'])
|
|
self.assertEqual(wallet.export_to_wif(), data['wif'])
|
|
self.assertEqual(wallet.chain_code, ensure_bytes(data['chain_code']))
|
|
fingerprint = ensure_bytes(data['fingerprint'])
|
|
if not fingerprint.startswith(b'0x'):
|
|
fingerprint = b'0x' + fingerprint
|
|
self.assertEqual(wallet.fingerprint, fingerprint)
|
|
self.assertEqual(wallet.depth, data['depth'])
|
|
self.assertEqual(
|
|
wallet.private_key._private_key.privkey.secret_multiplier,
|
|
data['secret_exponent'])
|
|
|
|
def test_bip32(self):
|
|
with open("tests/bip32_test_vector.json", 'r') as f:
|
|
vectors = json.loads(f.read())
|
|
for wallet_data in vectors:
|
|
wallet = Wallet.deserialize(
|
|
wallet_data['private_key'], network=BitcoinMainNet)
|
|
self._test_wallet(wallet, wallet_data)
|
|
for child_data in wallet_data['children']:
|
|
child = wallet.get_child_for_path(child_data['path'])
|
|
self._test_wallet(child, child_data['child'])
|