from bitcoinrpc.authproxy import AuthServiceProxy, JSONRPCException from pprint import pprint import logging #logging.basicConfig() #logging.getLogger("BitcoinRPC").setLevel(logging.DEBUG) # rpc_user and rpc_password are set in the bitcoin.conf file rpc_user = "StandUp" rpc_pass = "6305f1b2dbb3bc5a16cd0f4aac7e1eba" rpc_host = "127.0.0.1" rpc_client = AuthServiceProxy(f"http://{rpc_user}:{rpc_pass}@{rpc_host}:18332", timeout=120) print("Creating a Transaction") ## 0. Create New Addresses new_address = rpc_client.getnewaddress("Learning-Bitcoin-from-the-Command-Line") new_change_address = rpc_client.getrawchangeaddress() ## 1. Select UTXO utxos = rpc_client.listunspent() selected_utxo = utxos[0] # we select the first utxo here utxo_address = selected_utxo['address'] utxo_txid = selected_utxo['txid'] utxo_vout = selected_utxo['vout'] utxo_amt = float(selected_utxo['amount']) # here we are sending bitcoins to an address generated by us in our own wallet. recipient_address = new_address recipient_amt = utxo_amt / 2 # sending half coins to recipient miner_fee = 0.00000300 # choose appropriate fee based on your tx size change_address = new_change_address change_amt = float('%.8f'%((utxo_amt - recipient_amt) - miner_fee)) print("---------------------------------------------------------------") print("Transaction Details:") print("-------------------") print("UTXO Address.......: ", utxo_address) print("UTXO Txid..........: ", utxo_txid) print("Vector ID of Output: ", utxo_vout) print("UTXO Amount........: ", utxo_amt) print("Tx Amount..........: ", recipient_amt) print("Recipient Address..: ", recipient_address) print("Change Address.....: ", change_address) print("Miner Fee..........: ", miner_fee) print("Change Amount......: ", change_amt) print("---------------------------------------------------------------\n") ## 2. Create Raw Transaction txids_vouts = [{"txid": utxo_txid, "vout": utxo_vout}] addresses_amts = {f"{recipient_address}": recipient_amt, f"{change_address}": change_amt} unsigned_tx_hex = rpc_client.createrawtransaction(txids_vouts, addresses_amts) print("---------------------------------------------------------------") print("Unsigned Transaction Hex: ", unsigned_tx_hex) print("---------------------------------------------------------------\n") ## 3. Sign Raw Transaction address_priv_key = [] # list of priv keys of each utxo address_priv_key.append(rpc_client.dumpprivkey(utxo_address)) signed_tx = rpc_client.signrawtransactionwithkey(unsigned_tx_hex, address_priv_key) print("---------------------------------------------------------------") print("Signed Transaction: ") print("----------------------") pprint(signed_tx) print("---------------------------------------------------------------\n") ## 4. Broadcast Transaction send_tx = rpc_client.sendrawtransaction(signed_tx['hex']) print("---------------------------------------------------------------") print("TXID of sent transaction: ", send_tx)