Skip to content

Commit 28d2380

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 bf66ec4 commit 28d2380

File tree

1 file changed

+25
-3
lines changed

1 file changed

+25
-3
lines changed

lightning/src/chain/chainmonitor.rs

+25-3
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ use crate::types::features::{InitFeatures, NodeFeatures};
4646
use core::ops::Deref;
4747
use core::sync::atomic::{AtomicUsize, Ordering};
4848
use bitcoin::secp256k1::PublicKey;
49+
use crate::ln::our_peer_storage::OurPeerStorage;
4950

5051
/// `Persist` defines behavior for persisting channel monitors: this could mean
5152
/// writing once to disk, and/or uploading to one or more backup services.
@@ -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>
@@ -390,7 +393,7 @@ where C::Target: chain::Filter,
390393
/// transactions relevant to the watched channels.
391394
///
392395
/// # Note
393-
/// `our_peerstorage_encryption_key` must be obtained from [`sign::KeysManager::get_peer_storage_key()`].
396+
/// `our_peerstorage_encryption_key` must be obtained from [`crate::sign::KeysManager::get_peer_storage_key()`].
394397
/// This key is used to encrypt peer storage backups.
395398
///
396399
/// **Important**: This key should not be set arbitrarily or changed after initialization. The same key
@@ -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 encrypted_data= 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: encrypted_data } })
694703
}
695704
}
696705

@@ -705,7 +714,8 @@ where C::Target: chain::Filter,
705714
let mut pending_events = self.pending_send_only_events.lock().unwrap();
706715
let mut ret = Vec::new();
707716
core::mem::swap(&mut ret, &mut *pending_events);
708-
ret }
717+
ret
718+
}
709719

710720
fn peer_disconnected(&self, _their_node_id: PublicKey) {}
711721

@@ -735,6 +745,12 @@ where
735745
monitor.block_connected(
736746
header, txdata, height, &*self.broadcaster, &*self.fee_estimator, &self.logger)
737747
});
748+
749+
// Send peer storage everytime a new block arrives.
750+
for node_id in self.get_peer_node_ids() {
751+
self.send_peer_storage(node_id);
752+
}
753+
738754
// Assume we may have some new events and wake the event processor
739755
self.event_notifier.notify();
740756
}
@@ -786,6 +802,12 @@ where
786802
header, height, &*self.broadcaster, &*self.fee_estimator, &self.logger
787803
)
788804
});
805+
806+
// Send peer storage everytime a new block arrives.
807+
for node_id in self.get_peer_node_ids() {
808+
self.send_peer_storage(node_id);
809+
}
810+
789811
// Assume we may have some new events and wake the event processor
790812
self.event_notifier.notify();
791813
}

0 commit comments

Comments
 (0)