Skip to content

Commit 230ebcb

Browse files
committed
test(wallet): add coin selection tests for TRUC spending rules
Add two tests covering BIP-431 (TRUC) coin selection behavior. `test_create_tx_non_v3_excludes_unconfirmed_v3_utxos` verifies that a non-v3 transaction cannot coin-select an unconfirmed v3 parent output, while a v3 transaction targeting the same output succeeds. `test_create_tx_non_v3_allows_unconfirmed_non_v3_utxos` verifies that unconfirmed outputs from non-v3 parents remain eligible for standard transactions, preserving existing behavior.
1 parent 5eb6b24 commit 230ebcb

2 files changed

Lines changed: 255 additions & 22 deletions

File tree

tests/build_fee_bump.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -329,7 +329,7 @@ fn test_bump_fee_drain_wallet() {
329329
let mut builder = wallet.build_fee_bump(txid).unwrap();
330330
builder
331331
.drain_wallet()
332-
.fee_rate(FeeRate::from_sat_per_vb_u32(5));
332+
.fee_rate(FeeRate::from_sat_per_vb(5).unwrap());
333333
let psbt = builder.finish().unwrap();
334334
let (sent, _received) =
335335
wallet.sent_and_received(&psbt.extract_tx().expect("failed to extract tx"));
@@ -391,7 +391,7 @@ fn test_bump_fee_remove_output_manually_selected_only() {
391391
let mut builder = wallet.build_fee_bump(txid).unwrap();
392392
builder
393393
.manually_selected_only()
394-
.fee_rate(FeeRate::from_sat_per_vb_u32(255));
394+
.fee_rate(FeeRate::from_sat_per_vb(255).unwrap());
395395
builder.finish().unwrap();
396396
}
397397

@@ -430,7 +430,7 @@ fn test_bump_fee_add_input() {
430430
insert_tx(&mut wallet, tx);
431431

432432
let mut builder = wallet.build_fee_bump(txid).unwrap();
433-
builder.fee_rate(FeeRate::from_sat_per_vb_u32(50));
433+
builder.fee_rate(FeeRate::from_sat_per_vb(50).unwrap());
434434
let psbt = builder.finish().unwrap();
435435
let (sent, received) =
436436
wallet.sent_and_received(&psbt.clone().extract_tx().expect("failed to extract tx"));
@@ -458,7 +458,7 @@ fn test_bump_fee_add_input() {
458458
received
459459
);
460460

461-
assert_fee_rate!(psbt, fee, FeeRate::from_sat_per_vb_u32(50), @add_signature);
461+
assert_fee_rate!(psbt, fee, FeeRate::from_sat_per_vb(50).unwrap(), @add_signature);
462462
}
463463

464464
#[test]
@@ -536,7 +536,7 @@ fn test_bump_fee_no_change_add_input_and_change() {
536536
// Now bump the fees, the wallet should add an extra input and a change output, and leave
537537
// the original output untouched.
538538
let mut builder = wallet.build_fee_bump(txid).unwrap();
539-
builder.fee_rate(FeeRate::from_sat_per_vb_u32(50));
539+
builder.fee_rate(FeeRate::from_sat_per_vb(50).unwrap());
540540
let psbt = builder.finish().unwrap();
541541
let (sent, received) =
542542
wallet.sent_and_received(&psbt.clone().extract_tx().expect("failed to extract tx"));
@@ -569,7 +569,7 @@ fn test_bump_fee_no_change_add_input_and_change() {
569569
Amount::from_sat(75_000) - original_send_all_amount - fee
570570
);
571571

572-
assert_fee_rate!(psbt, fee, FeeRate::from_sat_per_vb_u32(50), @add_signature);
572+
assert_fee_rate!(psbt, fee, FeeRate::from_sat_per_vb(50).unwrap(), @add_signature);
573573
}
574574

575575
#[test]
@@ -597,7 +597,7 @@ fn test_bump_fee_force_add_input() {
597597
builder
598598
.add_utxo(incoming_op)
599599
.unwrap()
600-
.fee_rate(FeeRate::from_sat_per_vb_u32(5));
600+
.fee_rate(FeeRate::from_sat_per_vb(5).unwrap());
601601
let psbt = builder.finish().unwrap();
602602
let (sent, received) =
603603
wallet.sent_and_received(&psbt.clone().extract_tx().expect("failed to extract tx"));
@@ -626,7 +626,7 @@ fn test_bump_fee_force_add_input() {
626626
received
627627
);
628628

629-
assert_fee_rate!(psbt, fee, FeeRate::from_sat_per_vb_u32(5), @add_signature);
629+
assert_fee_rate!(psbt, fee, FeeRate::from_sat_per_vb(5).unwrap(), @add_signature);
630630
}
631631

632632
#[test]
@@ -715,7 +715,7 @@ fn test_bump_fee_unconfirmed_inputs_only() {
715715
}
716716
insert_tx(&mut wallet, tx);
717717
let mut builder = wallet.build_fee_bump(txid).unwrap();
718-
builder.fee_rate(FeeRate::from_sat_per_vb_u32(25));
718+
builder.fee_rate(FeeRate::from_sat_per_vb(25).unwrap());
719719
builder.finish().unwrap();
720720
}
721721

@@ -746,7 +746,7 @@ fn test_bump_fee_unconfirmed_input() {
746746

747747
let mut builder = wallet.build_fee_bump(txid).unwrap();
748748
builder
749-
.fee_rate(FeeRate::from_sat_per_vb_u32(15))
749+
.fee_rate(FeeRate::from_sat_per_vb(15).unwrap())
750750
// remove original tx drain_to address and amount
751751
.set_recipients(Vec::new())
752752
// set back original drain_to address
@@ -823,7 +823,7 @@ fn test_legacy_bump_fee_drain_wallet() {
823823
let mut builder = wallet.build_fee_bump(txid).unwrap();
824824
builder
825825
.drain_wallet()
826-
.fee_rate(FeeRate::from_sat_per_vb_u32(5));
826+
.fee_rate(FeeRate::from_sat_per_vb(5).unwrap());
827827
let psbt = builder.finish().unwrap();
828828
let (sent, _received) =
829829
wallet.sent_and_received(&psbt.extract_tx().expect("failed to extract tx"));
@@ -866,7 +866,7 @@ fn test_legacy_bump_fee_add_input() {
866866
insert_tx(&mut wallet, tx);
867867

868868
let mut builder = wallet.build_fee_bump(txid).unwrap();
869-
builder.fee_rate(FeeRate::from_sat_per_vb_u32(50));
869+
builder.fee_rate(FeeRate::from_sat_per_vb(50).unwrap());
870870
let psbt = builder.finish().unwrap();
871871
let (sent, received) =
872872
wallet.sent_and_received(&psbt.clone().extract_tx().expect("failed to extract tx"));
@@ -894,7 +894,7 @@ fn test_legacy_bump_fee_add_input() {
894894
received
895895
);
896896

897-
assert_fee_rate_legacy!(psbt, fee, FeeRate::from_sat_per_vb_u32(50), @add_signature);
897+
assert_fee_rate_legacy!(psbt, fee, FeeRate::from_sat_per_vb(50).unwrap(), @add_signature);
898898
}
899899

900900
#[test]
@@ -971,7 +971,7 @@ fn test_bump_fee_pay_to_anchor_foreign_utxo() {
971971
.add_foreign_utxo(outpoint, psbt_input, satisfaction_weight)
972972
.unwrap()
973973
.only_witness_utxo()
974-
.fee_rate(FeeRate::from_sat_per_vb_u32(2))
974+
.fee_rate(FeeRate::from_sat_per_vb(2).unwrap())
975975
.drain_to(drain_spk.clone());
976976
let psbt = tx_builder.finish().unwrap();
977977
let tx = psbt.unsigned_tx.clone();
@@ -987,7 +987,7 @@ fn test_bump_fee_pay_to_anchor_foreign_utxo() {
987987
.set_recipients(vec![])
988988
.drain_to(drain_spk)
989989
.only_witness_utxo()
990-
.fee_rate(FeeRate::from_sat_per_vb_u32(5));
990+
.fee_rate(FeeRate::from_sat_per_vb(5).unwrap());
991991
let psbt = tx_builder.finish().unwrap();
992992
let tx = &psbt.unsigned_tx;
993993
assert!(tx.input.iter().any(|txin| txin.previous_output == outpoint));

0 commit comments

Comments
 (0)