pywallet/tests/test_bip32_vector.py
2017-11-22 09:56:31 +02:00

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'])