From 6b1aa2b4ca641f6e697a867002d79087e28a3d2d Mon Sep 17 00:00:00 2001 From: Dave Hrycyszyn Date: Tue, 25 Jun 2024 15:18:30 +0100 Subject: [PATCH] Sending between multiple addresses works nicely --- side-node/src/bitcoin/clients/esplora.rs | 22 ++++++++++++--- side-node/src/bitcoin/driver.rs | 36 ++++++++++++++++-------- 2 files changed, 43 insertions(+), 15 deletions(-) diff --git a/side-node/src/bitcoin/clients/esplora.rs b/side-node/src/bitcoin/clients/esplora.rs index 9188188..262f353 100644 --- a/side-node/src/bitcoin/clients/esplora.rs +++ b/side-node/src/bitcoin/clients/esplora.rs @@ -22,9 +22,10 @@ const PARALLEL_REQUESTS: usize = 5; /// A wallet that uses the Esplora client to interact with the Bitcoin network. pub struct EsploraWallet { - wallet: Wallet, - db: Store, client: AsyncClient, + db: Store, + name: String, + wallet: Wallet, } impl EsploraWallet { @@ -107,7 +108,10 @@ impl EsploraWallet { if let Some(changeset) = self.wallet.take_staged() { self.db.write(&changeset)?; } - println!("Generated Address: {}", address); + println!( + "Generated address: https://mutinynet.com/address/{}", + address + ); Ok(address) } @@ -121,6 +125,11 @@ impl EsploraWallet { &self, tx: &bitcoin::Transaction, ) -> Result<(), esplora_client::Error> { + println!( + "{} broadcasting tx https://mutinynet.com/tx/{}", + self.name, + tx.compute_txid() + ); self.client.broadcast(tx).await } } @@ -166,7 +175,12 @@ pub(crate) fn create_wallet(name: &str, network: Network) -> anyhow::Result Result<(), anyhow::Error> { let mut dave = clients::esplora::create_wallet("dave", Network::Signet)?; + let mut sammy = clients::esplora::create_wallet("sammy", Network::Signet)?; let _next_address = dave.next_unused_address()?; - let balance = dave.balance(); - println!("Wallet balance before syncing: {} sats", balance.total()); + let dave_balance = dave.balance(); + println!( + "Dave wallet balance before syncing: {} sats", + dave_balance.total() + ); dave.sync().await?; - let balance = dave.balance(); - println!("Wallet balance after syncing: {} sats", balance.total()); + let dave_balance = dave.balance(); + println!("Wallet balance after syncing: {} sats", dave_balance); - let faucet_address = Address::from_str("mkHS9ne12qx9pS9VojpwU5xtRd4T7X7ZUt")? - .require_network(Network::Signet)?; - let send_amount = Amount::from_sat(5000); + let sammy_address = sammy.next_unused_address()?.address; + println!("Sammy's address: {}", sammy_address); - if balance.total() < send_amount { + let sammy_balance = sammy.balance(); + println!( + "Sammy wallet balance before syncing: {} sats", + sammy_balance + ); + + sammy.sync().await?; + + let sammy_balance = sammy.balance(); + println!("Sammy wallet balance after syncing: {} sats", sammy_balance); + + let send_amount = Amount::from_sat(500); + + if dave_balance.total() < send_amount { println!( "Please send at least {} sats to the receiving address", send_amount @@ -35,10 +51,8 @@ pub(crate) async fn run() -> Result<(), anyhow::Error> { std::process::exit(0); } - let tx = dave.build_send_tx(faucet_address, send_amount)?; + let tx = dave.build_send_tx(sammy_address, send_amount)?; dave.broadcast(&tx).await?; - println!("Tx broadcasted! Txid: {}", tx.compute_txid()); - Ok(()) }