@@ -75,16 +75,14 @@ fn generate_node_announcement(private_key: Option<SecretKey>) -> NodeAnnouncemen
75
75
}
76
76
77
77
78
- fn generate_channel_announcement ( short_channel_id : u64 ) -> ChannelAnnouncement {
78
+ fn generate_channel_announcement_between_nodes ( short_channel_id : u64 , random_private_key_1 : & SecretKey , random_private_key_2 : & SecretKey ) -> ChannelAnnouncement {
79
79
let secp_context = Secp256k1 :: new ( ) ;
80
80
81
- let random_private_key_1 = SecretKey :: from_slice ( & [ 1 ; 32 ] ) . unwrap ( ) ;
82
81
let random_public_key_1 = random_private_key_1. public_key ( & secp_context) ;
83
- let node_id_1 = NodeId :: from_pubkey ( & random_public_key_1) ;
82
+ let node_id_1 = NodeId :: from_pubkey ( random_public_key_1) ;
84
83
85
- let random_private_key_2 = SecretKey :: from_slice ( & [ 2 ; 32 ] ) . unwrap ( ) ;
86
84
let random_public_key_2 = random_private_key_2. public_key ( & secp_context) ;
87
- let node_id_2 = NodeId :: from_pubkey ( & random_public_key_2) ;
85
+ let node_id_2 = NodeId :: from_pubkey ( random_public_key_2) ;
88
86
89
87
let announcement = UnsignedChannelAnnouncement {
90
88
features : ChannelFeatures :: empty ( ) ,
@@ -98,8 +96,8 @@ fn generate_channel_announcement(short_channel_id: u64) -> ChannelAnnouncement {
98
96
} ;
99
97
100
98
let msg_hash = bitcoin:: secp256k1:: Message :: from_slice ( & Sha256dHash :: hash ( & announcement. encode ( ) [ ..] ) [ ..] ) . unwrap ( ) ;
101
- let node_signature_1 = secp_context. sign_ecdsa ( & msg_hash, & random_private_key_1) ;
102
- let node_signature_2 = secp_context. sign_ecdsa ( & msg_hash, & random_private_key_2) ;
99
+ let node_signature_1 = secp_context. sign_ecdsa ( & msg_hash, random_private_key_1) ;
100
+ let node_signature_2 = secp_context. sign_ecdsa ( & msg_hash, random_private_key_2) ;
103
101
104
102
ChannelAnnouncement {
105
103
node_signature_1,
@@ -110,6 +108,12 @@ fn generate_channel_announcement(short_channel_id: u64) -> ChannelAnnouncement {
110
108
}
111
109
}
112
110
111
+ fn generate_channel_announcement ( short_channel_id : u64 ) -> ChannelAnnouncement {
112
+ let random_private_key_1 = SecretKey :: from_slice ( & [ 1 ; 32 ] ) . unwrap ( ) ;
113
+ let random_private_key_2 = SecretKey :: from_slice ( & [ 2 ; 32 ] ) . unwrap ( ) ;
114
+ generate_channel_announcement_between_nodes ( short_channel_id, & random_private_key_1, & random_private_key_2)
115
+ }
116
+
113
117
fn generate_update ( scid : u64 , direction : bool , timestamp : u32 , expiry_delta : u16 , min_msat : u64 , max_msat : u64 , base_msat : u32 , fee_rate : u32 ) -> ChannelUpdate {
114
118
let flag_mask = if direction { 1 } else { 0 } ;
115
119
ChannelUpdate {
@@ -360,29 +364,58 @@ async fn test_node_announcement_delta_detection() {
360
364
let timestamp = current_time ( ) - 10 ;
361
365
362
366
{ // seed the db
367
+ let third_node = SecretKey :: from_slice ( & [ 3 ; 32 ] ) . unwrap ( ) ;
368
+ let fourth_node = SecretKey :: from_slice ( & [ 4 ; 32 ] ) . unwrap ( ) ;
363
369
364
370
{ // necessary for the node announcements to be considered relevant
365
371
let announcement = generate_channel_announcement ( 1 ) ;
366
- let update_1 = generate_update ( 1 , false , timestamp, 0 , 0 , 0 , 6 , 0 ) ;
367
- let update_2 = generate_update ( 1 , true , timestamp, 0 , 0 , 0 , 6 , 0 ) ;
372
+ let update_1 = generate_update ( 1 , false , timestamp - 10 , 0 , 0 , 0 , 6 , 0 ) ;
373
+ let update_2 = generate_update ( 1 , true , timestamp - 10 , 0 , 0 , 0 , 6 , 0 ) ;
368
374
369
375
network_graph_arc. update_channel_from_announcement_no_lookup ( & announcement) . unwrap ( ) ;
370
376
network_graph_arc. update_channel_unsigned ( & update_1. contents ) . unwrap ( ) ;
371
377
network_graph_arc. update_channel_unsigned ( & update_2. contents ) . unwrap ( ) ;
372
378
373
- receiver. send ( GossipMessage :: ChannelAnnouncement ( announcement, 100 , Some ( timestamp) ) ) . await . unwrap ( ) ;
374
- receiver. send ( GossipMessage :: ChannelUpdate ( update_1, Some ( timestamp) ) ) . await . unwrap ( ) ;
375
- receiver. send ( GossipMessage :: ChannelUpdate ( update_2, Some ( timestamp) ) ) . await . unwrap ( ) ;
379
+ receiver. send ( GossipMessage :: ChannelAnnouncement ( announcement, 100 , Some ( timestamp - 10 ) ) ) . await . unwrap ( ) ;
380
+ receiver. send ( GossipMessage :: ChannelUpdate ( update_1, Some ( timestamp - 10 ) ) ) . await . unwrap ( ) ;
381
+ receiver. send ( GossipMessage :: ChannelUpdate ( update_2, Some ( timestamp - 10 ) ) ) . await . unwrap ( ) ;
376
382
}
377
383
378
- let mut announcement = generate_node_announcement ( None ) ;
379
- announcement. contents . timestamp = timestamp - 10 ;
380
- network_graph_arc. update_node_from_unsigned_announcement ( & announcement. contents ) . unwrap ( ) ;
381
- receiver. send ( GossipMessage :: NodeAnnouncement ( announcement. clone ( ) , Some ( announcement. contents . timestamp ) ) ) . await . unwrap ( ) ;
382
- announcement. contents . timestamp = timestamp - 8 ;
383
- network_graph_arc. update_node_from_unsigned_announcement ( & announcement. contents ) . unwrap ( ) ;
384
- receiver. send ( GossipMessage :: NodeAnnouncement ( announcement. clone ( ) , Some ( announcement. contents . timestamp ) ) ) . await . unwrap ( ) ;
384
+ { // necessary for the second node announcements to be considered relevant
385
+ let announcement = generate_channel_announcement_between_nodes ( 1 , & third_node, & fourth_node) ;
386
+ let update_1 = generate_update ( 1 , false , timestamp - 10 , 0 , 0 , 0 , 6 , 0 ) ;
387
+ let update_2 = generate_update ( 1 , true , timestamp - 10 , 0 , 0 , 0 , 6 , 0 ) ;
385
388
389
+ network_graph_arc. update_channel_from_announcement_no_lookup ( & announcement) . unwrap ( ) ;
390
+ network_graph_arc. update_channel_unsigned ( & update_1. contents ) . unwrap ( ) ;
391
+ network_graph_arc. update_channel_unsigned ( & update_2. contents ) . unwrap ( ) ;
392
+
393
+ receiver. send ( GossipMessage :: ChannelAnnouncement ( announcement, 100 , Some ( timestamp - 10 ) ) ) . await . unwrap ( ) ;
394
+ receiver. send ( GossipMessage :: ChannelUpdate ( update_1, Some ( timestamp - 10 ) ) ) . await . unwrap ( ) ;
395
+ receiver. send ( GossipMessage :: ChannelUpdate ( update_2, Some ( timestamp - 10 ) ) ) . await . unwrap ( ) ;
396
+ }
397
+
398
+ {
399
+ // Add some node announcements from before the last sync for node 1.
400
+ let mut announcement = generate_node_announcement ( None ) ;
401
+ announcement. contents . timestamp = timestamp - 10 ;
402
+ network_graph_arc. update_node_from_unsigned_announcement ( & announcement. contents ) . unwrap ( ) ;
403
+ receiver. send ( GossipMessage :: NodeAnnouncement ( announcement. clone ( ) , Some ( announcement. contents . timestamp ) ) ) . await . unwrap ( ) ;
404
+ announcement. contents . timestamp = timestamp - 8 ;
405
+ network_graph_arc. update_node_from_unsigned_announcement ( & announcement. contents ) . unwrap ( ) ;
406
+ receiver. send ( GossipMessage :: NodeAnnouncement ( announcement. clone ( ) , Some ( announcement. contents . timestamp ) ) ) . await . unwrap ( ) ;
407
+ }
408
+
409
+ {
410
+ // Add a node announcement from before the last sync for node 4.
411
+ let mut announcement = generate_node_announcement ( Some ( fourth_node. clone ( ) ) ) ;
412
+ announcement. contents . timestamp = timestamp - 10 ;
413
+ network_graph_arc. update_node_from_unsigned_announcement ( & announcement. contents ) . unwrap ( ) ;
414
+ receiver. send ( GossipMessage :: NodeAnnouncement ( announcement. clone ( ) , Some ( announcement. contents . timestamp ) ) ) . await . unwrap ( ) ;
415
+ }
416
+
417
+ // Add current announcements for node 2 and 3, both of which should be included in their
418
+ // entirety as they're new since the last sync time
386
419
{
387
420
let mut current_announcement = generate_node_announcement ( Some ( SecretKey :: from_slice ( & [ 2 ; 32 ] ) . unwrap ( ) ) ) ;
388
421
current_announcement. contents . features = NodeFeatures :: from_be_bytes ( vec ! [ 23 , 48 ] ) ;
@@ -392,14 +425,15 @@ async fn test_node_announcement_delta_detection() {
392
425
}
393
426
394
427
{
395
- let mut current_announcement = generate_node_announcement ( Some ( SecretKey :: from_slice ( & [ 3 ; 32 ] ) . unwrap ( ) ) ) ;
428
+ let mut current_announcement = generate_node_announcement ( Some ( second_node ) ) ;
396
429
current_announcement. contents . features = NodeFeatures :: from_be_bytes ( vec ! [ 22 , 49 ] ) ;
397
430
current_announcement. contents . timestamp = timestamp;
398
431
receiver. send ( GossipMessage :: NodeAnnouncement ( current_announcement, Some ( timestamp) ) ) . await . unwrap ( ) ;
399
432
}
400
433
401
434
{
402
- // modify announcement to contain a bunch of addresses
435
+ // modify announcement of node 1 to contain a bunch of addresses
436
+ let mut announcement = generate_node_announcement ( None ) ;
403
437
announcement. contents . addresses . push ( SocketAddress :: Hostname {
404
438
hostname : "google.com" . to_string ( ) . try_into ( ) . unwrap ( ) ,
405
439
port : 443 ,
@@ -431,11 +465,12 @@ async fn test_node_announcement_delta_detection() {
431
465
let serialization = serialize_delta ( & delta, 2 , logger. clone ( ) ) ;
432
466
clean_test_db ( ) . await ;
433
467
468
+ // We should have
434
469
assert_eq ! ( serialization. message_count, 3 ) ;
435
470
assert_eq ! ( serialization. node_announcement_count, 2 ) ;
436
- assert_eq ! ( serialization. node_update_count, 1 ) ;
437
- assert_eq ! ( serialization. node_feature_update_count, 1 ) ;
438
- assert_eq ! ( serialization. node_address_update_count, 1 ) ;
471
+ assert_eq ! ( serialization. node_update_count, 2 ) ;
472
+ assert_eq ! ( serialization. node_feature_update_count, 2 ) ;
473
+ assert_eq ! ( serialization. node_address_update_count, 2 ) ;
439
474
}
440
475
441
476
/// If a channel has only seen updates in one direction, it should not be announced
0 commit comments