@@ -47,6 +47,7 @@ use crate::events::{self, Event, EventHandler, EventsProvider, InboundChannelFun
47
47
// construct one themselves.
48
48
use crate::ln::inbound_payment;
49
49
use crate::ln::types::ChannelId;
50
+ use crate::offers::flow::OffersMessageFlow;
50
51
use crate::types::payment::{PaymentHash, PaymentPreimage, PaymentSecret};
51
52
use crate::ln::channel::{self, Channel, ChannelError, ChannelUpdateStatus, FundedChannel, ShutdownResult, UpdateFulfillCommitFetch, OutboundV1Channel, ReconnectionMsg, InboundV1Channel, WithChannelContext};
52
53
#[cfg(any(dual_funding, splicing))]
@@ -1586,7 +1587,7 @@ pub trait AChannelManager {
1586
1587
/// A type implementing [`EntropySource`].
1587
1588
type EntropySource: EntropySource + ?Sized;
1588
1589
/// A type that may be dereferenced to [`Self::EntropySource`].
1589
- type ES: Deref<Target = Self::EntropySource>;
1590
+ type ES: Deref<Target = Self::EntropySource> + Clone ;
1590
1591
/// A type implementing [`NodeSigner`].
1591
1592
type NodeSigner: NodeSigner + ?Sized;
1592
1593
/// A type that may be dereferenced to [`Self::NodeSigner`].
@@ -1604,11 +1605,11 @@ pub trait AChannelManager {
1604
1605
/// A type implementing [`Router`].
1605
1606
type Router: Router + ?Sized;
1606
1607
/// A type that may be dereferenced to [`Self::Router`].
1607
- type R: Deref<Target = Self::Router>;
1608
+ type R: Deref<Target = Self::Router> + Clone ;
1608
1609
/// A type implementing [`MessageRouter`].
1609
1610
type MessageRouter: MessageRouter + ?Sized;
1610
1611
/// A type that may be dereferenced to [`Self::MessageRouter`].
1611
- type MR: Deref<Target = Self::MessageRouter>;
1612
+ type MR: Deref<Target = Self::MessageRouter> + Clone ;
1612
1613
/// A type implementing [`Logger`].
1613
1614
type Logger: Logger + ?Sized;
1614
1615
/// A type that may be dereferenced to [`Self::Logger`].
@@ -1617,7 +1618,7 @@ pub trait AChannelManager {
1617
1618
fn get_cm(&self) -> &ChannelManager<Self::M, Self::T, Self::ES, Self::NS, Self::SP, Self::F, Self::R, Self::MR, Self::L>;
1618
1619
}
1619
1620
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
1621
1622
for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
1622
1623
where
1623
1624
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -2440,7 +2441,7 @@ where
2440
2441
// |
2441
2442
// |__`pending_background_events`
2442
2443
//
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>
2444
2445
where
2445
2446
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
2446
2447
T::Target: BroadcasterInterface,
@@ -2460,6 +2461,8 @@ where
2460
2461
router: R,
2461
2462
message_router: MR,
2462
2463
2464
+ pub(crate) flow: OffersMessageFlow<ES, MR, R>,
2465
+
2463
2466
/// See `ChannelManager` struct-level documentation for lock order requirements.
2464
2467
#[cfg(test)]
2465
2468
pub(super) best_block: RwLock<BestBlock>,
@@ -3535,7 +3538,7 @@ macro_rules! process_events_body {
3535
3538
}
3536
3539
}
3537
3540
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>
3539
3542
where
3540
3543
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
3541
3544
T::Target: BroadcasterInterface,
@@ -3572,6 +3575,15 @@ where
3572
3575
let mut secp_ctx = Secp256k1::new();
3573
3576
secp_ctx.seeded_randomize(&entropy_source.get_secure_random_bytes());
3574
3577
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
+
3575
3587
ChannelManager {
3576
3588
default_configuration: config.clone(),
3577
3589
chain_hash: ChainHash::using_genesis_block(params.network),
@@ -3580,6 +3592,7 @@ where
3580
3592
tx_broadcaster,
3581
3593
router,
3582
3594
message_router,
3595
+ flow,
3583
3596
3584
3597
best_block: RwLock::new(params.best_block),
3585
3598
@@ -3592,7 +3605,7 @@ where
3592
3605
outpoint_to_peer: Mutex::new(new_hash_map()),
3593
3606
short_to_chan_info: FairRwLock::new(new_hash_map()),
3594
3607
3595
- our_network_pubkey: node_signer.get_node_id(Recipient::Node).unwrap() ,
3608
+ our_network_pubkey,
3596
3609
secp_ctx,
3597
3610
3598
3611
inbound_payment_key: expanded_inbound_key,
@@ -10204,7 +10217,7 @@ macro_rules! create_refund_builder { ($self: ident, $builder: ty) => {
10204
10217
/// even if multiple invoices are received.
10205
10218
pub const OFFERS_MESSAGE_REQUEST_LIMIT: usize = 10;
10206
10219
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>
10208
10221
where
10209
10222
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
10210
10223
T::Target: BroadcasterInterface,
@@ -11066,7 +11079,7 @@ where
11066
11079
}
11067
11080
}
11068
11081
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>
11070
11083
where
11071
11084
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
11072
11085
T::Target: BroadcasterInterface,
@@ -11142,7 +11155,7 @@ where
11142
11155
}
11143
11156
}
11144
11157
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>
11146
11159
where
11147
11160
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
11148
11161
T::Target: BroadcasterInterface,
@@ -11164,7 +11177,7 @@ where
11164
11177
}
11165
11178
}
11166
11179
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>
11168
11181
where
11169
11182
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
11170
11183
T::Target: BroadcasterInterface,
@@ -11207,7 +11220,7 @@ where
11207
11220
}
11208
11221
}
11209
11222
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>
11211
11224
where
11212
11225
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
11213
11226
T::Target: BroadcasterInterface,
@@ -11340,7 +11353,7 @@ where
11340
11353
}
11341
11354
}
11342
11355
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>
11344
11357
where
11345
11358
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
11346
11359
T::Target: BroadcasterInterface,
@@ -11625,7 +11638,7 @@ where
11625
11638
}
11626
11639
}
11627
11640
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>
11629
11642
ChannelMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
11630
11643
where
11631
11644
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -12324,7 +12337,7 @@ where
12324
12337
}
12325
12338
}
12326
12339
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>
12328
12341
OffersMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
12329
12342
where
12330
12343
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -12556,7 +12569,7 @@ where
12556
12569
}
12557
12570
}
12558
12571
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>
12560
12573
AsyncPaymentsMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
12561
12574
where
12562
12575
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -12612,7 +12625,7 @@ where
12612
12625
}
12613
12626
12614
12627
#[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>
12616
12629
DNSResolverMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
12617
12630
where
12618
12631
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -12675,7 +12688,7 @@ where
12675
12688
}
12676
12689
}
12677
12690
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>
12679
12692
NodeIdLookUp for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
12680
12693
where
12681
12694
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -13173,7 +13186,7 @@ impl_writeable_tlv_based!(PendingInboundPayment, {
13173
13186
(8, min_value_msat, required),
13174
13187
});
13175
13188
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>
13177
13190
where
13178
13191
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
13179
13192
T::Target: BroadcasterInterface,
@@ -13491,7 +13504,7 @@ impl Readable for VecDeque<(Event, Option<EventCompletionAction>)> {
13491
13504
/// which you've already broadcasted the transaction.
13492
13505
///
13493
13506
/// [`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>
13495
13508
where
13496
13509
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
13497
13510
T::Target: BroadcasterInterface,
@@ -13558,7 +13571,7 @@ where
13558
13571
pub channel_monitors: HashMap<ChannelId, &'a ChannelMonitor<<SP::Target as SignerProvider>::EcdsaSigner>>,
13559
13572
}
13560
13573
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>
13562
13575
ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>
13563
13576
where
13564
13577
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -13592,7 +13605,7 @@ where
13592
13605
13593
13606
// Implement ReadableArgs for an Arc'd ChannelManager to make it a bit easier to work with the
13594
13607
// 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>
13596
13609
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>>)
13597
13610
where
13598
13611
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -13611,7 +13624,7 @@ where
13611
13624
}
13612
13625
}
13613
13626
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>
13615
13628
ReadableArgs<ChannelManagerReadArgs<'a, M, T, ES, NS, SP, F, R, MR, L>> for (BlockHash, ChannelManager<M, T, ES, NS, SP, F, R, MR, L>)
13616
13629
where
13617
13630
M::Target: chain::Watch<<SP::Target as SignerProvider>::EcdsaSigner>,
@@ -14605,13 +14618,17 @@ where
14605
14618
}
14606
14619
}
14607
14620
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
+
14608
14624
let channel_manager = ChannelManager {
14609
14625
chain_hash,
14610
14626
fee_estimator: bounded_fee_estimator,
14611
14627
chain_monitor: args.chain_monitor,
14612
14628
tx_broadcaster: args.tx_broadcaster,
14613
14629
router: args.router,
14614
14630
message_router: args.message_router,
14631
+ flow,
14615
14632
14616
14633
best_block: RwLock::new(BestBlock::new(best_block_hash, best_block_height)),
14617
14634
0 commit comments