Skip to content

Commit bb349a8

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 87fd560 commit bb349a8

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
@@ -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::DecryptedOurPeerStorage;
3637
use crate::sign::ecdsa::EcdsaChannelSigner;
3738
use crate::sign::{EntropySource, PeerStorageKey};
3839
use crate::events::{self, Event, EventHandler, ReplayEvent};
@@ -260,6 +261,8 @@ pub struct ChainMonitor<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F
260261

261262
/// Messages to send to the peer. This is currently used to distribute PeerStorage to channel partners.
262263
pending_send_only_events: Mutex<Vec<MessageSendEvent>>,
264+
265+
our_peerstorage_encryption_key: PeerStorageKey,
263266
}
264267

265268
impl<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref, ES: Deref> ChainMonitor<ChannelSigner, C, T, F, L, P, ES>
@@ -419,6 +422,7 @@ where C::Target: chain::Filter,
419422
highest_chain_height: AtomicUsize::new(0),
420423
event_notifier: Notifier::new(),
421424
pending_send_only_events: Mutex::new(Vec::new()),
425+
our_peerstorage_encryption_key
422426
}
423427
}
424428

@@ -699,7 +703,19 @@ where C::Target: chain::Filter,
699703
}
700704

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

@@ -745,6 +761,12 @@ where
745761
monitor.block_connected(
746762
header, txdata, height, &*self.broadcaster, &*self.fee_estimator, &self.logger)
747763
});
764+
765+
// Send peer storage everytime a new block arrives.
766+
for node_id in self.all_counterparty_node_ids() {
767+
self.send_peer_storage(node_id);
768+
}
769+
748770
// Assume we may have some new events and wake the event processor
749771
self.event_notifier.notify();
750772
}
@@ -797,6 +819,12 @@ where
797819
header, height, &*self.broadcaster, &*self.fee_estimator, &self.logger
798820
)
799821
});
822+
823+
// Send peer storage everytime a new block arrives.
824+
for node_id in self.all_counterparty_node_ids() {
825+
self.send_peer_storage(node_id);
826+
}
827+
800828
// Assume we may have some new events and wake the event processor
801829
self.event_notifier.notify();
802830
}

0 commit comments

Comments
 (0)