diff --git a/crates/bdk/src/wallet/mod.rs b/crates/bdk/src/wallet/mod.rs index cbe1a824..7b1bf0be 100644 --- a/crates/bdk/src/wallet/mod.rs +++ b/crates/bdk/src/wallet/mod.rs @@ -32,14 +32,14 @@ use bdk_chain::{ IndexedTxGraph, }; use bdk_persist::{Persist, PersistBackend}; -use bitcoin::constants::genesis_block; use bitcoin::secp256k1::{All, Secp256k1}; use bitcoin::sighash::{EcdsaSighashType, TapSighashType}; use bitcoin::{ absolute, psbt, Address, Block, FeeRate, Network, OutPoint, Script, ScriptBuf, Sequence, Transaction, TxOut, Txid, Witness, }; -use bitcoin::{consensus::encode::serialize, transaction, Amount, BlockHash, Psbt}; +use bitcoin::{consensus::encode::serialize, transaction, BlockHash, Psbt}; +use bitcoin::{constants::genesis_block, Amount}; use core::fmt; use core::ops::Deref; use descriptor::error::Error as DescriptorError; @@ -950,7 +950,7 @@ impl Wallet { /// [`insert_txout`]: Self::insert_txout pub fn calculate_fee_rate(&self, tx: &Transaction) -> Result { self.calculate_fee(tx) - .map(|fee| bitcoin::Amount::from_sat(fee) / tx.weight()) + .map(|fee| Amount::from_sat(fee) / tx.weight()) } /// Compute the `tx`'s sent and received amounts (in satoshis). diff --git a/crates/bdk/src/wallet/tx_builder.rs b/crates/bdk/src/wallet/tx_builder.rs index 355d80d3..bf6d404a 100644 --- a/crates/bdk/src/wallet/tx_builder.rs +++ b/crates/bdk/src/wallet/tx_builder.rs @@ -718,6 +718,7 @@ impl<'a, Cs: CoinSelectionAlgorithm> TxBuilder<'a, Cs, CreateTx> { self } + // TODO: (@leonardo) Should this expect/use `bitcoin::Amount` instead ? Would it be a huge breaking change ? /// Add a recipient to the internal list pub fn add_recipient(&mut self, script_pubkey: ScriptBuf, amount: u64) -> &mut Self { self.params.recipients.push((script_pubkey, amount)); diff --git a/crates/bdk/tests/psbt.rs b/crates/bdk/tests/psbt.rs index ed7a88ad..1a81f6e8 100644 --- a/crates/bdk/tests/psbt.rs +++ b/crates/bdk/tests/psbt.rs @@ -1,4 +1,4 @@ -use bdk::bitcoin::{Amount, FeeRate, Psbt, TxIn}; +use bdk::bitcoin::{FeeRate, Psbt, TxIn}; use bdk::{psbt, KeychainKind, SignOptions}; use core::str::FromStr; mod common; @@ -201,7 +201,7 @@ fn test_psbt_multiple_internalkey_signers() { // the prevout we're spending let prevouts = &[TxOut { script_pubkey: send_to.script_pubkey(), - value: Amount::from_sat(to_spend), + value: to_spend, }]; let prevouts = Prevouts::All(prevouts); let input_index = 0; diff --git a/crates/bdk/tests/wallet.rs b/crates/bdk/tests/wallet.rs index 9a0dd3bf..1246790c 100644 --- a/crates/bdk/tests/wallet.rs +++ b/crates/bdk/tests/wallet.rs @@ -200,7 +200,7 @@ fn test_get_funded_wallet_balance() { // The funded wallet contains a tx with a 76_000 sats input and two outputs, one spending 25_000 // to a foreign address and one returning 50_000 back to the wallet as change. The remaining 1000 // sats are the transaction fee. - assert_eq!(wallet.get_balance().confirmed, 50_000); + assert_eq!(wallet.get_balance().confirmed.to_sat(), 50_000); } #[test] @@ -3582,10 +3582,10 @@ fn test_spend_coinbase() { assert_eq!( balance, Balance { - immature: 25_000, - trusted_pending: 0, - untrusted_pending: 0, - confirmed: 0 + immature: Amount::from_sat(25_000), + trusted_pending: Amount::ZERO, + untrusted_pending: Amount::ZERO, + confirmed: Amount::ZERO } ); @@ -3596,7 +3596,7 @@ fn test_spend_coinbase() { .assume_checked(); let mut builder = wallet.build_tx(); builder - .add_recipient(addr.script_pubkey(), balance.immature / 2) + .add_recipient(addr.script_pubkey(), balance.immature.to_sat() / 2) .current_height(confirmation_height); assert!(matches!( builder.finish(), @@ -3611,7 +3611,7 @@ fn test_spend_coinbase() { // Still unspendable... let mut builder = wallet.build_tx(); builder - .add_recipient(addr.script_pubkey(), balance.immature / 2) + .add_recipient(addr.script_pubkey(), balance.immature.to_sat() / 2) .current_height(not_yet_mature_time); assert_matches!( builder.finish(), @@ -3633,15 +3633,15 @@ fn test_spend_coinbase() { assert_eq!( balance, Balance { - immature: 0, - trusted_pending: 0, - untrusted_pending: 0, - confirmed: 25_000 + immature: Amount::ZERO, + trusted_pending: Amount::ZERO, + untrusted_pending: Amount::ZERO, + confirmed: Amount::from_sat(25_000) } ); let mut builder = wallet.build_tx(); builder - .add_recipient(addr.script_pubkey(), balance.confirmed / 2) + .add_recipient(addr.script_pubkey(), balance.confirmed.to_sat() / 2) .current_height(maturity_time); builder.finish().unwrap(); } diff --git a/crates/bitcoind_rpc/tests/test_emitter.rs b/crates/bitcoind_rpc/tests/test_emitter.rs index c517740f..963e2228 100644 --- a/crates/bitcoind_rpc/tests/test_emitter.rs +++ b/crates/bitcoind_rpc/tests/test_emitter.rs @@ -377,7 +377,7 @@ fn tx_can_become_unconfirmed_after_reorg() -> anyhow::Result<()> { assert_eq!( get_balance(&recv_chain, &recv_graph)?, Balance { - confirmed: SEND_AMOUNT.to_sat() * ADDITIONAL_COUNT as u64, + confirmed: SEND_AMOUNT * ADDITIONAL_COUNT as u64, ..Balance::default() }, "initial balance must be correct", @@ -391,8 +391,8 @@ fn tx_can_become_unconfirmed_after_reorg() -> anyhow::Result<()> { assert_eq!( get_balance(&recv_chain, &recv_graph)?, Balance { - confirmed: SEND_AMOUNT.to_sat() * (ADDITIONAL_COUNT - reorg_count) as u64, - trusted_pending: SEND_AMOUNT.to_sat() * reorg_count as u64, + confirmed: SEND_AMOUNT * (ADDITIONAL_COUNT - reorg_count) as u64, + trusted_pending: SEND_AMOUNT * reorg_count as u64, ..Balance::default() }, "reorg_count: {}", diff --git a/crates/chain/src/keychain.rs b/crates/chain/src/keychain.rs index c20d1f6c..240d944e 100644 --- a/crates/chain/src/keychain.rs +++ b/crates/chain/src/keychain.rs @@ -14,6 +14,7 @@ use crate::{collections::BTreeMap, Append}; #[cfg(feature = "miniscript")] mod txout_index; +use bitcoin::Amount; #[cfg(feature = "miniscript")] pub use txout_index::*; @@ -90,13 +91,13 @@ impl AsRef> for ChangeSet { )] pub struct Balance { /// All coinbase outputs not yet matured - pub immature: u64, + pub immature: Amount, /// Unconfirmed UTXOs generated by a wallet tx - pub trusted_pending: u64, + pub trusted_pending: Amount, /// Unconfirmed UTXOs received from an external wallet - pub untrusted_pending: u64, + pub untrusted_pending: Amount, /// Confirmed and immediately spendable balance - pub confirmed: u64, + pub confirmed: Amount, } impl Balance { @@ -104,12 +105,12 @@ impl Balance { /// /// This is the balance you can spend right now that shouldn't get cancelled via another party /// double spending it. - pub fn trusted_spendable(&self) -> u64 { + pub fn trusted_spendable(&self) -> Amount { self.confirmed + self.trusted_pending } /// Get the whole balance visible to the wallet. - pub fn total(&self) -> u64 { + pub fn total(&self) -> Amount { self.confirmed + self.trusted_pending + self.untrusted_pending + self.immature } } diff --git a/crates/chain/src/spk_txout_index.rs b/crates/chain/src/spk_txout_index.rs index a3ad48d0..a2e718dd 100644 --- a/crates/chain/src/spk_txout_index.rs +++ b/crates/chain/src/spk_txout_index.rs @@ -270,6 +270,7 @@ impl SpkTxOutIndex { self.spk_indices.get(script) } + // TODO: (@leonardo) Should this also be updated to return `(bitcoin::Amount, bitcoin::Amount)` instead of (u64, u64) /// Computes the total value transfer effect `tx` has on the script pubkeys in `range`. Value is /// *sent* when a script pubkey in the `range` is on an input and *received* when it is on an /// output. For `sent` to be computed correctly, the output being spent must have already been diff --git a/crates/chain/src/tx_graph.rs b/crates/chain/src/tx_graph.rs index f6144e7a..4acba7aa 100644 --- a/crates/chain/src/tx_graph.rs +++ b/crates/chain/src/tx_graph.rs @@ -95,7 +95,7 @@ use crate::{ use alloc::collections::vec_deque::VecDeque; use alloc::sync::Arc; use alloc::vec::Vec; -use bitcoin::{OutPoint, Script, Transaction, TxOut, Txid}; +use bitcoin::{Amount, OutPoint, Script, Transaction, TxOut, Txid}; use core::fmt::{self, Formatter}; use core::{ convert::Infallible, @@ -1155,27 +1155,28 @@ impl TxGraph { outpoints: impl IntoIterator, mut trust_predicate: impl FnMut(&OI, &Script) -> bool, ) -> Result { - let mut immature = 0; - let mut trusted_pending = 0; - let mut untrusted_pending = 0; - let mut confirmed = 0; + let mut immature = Amount::ZERO; + let mut trusted_pending = Amount::ZERO; + let mut untrusted_pending = Amount::ZERO; + let mut confirmed = Amount::ZERO; for res in self.try_filter_chain_unspents(chain, chain_tip, outpoints) { let (spk_i, txout) = res?; + // TODO: (@leonardo) Should these operations use `bitcoin::Amount::checked_add()` instead ? match &txout.chain_position { ChainPosition::Confirmed(_) => { if txout.is_confirmed_and_spendable(chain_tip.height) { - confirmed += txout.txout.value.to_sat(); + confirmed += txout.txout.value; } else if !txout.is_mature(chain_tip.height) { - immature += txout.txout.value.to_sat(); + immature += txout.txout.value; } } ChainPosition::Unconfirmed(_) => { if trust_predicate(&spk_i, &txout.txout.script_pubkey) { - trusted_pending += txout.txout.value.to_sat(); + trusted_pending += txout.txout.value; } else { - untrusted_pending += txout.txout.value.to_sat(); + untrusted_pending += txout.txout.value; } } } diff --git a/crates/chain/tests/test_indexed_tx_graph.rs b/crates/chain/tests/test_indexed_tx_graph.rs index 1c8bf398..528418be 100644 --- a/crates/chain/tests/test_indexed_tx_graph.rs +++ b/crates/chain/tests/test_indexed_tx_graph.rs @@ -341,10 +341,10 @@ fn test_list_owned_txouts() { assert_eq!( balance, Balance { - immature: 70000, // immature coinbase - trusted_pending: 25000, // tx3 + tx5 - untrusted_pending: 20000, // tx4 - confirmed: 0 // Nothing is confirmed yet + immature: Amount::from_sat(70000), // immature coinbase + trusted_pending: Amount::from_sat(25000), // tx3 + tx5 + untrusted_pending: Amount::from_sat(20000), // tx4 + confirmed: Amount::ZERO // Nothing is confirmed yet } ); } @@ -376,10 +376,10 @@ fn test_list_owned_txouts() { assert_eq!( balance, Balance { - immature: 70000, // immature coinbase - trusted_pending: 25000, // tx3 + tx5 - untrusted_pending: 20000, // tx4 - confirmed: 0 // Nothing is confirmed yet + immature: Amount::from_sat(70000), // immature coinbase + trusted_pending: Amount::from_sat(25000), // tx3 + tx5 + untrusted_pending: Amount::from_sat(20000), // tx4 + confirmed: Amount::ZERO // Nothing is confirmed yet } ); } @@ -408,10 +408,10 @@ fn test_list_owned_txouts() { assert_eq!( balance, Balance { - immature: 70000, // immature coinbase - trusted_pending: 15000, // tx5 - untrusted_pending: 20000, // tx4 - confirmed: 10000 // tx3 got confirmed + immature: Amount::from_sat(70000), // immature coinbase + trusted_pending: Amount::from_sat(15000), // tx5 + untrusted_pending: Amount::from_sat(20000), // tx4 + confirmed: Amount::from_sat(10000) // tx3 got confirmed } ); } @@ -439,10 +439,10 @@ fn test_list_owned_txouts() { assert_eq!( balance, Balance { - immature: 70000, // immature coinbase - trusted_pending: 15000, // tx5 - untrusted_pending: 20000, // tx4 - confirmed: 10000 // tx1 got matured + immature: Amount::from_sat(70000), // immature coinbase + trusted_pending: Amount::from_sat(15000), // tx5 + untrusted_pending: Amount::from_sat(20000), // tx4 + confirmed: Amount::from_sat(10000) // tx1 got matured } ); } @@ -455,10 +455,10 @@ fn test_list_owned_txouts() { assert_eq!( balance, Balance { - immature: 0, // coinbase matured - trusted_pending: 15000, // tx5 - untrusted_pending: 20000, // tx4 - confirmed: 80000 // tx1 + tx3 + immature: Amount::ZERO, // coinbase matured + trusted_pending: Amount::from_sat(15000), // tx5 + untrusted_pending: Amount::from_sat(20000), // tx4 + confirmed: Amount::from_sat(80000) // tx1 + tx3 } ); } diff --git a/crates/chain/tests/test_tx_graph_conflicts.rs b/crates/chain/tests/test_tx_graph_conflicts.rs index 8ac440f3..96d7b49f 100644 --- a/crates/chain/tests/test_tx_graph_conflicts.rs +++ b/crates/chain/tests/test_tx_graph_conflicts.rs @@ -4,7 +4,7 @@ mod common; use std::collections::{BTreeSet, HashSet}; use bdk_chain::{keychain::Balance, BlockId}; -use bitcoin::{OutPoint, Script}; +use bitcoin::{Amount, OutPoint, Script}; use common::*; #[allow(dead_code)] @@ -79,10 +79,10 @@ fn test_tx_conflict_handling() { exp_chain_txouts: HashSet::from([("confirmed_genesis", 0), ("confirmed_conflict", 0)]), exp_unspents: HashSet::from([("confirmed_conflict", 0)]), exp_balance: Balance { - immature: 0, - trusted_pending: 0, - untrusted_pending: 0, - confirmed: 20000, + immature: Amount::ZERO, + trusted_pending: Amount::ZERO, + untrusted_pending: Amount::ZERO, + confirmed: Amount::from_sat(20000), }, }, Scenario { @@ -115,10 +115,10 @@ fn test_tx_conflict_handling() { exp_chain_txouts: HashSet::from([("tx1", 0), ("tx_conflict_2", 0)]), exp_unspents: HashSet::from([("tx_conflict_2", 0)]), exp_balance: Balance { - immature: 0, - trusted_pending: 30000, - untrusted_pending: 0, - confirmed: 0, + immature: Amount::ZERO, + trusted_pending: Amount::from_sat(30000), + untrusted_pending: Amount::ZERO, + confirmed: Amount::ZERO, }, }, Scenario { @@ -150,10 +150,10 @@ fn test_tx_conflict_handling() { exp_chain_txouts: HashSet::from([("tx1", 0), ("tx1", 1), ("tx_conflict_2", 0)]), exp_unspents: HashSet::from([("tx_conflict_2", 0)]), exp_balance: Balance { - immature: 0, - trusted_pending: 30000, - untrusted_pending: 0, - confirmed: 0, + immature: Amount::ZERO, + trusted_pending: Amount::from_sat(30000), + untrusted_pending: Amount::ZERO, + confirmed: Amount::ZERO, }, }, Scenario { @@ -192,10 +192,10 @@ fn test_tx_conflict_handling() { exp_chain_txouts: HashSet::from([("tx1", 0), ("tx_conflict_3", 0)]), exp_unspents: HashSet::from([("tx_conflict_3", 0)]), exp_balance: Balance { - immature: 0, - trusted_pending: 40000, - untrusted_pending: 0, - confirmed: 0, + immature: Amount::ZERO, + trusted_pending: Amount::from_sat(40000), + untrusted_pending: Amount::ZERO, + confirmed: Amount::ZERO, }, }, Scenario { @@ -227,10 +227,10 @@ fn test_tx_conflict_handling() { exp_chain_txouts: HashSet::from([("tx1", 0), ("tx_orphaned_conflict", 0)]), exp_unspents: HashSet::from([("tx_orphaned_conflict", 0)]), exp_balance: Balance { - immature: 0, - trusted_pending: 30000, - untrusted_pending: 0, - confirmed: 0, + immature: Amount::ZERO, + trusted_pending: Amount::from_sat(30000), + untrusted_pending: Amount::ZERO, + confirmed: Amount::ZERO, }, }, Scenario { @@ -262,10 +262,10 @@ fn test_tx_conflict_handling() { exp_chain_txouts: HashSet::from([("tx1", 0), ("tx_conflict_1", 0)]), exp_unspents: HashSet::from([("tx_conflict_1", 0)]), exp_balance: Balance { - immature: 0, - trusted_pending: 20000, - untrusted_pending: 0, - confirmed: 0, + immature: Amount::ZERO, + trusted_pending: Amount::from_sat(20000), + untrusted_pending: Amount::ZERO, + confirmed: Amount::ZERO, }, }, Scenario { @@ -311,10 +311,10 @@ fn test_tx_conflict_handling() { exp_chain_txouts: HashSet::from([("tx1", 0), ("tx_confirmed_conflict", 0)]), exp_unspents: HashSet::from([("tx_confirmed_conflict", 0)]), exp_balance: Balance { - immature: 0, - trusted_pending: 0, - untrusted_pending: 0, - confirmed: 50000, + immature: Amount::ZERO, + trusted_pending: Amount::ZERO, + untrusted_pending: Amount::ZERO, + confirmed: Amount::from_sat(50000), }, }, Scenario { @@ -356,10 +356,10 @@ fn test_tx_conflict_handling() { exp_chain_txouts: HashSet::from([("A", 0), ("B", 0), ("C", 0)]), exp_unspents: HashSet::from([("C", 0)]), exp_balance: Balance { - immature: 0, - trusted_pending: 30000, - untrusted_pending: 0, - confirmed: 0, + immature: Amount::ZERO, + trusted_pending: Amount::from_sat(30000), + untrusted_pending: Amount::ZERO, + confirmed: Amount::ZERO, }, }, Scenario { @@ -397,10 +397,10 @@ fn test_tx_conflict_handling() { exp_chain_txouts: HashSet::from([("A", 0), ("B'", 0)]), exp_unspents: HashSet::from([("B'", 0)]), exp_balance: Balance { - immature: 0, - trusted_pending: 0, - untrusted_pending: 0, - confirmed: 20000, + immature: Amount::ZERO, + trusted_pending: Amount::ZERO, + untrusted_pending: Amount::ZERO, + confirmed: Amount::from_sat(20000), }, }, Scenario { @@ -442,10 +442,10 @@ fn test_tx_conflict_handling() { ]), exp_unspents: HashSet::from([("C", 0)]), exp_balance: Balance { - immature: 0, - trusted_pending: 30000, - untrusted_pending: 0, - confirmed: 0, + immature: Amount::ZERO, + trusted_pending: Amount::from_sat(30000), + untrusted_pending: Amount::ZERO, + confirmed: Amount::ZERO, }, }, Scenario { @@ -487,10 +487,10 @@ fn test_tx_conflict_handling() { exp_chain_txouts: HashSet::from([("A", 0), ("B'", 0)]), exp_unspents: HashSet::from([("B'", 0)]), exp_balance: Balance { - immature: 0, - trusted_pending: 30000, - untrusted_pending: 0, - confirmed: 0, + immature: Amount::ZERO, + trusted_pending: Amount::from_sat(30000), + untrusted_pending: Amount::ZERO, + confirmed: Amount::ZERO, }, }, Scenario { @@ -532,10 +532,10 @@ fn test_tx_conflict_handling() { exp_chain_txouts: HashSet::from([("A", 0), ("B'", 0)]), exp_unspents: HashSet::from([("B'", 0)]), exp_balance: Balance { - immature: 0, - trusted_pending: 0, - untrusted_pending: 0, - confirmed: 50000, + immature: Amount::ZERO, + trusted_pending: Amount::ZERO, + untrusted_pending: Amount::ZERO, + confirmed: Amount::from_sat(50000), }, }, Scenario { @@ -583,10 +583,10 @@ fn test_tx_conflict_handling() { exp_chain_txouts: HashSet::from([("A", 0), ("B'", 0)]), exp_unspents: HashSet::from([("B'", 0)]), exp_balance: Balance { - immature: 0, - trusted_pending: 0, - untrusted_pending: 0, - confirmed: 50000, + immature: Amount::ZERO, + trusted_pending: Amount::ZERO, + untrusted_pending: Amount::ZERO, + confirmed: Amount::from_sat(50000), }, }, ]; diff --git a/crates/electrum/tests/test_electrum.rs b/crates/electrum/tests/test_electrum.rs index 8f77209f..07e1a872 100644 --- a/crates/electrum/tests/test_electrum.rs +++ b/crates/electrum/tests/test_electrum.rs @@ -78,7 +78,7 @@ fn scan_detects_confirmed_tx() -> Result<()> { assert_eq!( get_balance(&recv_chain, &recv_graph)?, Balance { - confirmed: SEND_AMOUNT.to_sat(), + confirmed: SEND_AMOUNT, ..Balance::default() }, ); @@ -147,7 +147,7 @@ fn tx_can_become_unconfirmed_after_reorg() -> Result<()> { assert_eq!( get_balance(&recv_chain, &recv_graph)?, Balance { - confirmed: SEND_AMOUNT.to_sat() * REORG_COUNT as u64, + confirmed: SEND_AMOUNT * REORG_COUNT as u64, ..Balance::default() }, "initial balance must be correct", @@ -178,8 +178,8 @@ fn tx_can_become_unconfirmed_after_reorg() -> Result<()> { assert_eq!( get_balance(&recv_chain, &recv_graph)?, Balance { - confirmed: SEND_AMOUNT.to_sat() * (REORG_COUNT - depth) as u64, - trusted_pending: SEND_AMOUNT.to_sat() * depth as u64, + confirmed: SEND_AMOUNT * (REORG_COUNT - depth) as u64, + trusted_pending: SEND_AMOUNT * depth as u64, ..Balance::default() }, "reorg_count: {}", diff --git a/example-crates/example_cli/src/lib.rs b/example-crates/example_cli/src/lib.rs index 5671a6b8..be9e4f01 100644 --- a/example-crates/example_cli/src/lib.rs +++ b/example-crates/example_cli/src/lib.rs @@ -506,11 +506,11 @@ where let chain = &*chain.lock().unwrap(); fn print_balances<'a>( title_str: &'a str, - items: impl IntoIterator, + items: impl IntoIterator, ) { println!("{}:", title_str); for (name, amount) in items.into_iter() { - println!(" {:<10} {:>12} sats", name, amount) + println!(" {:<10} {:>12} sats", name, amount.to_sat()) } } diff --git a/example-crates/wallet_electrum/src/main.rs b/example-crates/wallet_electrum/src/main.rs index 4af9e71d..c71592f5 100644 --- a/example-crates/wallet_electrum/src/main.rs +++ b/example-crates/wallet_electrum/src/main.rs @@ -6,7 +6,7 @@ const BATCH_SIZE: usize = 5; use std::io::Write; use std::str::FromStr; -use bdk::bitcoin::Address; +use bdk::bitcoin::{Address, Amount}; use bdk::wallet::Update; use bdk::{bitcoin::Network, Wallet}; use bdk::{KeychainKind, SignOptions}; @@ -81,7 +81,8 @@ fn main() -> Result<(), anyhow::Error> { let balance = wallet.get_balance(); println!("Wallet balance after syncing: {} sats", balance.total()); - if balance.total() < SEND_AMOUNT { + // TODO: (@leonardo) Should we format here, or update on constant and TxBuilder::add_recipient() instead ? + if balance.total() < Amount::from_sat(SEND_AMOUNT) { println!( "Please send at least {} sats to the receiving address", SEND_AMOUNT diff --git a/example-crates/wallet_esplora_async/src/main.rs b/example-crates/wallet_esplora_async/src/main.rs index d89e5fd2..42dd6ae3 100644 --- a/example-crates/wallet_esplora_async/src/main.rs +++ b/example-crates/wallet_esplora_async/src/main.rs @@ -1,7 +1,7 @@ use std::{collections::BTreeSet, io::Write, str::FromStr}; use bdk::{ - bitcoin::{Address, Network, Script}, + bitcoin::{Address, Amount, Network, Script}, KeychainKind, SignOptions, Wallet, }; use bdk_esplora::{esplora_client, EsploraAsyncExt}; @@ -81,7 +81,8 @@ async fn main() -> Result<(), anyhow::Error> { let balance = wallet.get_balance(); println!("Wallet balance after syncing: {} sats", balance.total()); - if balance.total() < SEND_AMOUNT { + // TODO: (@leonardo) Should we format here, or update on constant and TxBuilder::add_recipient() instead ? + if balance.total() < Amount::from_sat(SEND_AMOUNT) { println!( "Please send at least {} sats to the receiving address", SEND_AMOUNT diff --git a/example-crates/wallet_esplora_blocking/src/main.rs b/example-crates/wallet_esplora_blocking/src/main.rs index 6028bb7d..95acf5de 100644 --- a/example-crates/wallet_esplora_blocking/src/main.rs +++ b/example-crates/wallet_esplora_blocking/src/main.rs @@ -6,7 +6,7 @@ const PARALLEL_REQUESTS: usize = 1; use std::{collections::BTreeSet, io::Write, str::FromStr}; use bdk::{ - bitcoin::{Address, Network}, + bitcoin::{Address, Amount, Network}, KeychainKind, SignOptions, Wallet, }; use bdk_esplora::{esplora_client, EsploraExt}; @@ -57,7 +57,8 @@ fn main() -> Result<(), anyhow::Error> { let balance = wallet.get_balance(); println!("Wallet balance after syncing: {} sats", balance.total()); - if balance.total() < SEND_AMOUNT { + // TODO: (@leonardo) Should we format here, or update on constant and TxBuilder::add_recipient() instead ? + if balance.total() < Amount::from_sat(SEND_AMOUNT) { println!( "Please send at least {} sats to the receiving address", SEND_AMOUNT