@@ -47,6 +47,7 @@ use crate::events::{self, Event, EventHandler, EventsProvider, InboundChannelFun
4747// construct one themselves.
4848use crate::ln::inbound_payment;
4949use crate::ln::types::ChannelId;
50+ use crate::offers::flow::OffersMessageFlow;
5051use crate::types::payment::{PaymentHash, PaymentPreimage, PaymentSecret};
5152use crate::ln::channel::{self, Channel, ChannelError, ChannelUpdateStatus, FundedChannel, ShutdownResult, UpdateFulfillCommitFetch, OutboundV1Channel, ReconnectionMsg, InboundV1Channel, WithChannelContext};
5253#[cfg(any(dual_funding, splicing))]
@@ -1586,7 +1587,7 @@ pub trait AChannelManager {
15861587 /// A type implementing [`EntropySource`].
15871588 type EntropySource: EntropySource + ?Sized;
15881589 /// A type that may be dereferenced to [`Self::EntropySource`].
1589- type ES: Deref<Target = Self::EntropySource>;
1590+ type ES: Deref<Target = Self::EntropySource> + Clone ;
15901591 /// A type implementing [`NodeSigner`].
15911592 type NodeSigner: NodeSigner + ?Sized;
15921593 /// A type that may be dereferenced to [`Self::NodeSigner`].
@@ -1604,11 +1605,11 @@ pub trait AChannelManager {
16041605 /// A type implementing [`Router`].
16051606 type Router: Router + ?Sized;
16061607 /// A type that may be dereferenced to [`Self::Router`].
1607- type R: Deref<Target = Self::Router>;
1608+ type R: Deref<Target = Self::Router> + Clone ;
16081609 /// A type implementing [`MessageRouter`].
16091610 type MessageRouter: MessageRouter + ?Sized;
16101611 /// A type that may be dereferenced to [`Self::MessageRouter`].
1611- type MR: Deref<Target = Self::MessageRouter>;
1612+ type MR: Deref<Target = Self::MessageRouter> + Clone ;
16121613 /// A type implementing [`Logger`].
16131614 type Logger: Logger + ?Sized;
16141615 /// A type that may be dereferenced to [`Self::Logger`].
@@ -1617,7 +1618,7 @@ pub trait AChannelManager {
16171618 fn get_cm(&self) -> &ChannelManager<Self::M, Self::T, Self::ES, Self::NS, Self::SP, Self::F, Self::R, Self::MR, Self::L>;
16181619}
16191620
1620- impl<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref> AChannelManager
1621+ impl<M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref> AChannelManager
16211622for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
16221623where
16231624 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -2440,7 +2441,7 @@ where
24402441// |
24412442// |__`pending_background_events`
24422443//
2443- pub struct ChannelManager<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>
2444+ pub struct ChannelManager<M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref>
24442445where
24452446 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
24462447 T::Target: BroadcasterInterface,
@@ -2460,6 +2461,8 @@ where
24602461 router: R,
24612462 message_router: MR,
24622463
2464+ pub(crate) flow: OffersMessageFlow<ES, MR, R>,
2465+
24632466 /// See `ChannelManager` struct-level documentation for lock order requirements.
24642467 #[cfg(test)]
24652468 pub(super) best_block: RwLock<BestBlock>,
@@ -3535,7 +3538,7 @@ macro_rules! process_events_body {
35353538 }
35363539}
35373540
3538- impl<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref> ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
3541+ impl<M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref> ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
35393542where
35403543 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
35413544 T::Target: BroadcasterInterface,
@@ -3572,6 +3575,15 @@ where
35723575 let mut secp_ctx = Secp256k1::new();
35733576 secp_ctx.seeded_randomize(&entropy_source.get_secure_random_bytes());
35743577 let expanded_inbound_key = node_signer.get_inbound_payment_key();
3578+
3579+ let chain_hash = ChainHash::using_genesis_block(params.network);
3580+ let our_network_pubkey = node_signer.get_node_id(Recipient::Node).unwrap();
3581+
3582+ let flow = OffersMessageFlow::new(
3583+ chain_hash, params.best_block, our_network_pubkey, current_timestamp, expanded_inbound_key,
3584+ entropy_source.clone(), message_router.clone(), router.clone()
3585+ );
3586+
35753587 ChannelManager {
35763588 default_configuration: config.clone(),
35773589 chain_hash: ChainHash::using_genesis_block(params.network),
@@ -3580,6 +3592,7 @@ where
35803592 tx_broadcaster,
35813593 router,
35823594 message_router,
3595+ flow,
35833596
35843597 best_block: RwLock::new(params.best_block),
35853598
@@ -3592,7 +3605,7 @@ where
35923605 outpoint_to_peer: Mutex::new(new_hash_map()),
35933606 short_to_chan_info: FairRwLock::new(new_hash_map()),
35943607
3595- our_network_pubkey: node_signer.get_node_id(Recipient::Node).unwrap() ,
3608+ our_network_pubkey,
35963609 secp_ctx,
35973610
35983611 inbound_payment_key: expanded_inbound_key,
@@ -10204,7 +10217,7 @@ macro_rules! create_refund_builder { ($self: ident, $builder: ty) => {
1020410217/// even if multiple invoices are received.
1020510218pub const OFFERS_MESSAGE_REQUEST_LIMIT: usize = 10;
1020610219
10207- impl<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref> ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
10220+ impl<M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref> ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
1020810221where
1020910222 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
1021010223 T::Target: BroadcasterInterface,
@@ -11066,7 +11079,7 @@ where
1106611079 }
1106711080}
1106811081
11069- impl<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref> MessageSendEventsProvider for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
11082+ impl<M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref> MessageSendEventsProvider for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
1107011083where
1107111084 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
1107211085 T::Target: BroadcasterInterface,
@@ -11142,7 +11155,7 @@ where
1114211155 }
1114311156}
1114411157
11145- impl<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref> EventsProvider for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
11158+ impl<M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref> EventsProvider for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
1114611159where
1114711160 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
1114811161 T::Target: BroadcasterInterface,
@@ -11164,7 +11177,7 @@ where
1116411177 }
1116511178}
1116611179
11167- impl<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref> chain::Listen for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
11180+ impl<M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref> chain::Listen for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
1116811181where
1116911182 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
1117011183 T::Target: BroadcasterInterface,
@@ -11207,7 +11220,7 @@ where
1120711220 }
1120811221}
1120911222
11210- impl<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref> chain::Confirm for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
11223+ impl<M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref> chain::Confirm for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
1121111224where
1121211225 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
1121311226 T::Target: BroadcasterInterface,
@@ -11340,7 +11353,7 @@ where
1134011353 }
1134111354}
1134211355
11343- impl<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref> ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
11356+ impl<M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref> ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
1134411357where
1134511358 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
1134611359 T::Target: BroadcasterInterface,
@@ -11625,7 +11638,7 @@ where
1162511638 }
1162611639}
1162711640
11628- impl<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>
11641+ impl<M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref>
1162911642 ChannelMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
1163011643where
1163111644 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -12324,7 +12337,7 @@ where
1232412337 }
1232512338}
1232612339
12327- impl<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>
12340+ impl<M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref>
1232812341OffersMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
1232912342where
1233012343 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -12556,7 +12569,7 @@ where
1255612569 }
1255712570}
1255812571
12559- impl<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>
12572+ impl<M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref>
1256012573AsyncPaymentsMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
1256112574where
1256212575 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -12612,7 +12625,7 @@ where
1261212625}
1261312626
1261412627#[cfg(feature = "dnssec")]
12615- impl<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>
12628+ impl<M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref>
1261612629DNSResolverMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
1261712630where
1261812631 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -12675,7 +12688,7 @@ where
1267512688 }
1267612689}
1267712690
12678- impl<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>
12691+ impl<M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref>
1267912692NodeIdLookUp for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
1268012693where
1268112694 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -13173,7 +13186,7 @@ impl_writeable_tlv_based!(PendingInboundPayment, {
1317313186 (8, min_value_msat, required),
1317413187});
1317513188
13176- impl<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref> Writeable for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
13189+ impl<M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref> Writeable for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
1317713190where
1317813191 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
1317913192 T::Target: BroadcasterInterface,
@@ -13491,7 +13504,7 @@ impl Readable for VecDeque<(Event, Option<EventCompletionAction>)> {
1349113504/// which you've already broadcasted the transaction.
1349213505///
1349313506/// [`ChainMonitor`]: crate::chain::chainmonitor::ChainMonitor
13494- pub struct ChannelManagerReadArgs<'a, M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>
13507+ 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>
1349513508where
1349613509 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
1349713510 T::Target: BroadcasterInterface,
@@ -13558,7 +13571,7 @@ where
1355813571 pub channel_monitors: HashMap<ChannelId, &'a ChannelMonitor<<SP::Target as SignerProvider>::EcdsaSigner>>,
1355913572}
1356013573
13561- impl<'a, M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>
13574+ impl<'a, M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref>
1356213575 ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>
1356313576where
1356413577 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -13592,7 +13605,7 @@ where
1359213605
1359313606// Implement ReadableArgs for an Arc'd ChannelManager to make it a bit easier to work with the
1359413607// SipmleArcChannelManager type:
13595- impl<'a, M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>
13608+ impl<'a, M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref>
1359613609 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>>)
1359713610where
1359813611 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -13611,7 +13624,7 @@ where
1361113624 }
1361213625}
1361313626
13614- impl<'a, M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>
13627+ impl<'a, M: Deref, T: Deref, ES: Deref + Clone , NS: Deref, SP: Deref, F: Deref, R: Deref + Clone , MR: Deref + Clone , L: Deref>
1361513628 ReadableArgs<ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>> for (BlockHash, ChannelManager<M, T, ES, NS, SP, F, R, MR, L>)
1361613629where
1361713630 M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -14605,13 +14618,17 @@ where
1460514618 }
1460614619 }
1460714620
14621+ let best_block = BestBlock::new(best_block_hash, best_block_height);
14622+ 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());
14623+
1460814624 let channel_manager = ChannelManager {
1460914625 chain_hash,
1461014626 fee_estimator: bounded_fee_estimator,
1461114627 chain_monitor: args.chain_monitor,
1461214628 tx_broadcaster: args.tx_broadcaster,
1461314629 router: args.router,
1461414630 message_router: args.message_router,
14631+ flow,
1461514632
1461614633 best_block: RwLock::new(BestBlock::new(best_block_hash, best_block_height)),
1461714634
0 commit comments