Exemplo n.º 1
0
    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
Exemplo n.º 2
0
    "\n=== Create and sign transaction with add_input, add_output methods ===")
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,