Skip to content

Commit dd5b8d7

Browse files
committed
test(wallet): add check_fee!(wallet,psbt) macro and use it in place of psbt.fee_amount()
- removed test_calculate_fee_with_inserted_foreign_utxo() since it now duplicates test in test_add_foreign_utxo()
1 parent 465d53c commit dd5b8d7

File tree

1 file changed

+41
-66
lines changed

1 file changed

+41
-66
lines changed

crates/bdk/tests/wallet.rs

Lines changed: 41 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -436,14 +436,23 @@ fn test_create_tx_change_policy_no_internal() {
436436
builder.finish().unwrap();
437437
}
438438

439+
macro_rules! check_fee {
440+
($wallet:expr, $psbt: expr) => {{
441+
let tx = $psbt.clone().extract_tx();
442+
let tx_fee = $wallet.calculate_fee(&tx).ok();
443+
assert_eq!(tx_fee, $psbt.fee_amount());
444+
tx_fee
445+
}};
446+
}
447+
439448
#[test]
440449
fn test_create_tx_drain_wallet_and_drain_to() {
441450
let (mut wallet, _) = get_funded_wallet(get_test_wpkh());
442451
let addr = wallet.get_address(New);
443452
let mut builder = wallet.build_tx();
444453
builder.drain_to(addr.script_pubkey()).drain_wallet();
445454
let psbt = builder.finish().unwrap();
446-
let fee = psbt.fee_amount();
455+
let fee = check_fee!(wallet, psbt);
447456

448457
assert_eq!(psbt.unsigned_tx.output.len(), 1);
449458
assert_eq!(psbt.unsigned_tx.output[0].value, 50_000 - fee.unwrap_or(0));
@@ -462,7 +471,7 @@ fn test_create_tx_drain_wallet_and_drain_to_and_with_recipient() {
462471
.drain_to(drain_addr.script_pubkey())
463472
.drain_wallet();
464473
let psbt = builder.finish().unwrap();
465-
let fee = psbt.fee_amount();
474+
let fee = check_fee!(wallet, psbt);
466475
let outputs = psbt.unsigned_tx.output;
467476

468477
assert_eq!(outputs.len(), 2);
@@ -489,7 +498,7 @@ fn test_create_tx_drain_to_and_utxos() {
489498
.add_utxos(&utxos)
490499
.unwrap();
491500
let psbt = builder.finish().unwrap();
492-
let fee = psbt.fee_amount();
501+
let fee = check_fee!(wallet, psbt);
493502

494503
assert_eq!(psbt.unsigned_tx.output.len(), 1);
495504
assert_eq!(psbt.unsigned_tx.output[0].value, 50_000 - fee.unwrap_or(0));
@@ -512,7 +521,7 @@ fn test_create_tx_default_fee_rate() {
512521
let mut builder = wallet.build_tx();
513522
builder.add_recipient(addr.script_pubkey(), 25_000);
514523
let psbt = builder.finish().unwrap();
515-
let fee = psbt.fee_amount();
524+
let fee = check_fee!(wallet, psbt);
516525

517526
assert_fee_rate!(psbt, fee.unwrap_or(0), FeeRate::default(), @add_signature);
518527
}
@@ -526,7 +535,7 @@ fn test_create_tx_custom_fee_rate() {
526535
.add_recipient(addr.script_pubkey(), 25_000)
527536
.fee_rate(FeeRate::from_sat_per_vb(5.0));
528537
let psbt = builder.finish().unwrap();
529-
let fee = psbt.fee_amount();
538+
let fee = check_fee!(wallet, psbt);
530539

531540
assert_fee_rate!(psbt, fee.unwrap_or(0), FeeRate::from_sat_per_vb(5.0), @add_signature);
532541
}
@@ -541,7 +550,7 @@ fn test_create_tx_absolute_fee() {
541550
.drain_wallet()
542551
.fee_absolute(100);
543552
let psbt = builder.finish().unwrap();
544-
let fee = psbt.fee_amount();
553+
let fee = check_fee!(wallet, psbt);
545554

546555
assert_eq!(fee.unwrap_or(0), 100);
547556
assert_eq!(psbt.unsigned_tx.output.len(), 1);
@@ -558,7 +567,7 @@ fn test_create_tx_absolute_zero_fee() {
558567
.drain_wallet()
559568
.fee_absolute(0);
560569
let psbt = builder.finish().unwrap();
561-
let fee = psbt.fee_amount();
570+
let fee = check_fee!(wallet, psbt);
562571

563572
assert_eq!(fee.unwrap_or(0), 0);
564573
assert_eq!(psbt.unsigned_tx.output.len(), 1);
@@ -589,7 +598,7 @@ fn test_create_tx_add_change() {
589598
.add_recipient(addr.script_pubkey(), 25_000)
590599
.ordering(TxOrdering::Untouched);
591600
let psbt = builder.finish().unwrap();
592-
let fee = psbt.fee_amount();
601+
let fee = check_fee!(wallet, psbt);
593602

594603
assert_eq!(psbt.unsigned_tx.output.len(), 2);
595604
assert_eq!(psbt.unsigned_tx.output[0].value, 25_000);
@@ -603,7 +612,7 @@ fn test_create_tx_skip_change_dust() {
603612
let mut builder = wallet.build_tx();
604613
builder.add_recipient(addr.script_pubkey(), 49_800);
605614
let psbt = builder.finish().unwrap();
606-
let fee = psbt.fee_amount();
615+
let fee = check_fee!(wallet, psbt);
607616

608617
assert_eq!(psbt.unsigned_tx.output.len(), 1);
609618
assert_eq!(psbt.unsigned_tx.output[0].value, 49_800);
@@ -634,7 +643,7 @@ fn test_create_tx_ordering_respected() {
634643
.add_recipient(addr.script_pubkey(), 10_000)
635644
.ordering(bdk::wallet::tx_builder::TxOrdering::Bip69Lexicographic);
636645
let psbt = builder.finish().unwrap();
637-
let fee = psbt.fee_amount();
646+
let fee = check_fee!(wallet, psbt);
638647

639648
assert_eq!(psbt.unsigned_tx.output.len(), 3);
640649
assert_eq!(psbt.unsigned_tx.output[0].value, 10_000 - fee.unwrap_or(0));
@@ -1050,7 +1059,8 @@ fn test_add_foreign_utxo() {
10501059
.add_foreign_utxo(utxo.outpoint, psbt_input, foreign_utxo_satisfaction)
10511060
.unwrap();
10521061
let mut psbt = builder.finish().unwrap();
1053-
let fee = psbt.fee_amount();
1062+
wallet1.insert_txout(utxo.outpoint, utxo.txout);
1063+
let fee = check_fee!(wallet1, psbt);
10541064
let sent_received = wallet1.sent_and_received(&psbt.clone().extract_tx());
10551065

10561066
assert_eq!(
@@ -1129,42 +1139,6 @@ fn test_calculate_fee_with_missing_foreign_utxo() {
11291139
wallet1.calculate_fee(&tx).unwrap();
11301140
}
11311141

1132-
#[test]
1133-
fn test_calculate_fee_with_inserted_foreign_utxo() {
1134-
let (mut wallet1, _) = get_funded_wallet(get_test_wpkh());
1135-
let (wallet2, _) =
1136-
get_funded_wallet("wpkh(cVbZ8ovhye9AoAHFsqobCf7LxbXDAECy9Kb8TZdfsDYMZGBUyCnm)");
1137-
1138-
let addr = Address::from_str("2N1Ffz3WaNzbeLFBb51xyFMHYSEUXcbiSoX")
1139-
.unwrap()
1140-
.assume_checked();
1141-
let utxo = wallet2.list_unspent().next().expect("must take!");
1142-
#[allow(deprecated)]
1143-
let foreign_utxo_satisfaction = wallet2
1144-
.get_descriptor_for_keychain(KeychainKind::External)
1145-
.max_satisfaction_weight()
1146-
.unwrap();
1147-
1148-
let psbt_input = psbt::Input {
1149-
witness_utxo: Some(utxo.txout.clone()),
1150-
..Default::default()
1151-
};
1152-
1153-
let mut builder = wallet1.build_tx();
1154-
builder
1155-
.add_recipient(addr.script_pubkey(), 60_000)
1156-
.only_witness_utxo()
1157-
.add_foreign_utxo(utxo.outpoint, psbt_input, foreign_utxo_satisfaction)
1158-
.unwrap();
1159-
let psbt = builder.finish().unwrap();
1160-
let psbt_fee = psbt.fee_amount().expect("psbt fee");
1161-
let tx = psbt.extract_tx();
1162-
1163-
wallet1.insert_txout(utxo.outpoint, utxo.txout);
1164-
let wallet1_fee = wallet1.calculate_fee(&tx).expect("wallet fee");
1165-
assert_eq!(psbt_fee, wallet1_fee);
1166-
}
1167-
11681142
#[test]
11691143
#[should_panic(expected = "Generic(\"Foreign utxo missing witness_utxo or non_witness_utxo\")")]
11701144
fn test_add_foreign_utxo_invalid_psbt_input() {
@@ -1463,7 +1437,7 @@ fn test_bump_fee_reduce_change() {
14631437
.enable_rbf();
14641438
let psbt = builder.finish().unwrap();
14651439
let original_sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
1466-
let original_fee = psbt.fee_amount();
1440+
let original_fee = check_fee!(wallet, psbt);
14671441

14681442
let tx = psbt.extract_tx();
14691443
let txid = tx.txid();
@@ -1475,7 +1449,7 @@ fn test_bump_fee_reduce_change() {
14751449
builder.fee_rate(FeeRate::from_sat_per_vb(2.5)).enable_rbf();
14761450
let psbt = builder.finish().unwrap();
14771451
let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
1478-
let fee = psbt.fee_amount();
1452+
let fee = check_fee!(wallet, psbt);
14791453

14801454
assert_eq!(sent_received.0, original_sent_received.0);
14811455
assert_eq!(
@@ -1510,7 +1484,7 @@ fn test_bump_fee_reduce_change() {
15101484
builder.enable_rbf();
15111485
let psbt = builder.finish().unwrap();
15121486
let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
1513-
let fee = psbt.fee_amount();
1487+
let fee = check_fee!(wallet, psbt);
15141488

15151489
assert_eq!(sent_received.0, original_sent_received.0);
15161490
assert_eq!(
@@ -1560,7 +1534,7 @@ fn test_bump_fee_reduce_single_recipient() {
15601534
let psbt = builder.finish().unwrap();
15611535
let tx = psbt.clone().extract_tx();
15621536
let original_sent_received = wallet.sent_and_received(&tx);
1563-
let original_fee = psbt.fee_amount();
1537+
let original_fee = check_fee!(wallet, psbt);
15641538
let txid = tx.txid();
15651539
wallet
15661540
.insert_tx(tx, ConfirmationTime::Unconfirmed { last_seen: 0 })
@@ -1573,7 +1547,7 @@ fn test_bump_fee_reduce_single_recipient() {
15731547
.unwrap();
15741548
let psbt = builder.finish().unwrap();
15751549
let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
1576-
let fee = psbt.fee_amount();
1550+
let fee = check_fee!(wallet, psbt);
15771551

15781552
assert_eq!(sent_received.0, original_sent_received.0);
15791553
assert!(fee.unwrap_or(0) > original_fee.unwrap_or(0));
@@ -1597,7 +1571,7 @@ fn test_bump_fee_absolute_reduce_single_recipient() {
15971571
.drain_wallet()
15981572
.enable_rbf();
15991573
let psbt = builder.finish().unwrap();
1600-
let original_fee = psbt.fee_amount();
1574+
let original_fee = check_fee!(wallet, psbt);
16011575
let tx = psbt.extract_tx();
16021576
let original_sent_received = wallet.sent_and_received(&tx);
16031577
let txid = tx.txid();
@@ -1613,7 +1587,7 @@ fn test_bump_fee_absolute_reduce_single_recipient() {
16131587
let psbt = builder.finish().unwrap();
16141588
let tx = &psbt.unsigned_tx;
16151589
let sent_received = wallet.sent_and_received(tx);
1616-
let fee = psbt.fee_amount();
1590+
let fee = check_fee!(wallet, psbt);
16171591

16181592
assert_eq!(sent_received.0, original_sent_received.0);
16191593
assert!(fee.unwrap_or(0) > original_fee.unwrap_or(0));
@@ -1784,7 +1758,7 @@ fn test_bump_fee_add_input() {
17841758
builder.fee_rate(FeeRate::from_sat_per_vb(50.0));
17851759
let psbt = builder.finish().unwrap();
17861760
let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
1787-
let fee = psbt.fee_amount();
1761+
let fee = check_fee!(wallet, psbt);
17881762
assert_eq!(sent_received.0, original_details.0 + 25_000);
17891763
assert_eq!(fee.unwrap_or(0) + sent_received.1, 30_000);
17901764

@@ -1834,7 +1808,7 @@ fn test_bump_fee_absolute_add_input() {
18341808
builder.fee_absolute(6_000);
18351809
let psbt = builder.finish().unwrap();
18361810
let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
1837-
let fee = psbt.fee_amount();
1811+
let fee = check_fee!(wallet, psbt);
18381812

18391813
assert_eq!(sent_received.0, original_sent_received.0 + 25_000);
18401814
assert_eq!(fee.unwrap_or(0) + sent_received.1, 30_000);
@@ -1880,7 +1854,7 @@ fn test_bump_fee_no_change_add_input_and_change() {
18801854
.enable_rbf();
18811855
let psbt = builder.finish().unwrap();
18821856
let original_sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
1883-
let original_fee = psbt.fee_amount();
1857+
let original_fee = check_fee!(wallet, psbt);
18841858

18851859
let tx = psbt.extract_tx();
18861860
let txid = tx.txid();
@@ -1894,7 +1868,7 @@ fn test_bump_fee_no_change_add_input_and_change() {
18941868
builder.fee_rate(FeeRate::from_sat_per_vb(50.0));
18951869
let psbt = builder.finish().unwrap();
18961870
let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
1897-
let fee = psbt.fee_amount();
1871+
let fee = check_fee!(wallet, psbt);
18981872

18991873
let original_send_all_amount = original_sent_received.0 - original_fee.unwrap_or(0);
19001874
assert_eq!(sent_received.0, original_sent_received.0 + 50_000);
@@ -1939,7 +1913,7 @@ fn test_bump_fee_add_input_change_dust() {
19391913
.enable_rbf();
19401914
let psbt = builder.finish().unwrap();
19411915
let original_sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
1942-
let original_fee = psbt.fee_amount();
1916+
let original_fee = check_fee!(wallet, psbt);
19431917

19441918
let mut tx = psbt.extract_tx();
19451919
for txin in &mut tx.input {
@@ -1971,7 +1945,7 @@ fn test_bump_fee_add_input_change_dust() {
19711945
builder.fee_rate(FeeRate::from_wu(fee_abs, new_tx_weight));
19721946
let psbt = builder.finish().unwrap();
19731947
let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
1974-
let fee = psbt.fee_amount();
1948+
let fee = check_fee!(wallet, psbt);
19751949

19761950
assert_eq!(original_sent_received.1, 5_000 - original_fee.unwrap_or(0));
19771951

@@ -2025,7 +1999,7 @@ fn test_bump_fee_force_add_input() {
20251999
.fee_rate(FeeRate::from_sat_per_vb(5.0));
20262000
let psbt = builder.finish().unwrap();
20272001
let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
2028-
let fee = psbt.fee_amount();
2002+
let fee = check_fee!(wallet, psbt);
20292003

20302004
assert_eq!(sent_received.0, original_sent_received.0 + 25_000);
20312005
assert_eq!(fee.unwrap_or(0) + sent_received.1, 30_000);
@@ -2083,7 +2057,7 @@ fn test_bump_fee_absolute_force_add_input() {
20832057
builder.add_utxo(incoming_op).unwrap().fee_absolute(250);
20842058
let psbt = builder.finish().unwrap();
20852059
let sent_received = wallet.sent_and_received(&psbt.clone().extract_tx());
2086-
let fee = psbt.fee_amount();
2060+
let fee = check_fee!(wallet, psbt);
20872061

20882062
assert_eq!(sent_received.0, original_sent_received.0 + 25_000);
20892063
assert_eq!(fee.unwrap_or(0) + sent_received.1, 30_000);
@@ -2212,7 +2186,7 @@ fn test_fee_amount_negative_drain_val() {
22122186
.enable_rbf()
22132187
.fee_rate(fee_rate);
22142188
let psbt = builder.finish().unwrap();
2215-
let fee = psbt.fee_amount();
2189+
let fee = check_fee!(wallet, psbt);
22162190

22172191
assert_eq!(psbt.inputs.len(), 1);
22182192
assert_fee_rate!(psbt, fee.unwrap_or(0), fee_rate, @add_signature);
@@ -2951,7 +2925,8 @@ fn test_taproot_foreign_utxo() {
29512925
.unwrap();
29522926
let psbt = builder.finish().unwrap();
29532927
let sent_received = wallet1.sent_and_received(&psbt.clone().extract_tx());
2954-
let fee = psbt.fee_amount();
2928+
wallet1.insert_txout(utxo.outpoint, utxo.txout);
2929+
let fee = check_fee!(wallet1, psbt);
29552930

29562931
assert_eq!(
29572932
sent_received.0 - sent_received.1,
@@ -3403,7 +3378,7 @@ fn test_fee_rate_sign_no_grinding_high_r() {
34033378
.fee_rate(fee_rate)
34043379
.add_data(&data);
34053380
let mut psbt = builder.finish().unwrap();
3406-
let fee = psbt.fee_amount();
3381+
let fee = check_fee!(wallet, psbt);
34073382
let (op_return_vout, _) = psbt
34083383
.unsigned_tx
34093384
.output
@@ -3467,7 +3442,7 @@ fn test_fee_rate_sign_grinding_low_r() {
34673442
.drain_wallet()
34683443
.fee_rate(fee_rate);
34693444
let mut psbt = builder.finish().unwrap();
3470-
let fee = psbt.fee_amount();
3445+
let fee = check_fee!(wallet, psbt);
34713446

34723447
wallet
34733448
.sign(

0 commit comments

Comments
 (0)