def create_transaction(self, wallet_address_list, private_input_address_list, output_address, change_address, send_amount, fee_per_kb, network): try: print( 'Create and sign Transaction with Multiple INPUTS using keys from Wallet class ' ) charge_back_amount = 0 print('Dummy transaction with Outputs ') transaction_outputs = [ Output(send_amount, address=output_address, network=network), Output(charge_back_amount, address=change_address, network=network) ] print('transaction_outputs', transaction_outputs) print('created dummy txn for fee calc') t = Transaction(outputs=transaction_outputs, network=network, fee_per_kb=fee_per_kb) print('Fee with o/p ', t.calculate_fee()) fee = t.calculate_fee() charge_back_amount = send_amount - fee ''' if charge_back_amount < 0: raise ServiceException('Insufficient fund to continue transaction') ''' print('created real txn for fee calc') transaction_outputs = [ Output(send_amount, address=output_address, network=network), Output(charge_back_amount, address=change_address, network=network) ] print('transaction_outputs', transaction_outputs) transaction_inputs = [] for input in wallet_address_list: transaction_inputs.append( (input['txid'], int(input['vout']), self.json_get(private_input_address_list, input['address']))) print('transaction_inputs', transaction_inputs) t.fee = t.calculate_fee() print('Fee with ip/ op ', t.fee) for ti in transaction_inputs: ki = Key(ti[2], network=network) t.add_input(prev_hash=ti[0], output_n=ti[1], keys=ki.public()) icount = 0 for ti in transaction_inputs: ki = Key(ti[2], network=network) t.sign(ki.private_byte, icount) icount += 1 print('\nRaw Signed Transaction %s' % binascii.hexlify(t.raw())) print('\nVerified %s' % t.verify()) print('------------info-----------') t.info() print('------------end-----------') except Exception as e: raise e return t
print( "(Based on http://bitcoin.stackexchange.com/questions/3374/how-to-redeem-a-basic-tx/24580)" ) t = Transaction() prev_tx = 'f2b3eb2deb76566e7324307cd47c35eeb88413f971d88519859b1834307ecfec' ki = Key(0x18E14A7B6A307F426A94F8114701E7C8E774E7F9A47E2C2035DB29A206321725, compressed=False) t.add_input(prev_hash=prev_tx, output_n=1, keys=ki.public_hex, compressed=False) t.add_output(99900000, '1runeksijzfVxyrpiyCY2LCBvYsSiFsCm') t.sign(ki.private_byte) pprint(t.as_dict()) print("Raw:", binascii.hexlify(t.raw())) print("Verified %s " % t.verify()) print(t.raw_hex()) print( "\n=== Create and sign transaction with transactions Input and Output objects ===" ) print( "(Based on http://www.righto.com/2014/02/bitcoins-hard-way-using-raw-bitcoin.html)" ) ki = Key('5HusYj2b2x4nroApgfvaSfKYZhRbKFH41bVyPooymbC6KfgSXdD', compressed=False) txid = "81b4c832d70cb56ff957589752eb4125a4cab78a25a8fc52d6a09e5bd4404d48" transaction_input = Input(prev_hash=txid, output_n=0, keys=ki.public_byte, compressed=ki.compressed)