Skip to content

Commit cc88399

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 squashed commit) Squashed commits: [81568f6] Initial RFC on issue 148
1 parent 4cb059e commit cc88399

File tree

4 files changed

+110
-8
lines changed

4 files changed

+110
-8
lines changed

src/ln/msgs.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ use std::error::Error;
2525
use std::{cmp, fmt};
2626
use std::io::Read;
2727
use std::result::Result;
28+
use std;
2829

2930
use util::{byte_utils, events};
3031
use util::ser::{Readable, Writeable, Writer};
@@ -370,7 +371,7 @@ impl NetAddress {
370371
}
371372
}
372373
}
373-
374+
#[derive(Clone)]
374375
// Only exposed as broadcast of node_announcement should be filtered by node_id
375376
/// The unsigned part of a node_announcement
376377
pub struct UnsignedNodeAnnouncement {
@@ -387,6 +388,7 @@ pub struct UnsignedNodeAnnouncement {
387388
pub(crate) excess_address_data: Vec<u8>,
388389
pub(crate) excess_data: Vec<u8>,
389390
}
391+
#[derive(Clone)]
390392
/// A node_announcement message to be sent or received from a peer
391393
pub struct NodeAnnouncement {
392394
pub(crate) signature: Signature,
@@ -562,8 +564,16 @@ pub trait RoutingMessageHandler : Send + Sync {
562564
fn handle_channel_update(&self, msg: &ChannelUpdate) -> Result<bool, HandleError>;
563565
/// Handle some updates to the route graph that we learned due to an outbound failed payment.
564566
fn handle_htlc_fail_channel_update(&self, update: &HTLCFailChannelUpdate);
567+
///This should return a vec of all possible channel announcements or an error
568+
fn get_all_channel_announcements(&self)-> Result<Vec<(ChannelAnnouncement,ChannelUpdate)>, std::fmt::Error>;
569+
///This should return a vec of all possible node announcements or an error
570+
fn get_all_node_announcements(&self)-> Result<Vec<NodeAnnouncement>, std::fmt::Error>;
565571
}
566572

573+
574+
575+
576+
567577
pub(crate) struct OnionRealm0HopData {
568578
pub(crate) short_channel_id: u64,
569579
pub(crate) amt_to_forward: u64,

src/ln/peer_handler.rs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ pub struct PeerManager<Descriptor: SocketDescriptor> {
131131
our_node_secret: SecretKey,
132132
initial_syncs_sent: AtomicUsize,
133133
logger: Arc<Logger>,
134+
sent_network_sync_info : HashMap<PublicKey,bool>,
134135
}
135136

136137
struct VecWriter(Vec<u8>);
@@ -168,6 +169,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
168169
our_node_secret: our_node_secret,
169170
initial_syncs_sent: AtomicUsize::new(0),
170171
logger,
172+
sent_network_sync_info: HashMap::new(),
171173
}
172174
}
173175

@@ -312,7 +314,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
312314
/// course of this function!
313315
///
314316
/// Panics if the descriptor was not previously registered in a new_*_connection event.
315-
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> {
316318
match self.do_read_event(peer_descriptor, data) {
317319
Ok(res) => Ok(res),
318320
Err(e) => {
@@ -322,7 +324,7 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
322324
}
323325
}
324326

325-
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> {
326328
let pause_read = {
327329
let mut peers_lock = self.peers.lock().unwrap();
328330
let peers = peers_lock.borrow_parts();
@@ -515,6 +517,25 @@ impl<Descriptor: SocketDescriptor> PeerManager<Descriptor> {
515517
if self.initial_syncs_sent.load(Ordering::Acquire) < INITIAL_SYNCS_TO_SEND {
516518
self.initial_syncs_sent.fetch_add(1, Ordering::AcqRel);
517519
local_features.set_initial_routing_sync();
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+
}
518539
}
519540
encode_and_send_msg!(msgs::Init {
520541
global_features: msgs::GlobalFeatures::new(),

src/ln/router.rs

Lines changed: 67 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ use bitcoin::blockdata::opcodes;
1313

1414
use chain::chaininterface::{ChainError, ChainWatchInterface};
1515
use ln::channelmanager;
16+
1617
use ln::msgs::{ErrorAction,HandleError,RoutingMessageHandler,NetAddress,GlobalFeatures};
1718
use ln::msgs;
1819
use util::ser::Writeable;
@@ -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,6 +437,30 @@ impl RoutingMessageHandler for Router {
426437

427438
Ok(msg.contents.excess_data.is_empty())
428439
}
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)
452+
}
453+
///This function generates a vec of all node_annoucment messages for all nodes it known of
454+
fn get_all_node_announcements(&self)-> Result<Vec<msgs::NodeAnnouncement>, std::fmt::Error>{
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)
463+
}
429464
}
430465

431466
#[derive(Eq, PartialEq)]
@@ -469,9 +504,10 @@ impl Router {
469504
rgb: [0; 3],
470505
alias: [0; 32],
471506
addresses: Vec::new(),
507+
announcement_message: None,
472508
});
473509
Router {
474-
secp_ctx: Secp256k1::verification_only(),
510+
secp_ctx: Secp256k1::new(),
475511
network_map: RwLock::new(NetworkMap {
476512
channels: HashMap::new(),
477513
our_node_id: our_pubkey,
@@ -832,6 +868,7 @@ mod tests {
832868
rgb: [0; 3],
833869
alias: [0; 32],
834870
addresses: Vec::new(),
871+
announcement_message : None,
835872
});
836873
network.channels.insert(NetworkMap::get_key(1, zero_hash.clone()), ChannelInfo {
837874
features: GlobalFeatures::new(),
@@ -852,6 +889,8 @@ mod tests {
852889
fee_base_msat: 0,
853890
fee_proportional_millionths: 0,
854891
},
892+
announcement_message : None,
893+
last_update_message : None,
855894
});
856895
network.nodes.insert(node2.clone(), NodeInfo {
857896
channels: vec!(NetworkMap::get_key(2, zero_hash.clone()), NetworkMap::get_key(4, zero_hash.clone())),
@@ -862,6 +901,7 @@ mod tests {
862901
rgb: [0; 3],
863902
alias: [0; 32],
864903
addresses: Vec::new(),
904+
announcement_message : None,
865905
});
866906
network.channels.insert(NetworkMap::get_key(2, zero_hash.clone()), ChannelInfo {
867907
features: GlobalFeatures::new(),
@@ -882,6 +922,8 @@ mod tests {
882922
fee_base_msat: 0,
883923
fee_proportional_millionths: 0,
884924
},
925+
announcement_message : None,
926+
last_update_message : None,
885927
});
886928
network.nodes.insert(node8.clone(), NodeInfo {
887929
channels: vec!(NetworkMap::get_key(12, zero_hash.clone()), NetworkMap::get_key(13, zero_hash.clone())),
@@ -892,6 +934,7 @@ mod tests {
892934
rgb: [0; 3],
893935
alias: [0; 32],
894936
addresses: Vec::new(),
937+
announcement_message : None,
895938
});
896939
network.channels.insert(NetworkMap::get_key(12, zero_hash.clone()), ChannelInfo {
897940
features: GlobalFeatures::new(),
@@ -912,6 +955,8 @@ mod tests {
912955
fee_base_msat: 0,
913956
fee_proportional_millionths: 0,
914957
},
958+
announcement_message : None,
959+
last_update_message : None,
915960
});
916961
network.nodes.insert(node3.clone(), NodeInfo {
917962
channels: vec!(
@@ -928,6 +973,7 @@ mod tests {
928973
rgb: [0; 3],
929974
alias: [0; 32],
930975
addresses: Vec::new(),
976+
announcement_message : None,
931977
});
932978
network.channels.insert(NetworkMap::get_key(3, zero_hash.clone()), ChannelInfo {
933979
features: GlobalFeatures::new(),
@@ -948,6 +994,8 @@ mod tests {
948994
fee_base_msat: 100,
949995
fee_proportional_millionths: 0,
950996
},
997+
announcement_message : None,
998+
last_update_message : None,
951999
});
9521000
network.channels.insert(NetworkMap::get_key(4, zero_hash.clone()), ChannelInfo {
9531001
features: GlobalFeatures::new(),
@@ -968,6 +1016,8 @@ mod tests {
9681016
fee_base_msat: 0,
9691017
fee_proportional_millionths: 0,
9701018
},
1019+
announcement_message : None,
1020+
last_update_message : None,
9711021
});
9721022
network.channels.insert(NetworkMap::get_key(13, zero_hash.clone()), ChannelInfo {
9731023
features: GlobalFeatures::new(),
@@ -988,6 +1038,8 @@ mod tests {
9881038
fee_base_msat: 0,
9891039
fee_proportional_millionths: 0,
9901040
},
1041+
announcement_message : None,
1042+
last_update_message : None,
9911043
});
9921044
network.nodes.insert(node4.clone(), NodeInfo {
9931045
channels: vec!(NetworkMap::get_key(5, zero_hash.clone()), NetworkMap::get_key(11, zero_hash.clone())),
@@ -998,6 +1050,7 @@ mod tests {
9981050
rgb: [0; 3],
9991051
alias: [0; 32],
10001052
addresses: Vec::new(),
1053+
announcement_message : None,
10011054
});
10021055
network.channels.insert(NetworkMap::get_key(5, zero_hash.clone()), ChannelInfo {
10031056
features: GlobalFeatures::new(),
@@ -1018,6 +1071,8 @@ mod tests {
10181071
fee_base_msat: 0,
10191072
fee_proportional_millionths: 0,
10201073
},
1074+
announcement_message : None,
1075+
last_update_message : None,
10211076
});
10221077
network.nodes.insert(node5.clone(), NodeInfo {
10231078
channels: vec!(NetworkMap::get_key(6, zero_hash.clone()), NetworkMap::get_key(11, zero_hash.clone())),
@@ -1028,6 +1083,7 @@ mod tests {
10281083
rgb: [0; 3],
10291084
alias: [0; 32],
10301085
addresses: Vec::new(),
1086+
announcement_message : None,
10311087
});
10321088
network.channels.insert(NetworkMap::get_key(6, zero_hash.clone()), ChannelInfo {
10331089
features: GlobalFeatures::new(),
@@ -1048,6 +1104,8 @@ mod tests {
10481104
fee_base_msat: 0,
10491105
fee_proportional_millionths: 0,
10501106
},
1107+
announcement_message : None,
1108+
last_update_message : None,
10511109
});
10521110
network.channels.insert(NetworkMap::get_key(11, zero_hash.clone()), ChannelInfo {
10531111
features: GlobalFeatures::new(),
@@ -1068,6 +1126,8 @@ mod tests {
10681126
fee_base_msat: 0,
10691127
fee_proportional_millionths: 0,
10701128
},
1129+
announcement_message : None,
1130+
last_update_message : None,
10711131
});
10721132
network.nodes.insert(node6.clone(), NodeInfo {
10731133
channels: vec!(NetworkMap::get_key(7, zero_hash.clone())),
@@ -1078,6 +1138,7 @@ mod tests {
10781138
rgb: [0; 3],
10791139
alias: [0; 32],
10801140
addresses: Vec::new(),
1141+
announcement_message : None,
10811142
});
10821143
network.channels.insert(NetworkMap::get_key(7, zero_hash.clone()), ChannelInfo {
10831144
features: GlobalFeatures::new(),
@@ -1098,6 +1159,8 @@ mod tests {
10981159
fee_base_msat: 0,
10991160
fee_proportional_millionths: 0,
11001161
},
1162+
announcement_message : None,
1163+
last_update_message : None,
11011164
});
11021165
}
11031166

src/util/test_utils.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ impl TestRoutingMessageHandler {
154154
TestRoutingMessageHandler {}
155155
}
156156
}
157-
157+
use std;
158158
impl msgs::RoutingMessageHandler for TestRoutingMessageHandler {
159159
fn handle_node_announcement(&self, _msg: &msgs::NodeAnnouncement) -> Result<bool, HandleError> {
160160
Err(HandleError { err: "", action: None })
@@ -166,6 +166,14 @@ impl msgs::RoutingMessageHandler for TestRoutingMessageHandler {
166166
Err(HandleError { err: "", action: None })
167167
}
168168
fn handle_htlc_fail_channel_update(&self, _update: &msgs::HTLCFailChannelUpdate) {}
169+
fn get_all_channel_announcements(&self)-> Result<Vec<(msgs::ChannelAnnouncement,msgs::ChannelUpdate)>, std::fmt::Error>
170+
{
171+
return Ok(Vec::new());
172+
}
173+
fn get_all_node_announcements(&self)-> Result<Vec<(msgs::NodeAnnouncement)>, std::fmt::Error>
174+
{
175+
return Ok(Vec::new());
176+
}
169177
}
170178

171179
pub struct TestLogger {

0 commit comments

Comments
 (0)