use assert_matches::assert_matches;
use bdk::descriptor::calc_checksum;
+use bdk::psbt::PsbtUtils;
use bdk::signer::{SignOptions, SignerError};
use bdk::wallet::coin_selection::LargestFirstCoinSelection;
use bdk::wallet::AddressIndex::*;
use bdk::wallet::{AddressIndex, AddressInfo, Balance, Wallet};
-use bdk::Error;
-use bdk::FeeRate;
-use bdk::KeychainKind;
-use bdk_chain::BlockId;
-use bdk_chain::ConfirmationTime;
+use bdk::{Error, FeeRate, KeychainKind};
use bdk_chain::COINBASE_MATURITY;
+use bdk_chain::{BlockId, ConfirmationTime};
use bitcoin::hashes::Hash;
use bitcoin::sighash::{EcdsaSighashType, TapSighashType};
-use bitcoin::BlockHash;
use bitcoin::ScriptBuf;
use bitcoin::{
absolute, script::PushBytesBuf, taproot::TapNodeHash, Address, OutPoint, Sequence, Transaction,
TxIn, TxOut, Weight,
};
use bitcoin::{psbt, Network};
+use bitcoin::{BlockHash, Txid};
use core::str::FromStr;
mod common;
assert_eq!(wallet.get_balance().confirmed, 50000);
}
+#[test]
+fn test_get_funded_wallet_sent_and_received() {
+ let (wallet, _) = get_funded_wallet(get_test_wpkh());
+ assert_eq!(wallet.get_balance().confirmed, 50000);
+ let mut tx_amounts: Vec<(Txid, (u64, u64))> = wallet
+ .transactions()
+ .map(|ct| (ct.node.txid, wallet.sent_and_received(ct.node.tx)))
+ .collect();
+ tx_amounts.sort_by(|a1, a2| a1.0.cmp(&a2.0));
+
+ assert_eq!(tx_amounts.len(), 2);
+ assert_matches!(tx_amounts.get(0), Some((_, (76_000, 50_000))))
+}
+
+#[test]
+fn test_get_funded_wallet_tx_fees() {
+ let (wallet, _) = get_funded_wallet(get_test_wpkh());
+ assert_eq!(wallet.get_balance().confirmed, 50000);
+ let mut tx_fee_amounts: Vec<(Txid, Result<u64, bdk::error::CalculateFeeError>)> = wallet
+ .transactions()
+ .map(|ct| {
+ let fee = wallet.calculate_fee(ct.node.tx);
+ (ct.node.txid, fee)
+ })
+ .collect();
+ tx_fee_amounts.sort_by(|a1, a2| a1.0.cmp(&a2.0));
+
+ assert_eq!(tx_fee_amounts.len(), 2);
+ assert_matches!(
+ tx_fee_amounts.get(1),
+ Some((_, Err(bdk::error::CalculateFeeError::MissingTxOut)))
+ );
+ assert_matches!(tx_fee_amounts.get(0), Some((_, Ok(1000))))
+}
+
+#[test]
+fn test_get_funded_wallet_tx_fee_rate() {
+ let (wallet, _) = get_funded_wallet(get_test_wpkh());
+ assert_eq!(wallet.get_balance().confirmed, 50000);
+ let mut tx_fee_rates: Vec<(Txid, Result<FeeRate, bdk::error::CalculateFeeError>)> = wallet
+ .transactions()
+ .map(|ct| {
+ let fee_rate = wallet.calculate_fee_rate(ct.node.tx);
+ (ct.node.txid, fee_rate)
+ })
+ .collect();
+ tx_fee_rates.sort_by(|a1, a2| a1.0.cmp(&a2.0));
+
+ assert_eq!(tx_fee_rates.len(), 2);
+ assert_matches!(
+ tx_fee_rates.get(1),
+ Some((_, Err(bdk::error::CalculateFeeError::MissingTxOut)))
+ );
+ assert_matches!(tx_fee_rates.get(0), Some((_, Ok(_))))
+}
+
macro_rules! assert_fee_rate {
($psbt:expr, $fees:expr, $fee_rate:expr $( ,@dust_change $( $dust_change:expr )* )* $( ,@add_signature $( $add_signature:expr )* )* ) => ({
let psbt = $psbt.clone();
builder
.add_recipient(addr.script_pubkey(), 25_000)
.version(42);
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert_eq!(psbt.unsigned_tx.version, 42);
}
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 25_000);
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
// Since we never synced the wallet we don't have a last_sync_height
// we could use to try to prevent fee sniping. We default to 0.
- assert_eq!(psbt.unsigned_tx.lock_time.to_consensus_u32(), 1_000);
+ assert_eq!(psbt.unsigned_tx.lock_time.to_consensus_u32(), 2_000);
}
#[test]
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 25_000);
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
// If there's no current_height we're left with using the last sync height
assert_eq!(
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 25_000);
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert_eq!(psbt.unsigned_tx.lock_time.to_consensus_u32(), 100_000);
}
.add_recipient(addr.script_pubkey(), 25_000)
.current_height(630_001)
.nlocktime(absolute::LockTime::from_height(630_000).unwrap());
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
// When we explicitly specify a nlocktime
// we don't try any fee sniping prevention trick
builder
.add_recipient(addr.script_pubkey(), 25_000)
.nlocktime(absolute::LockTime::from_height(630_000).unwrap());
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert_eq!(psbt.unsigned_tx.lock_time.to_consensus_u32(), 630_000);
}
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 25_000);
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert_eq!(psbt.unsigned_tx.input[0].sequence, Sequence(6));
}
builder
.add_recipient(addr.script_pubkey(), 25_000)
.enable_rbf();
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
// When CSV is enabled it takes precedence over the rbf value (unless forced by the user).
// It will be set to the OP_CSV value, in this case 6
assert_eq!(psbt.unsigned_tx.input[0].sequence, Sequence(6));
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 25_000);
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert_eq!(psbt.unsigned_tx.input[0].sequence, Sequence(0xFFFFFFFE));
}
builder
.add_recipient(addr.script_pubkey(), 25_000)
.enable_rbf_with_sequence(Sequence(0xDEADBEEF));
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert_eq!(psbt.unsigned_tx.input[0].sequence, Sequence(0xDEADBEEF));
}
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 25_000);
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert_eq!(psbt.unsigned_tx.input[0].sequence, Sequence(0xFFFFFFFE));
}
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let fee = psbt.fee_amount();
assert_eq!(psbt.unsigned_tx.output.len(), 1);
- assert_eq!(
- psbt.unsigned_tx.output[0].value,
- 50_000 - details.fee.unwrap_or(0)
- );
+ assert_eq!(psbt.unsigned_tx.output[0].value, 50_000 - fee.unwrap_or(0));
}
#[test]
.add_recipient(addr.script_pubkey(), 20_000)
.drain_to(drain_addr.script_pubkey())
.drain_wallet();
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let fee = psbt.fee_amount();
let outputs = psbt.unsigned_tx.output;
assert_eq!(outputs.len(), 2);
.find(|x| x.script_pubkey == drain_addr.script_pubkey())
.unwrap();
assert_eq!(main_output.value, 20_000,);
- assert_eq!(drain_output.value, 30_000 - details.fee.unwrap_or(0));
+ assert_eq!(drain_output.value, 30_000 - fee.unwrap_or(0));
}
#[test]
.drain_to(addr.script_pubkey())
.add_utxos(&utxos)
.unwrap();
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let fee = psbt.fee_amount();
assert_eq!(psbt.unsigned_tx.output.len(), 1);
- assert_eq!(
- psbt.unsigned_tx.output[0].value,
- 50_000 - details.fee.unwrap_or(0)
- );
+ assert_eq!(psbt.unsigned_tx.output[0].value, 50_000 - fee.unwrap_or(0));
}
#[test]
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 25_000);
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let fee = psbt.fee_amount();
- assert_fee_rate!(psbt, details.fee.unwrap_or(0), FeeRate::default(), @add_signature);
+ assert_fee_rate!(psbt, fee.unwrap_or(0), FeeRate::default(), @add_signature);
}
#[test]
builder
.add_recipient(addr.script_pubkey(), 25_000)
.fee_rate(FeeRate::from_sat_per_vb(5.0));
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let fee = psbt.fee_amount();
- assert_fee_rate!(psbt, details.fee.unwrap_or(0), FeeRate::from_sat_per_vb(5.0), @add_signature);
+ assert_fee_rate!(psbt, fee.unwrap_or(0), FeeRate::from_sat_per_vb(5.0), @add_signature);
}
#[test]
.drain_to(addr.script_pubkey())
.drain_wallet()
.fee_absolute(100);
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let fee = psbt.fee_amount();
- assert_eq!(details.fee.unwrap_or(0), 100);
+ assert_eq!(fee.unwrap_or(0), 100);
assert_eq!(psbt.unsigned_tx.output.len(), 1);
- assert_eq!(
- psbt.unsigned_tx.output[0].value,
- 50_000 - details.fee.unwrap_or(0)
- );
+ assert_eq!(psbt.unsigned_tx.output[0].value, 50_000 - fee.unwrap_or(0));
}
#[test]
.drain_to(addr.script_pubkey())
.drain_wallet()
.fee_absolute(0);
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let fee = psbt.fee_amount();
- assert_eq!(details.fee.unwrap_or(0), 0);
+ assert_eq!(fee.unwrap_or(0), 0);
assert_eq!(psbt.unsigned_tx.output.len(), 1);
- assert_eq!(
- psbt.unsigned_tx.output[0].value,
- 50_000 - details.fee.unwrap_or(0)
- );
+ assert_eq!(psbt.unsigned_tx.output[0].value, 50_000 - fee.unwrap_or(0));
}
#[test]
.drain_to(addr.script_pubkey())
.drain_wallet()
.fee_absolute(60_000);
- let (_psbt, _details) = builder.finish().unwrap();
+ let _ = builder.finish().unwrap();
}
#[test]
builder
.add_recipient(addr.script_pubkey(), 25_000)
.ordering(TxOrdering::Untouched);
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let fee = psbt.fee_amount();
assert_eq!(psbt.unsigned_tx.output.len(), 2);
assert_eq!(psbt.unsigned_tx.output[0].value, 25_000);
- assert_eq!(
- psbt.unsigned_tx.output[1].value,
- 25_000 - details.fee.unwrap_or(0)
- );
+ assert_eq!(psbt.unsigned_tx.output[1].value, 25_000 - fee.unwrap_or(0));
}
#[test]
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 49_800);
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let fee = psbt.fee_amount();
assert_eq!(psbt.unsigned_tx.output.len(), 1);
assert_eq!(psbt.unsigned_tx.output[0].value, 49_800);
- assert_eq!(details.fee.unwrap_or(0), 200);
+ assert_eq!(fee.unwrap_or(0), 200);
}
#[test]
.add_recipient(addr.script_pubkey(), 30_000)
.add_recipient(addr.script_pubkey(), 10_000)
.ordering(bdk::wallet::tx_builder::TxOrdering::Bip69Lexicographic);
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let fee = psbt.fee_amount();
assert_eq!(psbt.unsigned_tx.output.len(), 3);
- assert_eq!(
- psbt.unsigned_tx.output[0].value,
- 10_000 - details.fee.unwrap_or(0)
- );
+ assert_eq!(psbt.unsigned_tx.output[0].value, 10_000 - fee.unwrap_or(0));
assert_eq!(psbt.unsigned_tx.output[1].value, 10_000);
assert_eq!(psbt.unsigned_tx.output[2].value, 30_000);
}
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 30_000);
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert_eq!(psbt.inputs[0].sighash_type, None);
}
builder
.add_recipient(addr.script_pubkey(), 30_000)
.sighash(EcdsaSighashType::Single.into());
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert_eq!(
psbt.inputs[0].sighash_type,
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert_eq!(psbt.inputs[0].bip32_derivation.len(), 1);
assert_eq!(
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert_eq!(psbt.outputs[0].bip32_derivation.len(), 1);
let expected_derivation_path = format!("m/44'/0'/0'/0/{}", addr.index);
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert_eq!(
psbt.inputs[0].redeem_script,
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert_eq!(psbt.inputs[0].redeem_script, None);
assert_eq!(
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
let script = ScriptBuf::from_hex(
"21032b0558078bec38694a84933d659303e2575dae7e91685911454115bfd64487e3ac",
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert!(psbt.inputs[0].non_witness_utxo.is_some());
assert!(psbt.inputs[0].witness_utxo.is_none());
.drain_to(addr.script_pubkey())
.only_witness_utxo()
.drain_wallet();
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert!(psbt.inputs[0].non_witness_utxo.is_none());
assert!(psbt.inputs[0].witness_utxo.is_some());
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert!(psbt.inputs[0].witness_utxo.is_some());
}
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert!(psbt.inputs[0].non_witness_utxo.is_some());
assert!(psbt.inputs[0].witness_utxo.is_some());
vout: 0,
})
.unwrap();
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
assert_eq!(
psbt.unsigned_tx.input.len(),
2,
"should add an additional input since 25_000 < 30_000"
);
- assert_eq!(details.sent, 75_000, "total should be sum of both inputs");
+ assert_eq!(
+ sent_received.0, 75_000,
+ "total should be sum of both inputs"
+ );
}
#[test]
builder
.add_recipient(addr.script_pubkey(), 30_000)
.policy_path(path, KeychainKind::External);
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert_eq!(psbt.unsigned_tx.input[0].sequence, Sequence(0xFFFFFFFF));
}
builder
.add_recipient(addr.script_pubkey(), 30_000)
.policy_path(path, KeychainKind::External);
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert_eq!(psbt.unsigned_tx.input[0].sequence, Sequence(144));
}
builder
.add_recipient(addr.script_pubkey(), 30_000)
.policy_path(path, KeychainKind::External);
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert_eq!(psbt.unsigned_tx.input[0].sequence, Sequence(0xFFFFFFFE));
}
builder
.add_recipient(addr.script_pubkey(), 25_000)
.add_global_xpubs();
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
let key = bip32::ExtendedPubKey::from_str("tpubDCKxNyM3bLgbEX13Mcd8mYxbVg9ajDkWXMh29hMWBurKfVmBfWAM96QVP3zaUcN51HvkZ3ar4VwP82kC8JZhhux8vFQoJintSpVBwpFvyU3").unwrap();
let fingerprint = bip32::Fingerprint::from_hex("73756c7f").unwrap();
.only_witness_utxo()
.add_foreign_utxo(utxo.outpoint, psbt_input, foreign_utxo_satisfaction)
.unwrap();
- let (mut psbt, details) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
+ let fee = psbt.fee_amount();
+ let sent_received = wallet1.sent_and_received(&psbt.clone().extract_tx());
assert_eq!(
- details.sent - details.received,
- 10_000 + details.fee.unwrap_or(0),
+ sent_received.0 - sent_received.1,
+ 10_000 + fee.unwrap_or(0),
"we should have only net spent ~10_000"
);
get_funded_wallet("wpkh(cVbZ8ovhye9AoAHFsqobCf7LxbXDAECy9Kb8TZdfsDYMZGBUyCnm)");
let utxo2 = wallet2.list_unspent().next().unwrap();
- let tx1 = wallet1.get_tx(txid1, true).unwrap().transaction.unwrap();
- let tx2 = wallet2.get_tx(txid2, true).unwrap().transaction.unwrap();
+ let tx1 = wallet1.get_tx(txid1).unwrap().node.tx.clone();
+ let tx2 = wallet2.get_tx(txid2).unwrap().node.tx.clone();
#[allow(deprecated)]
let satisfaction_weight = wallet2
{
let mut builder = builder.clone();
- let tx2 = wallet2.get_tx(txid2, true).unwrap().transaction.unwrap();
+ let tx2 = wallet2.get_tx(txid2).unwrap().node.tx;
let psbt_input = psbt::Input {
- non_witness_utxo: Some(tx2),
+ non_witness_utxo: Some(tx2.clone()),
..Default::default()
};
builder
builder
.add_recipient(addr.script_pubkey(), 25_000)
.add_global_xpubs();
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
let key = bip32::ExtendedPubKey::from_str("tpubD6NzVbkrYhZ4Y55A58Gv9RSNF5hy84b5AJqYy7sCcjFrkcLpPre8kmgfit6kY1Zs3BLgeypTDBZJM222guPpdz7Cup5yzaMu62u7mYGbwFL").unwrap();
let fingerprint = bip32::Fingerprint::from_hex("997a323b").unwrap();
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 25_000);
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
let tx = psbt.extract_tx();
let txid = tx.txid();
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 25_000);
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
let tx = psbt.extract_tx();
let txid = tx.txid();
builder
.add_recipient(addr.script_pubkey(), 25_000)
.enable_rbf();
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
let tx = psbt.extract_tx();
let txid = tx.txid();
builder
.add_recipient(addr.script_pubkey(), 25_000)
.enable_rbf();
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
let tx = psbt.extract_tx();
let txid = tx.txid();
builder
.add_recipient(addr.script_pubkey(), 25_000)
.enable_rbf();
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
let tx = psbt.extract_tx();
let txid = tx.txid();
builder
.add_recipient(addr.script_pubkey(), 25_000)
.enable_rbf();
- let (psbt, original_details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let original_sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
+ let original_fee = psbt.fee_amount();
+
let tx = psbt.extract_tx();
let txid = tx.txid();
wallet
let mut builder = wallet.build_fee_bump(txid).unwrap();
builder.fee_rate(FeeRate::from_sat_per_vb(2.5)).enable_rbf();
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
+ let fee = psbt.fee_amount();
- assert_eq!(details.sent, original_details.sent);
+ assert_eq!(sent_received.0, original_sent_received.0);
assert_eq!(
- details.received + details.fee.unwrap_or(0),
- original_details.received + original_details.fee.unwrap_or(0)
+ sent_received.1 + fee.unwrap_or(0),
+ original_sent_received.1 + original_fee.unwrap_or(0)
);
- assert!(details.fee.unwrap_or(0) > original_details.fee.unwrap_or(0));
+ assert!(fee.unwrap_or(0) > original_fee.unwrap_or(0));
let tx = &psbt.unsigned_tx;
assert_eq!(tx.output.len(), 2);
.find(|txout| txout.script_pubkey != addr.script_pubkey())
.unwrap()
.value,
- details.received
+ sent_received.1
);
- assert_fee_rate!(psbt, details.fee.unwrap_or(0), FeeRate::from_sat_per_vb(2.5), @add_signature);
+ assert_fee_rate!(psbt, fee.unwrap_or(0), FeeRate::from_sat_per_vb(2.5), @add_signature);
let mut builder = wallet.build_fee_bump(txid).unwrap();
builder.fee_absolute(200);
builder.enable_rbf();
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
+ let fee = psbt.fee_amount();
- assert_eq!(details.sent, original_details.sent);
+ assert_eq!(sent_received.0, original_sent_received.0);
assert_eq!(
- details.received + details.fee.unwrap_or(0),
- original_details.received + original_details.fee.unwrap_or(0)
+ sent_received.1 + fee.unwrap_or(0),
+ original_sent_received.1 + original_fee.unwrap_or(0)
);
assert!(
- details.fee.unwrap_or(0) > original_details.fee.unwrap_or(0),
+ fee.unwrap_or(0) > original_fee.unwrap_or(0),
"{} > {}",
- details.fee.unwrap_or(0),
- original_details.fee.unwrap_or(0)
+ fee.unwrap_or(0),
+ original_fee.unwrap_or(0)
);
let tx = &psbt.unsigned_tx;
.find(|txout| txout.script_pubkey != addr.script_pubkey())
.unwrap()
.value,
- details.received
+ sent_received.1
);
- assert_eq!(details.fee.unwrap_or(0), 200);
+ assert_eq!(fee.unwrap_or(0), 200);
}
#[test]
.drain_to(addr.script_pubkey())
.drain_wallet()
.enable_rbf();
- let (psbt, original_details) = builder.finish().unwrap();
- let tx = psbt.extract_tx();
+ let psbt = builder.finish().unwrap();
+ let tx = psbt.clone().extract_tx();
+ let original_sent_received = wallet.sent_and_received(&tx);
+ let original_fee = psbt.fee_amount();
let txid = tx.txid();
wallet
.insert_tx(tx, ConfirmationTime::Unconfirmed { last_seen: 0 })
.fee_rate(FeeRate::from_sat_per_vb(2.5))
.allow_shrinking(addr.script_pubkey())
.unwrap();
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
+ let fee = psbt.fee_amount();
- assert_eq!(details.sent, original_details.sent);
- assert!(details.fee.unwrap_or(0) > original_details.fee.unwrap_or(0));
+ assert_eq!(sent_received.0, original_sent_received.0);
+ assert!(fee.unwrap_or(0) > original_fee.unwrap_or(0));
let tx = &psbt.unsigned_tx;
assert_eq!(tx.output.len(), 1);
- assert_eq!(tx.output[0].value + details.fee.unwrap_or(0), details.sent);
+ assert_eq!(tx.output[0].value + fee.unwrap_or(0), sent_received.0);
- assert_fee_rate!(psbt, details.fee.unwrap_or(0), FeeRate::from_sat_per_vb(2.5), @add_signature);
+ assert_fee_rate!(psbt, fee.unwrap_or(0), FeeRate::from_sat_per_vb(2.5), @add_signature);
}
#[test]
.drain_to(addr.script_pubkey())
.drain_wallet()
.enable_rbf();
- let (psbt, original_details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let original_fee = psbt.fee_amount();
let tx = psbt.extract_tx();
+ let original_sent_received = wallet.sent_and_received(&tx);
let txid = tx.txid();
wallet
.insert_tx(tx, ConfirmationTime::Unconfirmed { last_seen: 0 })
.allow_shrinking(addr.script_pubkey())
.unwrap()
.fee_absolute(300);
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let tx = &psbt.unsigned_tx;
+ let sent_received = wallet.sent_and_received(tx);
+ let fee = psbt.fee_amount();
- assert_eq!(details.sent, original_details.sent);
- assert!(details.fee.unwrap_or(0) > original_details.fee.unwrap_or(0));
+ assert_eq!(sent_received.0, original_sent_received.0);
+ assert!(fee.unwrap_or(0) > original_fee.unwrap_or(0));
- let tx = &psbt.unsigned_tx;
assert_eq!(tx.output.len(), 1);
- assert_eq!(tx.output[0].value + details.fee.unwrap_or(0), details.sent);
+ assert_eq!(tx.output[0].value + fee.unwrap_or(0), sent_received.0);
- assert_eq!(details.fee.unwrap_or(0), 300);
+ assert_eq!(fee.unwrap_or(0), 300);
}
#[test]
.unwrap()
.manually_selected_only()
.enable_rbf();
- let (psbt, original_details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
let tx = psbt.extract_tx();
+ let original_sent_received = wallet.sent_and_received(&tx);
+
let txid = tx.txid();
wallet
.insert_tx(tx, ConfirmationTime::Unconfirmed { last_seen: 0 })
.unwrap();
- assert_eq!(original_details.sent, 25_000);
+ assert_eq!(original_sent_received.0, 25_000);
// for the new feerate, it should be enough to reduce the output, but since we specify
// `drain_wallet` we expect to spend everything
.allow_shrinking(addr.script_pubkey())
.unwrap()
.fee_rate(FeeRate::from_sat_per_vb(5.0));
- let (_, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let sent_received = wallet.sent_and_received(&psbt.extract_tx());
- assert_eq!(details.sent, 75_000);
+ assert_eq!(sent_received.0, 75_000);
}
#[test]
.unwrap()
.manually_selected_only()
.enable_rbf();
- let (psbt, original_details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
let tx = psbt.extract_tx();
+ let original_sent_received = wallet.sent_and_received(&tx);
let txid = tx.txid();
wallet
.insert_tx(tx, ConfirmationTime::Unconfirmed { last_seen: 0 })
.unwrap();
- assert_eq!(original_details.sent, 25_000);
+ assert_eq!(original_sent_received.0, 25_000);
let mut builder = wallet.build_fee_bump(txid).unwrap();
builder
builder
.add_recipient(addr.script_pubkey(), 45_000)
.enable_rbf();
- let (psbt, original_details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
let tx = psbt.extract_tx();
+ let original_details = wallet.sent_and_received(&tx);
let txid = tx.txid();
wallet
.insert_tx(tx, ConfirmationTime::Unconfirmed { last_seen: 0 })
let mut builder = wallet.build_fee_bump(txid).unwrap();
builder.fee_rate(FeeRate::from_sat_per_vb(50.0));
- let (psbt, details) = builder.finish().unwrap();
-
- assert_eq!(details.sent, original_details.sent + 25_000);
- assert_eq!(details.fee.unwrap_or(0) + details.received, 30_000);
+ let psbt = builder.finish().unwrap();
+ let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
+ let fee = psbt.fee_amount();
+ assert_eq!(sent_received.0, original_details.0 + 25_000);
+ assert_eq!(fee.unwrap_or(0) + sent_received.1, 30_000);
let tx = &psbt.unsigned_tx;
assert_eq!(tx.input.len(), 2);
.find(|txout| txout.script_pubkey != addr.script_pubkey())
.unwrap()
.value,
- details.received
+ sent_received.1
);
- assert_fee_rate!(psbt, details.fee.unwrap_or(0), FeeRate::from_sat_per_vb(50.0), @add_signature);
+ assert_fee_rate!(psbt, fee.unwrap_or(0), FeeRate::from_sat_per_vb(50.0), @add_signature);
}
#[test]
builder
.add_recipient(addr.script_pubkey(), 45_000)
.enable_rbf();
- let (psbt, original_details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
let tx = psbt.extract_tx();
+ let original_sent_received = wallet.sent_and_received(&tx);
let txid = tx.txid();
wallet
.insert_tx(tx, ConfirmationTime::Unconfirmed { last_seen: 0 })
let mut builder = wallet.build_fee_bump(txid).unwrap();
builder.fee_absolute(6_000);
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
+ let fee = psbt.fee_amount();
- assert_eq!(details.sent, original_details.sent + 25_000);
- assert_eq!(details.fee.unwrap_or(0) + details.received, 30_000);
+ assert_eq!(sent_received.0, original_sent_received.0 + 25_000);
+ assert_eq!(fee.unwrap_or(0) + sent_received.1, 30_000);
let tx = &psbt.unsigned_tx;
assert_eq!(tx.input.len(), 2);
.find(|txout| txout.script_pubkey != addr.script_pubkey())
.unwrap()
.value,
- details.received
+ sent_received.1
);
- assert_eq!(details.fee.unwrap_or(0), 6_000);
+ assert_eq!(fee.unwrap_or(0), 6_000);
}
#[test]
.unwrap()
.manually_selected_only()
.enable_rbf();
- let (psbt, original_details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let original_sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
+ let original_fee = psbt.fee_amount();
let tx = psbt.extract_tx();
let txid = tx.txid();
// extra input and a change output, and leave the original output untouched
let mut builder = wallet.build_fee_bump(txid).unwrap();
builder.fee_rate(FeeRate::from_sat_per_vb(50.0));
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
+ let fee = psbt.fee_amount();
- let original_send_all_amount = original_details.sent - original_details.fee.unwrap_or(0);
- assert_eq!(details.sent, original_details.sent + 50_000);
+ let original_send_all_amount = original_sent_received.0 - original_fee.unwrap_or(0);
+ assert_eq!(sent_received.0, original_sent_received.0 + 50_000);
assert_eq!(
- details.received,
- 75_000 - original_send_all_amount - details.fee.unwrap_or(0)
+ sent_received.1,
+ 75_000 - original_send_all_amount - fee.unwrap_or(0)
);
let tx = &psbt.unsigned_tx;
.find(|txout| txout.script_pubkey != addr.script_pubkey())
.unwrap()
.value,
- 75_000 - original_send_all_amount - details.fee.unwrap_or(0)
+ 75_000 - original_send_all_amount - fee.unwrap_or(0)
);
- assert_fee_rate!(psbt, details.fee.unwrap_or(0), FeeRate::from_sat_per_vb(50.0), @add_signature);
+ assert_fee_rate!(psbt, fee.unwrap_or(0), FeeRate::from_sat_per_vb(50.0), @add_signature);
}
#[test]
builder
.add_recipient(addr.script_pubkey(), 45_000)
.enable_rbf();
- let (psbt, original_details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let original_sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
+ let original_fee = psbt.fee_amount();
+
let mut tx = psbt.extract_tx();
for txin in &mut tx.input {
txin.witness.push([0x00; P2WPKH_FAKE_WITNESS_SIZE]); // to get realisitc weight
// We use epsilon here to avoid asking for a slightly too high feerate
let fee_abs = 50_000 + 25_000 - 45_000 - 10;
builder.fee_rate(FeeRate::from_wu(fee_abs, new_tx_weight));
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
+ let fee = psbt.fee_amount();
- assert_eq!(
- original_details.received,
- 5_000 - original_details.fee.unwrap_or(0)
- );
+ assert_eq!(original_sent_received.1, 5_000 - original_fee.unwrap_or(0));
- assert_eq!(details.sent, original_details.sent + 25_000);
- assert_eq!(details.fee.unwrap_or(0), 30_000);
- assert_eq!(details.received, 0);
+ assert_eq!(sent_received.0, original_sent_received.0 + 25_000);
+ assert_eq!(fee.unwrap_or(0), 30_000);
+ assert_eq!(sent_received.1, 0);
let tx = &psbt.unsigned_tx;
assert_eq!(tx.input.len(), 2);
45_000
);
- assert_fee_rate!(psbt, details.fee.unwrap_or(0), FeeRate::from_sat_per_vb(140.0), @dust_change, @add_signature);
+ assert_fee_rate!(psbt, fee.unwrap_or(0), FeeRate::from_sat_per_vb(140.0), @dust_change, @add_signature);
}
#[test]
builder
.add_recipient(addr.script_pubkey(), 45_000)
.enable_rbf();
- let (psbt, original_details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
let mut tx = psbt.extract_tx();
+ let original_sent_received = wallet.sent_and_received(&tx);
let txid = tx.txid();
for txin in &mut tx.input {
txin.witness.push([0x00; P2WPKH_FAKE_WITNESS_SIZE]); // fake signature
.add_utxo(incoming_op)
.unwrap()
.fee_rate(FeeRate::from_sat_per_vb(5.0));
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
+ let fee = psbt.fee_amount();
- assert_eq!(details.sent, original_details.sent + 25_000);
- assert_eq!(details.fee.unwrap_or(0) + details.received, 30_000);
+ assert_eq!(sent_received.0, original_sent_received.0 + 25_000);
+ assert_eq!(fee.unwrap_or(0) + sent_received.1, 30_000);
let tx = &psbt.unsigned_tx;
assert_eq!(tx.input.len(), 2);
.find(|txout| txout.script_pubkey != addr.script_pubkey())
.unwrap()
.value,
- details.received
+ sent_received.1
);
- assert_fee_rate!(psbt, details.fee.unwrap_or(0), FeeRate::from_sat_per_vb(5.0), @add_signature);
+ assert_fee_rate!(psbt, fee.unwrap_or(0), FeeRate::from_sat_per_vb(5.0), @add_signature);
}
#[test]
builder
.add_recipient(addr.script_pubkey(), 45_000)
.enable_rbf();
- let (psbt, original_details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
let mut tx = psbt.extract_tx();
+ let original_sent_received = wallet.sent_and_received(&tx);
let txid = tx.txid();
// skip saving the new utxos, we know they can't be used anyways
for txin in &mut tx.input {
// the addition of an extra input with `add_utxo()`
let mut builder = wallet.build_fee_bump(txid).unwrap();
builder.add_utxo(incoming_op).unwrap().fee_absolute(250);
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
+ let fee = psbt.fee_amount();
- assert_eq!(details.sent, original_details.sent + 25_000);
- assert_eq!(details.fee.unwrap_or(0) + details.received, 30_000);
+ assert_eq!(sent_received.0, original_sent_received.0 + 25_000);
+ assert_eq!(fee.unwrap_or(0) + sent_received.1, 30_000);
let tx = &psbt.unsigned_tx;
assert_eq!(tx.input.len(), 2);
.find(|txout| txout.script_pubkey != addr.script_pubkey())
.unwrap()
.value,
- details.received
+ sent_received.1
);
- assert_eq!(details.fee.unwrap_or(0), 250);
+ assert_eq!(fee.unwrap_or(0), 250);
}
#[test]
.drain_wallet()
.drain_to(addr.script_pubkey())
.enable_rbf();
- let (psbt, __details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
// Now we receive one transaction with 0 confirmations. We won't be able to use that for
// fee bumping, as it's still unconfirmed!
receive_output(
.drain_wallet()
.drain_to(addr.script_pubkey())
.enable_rbf();
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
let mut tx = psbt.extract_tx();
let txid = tx.txid();
for txin in &mut tx.input {
.unwrap()
.enable_rbf()
.fee_rate(fee_rate);
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let fee = psbt.fee_amount();
- assert!(psbt.inputs.len() == 1);
- assert_fee_rate!(psbt, details.fee.unwrap_or(0), fee_rate, @add_signature);
+ assert_eq!(psbt.inputs.len(), 1);
+ assert_fee_rate!(psbt, fee.unwrap_or(0), fee_rate, @add_signature);
}
#[test]
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
let finalized = wallet.sign(&mut psbt, Default::default()).unwrap();
assert!(finalized);
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
let finalized = wallet.sign(&mut psbt, Default::default()).unwrap();
assert!(finalized);
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
let finalized = wallet.sign(&mut psbt, Default::default()).unwrap();
assert!(finalized);
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
let finalized = wallet.sign(&mut psbt, Default::default()).unwrap();
assert!(finalized);
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
let finalized = wallet.sign(&mut psbt, Default::default()).unwrap();
assert!(finalized);
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
psbt.inputs[0].bip32_derivation.clear();
assert_eq!(psbt.inputs[0].bip32_derivation.len(), 0);
builder
.add_recipient(addr.script_pubkey(), 45_000)
.include_output_redeem_witness_script();
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
// p2sh-p2wsh transaction should contain both witness and redeem scripts
assert!(psbt
builder
.add_recipient(addr.script_pubkey(), 45_000)
.include_output_redeem_witness_script();
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
// add another input to the psbt that is at least passable.
let dud_input = bitcoin::psbt::Input {
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let mut psbt = builder.finish().unwrap().0;
+ let mut psbt = builder.finish().unwrap();
assert!(wallet
.sign(
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let mut psbt = builder.finish().unwrap().0;
+ let mut psbt = builder.finish().unwrap();
let finalized = wallet
.sign(
.drain_to(addr.script_pubkey())
.sighash(sighash.into())
.drain_wallet();
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
let result = wallet.sign(&mut psbt, Default::default());
assert!(
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 25_000);
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert_eq!(
psbt.inputs[0]
builder
.add_recipient(addr.script_pubkey(), 25_000)
.policy_path(path, KeychainKind::External);
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
let mut input_key_origins = psbt.inputs[0]
.tap_key_origins
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
assert_eq!(
psbt.inputs[0].tap_merkle_root,
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
let witness_utxo = psbt.inputs[0].witness_utxo.take();
let result = wallet.sign(
let addr = wallet.get_address(New);
let mut builder = wallet.build_tx();
builder.drain_to(addr.script_pubkey()).drain_wallet();
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
psbt.inputs[0].witness_utxo = None;
- psbt.inputs[0].non_witness_utxo = wallet.get_tx(prev_txid, true).unwrap().transaction;
+ psbt.inputs[0].non_witness_utxo = Some(wallet.get_tx(prev_txid).unwrap().node.tx.clone());
assert!(
psbt.inputs[0].non_witness_utxo.is_some(),
"Previous tx should be present in the database"
.add_recipient(addr.script_pubkey(), 60_000)
.add_foreign_utxo(utxo.outpoint, psbt_input, foreign_utxo_satisfaction)
.unwrap();
- let (psbt, details) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
+ let sent_received = wallet1.sent_and_received(&psbt.clone().extract_tx());
+ let fee = psbt.fee_amount();
assert_eq!(
- details.sent - details.received,
- 10_000 + details.fee.unwrap_or(0),
+ sent_received.0 - sent_received.1,
+ 10_000 + fee.unwrap_or(0),
"we should have only net spent ~10_000"
);
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 25_000);
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
assert!(
wallet.sign(&mut psbt, Default::default()).unwrap(),
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 25_000);
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
assert!(
wallet
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 25_000);
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
assert!(
wallet
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 25_000);
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
let mut script_leaves: Vec<_> = psbt.inputs[0]
.tap_scripts
.clone()
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 25_000);
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
let mut script_leaves: Vec<_> = psbt.inputs[0]
.tap_scripts
.clone()
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 25_000);
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
wallet
.sign(
let mut builder = wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 25_000);
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
// re-create the wallet with an empty db
let wallet_empty =
.drain_to(addr.script_pubkey())
.sighash(TapSighashType::All.into())
.drain_wallet();
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
let result = wallet.sign(&mut psbt, Default::default());
assert!(
.drain_to(addr.script_pubkey())
.sighash(sighash.into())
.drain_wallet();
- let (mut psbt, _) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
let witness_utxo = psbt.inputs[0].witness_utxo.take();
.drain_wallet()
.fee_rate(fee_rate)
.add_data(&data);
- let (mut psbt, details) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
+ let fee = psbt.fee_amount();
let (op_return_vout, _) = psbt
.unsigned_tx
.output
)
.unwrap();
// ...and checking that everything is fine
- assert_fee_rate!(psbt, details.fee.unwrap_or(0), fee_rate);
+ assert_fee_rate!(psbt, fee.unwrap_or(0), fee_rate);
}
#[test]
.drain_to(addr.script_pubkey())
.drain_wallet()
.fee_rate(fee_rate);
- let (mut psbt, details) = builder.finish().unwrap();
+ let mut psbt = builder.finish().unwrap();
+ let fee = psbt.fee_amount();
wallet
.sign(
let key = psbt.inputs[0].partial_sigs.keys().next().unwrap();
let sig_len = psbt.inputs[0].partial_sigs[key].sig.serialize_der().len();
assert_eq!(sig_len, 70);
- assert_fee_rate!(psbt, details.fee.unwrap_or(0), fee_rate);
+ assert_fee_rate!(psbt, fee.unwrap_or(0), fee_rate);
}
// #[cfg(feature = "test-hardware-signer")]
let mut builder = $wallet.build_tx();
builder.add_recipient(addr.script_pubkey(), 10_000);
- let (psbt, _) = builder.finish().unwrap();
+ let psbt = builder.finish().unwrap();
psbt
}};