""" # tag::example1[] >>> from tx import Tx >>> from io import BytesIO >>> raw_tx = ('0100000001813f79011acb80925dfe69b3def355fe914bd1d96a3f5f71bf830\ 3c6a989c7d1000000006b483045022100ed81ff192e75a3fd2304004dcadb746fa5e24c5031ccf\ cf21320b0277457c98f02207a986d955c6e0cb35d446a89d3f56100f4d7f67801c31967743a9c8\ e10615bed01210349fc4e631e3624a545de3f89f5d8684c7b8138bd94bdd531d2e213bf016b278\ afeffffff02a135ef01000000001976a914bc3b654dca7e56b04dca18f2566cdaf02e8d9ada88a\ c99c39800000000001976a9141c4bc762dd5423e332166702cb75f40df79fea1288ac19430600') >>> stream = BytesIO(bytes.fromhex(raw_tx)) >>> transaction = Tx.parse(stream) >>> print(transaction.fee() >= 0) # <1> True # end::example1[] # tag::example2[] >>> from ecc import S256Point, Signature >>> sec = bytes.fromhex('0349fc4e631e3624a545de3f89f5d8684c7b8138bd94bdd531d2e\ 213bf016b278a') >>> der = bytes.fromhex('3045022100ed81ff192e75a3fd2304004dcadb746fa5e24c5031c\ cfcf21320b0277457c98f02207a986d955c6e0cb35d446a89d3f56100f4d7f67801c31967743a9\ c8e10615bed') >>> z = 0x27e0c5994dec7824e56dec6b2fcb342eb7cdb0d0957c2fce9882f715e85d81a6 >>> point = S256Point.parse(sec) >>> signature = Signature.parse(der) >>> print(point.verify(z, signature)) True # end::example2[] # tag::example3[] >>> from helper import hash256 >>> modified_tx = bytes.fromhex('0100000001813f79011acb80925dfe69b3def355fe914\ bd1d96a3f5f71bf8303c6a989c7d1000000001976a914a802fc56c704ce87c42d7c92eb75e7896\ bdc41ae88acfeffffff02a135ef01000000001976a914bc3b654dca7e56b04dca18f2566cdaf02\ e8d9ada88ac99c39800000000001976a9141c4bc762dd5423e332166702cb75f40df79fea1288a\ c1943060001000000') >>> h256 = hash256(modified_tx) >>> z = int.from_bytes(h256, 'big') >>> print(hex(z)) 0x27e0c5994dec7824e56dec6b2fcb342eb7cdb0d0957c2fce9882f715e85d81a6 # end::example3[] # tag::example4[] >>> from ecc import S256Point, Signature >>> sec = bytes.fromhex('0349fc4e631e3624a545de3f89f5d8684c7b8138bd94bdd531d2e\ 213bf016b278a') >>> der = bytes.fromhex('3045022100ed81ff192e75a3fd2304004dcadb746fa5e24c5031c\ cfcf21320b0277457c98f02207a986d955c6e0cb35d446a89d3f56100f4d7f67801c31967743a9\ c8e10615bed') >>> z = 0x27e0c5994dec7824e56dec6b2fcb342eb7cdb0d0957c2fce9882f715e85d81a6 >>> point = S256Point.parse(sec) >>> signature = Signature.parse(der) >>> point.verify(z, signature) True # end::example4[] # tag::example5[] >>> from helper import decode_base58, SIGHASH_ALL >>> from script import p2pkh_script, Script >>> from tx import TxIn, TxOut, Tx >>> prev_tx = bytes.fromhex('0d6fe5213c0b3291f208cba8bfb59b7476dffacc4e5cb66f6\ eb20a080843a299') >>> prev_index = 13 >>> tx_in = TxIn(prev_tx, prev_index) >>> tx_outs = [] >>> change_amount = int(0.33*100000000) # <1> >>> change_h160 = decode_base58('mzx5YhAH9kNHtcN481u6WkjeHjYtVeKVh2') >>> change_script = p2pkh_script(change_h160) >>> change_output = TxOut(amount=change_amount, script_pubkey=change_script) >>> target_amount = int(0.1*100000000) # <1> >>> target_h160 = decode_base58('mnrVtF8DWjMu839VW3rBfgYaAfKk8983Xf') >>> target_script = p2pkh_script(target_h160) >>> target_output = TxOut(amount=target_amount, script_pubkey=target_script) >>> tx_obj = Tx(1, [tx_in], [change_output, target_output], 0, True) # <2> >>> print(tx_obj) tx: cd30a8da777d28ef0e61efe68a9f7c559c1d3e5bcd7b265c850ccb4068598d11 version: 1 tx_ins: 0d6fe5213c0b3291f208cba8bfb59b7476dffacc4e5cb66f6eb20a080843a299:13 tx_outs: 33000000:OP_DUP OP_HASH160 d52ad7ca9b3d096a38e752c2018e6fbc40cdf26f OP_EQUALVE\ RIFY OP_CHECKSIG 10000000:OP_DUP OP_HASH160 507b27411ccf7f16f10297de6cef3f291623eddf OP_EQUALVE\ RIFY OP_CHECKSIG locktime: 0 # end::example5[] # tag::example6[] >>> from ecc import PrivateKey >>> from helper import SIGHASH_ALL >>> z = transaction.sig_hash(0) # <1> >>> private_key = PrivateKey(secret=8675309) >>> der = private_key.sign(z).der() >>> sig = der + SIGHASH_ALL.to_bytes(1, 'big') # <2> >>> sec = private_key.point.sec() >>> script_sig = Script([sig, sec]) # <3> >>> transaction.tx_ins[0].script_sig = script_sig # <4> >>> print(transaction.serialize().hex()) 0100000001813f79011acb80925dfe69b3def355fe914bd1d96a3f5f71bf8303c6a989c7d10000\ 00006a47304402207db2402a3311a3b845b038885e3dd889c08126a8570f26a844e3e4049c482a\ 11022010178cdca4129eacbeab7c44648bf5ac1f9cac217cd609d216ec2ebc8d242c0a01210393\ 5581e52c354cd2f484fe8ed83af7a3097005b2f9c60bff71d35bd795f54b67feffffff02a135ef\ 01000000001976a914bc3b654dca7e56b04dca18f2566cdaf02e8d9ada88ac99c3980000000000\ 1976a9141c4bc762dd5423e332166702cb75f40df79fea1288ac19430600 # end::example6[] # tag::example7[] >>> from ecc import PrivateKey >>> from helper import hash256, little_endian_to_int >>> secret = little_endian_to_int(hash256(b'Jimmy Song secret')) # <1> >>> private_key = PrivateKey(secret) >>> print(private_key.point.address(testnet=True)) mn81594PzKZa9K3Jyy1ushpuEzrnTnxhVg # end::example7[] """