Skip to content

Commit 3f73c8e

Browse files
Aditya Sharmaadi2011
Aditya Sharma
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 9db37f2 commit 3f73c8e

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

lightning/src/chain/chainmonitor.rs

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ use crate::chain::channelmonitor::{ChannelMonitor, ChannelMonitorUpdate, Balance
3535
use crate::chain::transaction::{OutPoint, TransactionData};
3636
use crate::ln::types::ChannelId;
3737
use crate::ln::msgs::{self, BaseMessageHandler, Init, MessageSendEvent};
38+
use crate::ln::our_peer_storage::DecryptedOurPeerStorage;
3839
use crate::sign::ecdsa::EcdsaChannelSigner;
3940
use crate::sign::{EntropySource, PeerStorageKey};
4041
use crate::events::{self, Event, EventHandler, ReplayEvent};
@@ -262,6 +263,8 @@ pub struct ChainMonitor<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F
262263

263264
/// Messages to send to the peer. This is currently used to distribute PeerStorage to channel partners.
264265
pending_send_only_events: Mutex<Vec<MessageSendEvent>>,
266+
267+
our_peerstorage_encryption_key: PeerStorageKey,
265268
}
266269

267270
impl<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref, ES: Deref> ChainMonitor<ChannelSigner, C, T, F, L, P, ES>
@@ -421,6 +424,7 @@ where C::Target: chain::Filter,
421424
highest_chain_height: AtomicUsize::new(0),
422425
event_notifier: Notifier::new(),
423426
pending_send_only_events: Mutex::new(Vec::new()),
427+
our_peerstorage_encryption_key
424428
}
425429
}
426430

@@ -701,7 +705,19 @@ where C::Target: chain::Filter,
701705
}
702706

703707
fn send_peer_storage(&self, their_node_id: PublicKey) {
704-
// TODO: Serialize `ChannelMonitor`s inside `our_peer_storage` and update [`OurPeerStorage::block_height`] accordingly.
708+
// TODO: Serialize `ChannelMonitor`s inside `our_peer_storage`.
709+
710+
let random_bytes = self.entropy_source.get_secure_random_bytes();
711+
let serialised_channels = Vec::new();
712+
let our_peer_storage = DecryptedOurPeerStorage::new(serialised_channels);
713+
let cipher = our_peer_storage.encrypt(&self.our_peerstorage_encryption_key, &random_bytes);
714+
715+
log_debug!(self.logger, "Sending Peer Storage to {}", log_pubkey!(their_node_id));
716+
let send_peer_storage_event = MessageSendEvent::SendPeerStorage {
717+
node_id: their_node_id, msg: msgs::PeerStorage { data: cipher.into_vec() }
718+
};
719+
720+
self.pending_send_only_events.lock().unwrap().push(send_peer_storage_event)
705721
}
706722
}
707723

@@ -747,6 +763,12 @@ where
747763
monitor.block_connected(
748764
header, txdata, height, &*self.broadcaster, &*self.fee_estimator, &self.logger)
749765
});
766+
767+
// Send peer storage everytime a new block arrives.
768+
for node_id in self.all_counterparty_node_ids() {
769+
self.send_peer_storage(node_id);
770+
}
771+
750772
// Assume we may have some new events and wake the event processor
751773
self.event_notifier.notify();
752774
}
@@ -799,6 +821,12 @@ where
799821
header, height, &*self.broadcaster, &*self.fee_estimator, &self.logger
800822
)
801823
});
824+
825+
// Send peer storage everytime a new block arrives.
826+
for node_id in self.all_counterparty_node_ids() {
827+
self.send_peer_storage(node_id);
828+
}
829+
802830
// Assume we may have some new events and wake the event processor
803831
self.event_notifier.notify();
804832
}

0 commit comments

Comments
 (0)