mirror of
https://github.com/ChristopherA/Learning-Bitcoin-from-the-Command-Line.git
synced 2025-06-07 16:06:26 +00:00
Delete 18_4_accessing_bitcoind_with_python.py
broke up the code into individual bits, per rest of chapter
This commit is contained in:
parent
89a3a9ddfa
commit
25d20e92c0
@ -1,192 +0,0 @@
|
||||
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 = "<ENTER_THE_RPC_USER_FROM_bitcoin.conf>"
|
||||
rpc_pass = "<ENTER_THE_RPC_PASSWORD_FROM_bitcoin.conf>"
|
||||
rpc_host = "127.0.0.1"
|
||||
rpc_client = AuthServiceProxy(f"http://{rpc_user}:{rpc_pass}@{rpc_host}:18332", timeout=240)
|
||||
|
||||
|
||||
# Getting Basic Info
|
||||
print("Getting Basic Info")
|
||||
## Get Wallet Info
|
||||
wallet_info = rpc_client.getwalletinfo()
|
||||
print("---------------------------------------------------------------")
|
||||
print("Wallet Info:")
|
||||
print("-----------")
|
||||
pprint(wallet_info)
|
||||
print("---------------------------------------------------------------\n")
|
||||
|
||||
## Get Network Info
|
||||
network_info = rpc_client.getnetworkinfo()
|
||||
print("---------------------------------------------------------------")
|
||||
print("Network Info:")
|
||||
print("------------")
|
||||
pprint(network_info)
|
||||
print("---------------------------------------------------------------\n")
|
||||
|
||||
## Get Blockcount
|
||||
block_count = rpc_client.getblockcount()
|
||||
print("---------------------------------------------------------------")
|
||||
print("Block Count:", block_count)
|
||||
print("---------------------------------------------------------------\n")
|
||||
|
||||
# Get Blockchain Info
|
||||
blockchain_info = rpc_client.getblockchaininfo()
|
||||
print("---------------------------------------------------------------")
|
||||
print("Blockchain Info:")
|
||||
print("---------------")
|
||||
pprint(blockchain_info)
|
||||
print("---------------------------------------------------------------\n")
|
||||
|
||||
# Get Peer Info
|
||||
peer_info = rpc_client.getpeerinfo()
|
||||
print("---------------------------------------------------------------")
|
||||
print("Peer Info:")
|
||||
print("---------")
|
||||
pprint(peer_info)
|
||||
print("---------------------------------------------------------------\n")
|
||||
|
||||
|
||||
# Exploring a Block
|
||||
print("Exploring a Block")
|
||||
blockhash_630000 = rpc_client.getblockhash(630000)
|
||||
block_630000 = rpc_client.getblock(blockhash_630000)
|
||||
nTx = block_630000['nTx']
|
||||
if nTx > 10:
|
||||
it_txs = 10
|
||||
list_tx_heading = "First 10 transactions: "
|
||||
else:
|
||||
it_txs = nTx
|
||||
list_tx_heading = f"All the {it_txs} transactions: "
|
||||
print("---------------------------------------------------------------")
|
||||
print("BLOCK No. 630000 :")
|
||||
print("-------------")
|
||||
print("Block Hash...: ", blockhash_630000)
|
||||
print("Merkle Root..: ", block_630000['merkleroot'])
|
||||
print("Block Size...: ", block_630000['size'])
|
||||
print("Block Weight.: ", block_630000['weight'])
|
||||
print("Nonce........: ", block_630000['nonce'])
|
||||
print("Difficulty...: ", block_630000['difficulty'])
|
||||
print("Number of Tx.: ", nTx)
|
||||
print(list_tx_heading)
|
||||
print("---------------------")
|
||||
i = 0
|
||||
while i < it_txs:
|
||||
print(i, ":", block_630000['tx'][i])
|
||||
i += 1
|
||||
print("---------------------------------------------------------------\n")
|
||||
|
||||
|
||||
# Exploring an Address
|
||||
print("Exploring an Address")
|
||||
track_address = "<your address>"
|
||||
tx_list = rpc_client.listtransactions()
|
||||
address_tx_list = []
|
||||
for tx in tx_list:
|
||||
if tx['address'] == track_address:
|
||||
address_tx_list.append(tx)
|
||||
pprint(address_tx_list)
|
||||
|
||||
|
||||
# Exploring UTXOs
|
||||
print("Exploring UTXOs")
|
||||
## List Utxos
|
||||
utxos = rpc_client.listunspent()
|
||||
print("Utxos: ")
|
||||
print("-----")
|
||||
pprint(utxos)
|
||||
print("------------------------------------------\n")
|
||||
## Select a UTXO - first one selected here
|
||||
utxo_txid = utxos[0]['txid']
|
||||
## Get UTXO Hex
|
||||
utxo_hex = rpc_client.gettransaction(utxo_txid)['hex']
|
||||
## Get tx Details
|
||||
utxo_tx_details = rpc_client.decoderawtransaction(utxo_hex)
|
||||
print("Details of Utxo with txid:", utxo_txid)
|
||||
print("---------------------------------------------------------------")
|
||||
print("UTXO Details:")
|
||||
print("------------")
|
||||
pprint(utxo_tx_details)
|
||||
print("---------------------------------------------------------------\n")
|
||||
|
||||
|
||||
# Creating a Transaction
|
||||
print("Creating a Transaction")
|
||||
## Create New Addresses
|
||||
new_address = rpc_client.getnewaddress("Learning-Bitcoin-from-the-Command-Line")
|
||||
new_change_address = rpc_client.getrawchangeaddress()
|
||||
print("---------------------------------------------------------------")
|
||||
print("New Address Recipient: ", new_address)
|
||||
print("New Address Change...: ", new_change_address)
|
||||
print("---------------------------------------------------------------\n")
|
||||
|
||||
## Set Transaction Details
|
||||
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.00000200 # 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")
|
||||
|
||||
## create a raw transacion
|
||||
txids_vouts = [{"txid": utxo_txid, "vout": utxo_vout}]
|
||||
addresses_amts = {f"{recipient_address}": recipient_amt, f"{change_address}": change_amt}
|
||||
create_raw_tx = rpc_client.createrawtransaction(txids_vouts, addresses_amts)
|
||||
unsigned_tx_hex = create_raw_tx
|
||||
print("---------------------------------------------------------------")
|
||||
print("Unsigned Transaction Hex: ", unsigned_tx_hex)
|
||||
print("---------------------------------------------------------------\n")
|
||||
|
||||
|
||||
## Check details of the Transaction
|
||||
tx_details = rpc_client.decoderawtransaction(unsigned_tx_hex)
|
||||
print("---------------------------------------------------------------")
|
||||
print("New Transaction Details:")
|
||||
print("-----------------------")
|
||||
pprint(tx_details)
|
||||
print("---------------------------------------------------------------\n")
|
||||
|
||||
## Sign Transanciton
|
||||
address_priv_key = [] # list of priv keys of each utxo
|
||||
address_priv_key.append(rpc_client.dumpprivkey(utxo_address))
|
||||
print("---------------------------------------------------------------")
|
||||
print(f"Private key of address {utxo_address}: ", address_priv_key)
|
||||
print("---------------------------------------------------------------\n")
|
||||
signed_tx = rpc_client.signrawtransactionwithkey(unsigned_tx_hex, address_priv_key)
|
||||
print("---------------------------------------------------------------")
|
||||
print("Signed Transaction: ")
|
||||
print("----------------------")
|
||||
pprint(signed_tx)
|
||||
print("---------------------------------------------------------------\n")
|
||||
|
||||
## Send Transaction
|
||||
send_tx = rpc_client.sendrawtransaction(signed_tx['hex'])
|
||||
print("---------------------------------------------------------------")
|
||||
print("TXID of sent transaction: ", send_tx)
|
||||
print("---------------------------------------------------------------\n")
|
||||
|
||||
print("Now explore! ;)")
|
Loading…
x
Reference in New Issue
Block a user