diff --git a/crates/bdk/src/wallet/mod.rs b/crates/bdk/src/wallet/mod.rs index 9ee72b4b6..054d85ecf 100644 --- a/crates/bdk/src/wallet/mod.rs +++ b/crates/bdk/src/wallet/mod.rs @@ -56,7 +56,6 @@ pub mod hardwaresigner; pub use utils::IsDust; -#[allow(deprecated)] use coin_selection::DefaultCoinSelectionAlgorithm; use signer::{SignOptions, SignerOrdering, SignersContainer, TransactionSigner}; use tx_builder::{BumpFee, CreateTx, FeePolicy, TxBuilder, TxParams}; @@ -1286,11 +1285,11 @@ impl Wallet { let weighted_utxo = match txout_index.index_of_spk(&txout.script_pubkey) { Some(&(keychain, derivation_index)) => { - #[allow(deprecated)] let satisfaction_weight = self .get_descriptor_for_keychain(keychain) - .max_satisfaction_weight() - .unwrap(); + .max_weight_to_satisfy() + .unwrap() + + 4; WeightedUtxo { utxo: Utxo::Local(LocalUtxo { outpoint: txin.previous_output, @@ -1307,7 +1306,6 @@ impl Wallet { let satisfaction_weight = serialize(&txin.script_sig).len() * 4 + serialize(&txin.witness).len(); WeightedUtxo { - satisfaction_weight, utxo: Utxo::Foreign { outpoint: txin.previous_output, psbt_input: Box::new(psbt::Input { @@ -1316,6 +1314,7 @@ impl Wallet { ..Default::default() }), }, + satisfaction_weight, } } }; @@ -1619,12 +1618,12 @@ impl Wallet { self.list_unspent() .map(|utxo| { let keychain = utxo.keychain; - #[allow(deprecated)] ( utxo, self.get_descriptor_for_keychain(keychain) - .max_satisfaction_weight() - .unwrap(), + .max_weight_to_satisfy() + .unwrap() + + 4, ) }) .collect() diff --git a/crates/bdk/src/wallet/tx_builder.rs b/crates/bdk/src/wallet/tx_builder.rs index 37e85a124..5c67c059d 100644 --- a/crates/bdk/src/wallet/tx_builder.rs +++ b/crates/bdk/src/wallet/tx_builder.rs @@ -295,8 +295,7 @@ impl<'a, D, Cs: CoinSelectionAlgorithm, Ctx: TxBuilderContext> TxBuilder<'a, D, for utxo in utxos { let descriptor = wallet.get_descriptor_for_keychain(utxo.keychain); - #[allow(deprecated)] - let satisfaction_weight = descriptor.max_satisfaction_weight().unwrap(); + let satisfaction_weight = descriptor.max_weight_to_satisfy().unwrap() + 4; self.params.utxos.push(WeightedUtxo { satisfaction_weight, utxo: Utxo::Local(utxo), @@ -337,9 +336,12 @@ impl<'a, D, Cs: CoinSelectionAlgorithm, Ctx: TxBuilderContext> TxBuilder<'a, D, /// causing you to pay a fee that is too high. The party who is broadcasting the transaction can /// of course check the real input weight matches the expected weight prior to broadcasting. /// - /// To guarantee the `satisfaction_weight` is correct, you can require the party providing the + /// To guarantee the `max_weight_to_satisfy` is correct, you can require the party providing the /// `psbt_input` provide a miniscript descriptor for the input so you can check it against the - /// `script_pubkey` and then ask it for the [`max_satisfaction_weight`]. + /// `script_pubkey` and then ask it for the [`max_weight_to_satisfy`]. + /// Be aware that `max_weight_to_satisfy` uses `segwit_weight` instead of `legacy_weight`, + /// if you want to include only legacy inputs in your transaction, you should remove 1WU + /// from each input's `max_weight_to_satisfy` for a more accurate estimate. /// /// This is an **EXPERIMENTAL** feature, API and other major changes are expected. /// @@ -360,7 +362,7 @@ impl<'a, D, Cs: CoinSelectionAlgorithm, Ctx: TxBuilderContext> TxBuilder<'a, D, /// /// [`only_witness_utxo`]: Self::only_witness_utxo /// [`finish`]: Self::finish - /// [`max_satisfaction_weight`]: miniscript::Descriptor::max_satisfaction_weight + /// [`max_weight_to_satisfy`]: miniscript::Descriptor::max_weight_to_satisfy pub fn add_foreign_utxo( &mut self, outpoint: OutPoint, diff --git a/crates/bdk/tests/wallet.rs b/crates/bdk/tests/wallet.rs index aad8c2db2..507551d23 100644 --- a/crates/bdk/tests/wallet.rs +++ b/crates/bdk/tests/wallet.rs @@ -1041,10 +1041,9 @@ fn test_add_foreign_utxo() { .unwrap() .assume_checked(); let utxo = wallet2.list_unspent().next().expect("must take!"); - #[allow(deprecated)] let foreign_utxo_satisfaction = wallet2 .get_descriptor_for_keychain(KeychainKind::External) - .max_satisfaction_weight() + .max_weight_to_satisfy() .unwrap(); let psbt_input = psbt::Input { @@ -1117,10 +1116,9 @@ fn test_calculate_fee_with_missing_foreign_utxo() { .unwrap() .assume_checked(); let utxo = wallet2.list_unspent().next().expect("must take!"); - #[allow(deprecated)] let foreign_utxo_satisfaction = wallet2 .get_descriptor_for_keychain(KeychainKind::External) - .max_satisfaction_weight() + .max_weight_to_satisfy() .unwrap(); let psbt_input = psbt::Input { @@ -1144,10 +1142,9 @@ fn test_calculate_fee_with_missing_foreign_utxo() { fn test_add_foreign_utxo_invalid_psbt_input() { let (mut wallet, _) = get_funded_wallet(get_test_wpkh()); let outpoint = wallet.list_unspent().next().expect("must exist").outpoint; - #[allow(deprecated)] let foreign_utxo_satisfaction = wallet .get_descriptor_for_keychain(KeychainKind::External) - .max_satisfaction_weight() + .max_weight_to_satisfy() .unwrap(); let mut builder = wallet.build_tx(); @@ -1166,10 +1163,9 @@ fn test_add_foreign_utxo_where_outpoint_doesnt_match_psbt_input() { let tx1 = wallet1.get_tx(txid1).unwrap().tx_node.tx.clone(); let tx2 = wallet2.get_tx(txid2).unwrap().tx_node.tx.clone(); - #[allow(deprecated)] let satisfaction_weight = wallet2 .get_descriptor_for_keychain(KeychainKind::External) - .max_satisfaction_weight() + .max_weight_to_satisfy() .unwrap(); let mut builder = wallet1.build_tx(); @@ -1211,10 +1207,9 @@ fn test_add_foreign_utxo_only_witness_utxo() { .assume_checked(); let utxo2 = wallet2.list_unspent().next().unwrap(); - #[allow(deprecated)] let satisfaction_weight = wallet2 .get_descriptor_for_keychain(KeychainKind::External) - .max_satisfaction_weight() + .max_weight_to_satisfy() .unwrap(); let mut builder = wallet1.build_tx(); @@ -2907,10 +2902,9 @@ fn test_taproot_foreign_utxo() { .assume_checked(); let utxo = wallet2.list_unspent().next().unwrap(); let psbt_input = wallet2.get_psbt_input(utxo.clone(), None, false).unwrap(); - #[allow(deprecated)] let foreign_utxo_satisfaction = wallet2 .get_descriptor_for_keychain(KeychainKind::External) - .max_satisfaction_weight() + .max_weight_to_satisfy() .unwrap(); assert!(