@@ -49,6 +49,7 @@ use crate::events::{self, Event, EventHandler, EventsProvider, InboundChannelFun
49
49
// construct one themselves.
50
50
use crate::ln::inbound_payment;
51
51
use crate::ln::types::ChannelId;
52
+ use crate::offers::flow::OffersMessageFlow;
52
53
use crate::types::payment::{PaymentHash, PaymentPreimage, PaymentSecret};
53
54
use crate::ln::channel::{self, Channel, ChannelError, ChannelUpdateStatus, FundedChannel, ShutdownResult, UpdateFulfillCommitFetch, OutboundV1Channel, ReconnectionMsg, InboundV1Channel, WithChannelContext};
54
55
use crate::ln::channel::PendingV2Channel;
@@ -1718,6 +1719,7 @@ where
1718
1719
/// # tx_broadcaster: &dyn lightning::chain::chaininterface::BroadcasterInterface,
1719
1720
/// # router: &lightning::routing::router::DefaultRouter<&NetworkGraph<&'a L>, &'a L, &ES, &S, SP, SL>,
1720
1721
/// # 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>>,
1721
1723
/// # logger: &L,
1722
1724
/// # entropy_source: &ES,
1723
1725
/// # node_signer: &dyn lightning::sign::NodeSigner,
@@ -1733,7 +1735,7 @@ where
1733
1735
/// };
1734
1736
/// let default_config = UserConfig::default();
1735
1737
/// 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,
1737
1739
/// entropy_source, node_signer, signer_provider, default_config.clone(), params, current_timestamp,
1738
1740
/// );
1739
1741
///
@@ -2445,6 +2447,11 @@ where
2445
2447
router: R,
2446
2448
message_router: MR,
2447
2449
2450
+ #[cfg(test)]
2451
+ pub(super) flow: OffersMessageFlow<ES, MR, R>,
2452
+ #[cfg(not(test))]
2453
+ flow: OffersMessageFlow<ES, MR, R>,
2454
+
2448
2455
/// See `ChannelManager` struct-level documentation for lock order requirements.
2449
2456
#[cfg(any(test, feature = "_test_utils"))]
2450
2457
pub(super) best_block: RwLock<BestBlock>,
@@ -3540,8 +3547,8 @@ where
3540
3547
/// [`block_disconnected`]: chain::Listen::block_disconnected
3541
3548
/// [`params.best_block.block_hash`]: chain::BestBlock::block_hash
3542
3549
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,
3545
3552
params: ChainParameters, current_timestamp: u32,
3546
3553
) -> Self {
3547
3554
let mut secp_ctx = Secp256k1::new();
@@ -3555,6 +3562,7 @@ where
3555
3562
tx_broadcaster,
3556
3563
router,
3557
3564
message_router,
3565
+ flow,
3558
3566
3559
3567
best_block: RwLock::new(params.best_block),
3560
3568
@@ -11499,6 +11507,7 @@ where
11499
11507
11500
11508
self.transactions_confirmed(header, txdata, height);
11501
11509
self.best_block_updated(header, height);
11510
+ self.flow.best_block_updated(header);
11502
11511
}
11503
11512
11504
11513
fn block_disconnected(&self, header: &Header, height: u32) {
@@ -13602,7 +13611,7 @@ impl Readable for VecDeque<(Event, Option<EventCompletionAction>)> {
13602
13611
/// which you've already broadcasted the transaction.
13603
13612
///
13604
13613
/// [`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>
13606
13615
where
13607
13616
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
13608
13617
T::Target: BroadcasterInterface,
@@ -13648,6 +13657,7 @@ where
13648
13657
/// The [`MessageRouter`] used for constructing [`BlindedMessagePath`]s for [`Offer`]s,
13649
13658
/// [`Refund`]s, and any reply paths.
13650
13659
pub message_router: MR,
13660
+
13651
13661
/// The Logger for use in the ChannelManager and which may be used to log information during
13652
13662
/// deserialization.
13653
13663
pub logger: L,
@@ -13669,7 +13679,7 @@ where
13669
13679
pub channel_monitors: HashMap<ChannelId, &'a ChannelMonitor<<SP::Target as SignerProvider>::EcdsaSigner>>,
13670
13680
}
13671
13681
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>
13673
13683
ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>
13674
13684
where
13675
13685
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -13703,7 +13713,7 @@ where
13703
13713
13704
13714
// Implement ReadableArgs for an Arc'd ChannelManager to make it a bit easier to work with the
13705
13715
// 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>
13707
13717
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>>)
13708
13718
where
13709
13719
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -13722,7 +13732,7 @@ where
13722
13732
}
13723
13733
}
13724
13734
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>
13726
13736
ReadableArgs<ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>> for (BlockHash, ChannelManager<M, T, ES, NS, SP, F, R, MR, L>)
13727
13737
where
13728
13738
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -14704,15 +14714,19 @@ where
14704
14714
}
14705
14715
}
14706
14716
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
+
14707
14720
let channel_manager = ChannelManager {
14708
14721
chain_hash,
14709
14722
fee_estimator: bounded_fee_estimator,
14710
14723
chain_monitor: args.chain_monitor,
14711
14724
tx_broadcaster: args.tx_broadcaster,
14712
14725
router: args.router,
14713
14726
message_router: args.message_router,
14727
+ flow,
14714
14728
14715
- best_block: RwLock::new(BestBlock::new(best_block_hash, best_block_height) ),
14729
+ best_block: RwLock::new(best_block ),
14716
14730
14717
14731
inbound_payment_key: expanded_inbound_key,
14718
14732
pending_outbound_payments: pending_outbounds,
0 commit comments