Skip to content

Commit 6cc739f

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 2d6ad40 commit 6cc739f

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

lightning/src/chain/chainmonitor.rs

Lines changed: 22 additions & 1 deletion
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};
@@ -258,6 +259,8 @@ pub struct ChainMonitor<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F
258259
/// it to give to users (or [`MonitorEvent`]s for `ChannelManager` to process).
259260
event_notifier: Notifier,
260261
pending_send_only_events: Mutex<Vec<MessageSendEvent>>,
262+
263+
our_peerstorage_encryption_key: PeerStorageKey,
261264
}
262265

263266
impl<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref> ChainMonitor<ChannelSigner, C, T, F, L, P>
@@ -411,6 +414,7 @@ where C::Target: chain::Filter,
411414
highest_chain_height: AtomicUsize::new(0),
412415
event_notifier: Notifier::new(),
413416
pending_send_only_events: Mutex::new(Vec::new()),
417+
our_peerstorage_encryption_key
414418
}
415419
}
416420

@@ -693,7 +697,12 @@ where C::Target: chain::Filter,
693697
}
694698

695699
fn send_peer_storage(&self, their_node_id: PublicKey) {
696-
// TODO: Serialize `ChannelMonitor`s inside `our_peer_storage` and update [`OurPeerStorage::block_height`] accordingly.
700+
// TODO: Serialize `ChannelMonitor`s inside `our_peer_storage`.
701+
702+
let our_peer_storage = OurPeerStorage::create_from_data(self.our_peerstorage_encryption_key, Vec::new());
703+
log_debug!(self.logger, "Sending Peer Storage from chainmonitor");
704+
self.pending_send_only_events.lock().unwrap().push(MessageSendEvent::SendPeerStorage { node_id: their_node_id,
705+
msg: msgs::PeerStorage { data: our_peer_storage.encrypted_data() } })
697706
}
698707
}
699708

@@ -737,6 +746,12 @@ where
737746
monitor.block_connected(
738747
header, txdata, height, &*self.broadcaster, &*self.fee_estimator, &self.logger)
739748
});
749+
750+
// Send peer storage everytime a new block arrives.
751+
for node_id in self.get_peer_node_ids() {
752+
self.send_peer_storage(node_id);
753+
}
754+
740755
// Assume we may have some new events and wake the event processor
741756
self.event_notifier.notify();
742757
}
@@ -788,6 +803,12 @@ where
788803
header, height, &*self.broadcaster, &*self.fee_estimator, &self.logger
789804
)
790805
});
806+
807+
// Send peer storage everytime a new block arrives.
808+
for node_id in self.get_peer_node_ids() {
809+
self.send_peer_storage(node_id);
810+
}
811+
791812
// Assume we may have some new events and wake the event processor
792813
self.event_notifier.notify();
793814
}

0 commit comments

Comments
 (0)