Skip to content

Commit f0672a4

Browse files
committed
fixed message type (+1 squashed commit)
Squashed commits: [c45601f] Added new fields to unit tests (+1 squashed commit) Squashed commits: [c45601f] Added new fields to unit tests (+1 squashed commit) Squashed commits: [bf7f98e] Added update channel Added hashmap to keep track of sent syncs (+1 squashed commit) Squashed commits: [6f0a009] fix compile issues (+1 squashed commit) Squashed commits: [cae5f7e] caching of announcement messages (+1 squashed commit) Squashed commits: [7c1cc1a] refactor using combination of traits for a single referance
1 parent 81568f6 commit f0672a4

File tree

4 files changed

+104
-23
lines changed

4 files changed

+104
-23
lines changed

src/ln/msgs.rs

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,7 @@ impl NetAddress {
370370
}
371371
}
372372
}
373-
373+
#[derive(Clone)]
374374
// Only exposed as broadcast of node_announcement should be filtered by node_id
375375
/// The unsigned part of a node_announcement
376376
pub struct UnsignedNodeAnnouncement {
@@ -387,6 +387,7 @@ pub struct UnsignedNodeAnnouncement {
387387
pub(crate) excess_address_data: Vec<u8>,
388388
pub(crate) excess_data: Vec<u8>,
389389
}
390+
#[derive(Clone)]
390391
/// A node_announcement message to be sent or received from a peer
391392
pub struct NodeAnnouncement {
392393
pub(crate) signature: Signature,
@@ -562,16 +563,16 @@ pub trait RoutingMessageHandler : Send + Sync {
562563
fn handle_channel_update(&self, msg: &ChannelUpdate) -> Result<bool, HandleError>;
563564
/// Handle some updates to the route graph that we learned due to an outbound failed payment.
564565
fn handle_htlc_fail_channel_update(&self, update: &HTLCFailChannelUpdate);
565-
}
566-
567-
///A trait to describe the API required to access the network topology
568-
pub trait NetworkAPI : Send + Sync {
569566
///This should return a vec of all possible channel announcements or an error
570-
fn get_all_channel_announcements(&self)-> Result<Vec<ChannelAnnouncement>, std::fmt::Error>;
567+
fn get_all_channel_announcements(&self)-> Result<Vec<(ChannelAnnouncement,ChannelUpdate)>, std::fmt::Error>;
571568
///This should return a vec of all possible node announcements or an error
572569
fn get_all_node_announcements(&self)-> Result<Vec<NodeAnnouncement>, std::fmt::Error>;
573570
}
574571

572+
573+
574+
575+
575576
pub(crate) struct OnionRealm0HopData {
576577
pub(crate) short_channel_id: u64,
577578
pub(crate) amt_to_forward: u64,

src/ln/peer_handler.rs

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
use secp256k1::key::{SecretKey,PublicKey};
1010

1111
use ln::msgs;
12-
use ln::msgs::NetworkAPI;
1312
use util::ser::{Writeable, Writer, Readable};
1413
use ln::peer_channel_encryptor::{PeerChannelEncryptor,NextNoiseStep};
1514
use util::byte_utils;
@@ -131,8 +130,8 @@ pub struct PeerManager<Descriptor: SocketDescriptor> {
131130
pending_events: Mutex<Vec<Event>>,
132131
our_node_secret: SecretKey,
133132
initial_syncs_sent: AtomicUsize,
134-
network_api : NetworkAPI,
135133
logger: Arc<Logger>,
134+
sent_network_sync_info : HashMap<PublicKey,bool>,
136135
}
137136

138137
struct VecWriter(Vec<u8>);
@@ -170,6 +169,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
170169
our_node_secret: our_node_secret,
171170
initial_syncs_sent: AtomicUsize::new(0),
172171
logger,
172+
sent_network_sync_info: HashMap::new(),
173173
}
174174
}
175175

@@ -314,7 +314,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
314314
/// course of this function!
315315
///
316316
/// Panics if the descriptor was not previously registered in a new_*_connection event.
317-
pub fn read_event(&self, peer_descriptor: &mut Descriptor, data: Vec<u8>) -> Result<bool, PeerHandleError> {
317+
pub fn read_event(&mut self, peer_descriptor: &mut Descriptor, data: Vec<u8>) -> Result<bool, PeerHandleError> {
318318
match self.do_read_event(peer_descriptor, data) {
319319
Ok(res) => Ok(res),
320320
Err(e) => {
@@ -324,7 +324,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
324324
}
325325
}
326326

327-
fn do_read_event(&self, peer_descriptor: &mut Descriptor, data: Vec<u8>) -> Result<bool, PeerHandleError> {
327+
fn do_read_event(&mut self, peer_descriptor: &mut Descriptor, data: Vec<u8>) -> Result<bool, PeerHandleError> {
328328
let pause_read = {
329329
let mut peers_lock = self.peers.lock().unwrap();
330330
let peers = peers_lock.borrow_parts();
@@ -517,7 +517,25 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
517517
if self.initial_syncs_sent.load(Ordering::Acquire) < INITIAL_SYNCS_TO_SEND {
518518
self.initial_syncs_sent.fetch_add(1, Ordering::AcqRel);
519519
local_features.set_initial_routing_sync();
520-
//TODO get and send announcements.
520+
if let Some(i) = peer.their_node_id{
521+
let their_id = i;
522+
if self.sent_network_sync_info.contains_key(&their_id){
523+
let channel_messages_tuple = self.message_handler.route_handler.get_all_channel_announcements().unwrap();
524+
let channel_announcements:Vec<msgs::ChannelAnnouncement> = channel_messages_tuple.clone().into_iter().map(|x| { x.0 }).collect();
525+
let channel_updates:Vec<msgs::ChannelUpdate> = channel_messages_tuple.into_iter().map(|x| { x.1 }).collect();
526+
let node_messages = self.message_handler.route_handler.get_all_node_announcements().unwrap();
527+
for message in channel_announcements.iter(){
528+
encode_and_send_msg!(message, 256);
529+
}
530+
for message in channel_updates.iter(){
531+
encode_and_send_msg!(message, 258);
532+
}
533+
for message in node_messages.iter(){
534+
encode_and_send_msg!(message, 257);
535+
}
536+
self.sent_network_sync_info.insert(their_id,true);
537+
}
538+
}
521539
}
522540
encode_and_send_msg!(msgs::Init {
523541
global_features: msgs::GlobalFeatures::new(),

src/ln/router.rs

Lines changed: 65 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ use bitcoin::blockdata::opcodes;
1313

1414
use chain::chaininterface::{ChainError, ChainWatchInterface};
1515
use ln::channelmanager;
16-
use ln::msgs::{ErrorAction,HandleError,RoutingMessageHandler,NetAddress,GlobalFeatures, NetworkAPI};
16+
17+
use ln::msgs::{ErrorAction,HandleError,RoutingMessageHandler,NetAddress,GlobalFeatures};
1718
use ln::msgs;
1819
use util::ser::Writeable;
1920
use util::logger::Logger;
@@ -55,7 +56,7 @@ struct DirectionalChannelInfo {
5556
htlc_minimum_msat: u64,
5657
fee_base_msat: u32,
5758
fee_proportional_millionths: u32,
58-
}
59+
}
5960

6061
impl std::fmt::Display for DirectionalChannelInfo {
6162
fn fmt(&self, f: &mut std::fmt::Formatter) -> Result<(), std::fmt::Error> {
@@ -68,6 +69,9 @@ struct ChannelInfo {
6869
features: GlobalFeatures,
6970
one_to_two: DirectionalChannelInfo,
7071
two_to_one: DirectionalChannelInfo,
72+
//this is cached here so we can send out it later if required by route_init_sync
73+
announcement_message : Option<msgs::ChannelAnnouncement>,
74+
last_update_message : Option<msgs::ChannelUpdate>,
7175
}
7276

7377
impl std::fmt::Display for ChannelInfo {
@@ -91,6 +95,8 @@ struct NodeInfo {
9195
rgb: [u8; 3],
9296
alias: [u8; 32],
9397
addresses: Vec<NetAddress>,
98+
//this is cached here so we can send out it later if required by route_init_sync
99+
announcement_message : Option<msgs::NodeAnnouncement>,
94100
}
95101

96102
impl std::fmt::Display for NodeInfo {
@@ -184,7 +190,7 @@ pub struct RouteHint {
184190
/// Tracks a view of the network, receiving updates from peers and generating Routes to
185191
/// payment destinations.
186192
pub struct Router {
187-
secp_ctx: Secp256k1<secp256k1::VerifyOnly>,
193+
secp_ctx: Secp256k1<secp256k1::All>,
188194
network_map: RwLock<NetworkMap>,
189195
chain_monitor: Arc<ChainWatchInterface>,
190196
logger: Arc<Logger>,
@@ -221,6 +227,7 @@ impl RoutingMessageHandler for Router {
221227
node.rgb = msg.contents.rgb;
222228
node.alias = msg.contents.alias;
223229
node.addresses = msg.contents.addresses.clone();
230+
224231
Ok(msg.contents.excess_data.is_empty() && msg.contents.excess_address_data.is_empty() && !msg.contents.features.supports_unknown_bits())
225232
}
226233
}
@@ -288,7 +295,9 @@ impl RoutingMessageHandler for Router {
288295
htlc_minimum_msat: u64::max_value(),
289296
fee_base_msat: u32::max_value(),
290297
fee_proportional_millionths: u32::max_value(),
291-
}
298+
},
299+
announcement_message : Some(msg.clone()),
300+
last_update_message : None,
292301
};
293302

294303
match network.channels.entry(NetworkMap::get_key(msg.contents.short_channel_id, msg.contents.chain_hash)) {
@@ -332,6 +341,7 @@ impl RoutingMessageHandler for Router {
332341
rgb: [0; 3],
333342
alias: [0; 32],
334343
addresses: Vec::new(),
344+
announcement_message: None,
335345
});
336346
}
337347
}
@@ -382,6 +392,7 @@ impl RoutingMessageHandler for Router {
382392
}
383393
}
384394

395+
channel.last_update_message = Some(msg.clone());
385396
let msg_hash = Message::from_slice(&Sha256dHash::from_data(&msg.contents.encode()[..])[..]).unwrap();
386397
if msg.contents.flags & 1 == 1 {
387398
dest_node_id = channel.one_to_two.src_node_id.clone();
@@ -426,14 +437,29 @@ impl RoutingMessageHandler for Router {
426437

427438
Ok(msg.contents.excess_data.is_empty())
428439
}
429-
}
430-
431-
impl NetworkAPI for Router {
432-
fn get_all_channel_announcements(&self)-> Result<Vec<msgs::NodeAnnouncement>, std::fmt::Error>{
433-
unimplemented!();
440+
fn get_all_channel_announcements(&self)-> Result<Vec<(msgs::ChannelAnnouncement, msgs::ChannelUpdate)>, std::fmt::Error>{
441+
let mut result = Vec::new();
442+
let network = self.network_map.read().unwrap();
443+
for (key, value) in network.channels.iter(){
444+
if let Some(ref i) = value.announcement_message{
445+
if let Some(ref j) = value.last_update_message{
446+
let temp_tuple = (i.clone(),j.clone());
447+
result.push(temp_tuple);
448+
}
449+
}
450+
}
451+
return Ok(result)
434452
}
453+
///This function generates a vec of all node_annoucment messages for all nodes it known of
435454
fn get_all_node_announcements(&self)-> Result<Vec<msgs::NodeAnnouncement>, std::fmt::Error>{
436-
unimplemented!();
455+
let mut result = Vec::new();
456+
let network = self.network_map.read().unwrap();
457+
for (key, value) in network.nodes.iter(){
458+
if let Some(ref i) = value.announcement_message{
459+
result.push(i.clone());
460+
}
461+
}
462+
Ok(result)
437463
}
438464
}
439465

@@ -478,9 +504,10 @@ impl Router {
478504
rgb: [0; 3],
479505
alias: [0; 32],
480506
addresses: Vec::new(),
507+
announcement_message: None,
481508
});
482509
Router {
483-
secp_ctx: Secp256k1::verification_only(),
510+
secp_ctx: Secp256k1::new(),
484511
network_map: RwLock::new(NetworkMap {
485512
channels: HashMap::new(),
486513
our_node_id: our_pubkey,
@@ -841,6 +868,7 @@ mod tests {
841868
rgb: [0; 3],
842869
alias: [0; 32],
843870
addresses: Vec::new(),
871+
announcement_message : None,
844872
});
845873
network.channels.insert(NetworkMap::get_key(1, zero_hash.clone()), ChannelInfo {
846874
features: GlobalFeatures::new(),
@@ -861,6 +889,8 @@ mod tests {
861889
fee_base_msat: 0,
862890
fee_proportional_millionths: 0,
863891
},
892+
announcement_message : None,
893+
last_update_message : None,
864894
});
865895
network.nodes.insert(node2.clone(), NodeInfo {
866896
channels: vec!(NetworkMap::get_key(2, zero_hash.clone()), NetworkMap::get_key(4, zero_hash.clone())),
@@ -871,6 +901,7 @@ mod tests {
871901
rgb: [0; 3],
872902
alias: [0; 32],
873903
addresses: Vec::new(),
904+
announcement_message : None,
874905
});
875906
network.channels.insert(NetworkMap::get_key(2, zero_hash.clone()), ChannelInfo {
876907
features: GlobalFeatures::new(),
@@ -891,6 +922,8 @@ mod tests {
891922
fee_base_msat: 0,
892923
fee_proportional_millionths: 0,
893924
},
925+
announcement_message : None,
926+
last_update_message : None,
894927
});
895928
network.nodes.insert(node8.clone(), NodeInfo {
896929
channels: vec!(NetworkMap::get_key(12, zero_hash.clone()), NetworkMap::get_key(13, zero_hash.clone())),
@@ -901,6 +934,7 @@ mod tests {
901934
rgb: [0; 3],
902935
alias: [0; 32],
903936
addresses: Vec::new(),
937+
announcement_message : None,
904938
});
905939
network.channels.insert(NetworkMap::get_key(12, zero_hash.clone()), ChannelInfo {
906940
features: GlobalFeatures::new(),
@@ -921,6 +955,8 @@ mod tests {
921955
fee_base_msat: 0,
922956
fee_proportional_millionths: 0,
923957
},
958+
announcement_message : None,
959+
last_update_message : None,
924960
});
925961
network.nodes.insert(node3.clone(), NodeInfo {
926962
channels: vec!(
@@ -937,6 +973,7 @@ mod tests {
937973
rgb: [0; 3],
938974
alias: [0; 32],
939975
addresses: Vec::new(),
976+
announcement_message : None,
940977
});
941978
network.channels.insert(NetworkMap::get_key(3, zero_hash.clone()), ChannelInfo {
942979
features: GlobalFeatures::new(),
@@ -957,6 +994,8 @@ mod tests {
957994
fee_base_msat: 100,
958995
fee_proportional_millionths: 0,
959996
},
997+
announcement_message : None,
998+
last_update_message : None,
960999
});
9611000
network.channels.insert(NetworkMap::get_key(4, zero_hash.clone()), ChannelInfo {
9621001
features: GlobalFeatures::new(),
@@ -977,6 +1016,8 @@ mod tests {
9771016
fee_base_msat: 0,
9781017
fee_proportional_millionths: 0,
9791018
},
1019+
announcement_message : None,
1020+
last_update_message : None,
9801021
});
9811022
network.channels.insert(NetworkMap::get_key(13, zero_hash.clone()), ChannelInfo {
9821023
features: GlobalFeatures::new(),
@@ -997,6 +1038,8 @@ mod tests {
9971038
fee_base_msat: 0,
9981039
fee_proportional_millionths: 0,
9991040
},
1041+
announcement_message : None,
1042+
last_update_message : None,
10001043
});
10011044
network.nodes.insert(node4.clone(), NodeInfo {
10021045
channels: vec!(NetworkMap::get_key(5, zero_hash.clone()), NetworkMap::get_key(11, zero_hash.clone())),
@@ -1007,6 +1050,7 @@ mod tests {
10071050
rgb: [0; 3],
10081051
alias: [0; 32],
10091052
addresses: Vec::new(),
1053+
announcement_message : None,
10101054
});
10111055
network.channels.insert(NetworkMap::get_key(5, zero_hash.clone()), ChannelInfo {
10121056
features: GlobalFeatures::new(),
@@ -1027,6 +1071,8 @@ mod tests {
10271071
fee_base_msat: 0,
10281072
fee_proportional_millionths: 0,
10291073
},
1074+
announcement_message : None,
1075+
last_update_message : None,
10301076
});
10311077
network.nodes.insert(node5.clone(), NodeInfo {
10321078
channels: vec!(NetworkMap::get_key(6, zero_hash.clone()), NetworkMap::get_key(11, zero_hash.clone())),
@@ -1037,6 +1083,7 @@ mod tests {
10371083
rgb: [0; 3],
10381084
alias: [0; 32],
10391085
addresses: Vec::new(),
1086+
announcement_message : None,
10401087
});
10411088
network.channels.insert(NetworkMap::get_key(6, zero_hash.clone()), ChannelInfo {
10421089
features: GlobalFeatures::new(),
@@ -1057,6 +1104,8 @@ mod tests {
10571104
fee_base_msat: 0,
10581105
fee_proportional_millionths: 0,
10591106
},
1107+
announcement_message : None,
1108+
last_update_message : None,
10601109
});
10611110
network.channels.insert(NetworkMap::get_key(11, zero_hash.clone()), ChannelInfo {
10621111
features: GlobalFeatures::new(),
@@ -1077,6 +1126,8 @@ mod tests {
10771126
fee_base_msat: 0,
10781127
fee_proportional_millionths: 0,
10791128
},
1129+
announcement_message : None,
1130+
last_update_message : None,
10801131
});
10811132
network.nodes.insert(node6.clone(), NodeInfo {
10821133
channels: vec!(NetworkMap::get_key(7, zero_hash.clone())),
@@ -1087,6 +1138,7 @@ mod tests {
10871138
rgb: [0; 3],
10881139
alias: [0; 32],
10891140
addresses: Vec::new(),
1141+
announcement_message : None,
10901142
});
10911143
network.channels.insert(NetworkMap::get_key(7, zero_hash.clone()), ChannelInfo {
10921144
features: GlobalFeatures::new(),
@@ -1107,6 +1159,8 @@ mod tests {
11071159
fee_base_msat: 0,
11081160
fee_proportional_millionths: 0,
11091161
},
1162+
announcement_message : None,
1163+
last_update_message : None,
11101164
});
11111165
}
11121166

0 commit comments

Comments
 (0)