mirror of
				https://github.com/ChristopherA/Learning-Bitcoin-from-the-Command-Line.git
				synced 2025-10-31 02:17:24 +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