Exemplo n.º 1
0
 def test_bad_key(self):
     with pytest.raises(ValueError):
         XPublicKey('034339a901d8526c4d733c8ea7c861f1a6324f37f6b86f838725820e0c5fc1957000')
     with pytest.raises(ValueError):
         XPublicKey(
         'ff0488b21e000000000000000000f79d7a4d3ea07099f09fbf35c3103908cbb4b1f30e8602a06ffbdb'
         'b213d0025602e9aa22cc7106abab85e4c41f18f030c370213769c18d6754f3d0584e69a7fa1201000a'
         )
Exemplo n.º 2
0
 def test_xpubkey(self):
     xpub = ('xpub661MyMwAqRbcH1RHYeZc1zgwYLJ1dNozE8npCe81pnNYtN6e5KsF6cmt17Fv8w'
             'GvJrRiv6Kewm8ggBG6N3XajhoioH3stUmLRi53tk46CiA')
     assert XPublicKey(
         'ff0488b21e000000000000000000f79d7a4d3ea07099f09fbf35c3103908cbb4b1f30e8602a06ffbdb'
         'b213d0025602e9aa22cc7106abab85e4c41f18f030c370213769c18d6754f3d0584e69a7fa1201000a00'
     ).bip32_extended_key_and_path() == (xpub, [1, 10])
     assert XPublicKey(
         'ff0488b21e000000000000000000f79d7a4d3ea07099f09fbf35c3103908cbb4b1f30e8602a06ffbdbb2'
         '13d0025602e9aa22cc7106abab85e4c41f18f030c370213769c18d6754f3d0584e69a7fa1200001900'
     ).bip32_extended_key_and_path() == (xpub, [0, 25])
Exemplo n.º 3
0
 def sign_tx(self, unsigned_tx_hex, priv_keys):
     keypairs = {XPublicKey(priv_key.public_key.to_hex()):
                 (priv_key.to_bytes(), priv_key.is_compressed())
                 for priv_key in priv_keys}
     tx = Transaction.from_hex(unsigned_tx_hex)
     tx.sign(keypairs)
     return tx
Exemplo n.º 4
0
    def test_tx_unsigned(self):
        tx = Transaction.from_hex(unsigned_blob)
        assert tx.version == 1
        assert len(tx.inputs) == 1
        txin = tx.inputs[0]
        assert txin.prev_hash.hex(
        ) == '49f35e43fefd22d8bb9e4b3ff294c6286154c25712baf6ab77b646e5074d6aed'
        assert txin.prev_idx == 1
        assert txin.script_sig.to_hex(
        ) == '01ff4c53ff0488b21e0000000000000000004f130d773e678a58366711837ec2e33ea601858262f8eaef246a7ebd19909c9a03c3b30e38ca7d797fee1223df1c9827b2a9f3379768f520910260220e0560014600002300'
        assert txin.sequence == 4294967294
        assert txin.value == 20112600
        assert txin.signatures == [NO_SIGNATURE]
        assert txin.x_pubkeys == [
            XPublicKey(
                'ff0488b21e0000000000000000004f130d773e678a58366711837ec2e33ea601858262f8eaef246a7ebd19909c9a03c3b30e38ca7d797fee1223df1c9827b2a9f3379768f520910260220e0560014600002300'
            )
        ]
        assert txin.address == address_from_string(
            '13Vp8Y3hD5Cb6sERfpxePz5vGJizXbWciN')
        assert txin.threshold == 1
        assert tx.outputs == [
            TxOutput(
                20112408,
                address_from_string(
                    '1MYXdf4moacvaEKZ57ozerpJ3t9xSeN6LK').to_script())
        ]
        assert tx.locktime == 507231

        assert tx.as_dict() == {'hex': unsigned_blob, 'complete': False}
Exemplo n.º 5
0
 def test_get_pubkey_derivation(self):
     mpk_hex = ("08863ac1de668decc6406880c4c8d9a74e9986a5e8d9f2be262ac4af8a688"
                "63b37df75ac48afcbb68bdd6a00f58a648bda9e5eb5e73bd51ef130a6e72dc698d0")
     keystore = from_master_key(mpk_hex)
     assert keystore.get_pubkey_derivation(XPublicKey(
         'fe08863ac1de668decc6406880c4c8d9a74e9986a5e8d9f2be262ac4af8a68'
         '863b37df75ac48afcbb68bdd6a00f58a648bda9e5eb5e73bd51ef130a6e72dc698d000000400'
     )) == [0, 4]
     assert keystore.get_pubkey_derivation(XPublicKey(
         'fe08863ac1de668decc6406880c4c8d9a74e9986a5e8d9f2be262ac4af8a68863b37d'
         'f75ac48afcbb68bdd6a00f58a648bda9e5eb5e73bd51ef130a6e72dc698d001000301'
     )) == [1, 259]
     with pytest.raises(ValueError):
         keystore.get_pubkey_derivation(XPublicKey(
             'fe18863ac1de668decc6406880c4c8d9a74e9986a5e8d9f2be262ac4af8a68863b37d'
             'f75ac48afcbb68bdd6a00f58a648bda9e5eb5e73bd51ef130a6e72dc698d001000301'
         ))
Exemplo n.º 6
0
 def test_raw_public_keys(self, raw_hex, coin):
     public_key = PublicKey.from_hex(raw_hex)
     x_pubkey = XPublicKey(raw_hex)
     assert x_pubkey.to_bytes() == bytes.fromhex(raw_hex)
     assert x_pubkey.to_hex() == raw_hex
     assert not x_pubkey.is_bip32_key()
     assert x_pubkey.to_public_key() == public_key
     assert x_pubkey.to_address() == public_key.to_address(coin=coin)
     assert x_pubkey.to_address().coin() is coin
Exemplo n.º 7
0
 def test_addresses(self, raw_hex, address, coin):
     address = Address.from_string(address)
     address._coin = coin
     x_pubkey = XPublicKey(raw_hex)
     assert x_pubkey.to_bytes() == bytes.fromhex(raw_hex)
     assert x_pubkey.to_hex() == raw_hex
     assert not x_pubkey.is_bip32_key()
     assert x_pubkey.to_public_key() == address
     assert x_pubkey.to_address() == address
     assert x_pubkey.to_address().coin() is coin
Exemplo n.º 8
0
 def test_old_keystore(self, raw_hex, public_key_hex, coin):
     public_key = PublicKey.from_hex(public_key_hex)
     assert public_key.is_compressed() is False
     x_pubkey = XPublicKey(raw_hex)
     assert x_pubkey.to_bytes() == bytes.fromhex(raw_hex)
     assert x_pubkey.to_hex() == raw_hex
     assert not x_pubkey.is_bip32_key()
     assert x_pubkey.to_public_key() == public_key
     assert x_pubkey.to_public_key().is_compressed() is False
     assert x_pubkey.to_address() == public_key.to_address(coin=coin)
     assert x_pubkey.to_address().coin() is coin
Exemplo n.º 9
0
 def test_get_pubkey_derivation(self):
     pubkey = imported_keystore.get_pubkey_derivation(XPublicKey(
         '04e7dd15b4271f8308ff52ad3d3e472b652e78a2c5bc6ed10250a543d28c0128894ae'
         '863d086488e6773c4589be93a1793f685dd3f1e8a1f1b390b23470f7d1095'
     ))
     assert isinstance(pubkey, PublicKey)
     pubkey = imported_keystore.get_pubkey_derivation(XPublicKey(
         '02d0de0aaeaefad02b8bdc8a01a1b8b11c696bd3d66a2c5f10780d95b7df42645c'
     ))
     assert isinstance(pubkey, PublicKey)
     assert imported_keystore.get_pubkey_derivation(XPublicKey(
         '02c113be5c752294f8b0be2727bbf7f1bf71e6bba5c9e9141f611610707bbce4db'
     )) is None
     pubkey = imported_keystore.get_pubkey_derivation(XPublicKey(
         'fd76a914d9351dcbad5b8f3b8bfa2f2cdc85c28118ca932688ac'
     ))
     assert isinstance(pubkey, PublicKey)
     pubkey = imported_keystore.get_pubkey_derivation(XPublicKey(
         'fd76a914753e5cd1dd15a7028daa03fe5e47389297ac227a88ac'
     ))
     assert pubkey is None
Exemplo n.º 10
0
    def test_bip32_extended_keys(self, raw_hex, path, coin):
        # see test_keystore.py
        xpub = ('xpub661MyMwAqRbcH1RHYeZc1zgwYLJ1dNozE8npCe81pnNYtN6e5KsF6cmt17Fv8w'
                'GvJrRiv6Kewm8ggBG6N3XajhoioH3stUmLRi53tk46CiA')
        root_key = bip32_key_from_string(xpub)
        True_10_public_key = root_key.child(path[0]).child(path[1])

        x_pubkey = XPublicKey(bytes.fromhex(raw_hex))
        assert x_pubkey.to_bytes() == bytes.fromhex(raw_hex)
        assert x_pubkey.to_hex() == raw_hex
        assert x_pubkey.is_bip32_key()
        assert x_pubkey.bip32_extended_key_and_path() == (xpub, path)
        assert x_pubkey.to_public_key() == True_10_public_key
        assert x_pubkey.to_address() == True_10_public_key.to_address(coin=coin)
        assert x_pubkey.to_address().coin() is coin
Exemplo n.º 11
0
    def test_tx_signed(self):
        tx = Transaction.from_hex(signed_blob)
        assert tx.version == 1
        assert len(tx.inputs) == 1
        txin = tx.inputs[0]
        assert txin.prev_hash.hex() == '49f35e43fefd22d8bb9e4b3ff294c6286154c25712baf6ab77b646e5074d6aed'
        assert txin.prev_idx == 1
        assert txin.script_sig.to_hex() == '473044022025bdc804c6fe30966f6822dc25086bc6bb0366016e68e880cf6efd2468921f3202200e665db0404f6d6d9f86f73838306ac55bb0d0f6040ac6047d4e820f24f46885412103b5bbebceeb33c1b61f649596b9c3611c6b2853a1f6b48bce05dd54f667fa2166'
        assert txin.sequence == 4294967294
        assert txin.signatures == [bytes.fromhex('3044022025bdc804c6fe30966f6822dc25086bc6bb0366016e68e880cf6efd2468921f3202200e665db0404f6d6d9f86f73838306ac55bb0d0f6040ac6047d4e820f24f4688541')]
        assert txin.x_pubkeys == [XPublicKey('03b5bbebceeb33c1b61f649596b9c3611c6b2853a1f6b48bce05dd54f667fa2166')]
        assert txin.address == Address.from_string('13Vp8Y3hD5Cb6sERfpxePz5vGJizXbWciN')
        assert txin.threshold == 1
        assert tx.outputs == [TxOutput(20112408, Address.from_string(
            '1MYXdf4moacvaEKZ57ozerpJ3t9xSeN6LK').to_script())]
        assert tx.locktime == 507231
        assert tx.as_dict() == {'hex': signed_blob, 'complete': True}
        assert tx.serialize() == signed_blob

        tx.update_signatures(signed_blob)

        assert tx.estimated_size() == 192
Exemplo n.º 12
0
        },
    ],
}

result_S = ([
    UTXO(value=45318048,
         script_pubkey=Script.from_hex(
             '76a914cb3e86e38ce37d5add87d3da753adc04a04bf60c88ac'),
         tx_hash=
         '9f2c45a12db0144909b5db269415f7319179105982ac70ed80d76ea79d923ebf',
         out_index=0,
         height=437146,
         address=address_from_string('1KXf5PUHNaV42jE9NbJFPKhGGN1fSSGJNK'),
         is_coinbase=False)
], {
    XPublicKey('04e7dd15b4271f8308ff52ad3d3e472b652e78a2c5bc6ed10250a543d28c0128894ae863d086488e6773c4589be93a1793f685dd3f1e8a1f1b390b23470f7d1095'):
    (b'\x98\xe3\x15\xc3%j\x97\x17\xd4\xdd\xea0\xeb*\n-V\xa1d\x93yN\xb0SSf\xea"\xd8i\xa3 ',
     False),
    XPublicKey('03e7dd15b4271f8308ff52ad3d3e472b652e78a2c5bc6ed10250a543d28c012889'):
    (b'\x98\xe3\x15\xc3%j\x97\x17\xd4\xdd\xea0\xeb*\n-V\xa1d\x93yN\xb0SSf\xea"\xd8i\xa3 ',
     True),
    XPublicKey('fd76a914cb3e86e38ce37d5add87d3da753adc04a04bf60c88ac'):
    (b'\x98\xe3\x15\xc3%j\x97\x17\xd4\xdd\xea0\xeb*\n-V\xa1d\x93yN\xb0SSf\xea"\xd8i\xa3 ',
     False),
    XPublicKey('fd76a9142af9bdc179471526aef15781b00ab6ebd162a45888ac'):
    (b'\x98\xe3\x15\xc3%j\x97\x17\xd4\xdd\xea0\xeb*\n-V\xa1d\x93yN\xb0SSf\xea"\xd8i\xa3 ',
     True),
})

result_K = ([
    UTXO(value=18043706,
Exemplo n.º 13
0
 def test_bad_type(self):
     public_key = PublicKey.from_hex(
         '034339a901d8526c4d733c8ea7c861f1a6324f37f6b86f838725820e0c5fc19570'
     )
     with pytest.raises(AssertionError):
         XPublicKey(pubkey_bytes=public_key)
Exemplo n.º 14
0
 def test_parse_xpub(self):
     res = XPublicKey('fe4e13b0f311a55b8a5db9a32e959da9f011b131019d4cebe6141b9e2c93edcbfc0954c358b062a9f94111548e50bde5847a3096b8b7872dcffadb0e9579b9017b01000200').to_address()
     assert res == Address.from_string('19h943e4diLc68GXW7G75QNe2KWuMu7BaJ')