@@ -17,7 +17,7 @@ use ln::features::{ChannelFeatures, InitFeatures, NodeFeatures};
17
17
use ln:: msgs;
18
18
use ln:: msgs:: { ChannelMessageHandler , RoutingMessageHandler , HTLCFailChannelUpdate , ErrorAction } ;
19
19
use util:: enforcing_trait_impls:: EnforcingChannelKeys ;
20
- use util:: test_utils;
20
+ use util:: { byte_utils , test_utils} ;
21
21
use util:: events:: { Event , EventsProvider , MessageSendEvent , MessageSendEventsProvider } ;
22
22
use util:: errors:: APIError ;
23
23
use util:: ser:: { Writeable , Writer , ReadableArgs } ;
@@ -949,15 +949,7 @@ fn htlc_fail_async_shutdown() {
949
949
nodes[ 0 ] . node . handle_update_fail_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & updates_2. update_fail_htlcs [ 0 ] ) ;
950
950
commitment_signed_dance ! ( nodes[ 0 ] , nodes[ 1 ] , updates_2. commitment_signed, false , true ) ;
951
951
952
- let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
953
- assert_eq ! ( events. len( ) , 1 ) ;
954
- match events[ 0 ] {
955
- Event :: PaymentFailed { ref payment_hash, ref rejected_by_dest, .. } => {
956
- assert_eq ! ( our_payment_hash, * payment_hash) ;
957
- assert ! ( !rejected_by_dest) ;
958
- } ,
959
- _ => panic ! ( "Unexpected event" ) ,
960
- }
952
+ expect_payment_failed ! ( nodes[ 0 ] , our_payment_hash, false ) ;
961
953
962
954
let msg_events = nodes[ 0 ] . node . get_and_clear_pending_msg_events ( ) ;
963
955
assert_eq ! ( msg_events. len( ) , 2 ) ;
@@ -1352,15 +1344,7 @@ fn holding_cell_htlc_counting() {
1352
1344
_ => panic ! ( "Unexpected event" ) ,
1353
1345
}
1354
1346
1355
- let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
1356
- assert_eq ! ( events. len( ) , 1 ) ;
1357
- match events[ 0 ] {
1358
- Event :: PaymentFailed { payment_hash, rejected_by_dest, .. } => {
1359
- assert_eq ! ( payment_hash, payment_hash_2) ;
1360
- assert ! ( !rejected_by_dest) ;
1361
- } ,
1362
- _ => panic ! ( "Unexpected event" ) ,
1363
- }
1347
+ expect_payment_failed ! ( nodes[ 0 ] , payment_hash_2, false ) ;
1364
1348
1365
1349
// Now forward all the pending HTLCs and claim them back
1366
1350
nodes[ 2 ] . node . handle_update_add_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & initial_payment_event. msgs [ 0 ] ) ;
@@ -2250,15 +2234,7 @@ fn claim_htlc_outputs_shared_tx() {
2250
2234
nodes[ 1 ] . block_notifier . block_connected ( & Block { header, txdata : vec ! [ revoked_local_txn[ 0 ] . clone( ) ] } , 1 ) ;
2251
2235
check_added_monitors ! ( nodes[ 1 ] , 1 ) ;
2252
2236
connect_blocks ( & nodes[ 1 ] . block_notifier , ANTI_REORG_DELAY - 1 , 1 , true , header. bitcoin_hash ( ) ) ;
2253
-
2254
- let events = nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
2255
- assert_eq ! ( events. len( ) , 1 ) ;
2256
- match events[ 0 ] {
2257
- Event :: PaymentFailed { payment_hash, .. } => {
2258
- assert_eq ! ( payment_hash, payment_hash_2) ;
2259
- } ,
2260
- _ => panic ! ( "Unexpected event" ) ,
2261
- }
2237
+ expect_payment_failed ! ( nodes[ 1 ] , payment_hash_2, true ) ;
2262
2238
2263
2239
let node_txn = nodes[ 1 ] . tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) ;
2264
2240
assert_eq ! ( node_txn. len( ) , 3 ) ; // ChannelMonitor: penalty tx, ChannelManager: local commitment + HTLC-timeout
@@ -2323,15 +2299,7 @@ fn claim_htlc_outputs_single_tx() {
2323
2299
expect_pending_htlcs_forwardable_ignore ! ( nodes[ 0 ] ) ;
2324
2300
2325
2301
connect_blocks ( & nodes[ 1 ] . block_notifier , ANTI_REORG_DELAY - 1 , 200 , true , header. bitcoin_hash ( ) ) ;
2326
-
2327
- let events = nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
2328
- assert_eq ! ( events. len( ) , 1 ) ;
2329
- match events[ 0 ] {
2330
- Event :: PaymentFailed { payment_hash, .. } => {
2331
- assert_eq ! ( payment_hash, payment_hash_2) ;
2332
- } ,
2333
- _ => panic ! ( "Unexpected event" ) ,
2334
- }
2302
+ expect_payment_failed ! ( nodes[ 1 ] , payment_hash_2, true ) ;
2335
2303
2336
2304
let node_txn = nodes[ 1 ] . tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) ;
2337
2305
assert_eq ! ( node_txn. len( ) , 9 ) ;
@@ -2685,7 +2653,7 @@ fn test_simple_commitment_revoked_fail_backward() {
2685
2653
// Revoke the old state
2686
2654
claim_payment ( & nodes[ 0 ] , & [ & nodes[ 1 ] , & nodes[ 2 ] ] , payment_preimage, 3_000_000 ) ;
2687
2655
2688
- route_payment ( & nodes[ 0 ] , & [ & nodes[ 1 ] , & nodes[ 2 ] ] , 3000000 ) ;
2656
+ let ( _ , payment_hash ) = route_payment ( & nodes[ 0 ] , & [ & nodes[ 1 ] , & nodes[ 2 ] ] , 3000000 ) ;
2689
2657
2690
2658
let header = BlockHeader { version : 0x20000000 , prev_blockhash : Default :: default ( ) , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
2691
2659
nodes[ 1 ] . block_notifier . block_connected ( & Block { header, txdata : vec ! [ revoked_local_txn[ 0 ] . clone( ) ] } , 1 ) ;
@@ -2714,12 +2682,7 @@ fn test_simple_commitment_revoked_fail_backward() {
2714
2682
MessageSendEvent :: PaymentFailureNetworkUpdate { .. } => { } ,
2715
2683
_ => panic ! ( "Unexpected event" ) ,
2716
2684
}
2717
- let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
2718
- assert_eq ! ( events. len( ) , 1 ) ;
2719
- match events[ 0 ] {
2720
- Event :: PaymentFailed { .. } => { } ,
2721
- _ => panic ! ( "Unexpected event" ) ,
2722
- }
2685
+ expect_payment_failed ! ( nodes[ 0 ] , payment_hash, false ) ;
2723
2686
} ,
2724
2687
_ => panic ! ( "Unexpected event" ) ,
2725
2688
}
@@ -3687,26 +3650,10 @@ fn test_htlc_timeout() {
3687
3650
3688
3651
nodes[ 0 ] . node . handle_update_fail_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & htlc_timeout_updates. update_fail_htlcs [ 0 ] ) ;
3689
3652
commitment_signed_dance ! ( nodes[ 0 ] , nodes[ 1 ] , htlc_timeout_updates. commitment_signed, false ) ;
3690
- let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
3691
- match & events[ 0 ] {
3692
- & Event :: PaymentFailed { payment_hash, rejected_by_dest, error_code, ref error_data } => {
3693
- assert_eq ! ( payment_hash, our_payment_hash) ;
3694
- assert ! ( rejected_by_dest) ;
3695
- assert_eq ! ( error_code. unwrap( ) , 0x4000 | 15 ) ;
3696
- // 100_000 msat as u64, followed by a height of 123 as u32
3697
- assert_eq ! ( & error_data. as_ref( ) . unwrap( ) [ ..] , & [
3698
- ( ( 100_000u64 >> 7 * 8 ) & 0xff ) as u8 ,
3699
- ( ( 100_000u64 >> 6 * 8 ) & 0xff ) as u8 ,
3700
- ( ( 100_000u64 >> 5 * 8 ) & 0xff ) as u8 ,
3701
- ( ( 100_000u64 >> 4 * 8 ) & 0xff ) as u8 ,
3702
- ( ( 100_000u64 >> 3 * 8 ) & 0xff ) as u8 ,
3703
- ( ( 100_000u64 >> 2 * 8 ) & 0xff ) as u8 ,
3704
- ( ( 100_000u64 >> 1 * 8 ) & 0xff ) as u8 ,
3705
- ( ( 100_000u64 >> 0 * 8 ) & 0xff ) as u8 ,
3706
- 0 , 0 , 0 , 123 ] ) ;
3707
- } ,
3708
- _ => panic ! ( "Unexpected event" ) ,
3709
- }
3653
+ // 100_000 msat as u64, followed by a height of 123 as u32
3654
+ let mut expected_failure_data = byte_utils:: be64_to_array ( 100_000 ) . to_vec ( ) ;
3655
+ expected_failure_data. extend_from_slice ( & byte_utils:: be32_to_array ( 123 ) ) ;
3656
+ expect_payment_failed ! ( nodes[ 0 ] , our_payment_hash, true , 0x4000 | 15 , & expected_failure_data[ ..] ) ;
3710
3657
}
3711
3658
3712
3659
#[ test]
@@ -4332,14 +4279,7 @@ fn test_static_spendable_outputs_timeout_tx() {
4332
4279
let header_1 = BlockHeader { version : 0x20000000 , prev_blockhash : header. bitcoin_hash ( ) , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
4333
4280
nodes[ 1 ] . block_notifier . block_connected ( & Block { header : header_1, txdata : vec ! [ node_txn[ 0 ] . clone( ) ] } , 1 ) ;
4334
4281
connect_blocks ( & nodes[ 1 ] . block_notifier , ANTI_REORG_DELAY - 1 , 1 , true , header. bitcoin_hash ( ) ) ;
4335
- let events = nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
4336
- assert_eq ! ( events. len( ) , 1 ) ;
4337
- match events[ 0 ] {
4338
- Event :: PaymentFailed { payment_hash, .. } => {
4339
- assert_eq ! ( payment_hash, our_payment_hash) ;
4340
- } ,
4341
- _ => panic ! ( "Unexpected event" ) ,
4342
- }
4282
+ expect_payment_failed ! ( nodes[ 1 ] , our_payment_hash, true ) ;
4343
4283
4344
4284
let spend_txn = check_spendable_outputs ! ( nodes[ 1 ] , 1 ) ;
4345
4285
assert_eq ! ( spend_txn. len( ) , 3 ) ; // SpendableOutput: remote_commitment_tx.to_remote (*2), timeout_tx.output (*1)
@@ -4685,13 +4625,7 @@ fn test_duplicate_payment_hash_one_failure_one_success() {
4685
4625
_ => { panic ! ( "Unexpected event" ) ; }
4686
4626
}
4687
4627
}
4688
- let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
4689
- match events[ 0 ] {
4690
- Event :: PaymentFailed { ref payment_hash, .. } => {
4691
- assert_eq ! ( * payment_hash, duplicate_payment_hash) ;
4692
- }
4693
- _ => panic ! ( "Unexpected event" ) ,
4694
- }
4628
+ expect_payment_failed ! ( nodes[ 0 ] , duplicate_payment_hash, false ) ;
4695
4629
4696
4630
// Solve 2nd HTLC by broadcasting on B's chain HTLC-Success Tx from C
4697
4631
nodes[ 1 ] . block_notifier . block_connected ( & Block { header, txdata : vec ! [ htlc_success_txn[ 0 ] . clone( ) ] } , 200 ) ;
@@ -5049,14 +4983,7 @@ fn test_dynamic_spendable_outputs_local_htlc_timeout_tx() {
5049
4983
let header_201 = BlockHeader { version : 0x20000000 , prev_blockhash : header. bitcoin_hash ( ) , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
5050
4984
nodes[ 0 ] . block_notifier . block_connected ( & Block { header : header_201, txdata : vec ! [ htlc_timeout. clone( ) ] } , 201 ) ;
5051
4985
connect_blocks ( & nodes[ 0 ] . block_notifier , ANTI_REORG_DELAY - 1 , 201 , true , header_201. bitcoin_hash ( ) ) ;
5052
- let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
5053
- assert_eq ! ( events. len( ) , 1 ) ;
5054
- match events[ 0 ] {
5055
- Event :: PaymentFailed { payment_hash, .. } => {
5056
- assert_eq ! ( payment_hash, our_payment_hash) ;
5057
- } ,
5058
- _ => panic ! ( "Unexpected event" ) ,
5059
- }
4986
+ expect_payment_failed ! ( nodes[ 0 ] , our_payment_hash, true ) ;
5060
4987
5061
4988
// Verify that A is able to spend its own HTLC-Timeout tx thanks to spendable output event given back by its ChannelMonitor
5062
4989
let spend_txn = check_spendable_outputs ! ( nodes[ 0 ] , 1 ) ;
@@ -5207,15 +5134,7 @@ fn do_htlc_claim_previous_remote_commitment_only(use_dust: bool, check_revoke_no
5207
5134
check_closed_broadcast ! ( nodes[ 0 ] , false ) ;
5208
5135
check_added_monitors ! ( nodes[ 0 ] , 1 ) ;
5209
5136
} else {
5210
- let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
5211
- assert_eq ! ( events. len( ) , 1 ) ;
5212
- match events[ 0 ] {
5213
- Event :: PaymentFailed { payment_hash, rejected_by_dest, .. } => {
5214
- assert_eq ! ( payment_hash, our_payment_hash) ;
5215
- assert ! ( rejected_by_dest) ;
5216
- } ,
5217
- _ => panic ! ( "Unexpected event" ) ,
5218
- }
5137
+ expect_payment_failed ! ( nodes[ 0 ] , our_payment_hash, true ) ;
5219
5138
}
5220
5139
}
5221
5140
@@ -6578,29 +6497,15 @@ fn do_test_sweep_outbound_htlc_failure_update(revoked: bool, local: bool) {
6578
6497
assert_eq ! ( nodes[ 0 ] . node. get_and_clear_pending_events( ) . len( ) , 0 ) ;
6579
6498
timeout_tx. push ( nodes[ 0 ] . tx_broadcaster . txn_broadcasted . lock ( ) . unwrap ( ) [ 0 ] . clone ( ) ) ;
6580
6499
let parent_hash = connect_blocks ( & nodes[ 0 ] . block_notifier , ANTI_REORG_DELAY - 1 , 2 , true , header. bitcoin_hash ( ) ) ;
6581
- let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
6582
- assert_eq ! ( events. len( ) , 1 ) ;
6583
- match events[ 0 ] {
6584
- Event :: PaymentFailed { payment_hash, .. } => {
6585
- assert_eq ! ( payment_hash, dust_hash) ;
6586
- } ,
6587
- _ => panic ! ( "Unexpected event" ) ,
6588
- }
6500
+ expect_payment_failed ! ( nodes[ 0 ] , dust_hash, true ) ;
6589
6501
assert_eq ! ( timeout_tx[ 0 ] . input[ 0 ] . witness. last( ) . unwrap( ) . len( ) , OFFERED_HTLC_SCRIPT_WEIGHT ) ;
6590
6502
// We fail non-dust-HTLC 2 by broadcast of local HTLC-timeout tx on local commitment tx
6591
6503
let header_2 = BlockHeader { version : 0x20000000 , prev_blockhash : parent_hash, merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
6592
6504
assert_eq ! ( nodes[ 0 ] . node. get_and_clear_pending_events( ) . len( ) , 0 ) ;
6593
6505
nodes[ 0 ] . block_notifier . block_connected ( & Block { header : header_2, txdata : vec ! [ timeout_tx[ 0 ] . clone( ) ] } , 7 ) ;
6594
6506
let header_3 = BlockHeader { version : 0x20000000 , prev_blockhash : header_2. bitcoin_hash ( ) , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
6595
6507
connect_blocks ( & nodes[ 0 ] . block_notifier , ANTI_REORG_DELAY - 1 , 8 , true , header_3. bitcoin_hash ( ) ) ;
6596
- let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
6597
- assert_eq ! ( events. len( ) , 1 ) ;
6598
- match events[ 0 ] {
6599
- Event :: PaymentFailed { payment_hash, .. } => {
6600
- assert_eq ! ( payment_hash, non_dust_hash) ;
6601
- } ,
6602
- _ => panic ! ( "Unexpected event" ) ,
6603
- }
6508
+ expect_payment_failed ! ( nodes[ 0 ] , non_dust_hash, true ) ;
6604
6509
} else {
6605
6510
// We fail dust-HTLC 1 by broadcast of remote commitment tx. If revoked, fail also non-dust HTLC
6606
6511
nodes[ 0 ] . block_notifier . block_connected ( & Block { header, txdata : vec ! [ bs_commitment_tx[ 0 ] . clone( ) ] } , 1 ) ;
@@ -6611,28 +6516,14 @@ fn do_test_sweep_outbound_htlc_failure_update(revoked: bool, local: bool) {
6611
6516
let parent_hash = connect_blocks ( & nodes[ 0 ] . block_notifier , ANTI_REORG_DELAY - 1 , 2 , true , header. bitcoin_hash ( ) ) ;
6612
6517
let header_2 = BlockHeader { version : 0x20000000 , prev_blockhash : parent_hash, merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
6613
6518
if !revoked {
6614
- let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
6615
- assert_eq ! ( events. len( ) , 1 ) ;
6616
- match events[ 0 ] {
6617
- Event :: PaymentFailed { payment_hash, .. } => {
6618
- assert_eq ! ( payment_hash, dust_hash) ;
6619
- } ,
6620
- _ => panic ! ( "Unexpected event" ) ,
6621
- }
6519
+ expect_payment_failed ! ( nodes[ 0 ] , dust_hash, true ) ;
6622
6520
assert_eq ! ( timeout_tx[ 0 ] . input[ 0 ] . witness. last( ) . unwrap( ) . len( ) , ACCEPTED_HTLC_SCRIPT_WEIGHT ) ;
6623
6521
// We fail non-dust-HTLC 2 by broadcast of local timeout tx on remote commitment tx
6624
6522
nodes[ 0 ] . block_notifier . block_connected ( & Block { header : header_2, txdata : vec ! [ timeout_tx[ 0 ] . clone( ) ] } , 7 ) ;
6625
6523
assert_eq ! ( nodes[ 0 ] . node. get_and_clear_pending_events( ) . len( ) , 0 ) ;
6626
6524
let header_3 = BlockHeader { version : 0x20000000 , prev_blockhash : header_2. bitcoin_hash ( ) , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ;
6627
6525
connect_blocks ( & nodes[ 0 ] . block_notifier , ANTI_REORG_DELAY - 1 , 8 , true , header_3. bitcoin_hash ( ) ) ;
6628
- let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
6629
- assert_eq ! ( events. len( ) , 1 ) ;
6630
- match events[ 0 ] {
6631
- Event :: PaymentFailed { payment_hash, .. } => {
6632
- assert_eq ! ( payment_hash, non_dust_hash) ;
6633
- } ,
6634
- _ => panic ! ( "Unexpected event" ) ,
6635
- }
6526
+ expect_payment_failed ! ( nodes[ 0 ] , non_dust_hash, true ) ;
6636
6527
} else {
6637
6528
// If revoked, both dust & non-dust HTLCs should have been failed after ANTI_REORG_DELAY confs of revoked
6638
6529
// commitment tx
@@ -6938,7 +6829,7 @@ fn test_check_htlc_underpaying() {
6938
6829
// Create some initial channels
6939
6830
create_announced_chan_between_nodes ( & nodes, 0 , 1 , InitFeatures :: supported ( ) , InitFeatures :: supported ( ) ) ;
6940
6831
6941
- let ( payment_preimage, _ ) = route_payment ( & nodes[ 0 ] , & [ & nodes[ 1 ] ] , 10_000 ) ;
6832
+ let ( payment_preimage, payment_hash ) = route_payment ( & nodes[ 0 ] , & [ & nodes[ 1 ] ] , 10_000 ) ;
6942
6833
6943
6834
// Node 3 is expecting payment of 100_000 but receive 10_000,
6944
6835
// fail htlc like we didn't know the preimage.
@@ -6963,25 +6854,10 @@ fn test_check_htlc_underpaying() {
6963
6854
nodes[ 0 ] . node . handle_update_fail_htlc ( & nodes[ 1 ] . node . get_our_node_id ( ) , & update_fail_htlc) ;
6964
6855
commitment_signed_dance ! ( nodes[ 0 ] , nodes[ 1 ] , commitment_signed, false , true ) ;
6965
6856
6966
- let events = nodes[ 0 ] . node . get_and_clear_pending_events ( ) ;
6967
- assert_eq ! ( events. len( ) , 1 ) ;
6968
- if let & Event :: PaymentFailed { payment_hash : _, ref rejected_by_dest, ref error_code, ref error_data } = & events[ 0 ] {
6969
- assert_eq ! ( * rejected_by_dest, true ) ;
6970
- assert_eq ! ( error_code. unwrap( ) , 0x4000 |15 ) ;
6971
- // 10_000 msat as u64, followed by a height of 99 as u32
6972
- assert_eq ! ( & error_data. as_ref( ) . unwrap( ) [ ..] , & [
6973
- ( ( 10_000u64 >> 7 * 8 ) & 0xff ) as u8 ,
6974
- ( ( 10_000u64 >> 6 * 8 ) & 0xff ) as u8 ,
6975
- ( ( 10_000u64 >> 5 * 8 ) & 0xff ) as u8 ,
6976
- ( ( 10_000u64 >> 4 * 8 ) & 0xff ) as u8 ,
6977
- ( ( 10_000u64 >> 3 * 8 ) & 0xff ) as u8 ,
6978
- ( ( 10_000u64 >> 2 * 8 ) & 0xff ) as u8 ,
6979
- ( ( 10_000u64 >> 1 * 8 ) & 0xff ) as u8 ,
6980
- ( ( 10_000u64 >> 0 * 8 ) & 0xff ) as u8 ,
6981
- 0 , 0 , 0 , 99 ] ) ;
6982
- } else {
6983
- panic ! ( "Unexpected event" ) ;
6984
- }
6857
+ // 10_000 msat as u64, followed by a height of 99 as u32
6858
+ let mut expected_failure_data = byte_utils:: be64_to_array ( 10_000 ) . to_vec ( ) ;
6859
+ expected_failure_data. extend_from_slice ( & byte_utils:: be32_to_array ( 99 ) ) ;
6860
+ expect_payment_failed ! ( nodes[ 0 ] , payment_hash, true , 0x4000 |15 , & expected_failure_data[ ..] ) ;
6985
6861
nodes[ 1 ] . node . get_and_clear_pending_events ( ) ;
6986
6862
}
6987
6863
0 commit comments