mirror of
				https://github.com/ChristopherA/Learning-Bitcoin-from-the-Command-Line.git
				synced 2025-10-31 10:27:29 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			89 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			89 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| use bitcoincore_rpc::{json, Auth, Client, RpcApi};
 | |
| use bitcoincore_rpc::bitcoin::{Amount};
 | |
| use std::collections::HashMap;
 | |
| 
 | |
| fn main() {
 | |
|     let rpc = Client::new(
 | |
|         "http://localhost:18332".to_string(),
 | |
|         Auth::UserPass("StandUp".to_string(), "6305f1b2dbb3bc5a16cd0f4aac7e1eba".to_string()),
 | |
|     )
 | |
|     .unwrap();
 | |
| 
 | |
|     let balance = rpc.get_balance(None, None).unwrap();
 | |
|     println!("Balance: {:?} BTC", balance.as_btc());
 | |
| 
 | |
| // 0. Generate a recipient address
 | |
| 
 | |
|     let myaddress = rpc
 | |
|         .get_new_address(Option::Some("BlockchainCommons"), Option::Some(json::AddressType::Bech32))
 | |
|         .unwrap();
 | |
|     println!("address: {:?}", myaddress);
 | |
| 
 | |
| // 1. List UTXOs
 | |
| 
 | |
|     let unspent = rpc
 | |
|     .list_unspent(
 | |
|         None,
 | |
|         None,
 | |
|         None,
 | |
|         None,
 | |
|         Option::Some(json::ListUnspentQueryOptions {
 | |
|             minimum_amount: Option::Some(Amount::from_btc(0.01).unwrap()),
 | |
|             maximum_amount: None,
 | |
|             maximum_count: None,
 | |
|             minimum_sum_amount: None,
 | |
|         }),
 | |
|     )
 | |
|     .unwrap();
 | |
| 
 | |
|     let selected_tx = &unspent[0];
 | |
| 
 | |
|     println!("selected unspent transaction: {:#?}", selected_tx);
 | |
| 
 | |
| // 2. Populate Variables
 | |
| 
 | |
|     let selected_utxos = json::CreateRawTransactionInput {
 | |
|         txid: selected_tx.txid,
 | |
|         vout: selected_tx.vout,
 | |
|         sequence: None,
 | |
|     };
 | |
| 
 | |
|     let unspent_amount = selected_tx.amount;
 | |
|     let amount = unspent_amount - Amount::from_btc(0.00001).unwrap();
 | |
| 
 | |
|     let mut output = HashMap::new();
 | |
|     output.insert(
 | |
|         myaddress.to_string(),
 | |
|         amount,
 | |
|     );
 | |
| 
 | |
| // 3. Create Raw Transaction
 | |
| 
 | |
|     let unsigned_tx = rpc
 | |
|         .create_raw_transaction(&[selected_utxos], &output, None, None)
 | |
|         .unwrap();
 | |
| 
 | |
|     println!("unsigned tx {:#?}", unsigned_tx);
 | |
| 
 | |
| // 4. Sign Transaction
 | |
| 
 | |
|     let signed_tx = rpc
 | |
|         .sign_raw_transaction_with_wallet(&unsigned_tx, None, None)
 | |
|         .unwrap();
 | |
| 
 | |
|     println!("signed tx {:?}", signed_tx.transaction().unwrap());
 | |
| 
 | |
| // 5. Send Transaction
 | |
| 
 | |
|     let txid_sent = rpc
 | |
|         .send_raw_transaction(&signed_tx.transaction().unwrap())
 | |
|         .unwrap();
 | |
| 
 | |
|     println!("{:?}", txid_sent);
 | |
| 
 | |
| // 6. Cleanup
 | |
| 
 | |
|     let unspent_amount = selected_tx.amount;
 | |
| 
 | |
| }
 |