def test_exercise_5(self): prev_tx_1 = bytes.fromhex( '11d05ce707c1120248370d1cbf5561d22c4f83aeba0436792c82e0bd57fe2a2f') prev_index_1 = 1 prev_tx_2 = bytes.fromhex( '51f61f77bd061b9a0da60d4bedaaf1b1fad0c11e65fdc744797ee22d20b03d15') prev_index_2 = 1 target_address = 'mwJn1YPMq7y5F8J3LkC5Hxg9PHyZ5K4cFv' target_amount = 0.0429 secret = 8675309 priv = PrivateKey(secret=secret) tx_ins = [] tx_ins.append(TxIn(prev_tx_1, prev_index_1, Script([]), 0xffffffff)) tx_ins.append(TxIn(prev_tx_2, prev_index_2, Script([]), 0xffffffff)) tx_outs = [] h160 = decode_base58(target_address) script_pubkey = p2pkh_script(h160) target_satoshis = int(target_amount * 100000000) tx_outs.append(TxOut(target_satoshis, script_pubkey)) tx_obj = Tx(1, tx_ins, tx_outs, 0, testnet=True) self.assertTrue(tx_obj.sign_input(0, priv)) self.assertTrue(tx_obj.sign_input(1, priv)) self.assertTrue(tx_obj.verify()) want = '01000000022f2afe57bde0822c793604baae834f2cd26155bf1c0d37480212c107e75cd011010000006a47304402204cc5fe11b2b025f8fc9f6073b5e3942883bbba266b71751068badeb8f11f0364022070178363f5dea4149581a4b9b9dbad91ec1fd990e3fa14f9de3ccb421fa5b269012103935581e52c354cd2f484fe8ed83af7a3097005b2f9c60bff71d35bd795f54b67ffffffff153db0202de27e7944c7fd651ec1d0fab1f1aaed4b0da60d9a1b06bd771ff651010000006b483045022100b7a938d4679aa7271f0d32d83b61a85eb0180cf1261d44feaad23dfd9799dafb02205ff2f366ddd9555f7146861a8298b7636be8b292090a224c5dc84268480d8be1012103935581e52c354cd2f484fe8ed83af7a3097005b2f9c60bff71d35bd795f54b67ffffffff01d0754100000000001976a914ad346f8eb57dee9a37981716e498120ae80e44f788ac00000000' self.assertEqual(tx_obj.serialize().hex(), want)
def test_exercise_4(self): prev_tx = bytes.fromhex( '75a1c4bc671f55f626dda1074c7725991e6f68b8fcefcfca7b64405ca3b45f1c') prev_index = 1 target_address = 'miKegze5FQNCnGw6PKyqUbYUeBa4x2hFeM' target_amount = 0.01 change_address = 'mzx5YhAH9kNHtcN481u6WkjeHjYtVeKVh2' change_amount = 0.009 secret = 8675309 priv = PrivateKey(secret=secret) tx_ins = [] tx_ins.append(TxIn(prev_tx, prev_index, Script([]), 0xffffffff)) tx_outs = [] h160 = decode_base58(target_address) script_pubkey = p2pkh_script(h160) target_satoshis = int(target_amount * 100000000) tx_outs.append(TxOut(target_satoshis, script_pubkey)) h160 = decode_base58(change_address) script_pubkey = p2pkh_script(h160) change_satoshis = int(change_amount * 100000000) tx_outs.append(TxOut(change_satoshis, script_pubkey)) tx_obj = Tx(1, tx_ins, tx_outs, 0, testnet=True) self.assertTrue(tx_obj.sign_input(0, priv)) self.assertTrue(tx_obj.verify()) want = '01000000011c5fb4a35c40647bcacfeffcb8686f1e9925774c07a1dd26f6551f67bcc4a175010000006b483045022100a08ebb92422b3599a2d2fcdaa11f8f807a66ccf33e7f4a9ff0a3c51f1b1ec5dd02205ed21dfede5925362b8d9833e908646c54be7ac6664e31650159e8f69b6ca539012103935581e52c354cd2f484fe8ed83af7a3097005b2f9c60bff71d35bd795f54b67ffffffff0240420f00000000001976a9141ec51b3654c1f1d0f4929d11a1f702937eaf50c888ac9fbb0d00000000001976a914d52ad7ca9b3d096a38e752c2018e6fbc40cdf26f88ac00000000' self.assertEqual(tx_obj.serialize().hex(), want)
change_output = TxOut(amount = change_amount, script_pubkey = change_script) #create the Tx object tx_obj = Tx(1, tx_ins, [change_output, target_output], 0, True) #signing the transaction for i in range(len(tx_ins)): z = tx_obj.sig_hash(i) der = private_key.sign(z).der() sig = der + SIGHASH_ALL.to_bytes(1, 'big') sec = public_key.sec() script_sig = Script([sig, sec]) tx_obj.tx_ins[i].script_sig = script_sig if(tx_obj.verify()): print("-------Transaction Successfully Signed-------") print("===>publishing the following transaction:") tx_serial = tx_obj.serialize().hex() print(tx_serial) #p.decoderawtransaction(tx_serial) p.sendrawtransaction(tx_serial) print("===>transaction successfully published<====") else: print("Incorrect Signature for this Transaction")