Skip to content

Commit 37aa11a

Browse files
Aditya Sharmaadi2011
authored andcommitted
Distribute PeerStorage from ChainMonitor
Everytime a new block is added we send PeerStorage to all of our channel partner. - Add our_peer_storage and our_peerstorage_encryption_key to ChainMonitor - Write send_peer_storage() and send it to all channel partners whenever a new block is added
1 parent c48a94a commit 37aa11a

File tree

1 file changed

+24
-4
lines changed

1 file changed

+24
-4
lines changed

lightning/src/chain/chainmonitor.rs

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ use crate::chain::channelmonitor::{ChannelMonitor, ChannelMonitorUpdate, Balance
3333
use crate::chain::transaction::{OutPoint, TransactionData};
3434
use crate::ln::types::ChannelId;
3535
use crate::ln::msgs::{self, BaseMessageHandler, Init, MessageSendEvent};
36+
use crate::ln::our_peer_storage::OurPeerStorage;
3637
use crate::sign::ecdsa::EcdsaChannelSigner;
3738
use crate::events::{self, Event, EventHandler, ReplayEvent};
3839
use crate::util::logger::{Logger, WithContext};
@@ -255,6 +256,8 @@ pub struct ChainMonitor<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F
255256
/// it to give to users (or [`MonitorEvent`]s for `ChannelManager` to process).
256257
event_notifier: Notifier,
257258
pending_send_only_events: Mutex<Vec<MessageSendEvent>>,
259+
260+
our_peerstorage_encryption_key: [u8; 32],
258261
}
259262

260263
impl<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref> ChainMonitor<ChannelSigner, C, T, F, L, P>
@@ -408,6 +411,7 @@ where C::Target: chain::Filter,
408411
highest_chain_height: AtomicUsize::new(0),
409412
event_notifier: Notifier::new(),
410413
pending_send_only_events: Mutex::new(Vec::new()),
414+
our_peerstorage_encryption_key
411415
}
412416
}
413417

@@ -690,7 +694,12 @@ where C::Target: chain::Filter,
690694
}
691695

692696
fn send_peer_storage(&self, their_node_id: PublicKey) {
693-
// TODO: Serialize `ChannelMonitor`s inside `our_peer_storage` and update [`OurPeerStorage::block_height`] accordingly.
697+
// TODO: Serialize `ChannelMonitor`s inside `our_peer_storage`.
698+
699+
let our_peer_storage = OurPeerStorage::create_from_data(self.our_peerstorage_encryption_key, Vec::new());
700+
log_debug!(self.logger, "Sending Peer Storage from chainmonitor");
701+
self.pending_send_only_events.lock().unwrap().push(MessageSendEvent::SendPeerStorage { node_id: their_node_id,
702+
msg: msgs::PeerStorage { data: our_peer_storage.encrypted_data() } })
694703
}
695704
}
696705

@@ -703,9 +712,8 @@ where C::Target: chain::Filter,
703712
{
704713
fn get_and_clear_pending_msg_events(&self) -> Vec<MessageSendEvent> {
705714
let mut pending_events = self.pending_send_only_events.lock().unwrap();
706-
let mut ret = Vec::new();
707-
core::mem::swap(&mut ret, &mut *pending_events);
708-
ret }
715+
core::mem::take(&mut *pending_events)
716+
}
709717

710718
fn peer_disconnected(&self, _their_node_id: PublicKey) {}
711719

@@ -735,6 +743,12 @@ where
735743
monitor.block_connected(
736744
header, txdata, height, &*self.broadcaster, &*self.fee_estimator, &self.logger)
737745
});
746+
747+
// Send peer storage everytime a new block arrives.
748+
for node_id in self.get_peer_node_ids() {
749+
self.send_peer_storage(node_id);
750+
}
751+
738752
// Assume we may have some new events and wake the event processor
739753
self.event_notifier.notify();
740754
}
@@ -786,6 +800,12 @@ where
786800
header, height, &*self.broadcaster, &*self.fee_estimator, &self.logger
787801
)
788802
});
803+
804+
// Send peer storage everytime a new block arrives.
805+
for node_id in self.get_peer_node_ids() {
806+
self.send_peer_storage(node_id);
807+
}
808+
789809
// Assume we may have some new events and wake the event processor
790810
self.event_notifier.notify();
791811
}

0 commit comments

Comments
 (0)