Skip to content

Commit 46cba36

Browse files
Aditya Sharmaadi2011
Aditya Sharma
authored andcommitted
Enable ChainMonitor to distribute PeerStorage
To enable ChainMonitor sending peer storage to channel partners whenever a new block is added, a new message handler, `SendingOnlyMessageHandler`, has been introduced. This allows the `ChainMonitor` to handle the peer storage distribution. Key changes: - Introduce the SendingOnlyMessageHandler trait to facilitate peer storage distribution. - Add SendingOnlyMessageHandler into the MessageHandler. - Implement SendingOnlyMessageHandler for ChainMonitor and IgnoringMessageHandler. - Process SendingOnlyMessageHandler events inside process_events().
1 parent 8b25bc4 commit 46cba36

File tree

8 files changed

+134
-24
lines changed

8 files changed

+134
-24
lines changed

fuzz/src/full_stack.rs

+2
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,7 @@ type PeerMan<'a> = PeerManager<
242242
Arc<dyn Logger>,
243243
IgnoringMessageHandler,
244244
Arc<KeyProvider>,
245+
IgnoringMessageHandler,
245246
>;
246247

247248
struct MoneyLossDetector<'a> {
@@ -673,6 +674,7 @@ pub fn do_test(mut data: &[u8], logger: &Arc<dyn Logger>) {
673674
route_handler: gossip_sync.clone(),
674675
onion_message_handler: IgnoringMessageHandler {},
675676
custom_message_handler: IgnoringMessageHandler {},
677+
send_only_message_handler: IgnoringMessageHandler {},
676678
};
677679
let random_data = [
678680
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

lightning-background-processor/src/lib.rs

+2
Original file line numberDiff line numberDiff line change
@@ -1210,6 +1210,7 @@ mod tests {
12101210
Arc<test_utils::TestLogger>,
12111211
IgnoringMessageHandler,
12121212
Arc<KeysManager>,
1213+
IgnoringMessageHandler,
12131214
>,
12141215
>,
12151216
chain_monitor: Arc<ChainMonitor>,
@@ -1623,6 +1624,7 @@ mod tests {
16231624
route_handler: Arc::new(test_utils::TestRoutingMessageHandler::new()),
16241625
onion_message_handler: messenger.clone(),
16251626
custom_message_handler: IgnoringMessageHandler {},
1627+
send_only_message_handler: IgnoringMessageHandler {},
16261628
};
16271629
let peer_manager = Arc::new(PeerManager::new(
16281630
msg_handler,

lightning-liquidity/tests/common/mod.rs

+2
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ pub(crate) struct Node {
130130
>,
131131
>,
132132
Arc<KeysManager>,
133+
Arc<test_utils::TestSendingOnlyMessageHandler>,
133134
>,
134135
>,
135136
pub(crate) liquidity_manager:
@@ -465,6 +466,7 @@ pub(crate) fn create_liquidity_node(
465466
chan_handler: Arc::new(test_utils::TestChannelMessageHandler::new(
466467
ChainHash::using_genesis_block(Network::Testnet),
467468
)),
469+
send_only_message_handler: Arc::new(test_utils::TestSendingOnlyMessageHandler::new()),
468470
route_handler: Arc::new(test_utils::TestRoutingMessageHandler::new()),
469471
onion_message_handler: IgnoringMessageHandler {},
470472
custom_message_handler: Arc::clone(&liquidity_manager),

lightning-net-tokio/src/lib.rs

+3
Original file line numberDiff line numberDiff line change
@@ -841,6 +841,7 @@ mod tests {
841841
route_handler: Arc::clone(&a_handler),
842842
onion_message_handler: Arc::new(IgnoringMessageHandler {}),
843843
custom_message_handler: Arc::new(IgnoringMessageHandler {}),
844+
send_only_message_handler: Arc::new(IgnoringMessageHandler {}),
844845
};
845846
let a_manager = Arc::new(PeerManager::new(
846847
a_msg_handler,
@@ -864,6 +865,7 @@ mod tests {
864865
route_handler: Arc::clone(&b_handler),
865866
onion_message_handler: Arc::new(IgnoringMessageHandler {}),
866867
custom_message_handler: Arc::new(IgnoringMessageHandler {}),
868+
send_only_message_handler: Arc::new(IgnoringMessageHandler {}),
867869
};
868870
let b_manager = Arc::new(PeerManager::new(
869871
b_msg_handler,
@@ -926,6 +928,7 @@ mod tests {
926928
onion_message_handler: Arc::new(IgnoringMessageHandler {}),
927929
route_handler: Arc::new(lightning::ln::peer_handler::IgnoringMessageHandler {}),
928930
custom_message_handler: Arc::new(IgnoringMessageHandler {}),
931+
send_only_message_handler: Arc::new(IgnoringMessageHandler {}),
929932
};
930933
let a_manager = Arc::new(PeerManager::new(
931934
a_msg_handler,

lightning/src/chain/chainmonitor.rs

+30-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ use crate::util::errors::APIError;
3939
use crate::util::persist::MonitorName;
4040
use crate::util::wakers::{Future, Notifier};
4141
use crate::ln::channel_state::ChannelDetails;
42-
42+
use crate::ln::msgs::SendingOnlyMessageHandler;
43+
use crate::events::{MessageSendEvent, MessageSendEventsProvider};
4344
use crate::prelude::*;
4445
use crate::sync::{RwLock, RwLockReadGuard, Mutex, MutexGuard};
4546
use core::ops::Deref;
@@ -253,6 +254,7 @@ pub struct ChainMonitor<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F
253254
/// A [`Notifier`] used to wake up the background processor in case we have any [`Event`]s for
254255
/// it to give to users (or [`MonitorEvent`]s for `ChannelManager` to process).
255256
event_notifier: Notifier,
257+
pending_send_only_events: Mutex<Vec<MessageSendEvent>>,
256258
}
257259

258260
impl<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref> ChainMonitor<ChannelSigner, C, T, F, L, P>
@@ -397,6 +399,7 @@ where C::Target: chain::Filter,
397399
pending_monitor_events: Mutex::new(Vec::new()),
398400
highest_chain_height: AtomicUsize::new(0),
399401
event_notifier: Notifier::new(),
402+
pending_send_only_events: Mutex::new(Vec::new()),
400403
}
401404
}
402405

@@ -667,6 +670,32 @@ where C::Target: chain::Filter,
667670
}
668671
}
669672

673+
674+
impl<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref> MessageSendEventsProvider for ChainMonitor<ChannelSigner, C, T, F, L, P>
675+
where C::Target: chain::Filter,
676+
T::Target: BroadcasterInterface,
677+
F::Target: FeeEstimator,
678+
L::Target: Logger,
679+
P::Target: Persist<ChannelSigner>,
680+
{
681+
fn get_and_clear_pending_msg_events(&self) -> Vec<MessageSendEvent> {
682+
let mut pending_events = self.pending_send_only_events.lock().unwrap();
683+
let mut ret = Vec::new();
684+
core::mem::swap(&mut ret, &mut *pending_events);
685+
ret }
686+
}
687+
688+
impl<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref> SendingOnlyMessageHandler for ChainMonitor<ChannelSigner, C, T, F, L, P>
689+
where C::Target: chain::Filter,
690+
T::Target: BroadcasterInterface,
691+
F::Target: FeeEstimator,
692+
L::Target: Logger,
693+
P::Target: Persist<ChannelSigner>,
694+
{
695+
fn send_peer_storage(&self, _their_node_id: PublicKey) {
696+
}
697+
}
698+
670699
impl<ChannelSigner: EcdsaChannelSigner, C: Deref, T: Deref, F: Deref, L: Deref, P: Deref>
671700
chain::Listen for ChainMonitor<ChannelSigner, C, T, F, L, P>
672701
where

lightning/src/ln/msgs.rs

+13
Original file line numberDiff line numberDiff line change
@@ -1517,6 +1517,19 @@ pub struct CommitmentUpdate {
15171517
pub commitment_signed: CommitmentSigned,
15181518
}
15191519

1520+
/// A trait for sending messages to peers without handling any incoming messages.
1521+
///
1522+
/// This trait is designed to handle outbound-only communication, allowing implementations
1523+
/// to send specific types of messages to connected peers identified by their public keys.
1524+
///
1525+
/// This trait extends [`MessageSendEventsProvider`], meaning it is capable of generating
1526+
/// message send events, which can be processed using
1527+
/// [`MessageSendEventsProvider::get_and_clear_pending_msg_events`].
1528+
pub trait SendingOnlyMessageHandler: MessageSendEventsProvider {
1529+
/// Send `peer_storage` message to the given peer.
1530+
fn send_peer_storage(&self, their_node_id: PublicKey);
1531+
}
1532+
15201533
/// A trait to describe an object which can receive channel messages.
15211534
///
15221535
/// Messages MAY be called in parallel when they originate from different `their_node_ids`, however

0 commit comments

Comments
 (0)