def test_p2sh_address_creation(self): x1_first_btc_key = bip32_public_derivation(self.wallet.master_public_keys.get("x1/"), "", "/0/0/0") x2_first_btc_key = bip32_public_derivation(self.wallet.master_public_keys.get("x2/"), "", "/0/0/0") x_pubkeys = [x1_first_btc_key, x2_first_btc_key] raw_pubkeys = map( lambda x: deserialize_xkey(x)[4], x_pubkeys ) pubkeys = map( lambda x: x.encode('hex'), raw_pubkeys ) # Compare redeem script to manually calculated one redeem_script = multisig_script(sorted(pubkeys), 2) self.assertEqual('522102ee780aa224c9fe54caff984205077b7cca08ced3188a3f3c639d83deda6b9a592103124429ddbed55593d0abea0d0d3d283eca4546e40017b2945f4666c561b494ba52ae', redeem_script) p2sh_addr = hash_160_to_bc_address( hash_160(redeem_script.decode('hex')), self.wallet.active_chain.p2sh_version ) self.assertEqual('3MqemPAHZDGLr537QBvU7i4dRFY3Xvad7X', p2sh_addr) # switch chains self._switch_chain("MZC") x1_first_mzc_key = bip32_public_derivation(self.wallet.master_public_keys.get("x1/"), "", "/13/0/0") x2_first_mzc_key = bip32_public_derivation(self.wallet.master_public_keys.get("x2/"), "", "/13/0/0") x_pubkeys = [x1_first_mzc_key, x2_first_mzc_key] raw_pubkeys = map( lambda x: deserialize_xkey(x)[4], x_pubkeys ) pubkeys = map( lambda x: x.encode('hex'), raw_pubkeys ) # Compare redeem script to manually calculated one redeem_script = multisig_script(sorted(pubkeys), 2) self.assertEqual('5221027bdb7f5c42096580442e63235434bcc9ddf9689bbeb917705cd0edf9c6e264292102919725862f59a43274443ea11d7a8e25c15147213dcb6186c24d8629d37d6d8d52ae', redeem_script) p2sh_addr = hash_160_to_bc_address( hash_160(redeem_script.decode('hex')), self.wallet.active_chain.p2sh_version ) self.assertEqual('4jjXnsGuWLH3YgnagWH12kK7HjDtsBv8SQ', p2sh_addr)
def test_p2sh_address_creation(self): x1_first_btc_key = bip32_public_derivation(self.wallet.master_public_keys.get("x1/"), "", "/0/0/0") x2_first_btc_key = bip32_public_derivation(self.wallet.master_public_keys.get("x2/"), "", "/0/0/0") x_pubkeys = [x1_first_btc_key, x2_first_btc_key] raw_pubkeys = map( lambda x: deserialize_xkey(x)[4], x_pubkeys ) pubkeys = map( lambda x: x.encode('hex'), raw_pubkeys ) # Compare redeem script to manually calculated one redeem_script = Transaction.multisig_script(sorted(pubkeys), 2) self.assertEqual('522102ee780aa224c9fe54caff984205077b7cca08ced3188a3f3c639d83deda6b9a592103124429ddbed55593d0abea0d0d3d283eca4546e40017b2945f4666c561b494ba52ae', redeem_script) p2sh_addr = hash_160_to_bc_address( hash_160(redeem_script.decode('hex')), self.wallet.active_chain.p2sh_version ) self.assertEqual('3MqemPAHZDGLr537QBvU7i4dRFY3Xvad7X', p2sh_addr) # switch chains self._switch_chain("MZC") x1_first_mzc_key = bip32_public_derivation(self.wallet.master_public_keys.get("x1/"), "", "/13/0/0") x2_first_mzc_key = bip32_public_derivation(self.wallet.master_public_keys.get("x2/"), "", "/13/0/0") x_pubkeys = [x1_first_mzc_key, x2_first_mzc_key] raw_pubkeys = map( lambda x: deserialize_xkey(x)[4], x_pubkeys ) pubkeys = map( lambda x: x.encode('hex'), raw_pubkeys ) # Compare redeem script to manually calculated one redeem_script = Transaction.multisig_script(sorted(pubkeys), 2) self.assertEqual('5221027bdb7f5c42096580442e63235434bcc9ddf9689bbeb917705cd0edf9c6e264292102919725862f59a43274443ea11d7a8e25c15147213dcb6186c24d8629d37d6d8d52ae', redeem_script) p2sh_addr = hash_160_to_bc_address( hash_160(redeem_script.decode('hex')), self.wallet.active_chain.p2sh_version ) self.assertEqual('4jjXnsGuWLH3YgnagWH12kK7HjDtsBv8SQ', p2sh_addr)
def test_serialize_protocol_version_70201(self): raw = '08108933d948aed6a107cd01e7862ed61ef9bf14e87da0a14e8d17791e9f9c570100000000ffffffff00000000000000000000ffff7f0000014e1f210269e1abb1ffe231ea045068272a06f0fae231d11b11a54225867d89267faa4e23210269e1abb1ffe231ea045068272a06f0fae231d11b11a54225867d89267faa4e234120b8bc547ce2471125eddfdfd5af30ea1e892e750acfe2896b241097b7f21442a61da073d47c885535769bf215eb3e97eca692d868db1bfb9dee469a1ece5acb92a1945457000000003912010008108933d948aed6a107cd01e7862ed61ef9bf14e87da0a14e8d17791e9f9c570100000000ffffffffefc894d8431c1774a19aeb732ea7fc56925b740ed80486f30424109a05000000a1945457000000004120818f17742e6644359c8b9a91e56b595615bd2c593de713304435dcfd07ceb6a815559fd3b2f05f531d9b9918b22b8748491c3f36cb25e8397ff950f74030444f0000000000000000' announce = MasternodeAnnounce.deserialize(raw) announce.sig_time = 1465161129 msg = announce.serialize_for_sig() expected = ''.join([ '127.0.0.1:19999', '1465161129', bitcoin.hash_encode(bitcoin.hash_160('0269e1abb1ffe231ea045068272a06f0fae231d11b11a54225867d89267faa4e23'.decode('hex'))), bitcoin.hash_encode(bitcoin.hash_160('0269e1abb1ffe231ea045068272a06f0fae231d11b11a54225867d89267faa4e23'.decode('hex'))), '70213', ]) self.assertEqual(expected, msg)
def test_redeem_script(self): acc = self.wallet.accounts["0"] x1_first_btc_key = bip32_public_derivation( self.wallet.master_public_keys.get("x1/"), "", "/0/0/0") x2_first_btc_key = bip32_public_derivation( self.wallet.master_public_keys.get("x2/"), "", "/0/0/0") x3_first_btc_key = bip32_public_derivation( self.wallet.master_public_keys.get("x3/"), "", "/0/0/0") x4_first_btc_key = bip32_public_derivation( self.wallet.master_public_keys.get("x4/"), "", "/0/0/0") x_pubkeys = [ x1_first_btc_key, x2_first_btc_key, x3_first_btc_key, x4_first_btc_key ] raw_pubkeys = map(lambda x: deserialize_xkey(x)[4], x_pubkeys) pubkeys = map(lambda x: x.encode('hex'), raw_pubkeys) # Compare redeem script to manually calculated one redeem_script = multisig_script(sorted(pubkeys), acc.multisig_m) self.assertEqual( '53210278a1a7de63493a8c8e0e7f4ebb13fd2a8144db25bb3bc2e5f44127a851a389332102ee780aa224c9fe54caff984205077b7cca08ced3188a3f3c639d83deda6b9a592103124429ddbed55593d0abea0d0d3d283eca4546e40017b2945f4666c561b494ba210312872f0aa80fa1a9bc7df77fa5be310f5441f7bfec798fe19209b04954dec8da54ae', redeem_script) p2sh_addr = hash_160_to_bc_address( hash_160(redeem_script.decode('hex')), self.wallet.active_chain.p2sh_version) self.assertEqual("32Ktuh5jGEAAJyNXQE7f1LUAcMXSfvdSzE", p2sh_addr)
def test_serialize_protocol_version_70210(self): announce = MasternodeAnnounce.deserialize(raw_announce_70210) msg = announce.serialize_for_sig() expected = to_bytes(''.join([ '178.151.192.107:19999', '1530021571', bitcoin.hash_encode( bitcoin.hash_160( bfh('0221088c51bef8c9c891b385fa1e8a78b016f01db41741aea7e43e67a7415ab7be' ))), bitcoin.hash_encode( bitcoin.hash_160( bfh('042379a871a10ae6bf06e756262f69d7f0ce9b8b562f223bde964db573fb7d0f1e219c246a4b3a6133c5cec136d83f4049df51321ba2cb01d676cc3982c7e24d1f' ))), '70210', ])) print('7' * 50, expected) print('8' * 50, msg) self.assertEqual(expected, msg)
def test_redeem_script(self): acc = self.wallet.accounts["0"] x1_first_btc_key = bip32_public_derivation(self.wallet.master_public_keys.get("x1/"), "", "/0/0/0") x2_first_btc_key = bip32_public_derivation(self.wallet.master_public_keys.get("x2/"), "", "/0/0/0") x3_first_btc_key = bip32_public_derivation(self.wallet.master_public_keys.get("x3/"), "", "/0/0/0") x4_first_btc_key = bip32_public_derivation(self.wallet.master_public_keys.get("x4/"), "", "/0/0/0") x_pubkeys = [x1_first_btc_key, x2_first_btc_key, x3_first_btc_key, x4_first_btc_key] raw_pubkeys = map( lambda x: deserialize_xkey(x)[4], x_pubkeys ) pubkeys = map( lambda x: x.encode('hex'), raw_pubkeys ) # Compare redeem script to manually calculated one redeem_script = multisig_script(sorted(pubkeys), acc.multisig_m) self.assertEqual('53210278a1a7de63493a8c8e0e7f4ebb13fd2a8144db25bb3bc2e5f44127a851a389332102ee780aa224c9fe54caff984205077b7cca08ced3188a3f3c639d83deda6b9a592103124429ddbed55593d0abea0d0d3d283eca4546e40017b2945f4666c561b494ba210312872f0aa80fa1a9bc7df77fa5be310f5441f7bfec798fe19209b04954dec8da54ae', redeem_script) p2sh_addr = hash_160_to_bc_address( hash_160(redeem_script.decode('hex')), self.wallet.active_chain.p2sh_version ) self.assertEqual("32Ktuh5jGEAAJyNXQE7f1LUAcMXSfvdSzE", p2sh_addr)