@@ -44,29 +44,47 @@ use std::sync::Mutex;
44
44
use std:: mem;
45
45
use std:: collections:: HashMap ;
46
46
47
- pub const CHAN_CONFIRM_DEPTH : u32 = 100 ;
47
+ pub const CHAN_CONFIRM_DEPTH : u32 = 10 ;
48
48
49
+ /// Mine the given transaction in the next block and then mine CHAN_CONFIRM_DEPTH - 1 blocks on
50
+ /// top, giving the given transaction CHAN_CONFIRM_DEPTH confirmations.
49
51
pub fn confirm_transaction < ' a , ' b , ' c , ' d > ( node : & ' a Node < ' b , ' c , ' d > , tx : & Transaction ) {
50
- let dummy_tx = Transaction { version : 0 , lock_time : 0 , input : Vec :: new ( ) , output : Vec :: new ( ) } ;
51
- let dummy_tx_count = tx. version as usize ;
52
+ confirm_transaction_at ( node, tx, node. best_block_info ( ) . 1 + 1 ) ;
53
+ connect_blocks ( node, CHAN_CONFIRM_DEPTH - 1 , node. best_block_info ( ) . 1 , false , Default :: default ( ) ) ;
54
+ }
55
+ /// Mine a signle block containing the given transaction
56
+ pub fn mine_transaction < ' a , ' b , ' c , ' d > ( node : & ' a Node < ' b , ' c , ' d > , tx : & Transaction ) {
57
+ let height = node. best_block_info ( ) . 1 + 1 ;
58
+ confirm_transaction_at ( node, tx, height) ;
59
+ }
60
+ /// Mine the given transaction at the given height, mining blocks as required to build to that
61
+ /// height
62
+ pub fn confirm_transaction_at < ' a , ' b , ' c , ' d > ( node : & ' a Node < ' b , ' c , ' d > , tx : & Transaction , conf_height : u32 ) {
63
+ let starting_block = node. best_block_info ( ) ;
52
64
let mut block = Block {
53
- header : BlockHeader { version : 0x20000000 , prev_blockhash : node . best_block_hash ( ) , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ,
54
- txdata : vec ! [ dummy_tx ; dummy_tx_count ] ,
65
+ header : BlockHeader { version : 0x20000000 , prev_blockhash : starting_block . 0 , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ,
66
+ txdata : Vec :: new ( ) ,
55
67
} ;
56
- block. txdata . push ( tx. clone ( ) ) ;
57
- connect_block ( node, & block, 1 ) ;
58
- for i in 2 ..CHAN_CONFIRM_DEPTH {
68
+ let height = starting_block. 1 + 1 ;
69
+ assert ! ( height <= conf_height) ;
70
+ for i in height..conf_height {
71
+ connect_block ( node, & block, i) ;
59
72
block = Block {
60
73
header : BlockHeader { version : 0x20000000 , prev_blockhash : block. header . block_hash ( ) , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ,
61
74
txdata : vec ! [ ] ,
62
75
} ;
63
- connect_block ( node, & block, i) ;
64
76
}
77
+
78
+ for _ in 0 ..* node. network_chan_count . borrow ( ) { // Make sure we don't end up with channels at the same short id by offsetting by chan_count
79
+ block. txdata . push ( Transaction { version : 0 , lock_time : 0 , input : Vec :: new ( ) , output : Vec :: new ( ) } ) ;
80
+ }
81
+ block. txdata . push ( tx. clone ( ) ) ;
82
+ connect_block ( node, & block, conf_height) ;
65
83
}
66
84
67
85
pub fn connect_blocks < ' a , ' b , ' c , ' d > ( node : & ' a Node < ' b , ' c , ' d > , depth : u32 , height : u32 , parent : bool , prev_blockhash : BlockHash ) -> BlockHash {
68
86
let mut block = Block {
69
- header : BlockHeader { version : 0x2000000 , prev_blockhash : if parent { prev_blockhash } else { Default :: default ( ) } , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ,
87
+ header : BlockHeader { version : 0x2000000 , prev_blockhash : if parent { prev_blockhash } else { node . best_block_hash ( ) } , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ,
70
88
txdata : vec ! [ ] ,
71
89
} ;
72
90
connect_block ( node, & block, height + 1 ) ;
@@ -94,6 +112,21 @@ pub fn disconnect_block<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>, header: &Blo
94
112
node. node . test_process_background_events ( ) ;
95
113
node. blocks . borrow_mut ( ) . pop ( ) ;
96
114
}
115
+ pub fn disconnect_blocks < ' a , ' b , ' c , ' d > ( node : & ' a Node < ' b , ' c , ' d > , count : u32 ) {
116
+ assert ! ( node. blocks. borrow_mut( ) . len( ) as u32 > count) ; // Cannot disconnect genesis
117
+ for _ in 0 ..count {
118
+ let ( block_header, height) = {
119
+ let blocks = node. blocks . borrow_mut ( ) ;
120
+ ( blocks[ blocks. len ( ) - 1 ] . 0 , blocks[ blocks. len ( ) - 1 ] . 1 )
121
+ } ;
122
+ disconnect_block ( & node, & block_header, height) ;
123
+ }
124
+ }
125
+
126
+ pub fn disconnect_all_blocks < ' a , ' b , ' c , ' d > ( node : & ' a Node < ' b , ' c , ' d > ) {
127
+ let count = node. blocks . borrow_mut ( ) . len ( ) as u32 - 1 ;
128
+ disconnect_blocks ( node, count) ;
129
+ }
97
130
98
131
pub struct TestChanMonCfg {
99
132
pub tx_broadcaster : test_utils:: TestBroadcaster ,
@@ -427,8 +460,9 @@ pub fn create_chan_between_nodes_with_value_init<'a, 'b, 'c>(node_a: &Node<'a, '
427
460
tx
428
461
}
429
462
430
- pub fn create_chan_between_nodes_with_value_confirm_first < ' a , ' b , ' c , ' d > ( node_recv : & ' a Node < ' b , ' c , ' c > , node_conf : & ' a Node < ' b , ' c , ' d > , tx : & Transaction ) {
431
- confirm_transaction ( node_conf, tx) ;
463
+ pub fn create_chan_between_nodes_with_value_confirm_first < ' a , ' b , ' c , ' d > ( node_recv : & ' a Node < ' b , ' c , ' c > , node_conf : & ' a Node < ' b , ' c , ' d > , tx : & Transaction , conf_height : u32 ) {
464
+ confirm_transaction_at ( node_conf, tx, conf_height) ;
465
+ connect_blocks ( node_conf, CHAN_CONFIRM_DEPTH - 1 , node_conf. best_block_info ( ) . 1 , false , Default :: default ( ) ) ;
432
466
node_recv. node . handle_funding_locked ( & node_conf. node . get_our_node_id ( ) , & get_event_msg ! ( node_conf, MessageSendEvent :: SendFundingLocked , node_recv. node. get_our_node_id( ) ) ) ;
433
467
}
434
468
@@ -453,8 +487,10 @@ pub fn create_chan_between_nodes_with_value_confirm_second<'a, 'b, 'c>(node_recv
453
487
}
454
488
455
489
pub fn create_chan_between_nodes_with_value_confirm < ' a , ' b , ' c , ' d > ( node_a : & ' a Node < ' b , ' c , ' d > , node_b : & ' a Node < ' b , ' c , ' d > , tx : & Transaction ) -> ( ( msgs:: FundingLocked , msgs:: AnnouncementSignatures ) , [ u8 ; 32 ] ) {
456
- create_chan_between_nodes_with_value_confirm_first ( node_a, node_b, tx) ;
457
- confirm_transaction ( node_a, tx) ;
490
+ let conf_height = std:: cmp:: max ( node_a. best_block_info ( ) . 1 + 1 , node_b. best_block_info ( ) . 1 + 1 ) ;
491
+ create_chan_between_nodes_with_value_confirm_first ( node_a, node_b, tx, conf_height) ;
492
+ confirm_transaction_at ( node_a, tx, conf_height) ;
493
+ connect_blocks ( node_a, CHAN_CONFIRM_DEPTH - 1 , node_a. best_block_info ( ) . 1 , false , Default :: default ( ) ) ;
458
494
create_chan_between_nodes_with_value_confirm_second ( node_b, node_a)
459
495
}
460
496
@@ -854,13 +890,13 @@ macro_rules! expect_payment_failed {
854
890
assert_eq!( events. len( ) , 1 ) ;
855
891
match events[ 0 ] {
856
892
Event :: PaymentFailed { ref payment_hash, rejected_by_dest, ref error_code, ref error_data } => {
857
- assert_eq!( * payment_hash, $expected_payment_hash ) ;
858
- assert_eq!( rejected_by_dest, $ rejected_by_dest) ;
859
- assert!( error_code. is_some( ) ) ;
860
- assert!( error_data. is_some( ) ) ;
893
+ assert_eq!( $expected_payment_hash , * payment_hash, "unexpected payment_hash" ) ;
894
+ assert_eq!( $ rejected_by_dest, rejected_by_dest, "unexpected rejected_by_dest value" ) ;
895
+ assert!( error_code. is_some( ) , "expected error_code.is_some() = true" ) ;
896
+ assert!( error_data. is_some( ) , "expected error_data.is_some() = true" ) ;
861
897
$(
862
- assert_eq!( error_code. unwrap( ) , $expected_error_code ) ;
863
- assert_eq!( & error_data. as_ref( ) . unwrap( ) [ ..] , $expected_error_data ) ;
898
+ assert_eq!( $expected_error_code , error_code. unwrap( ) , "unexpected error code" ) ;
899
+ assert_eq!( $expected_error_data , & error_data. as_ref( ) . unwrap( ) [ ..] , "unexpected error data" ) ;
864
900
) *
865
901
} ,
866
902
_ => panic!( "Unexpected event" ) ,
@@ -1031,7 +1067,7 @@ pub fn claim_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route:
1031
1067
claim_payment_along_route ( origin_node, expected_route, false , our_payment_preimage, expected_amount) ;
1032
1068
}
1033
1069
1034
- pub const TEST_FINAL_CLTV : u32 = 32 ;
1070
+ pub const TEST_FINAL_CLTV : u32 = 50 ;
1035
1071
1036
1072
pub fn route_payment < ' a , ' b , ' c > ( origin_node : & Node < ' a , ' b , ' c > , expected_route : & [ & Node < ' a , ' b , ' c > ] , recv_value : u64 ) -> ( PaymentPreimage , PaymentHash ) {
1037
1073
let net_graph_msg_handler = & origin_node. net_graph_msg_handler ;
@@ -1207,7 +1243,8 @@ pub fn create_network<'a, 'b: 'a, 'c: 'b>(node_count: usize, cfgs: &'b Vec<NodeC
1207
1243
nodes
1208
1244
}
1209
1245
1210
- pub const ACCEPTED_HTLC_SCRIPT_WEIGHT : usize = 138 ; //Here we have a diff due to HTLC CLTV expiry being < 2^15 in test
1246
+ // Note that the following only works for CLTV values up to 128
1247
+ pub const ACCEPTED_HTLC_SCRIPT_WEIGHT : usize = 137 ; //Here we have a diff due to HTLC CLTV expiry being < 2^15 in test
1211
1248
pub const OFFERED_HTLC_SCRIPT_WEIGHT : usize = 133 ;
1212
1249
1213
1250
#[ derive( PartialEq ) ]
0 commit comments