@@ -49,6 +49,7 @@ use crate::events::{self, Event, EventHandler, EventsProvider, InboundChannelFun
4949// construct one themselves.
5050use crate::ln::inbound_payment;
5151use crate::ln::types::ChannelId;
52+ use crate::offers::flow::OffersMessageFlow;
5253use crate::types::payment::{PaymentHash, PaymentPreimage, PaymentSecret};
5354use crate::ln::channel::{self, Channel, ChannelError, ChannelUpdateStatus, FundedChannel, ShutdownResult, UpdateFulfillCommitFetch, OutboundV1Channel, ReconnectionMsg, InboundV1Channel, WithChannelContext};
5455use crate::ln::channel::PendingV2Channel;
@@ -1718,6 +1719,7 @@ where
17181719/// # tx_broadcaster: &dyn lightning::chain::chaininterface::BroadcasterInterface,
17191720/// # router: &lightning::routing::router::DefaultRouter<&NetworkGraph<&'a L>, &'a L, &ES, &S, SP, SL>,
17201721/// # message_router: &lightning::onion_message::messenger::DefaultMessageRouter<&NetworkGraph<&'a L>, &'a L, &ES>,
1722+ /// flow: lightning::offers::flow::OffersMessageFlow<&ES,&lightning::onion_message::messenger::DefaultMessageRouter<&NetworkGraph<&'a L>, &'a L, &ES>, &lightning::routing::router::DefaultRouter<&NetworkGraph<&'a L>, &'a L, &ES, &S, SP, SL>>,
17211723/// # logger: &L,
17221724/// # entropy_source: &ES,
17231725/// # node_signer: &dyn lightning::sign::NodeSigner,
@@ -1733,7 +1735,7 @@ where
17331735/// };
17341736/// let default_config = UserConfig::default();
17351737/// let channel_manager = ChannelManager::new(
1736- /// fee_estimator, chain_monitor, tx_broadcaster, router, message_router, logger,
1738+ /// fee_estimator, chain_monitor, tx_broadcaster, router, message_router, flow, logger,
17371739/// entropy_source, node_signer, signer_provider, default_config.clone(), params, current_timestamp,
17381740/// );
17391741///
@@ -2445,6 +2447,11 @@ where
24452447 router: R,
24462448 message_router: MR,
24472449
2450+ #[cfg(test)]
2451+ pub(super) flow: OffersMessageFlow<ES, MR, R>,
2452+ #[cfg(not(test))]
2453+ flow: OffersMessageFlow<ES, MR, R>,
2454+
24482455 /// See `ChannelManager` struct-level documentation for lock order requirements.
24492456 #[cfg(any(test, feature = "_test_utils"))]
24502457 pub(super) best_block: RwLock<BestBlock>,
@@ -3540,8 +3547,8 @@ where
35403547 /// [`block_disconnected`]: chain::Listen::block_disconnected
35413548 /// [`params.best_block.block_hash`]: chain::BestBlock::block_hash
35423549 pub fn new(
3543- fee_est: F, chain_monitor: M, tx_broadcaster: T, router: R, message_router: MR, logger: L ,
3544- entropy_source: ES, node_signer: NS, signer_provider: SP, config: UserConfig,
3550+ fee_est: F, chain_monitor: M, tx_broadcaster: T, router: R, message_router: MR, flow: OffersMessageFlow<ES, MR, R> ,
3551+ logger: L, entropy_source: ES, node_signer: NS, signer_provider: SP, config: UserConfig,
35453552 params: ChainParameters, current_timestamp: u32,
35463553 ) -> Self {
35473554 let mut secp_ctx = Secp256k1::new();
@@ -3555,6 +3562,7 @@ where
35553562 tx_broadcaster,
35563563 router,
35573564 message_router,
3565+ flow,
35583566
35593567 best_block: RwLock::new(params.best_block),
35603568
@@ -11499,6 +11507,7 @@ where
1149911507
1150011508 self.transactions_confirmed(header, txdata, height);
1150111509 self.best_block_updated(header, height);
11510+ self.flow.best_block_updated(header);
1150211511 }
1150311512
1150411513 fn block_disconnected(&self, header: &Header, height: u32) {
@@ -13602,7 +13611,7 @@ impl Readable for VecDeque<(Event, Option<EventCompletionAction>)> {
1360213611/// which you've already broadcasted the transaction.
1360313612///
1360413613/// [`ChainMonitor`]: crate::chain::chainmonitor::ChainMonitor
13605- pub struct ChannelManagerReadArgs<'a, M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>
13614+ pub struct ChannelManagerReadArgs<'a, M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref>
1360613615where
1360713616 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
1360813617 T::Target: BroadcasterInterface,
@@ -13648,6 +13657,7 @@ where
1364813657 /// The [`MessageRouter`] used for constructing [`BlindedMessagePath`]s for [`Offer`]s,
1364913658 /// [`Refund`]s, and any reply paths.
1365013659 pub message_router: MR,
13660+
1365113661 /// The Logger for use in the ChannelManager and which may be used to log information during
1365213662 /// deserialization.
1365313663 pub logger: L,
@@ -13669,7 +13679,7 @@ where
1366913679 pub channel_monitors: HashMap<ChannelId, &'a ChannelMonitor<<SP::Target as SignerProvider>::EcdsaSigner>>,
1367013680}
1367113681
13672- impl<'a, M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>
13682+ impl<'a, M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref>
1367313683 ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>
1367413684where
1367513685 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -13703,7 +13713,7 @@ where
1370313713
1370413714// Implement ReadableArgs for an Arc'd ChannelManager to make it a bit easier to work with the
1370513715// SipmleArcChannelManager type:
13706- impl<'a, M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>
13716+ impl<'a, M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref>
1370713717 ReadableArgs<ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>> for (BlockHash, Arc<ChannelManager<M, T, ES, NS, SP, F, R, MR, L>>)
1370813718where
1370913719 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -13722,7 +13732,7 @@ where
1372213732 }
1372313733}
1372413734
13725- impl<'a, M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>
13735+ impl<'a, M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref>
1372613736 ReadableArgs<ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>> for (BlockHash, ChannelManager<M, T, ES, NS, SP, F, R, MR, L>)
1372713737where
1372813738 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -14704,15 +14714,19 @@ where
1470414714 }
1470514715 }
1470614716
14717+ let best_block = BestBlock::new(best_block_hash, best_block_height);
14718+ let flow = OffersMessageFlow::new(chain_hash, best_block, our_network_pubkey, highest_seen_timestamp, expanded_inbound_key, args.entropy_source.clone(), args.message_router.clone(), args.router.clone());
14719+
1470714720 let channel_manager = ChannelManager {
1470814721 chain_hash,
1470914722 fee_estimator: bounded_fee_estimator,
1471014723 chain_monitor: args.chain_monitor,
1471114724 tx_broadcaster: args.tx_broadcaster,
1471214725 router: args.router,
1471314726 message_router: args.message_router,
14727+ flow,
1471414728
14715- best_block: RwLock::new(BestBlock::new(best_block_hash, best_block_height) ),
14729+ best_block: RwLock::new(best_block ),
1471614730
1471714731 inbound_payment_key: expanded_inbound_key,
1471814732 pending_outbound_payments: pending_outbounds,
0 commit comments