@@ -44,29 +44,51 @@ 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
49
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 ;
50
+ let starting_block = node. best_block_info ( ) ;
52
51
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 ] ,
52
+ header : BlockHeader { version : 0x20000000 , prev_blockhash : starting_block . 0 , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ,
53
+ txdata : Vec :: new ( ) ,
55
54
} ;
56
55
block. txdata . push ( tx. clone ( ) ) ;
57
- connect_block ( node, & block, 1 ) ;
56
+ let height = starting_block. 1 + 1 ;
57
+ connect_block ( node, & block, height) ;
58
58
for i in 2 ..CHAN_CONFIRM_DEPTH {
59
59
block = Block {
60
60
header : BlockHeader { version : 0x20000000 , prev_blockhash : block. header . block_hash ( ) , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ,
61
61
txdata : vec ! [ ] ,
62
62
} ;
63
+ connect_block ( node, & block, i + height) ;
64
+ }
65
+ }
66
+ pub fn confirm_transaction_at < ' a , ' b , ' c , ' d > ( node : & ' a Node < ' b , ' c , ' d > , tx : & Transaction , conf_height : u32 ) {
67
+ let starting_block = node. best_block_info ( ) ;
68
+ let mut block = Block {
69
+ header : BlockHeader { version : 0x20000000 , prev_blockhash : starting_block. 0 , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ,
70
+ txdata : Vec :: new ( ) ,
71
+ } ;
72
+ let height = starting_block. 1 + 1 ;
73
+ assert ! ( height <= conf_height) ;
74
+ for i in height..conf_height {
63
75
connect_block ( node, & block, i) ;
76
+ block = Block {
77
+ header : BlockHeader { version : 0x20000000 , prev_blockhash : block. header . block_hash ( ) , merkle_root : Default :: default ( ) , time : 42 , bits : 42 , nonce : 42 } ,
78
+ txdata : vec ! [ ] ,
79
+ } ;
64
80
}
81
+
82
+ 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
83
+ block. txdata . push ( Transaction { version : 0 , lock_time : 0 , input : Vec :: new ( ) , output : Vec :: new ( ) } ) ;
84
+ }
85
+ block. txdata . push ( tx. clone ( ) ) ;
86
+ connect_block ( node, & block, conf_height) ;
65
87
}
66
88
67
89
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
90
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 } ,
91
+ 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
92
txdata : vec ! [ ] ,
71
93
} ;
72
94
connect_block ( node, & block, height + 1 ) ;
@@ -93,6 +115,21 @@ pub fn disconnect_block<'a, 'b, 'c, 'd>(node: &'a Node<'b, 'c, 'd>, header: &Blo
93
115
node. node . block_disconnected ( header) ;
94
116
node. blocks . lock ( ) . unwrap ( ) . pop ( ) ;
95
117
}
118
+ pub fn disconnect_blocks < ' a , ' b , ' c , ' d > ( node : & ' a Node < ' b , ' c , ' d > , count : u32 ) {
119
+ assert ! ( node. blocks. lock( ) . unwrap( ) . len( ) as u32 > count) ; // Cannot disconnect genesis
120
+ for _ in 0 ..count {
121
+ let ( block_header, height) = {
122
+ let blocks = node. blocks . lock ( ) . unwrap ( ) ;
123
+ ( blocks[ blocks. len ( ) - 1 ] . 0 , blocks[ blocks. len ( ) - 1 ] . 1 )
124
+ } ;
125
+ disconnect_block ( & node, & block_header, height) ;
126
+ }
127
+ }
128
+
129
+ pub fn disconnect_all_blocks < ' a , ' b , ' c , ' d > ( node : & ' a Node < ' b , ' c , ' d > ) {
130
+ let count = node. blocks . lock ( ) . unwrap ( ) . len ( ) as u32 - 1 ;
131
+ disconnect_blocks ( node, count) ;
132
+ }
96
133
97
134
pub struct TestChanMonCfg {
98
135
pub tx_broadcaster : test_utils:: TestBroadcaster ,
@@ -426,8 +463,9 @@ pub fn create_chan_between_nodes_with_value_init<'a, 'b, 'c>(node_a: &Node<'a, '
426
463
tx
427
464
}
428
465
429
- 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 ) {
430
- confirm_transaction ( node_conf, tx) ;
466
+ 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 ) {
467
+ confirm_transaction_at ( node_conf, tx, conf_height) ;
468
+ connect_blocks ( node_conf, CHAN_CONFIRM_DEPTH - 1 , node_conf. best_block_info ( ) . 1 , false , Default :: default ( ) ) ;
431
469
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( ) ) ) ;
432
470
}
433
471
@@ -452,8 +490,10 @@ pub fn create_chan_between_nodes_with_value_confirm_second<'a, 'b, 'c>(node_recv
452
490
}
453
491
454
492
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 ] ) {
455
- create_chan_between_nodes_with_value_confirm_first ( node_a, node_b, tx) ;
456
- confirm_transaction ( node_a, tx) ;
493
+ let conf_height = std:: cmp:: max ( node_a. best_block_info ( ) . 1 + 1 , node_b. best_block_info ( ) . 1 + 1 ) ;
494
+ create_chan_between_nodes_with_value_confirm_first ( node_a, node_b, tx, conf_height) ;
495
+ confirm_transaction_at ( node_a, tx, conf_height) ;
496
+ connect_blocks ( node_a, CHAN_CONFIRM_DEPTH - 1 , node_a. best_block_info ( ) . 1 , false , Default :: default ( ) ) ;
457
497
create_chan_between_nodes_with_value_confirm_second ( node_b, node_a)
458
498
}
459
499
@@ -853,13 +893,13 @@ macro_rules! expect_payment_failed {
853
893
assert_eq!( events. len( ) , 1 ) ;
854
894
match events[ 0 ] {
855
895
Event :: PaymentFailed { ref payment_hash, rejected_by_dest, ref error_code, ref error_data } => {
856
- assert_eq!( * payment_hash, $expected_payment_hash ) ;
857
- assert_eq!( rejected_by_dest, $ rejected_by_dest) ;
858
- assert!( error_code. is_some( ) ) ;
859
- assert!( error_data. is_some( ) ) ;
896
+ assert_eq!( $expected_payment_hash , * payment_hash, "unexpected payment_hash" ) ;
897
+ assert_eq!( $ rejected_by_dest, rejected_by_dest, "unexpected rejected_by_dest value" ) ;
898
+ assert!( error_code. is_some( ) , "expected error_code.is_some() = true" ) ;
899
+ assert!( error_data. is_some( ) , "expected error_data.is_some() = true" ) ;
860
900
$(
861
- assert_eq!( error_code. unwrap( ) , $expected_error_code ) ;
862
- assert_eq!( & error_data. as_ref( ) . unwrap( ) [ ..] , $expected_error_data ) ;
901
+ assert_eq!( $expected_error_code , error_code. unwrap( ) , "unexpected error code" ) ;
902
+ assert_eq!( $expected_error_data , & error_data. as_ref( ) . unwrap( ) [ ..] , "unexpected error data" ) ;
863
903
) *
864
904
} ,
865
905
_ => panic!( "Unexpected event" ) ,
@@ -1030,7 +1070,7 @@ pub fn claim_payment<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expected_route:
1030
1070
claim_payment_along_route ( origin_node, expected_route, false , our_payment_preimage, expected_amount) ;
1031
1071
}
1032
1072
1033
- pub const TEST_FINAL_CLTV : u32 = 32 ;
1073
+ pub const TEST_FINAL_CLTV : u32 = 50 ;
1034
1074
1035
1075
pub fn route_payment < ' a , ' b , ' c > ( origin_node : & Node < ' a , ' b , ' c > , expected_route : & [ & Node < ' a , ' b , ' c > ] , recv_value : u64 ) -> ( PaymentPreimage , PaymentHash ) {
1036
1076
let net_graph_msg_handler = & origin_node. net_graph_msg_handler ;
@@ -1206,7 +1246,8 @@ pub fn create_network<'a, 'b: 'a, 'c: 'b>(node_count: usize, cfgs: &'b Vec<NodeC
1206
1246
nodes
1207
1247
}
1208
1248
1209
- pub const ACCEPTED_HTLC_SCRIPT_WEIGHT : usize = 138 ; //Here we have a diff due to HTLC CLTV expiry being < 2^15 in test
1249
+ // Note that the following only works for CLTV values up to 128
1250
+ pub const ACCEPTED_HTLC_SCRIPT_WEIGHT : usize = 137 ; //Here we have a diff due to HTLC CLTV expiry being < 2^15 in test
1210
1251
pub const OFFERED_HTLC_SCRIPT_WEIGHT : usize = 133 ;
1211
1252
1212
1253
#[ derive( PartialEq ) ]
0 commit comments