def create_transaction(self, outputs, fee=None, leftover=None, combine=True, message=None, unspents=None, custom_pushdata=False): """Creates a signed P2PKH transaction. :param outputs: A sequence of outputs you wish to send in the form ``(destination, amount, currency)``. The amount can be either an int, float, or string as long as it is a valid input to ``decimal.Decimal``. The currency must be :ref:`supported <supported currencies>`. :type outputs: ``list`` of ``tuple`` :param fee: The number of satoshi per byte to pay to miners. By default bitcoinpython will poll `<https://bitcoincashfees.earn.com>`_ and use a fee that will allow your transaction to be confirmed as soon as possible. :type fee: ``int`` :param leftover: The destination that will receive any change from the transaction. By default bitcoinpython will send any change to the same address you sent from. :type leftover: ``str`` :param combine: Whether or not bitcoinpython should use all available UTXOs to make future transactions smaller and therefore reduce fees. By default bitcoinpython will consolidate UTXOs. :type combine: ``bool`` :param message: A message to include in the transaction. This will be stored in the blockchain forever. Due to size limits, each message will be stored in chunks of 220 bytes. :type message: ``str`` :param unspents: The UTXOs to use as the inputs. By default bitcoinpython will communicate with the testnet blockchain itself. :type unspents: ``list`` of :class:`~bitcoinpython.network.meta.Unspent` :returns: The signed transaction as hex. :rtype: ``str`` """ unspents, outputs = sanitize_tx_data(unspents or self.unspents, outputs, fee or get_fee(), leftover or self.address, combine=combine, message=message, compressed=self.is_compressed(), custom_pushdata=custom_pushdata) return create_p2pkh_transaction(self, unspents, outputs, custom_pushdata=custom_pushdata)
def sign_transaction(self, tx_data): """Creates a signed P2PKH transaction using previously prepared transaction data. :param tx_data: Output of :func:`~bitcoinpython.PrivateKeyTestnet.prepare_transaction`. :type tx_data: ``str`` :returns: The signed transaction as hex. :rtype: ``str`` """ data = json.loads(tx_data) unspents = [Unspent.from_dict(unspent) for unspent in data['unspents']] outputs = data['outputs'] return create_p2pkh_transaction(self, unspents, outputs)
def test_matching(self): private_key = PrivateKey(WALLET_FORMAT_MAIN) tx = create_p2pkh_transaction(private_key, UNSPENTS, OUTPUTS) print(tx) assert tx[-288:] == FINAL_TX_1[-288:]