Skip to content

Commit 1800832

Browse files
committed
Introduce Flow in ChannelManager
1 parent eea7273 commit 1800832

File tree

4 files changed

+62
-45
lines changed

4 files changed

+62
-45
lines changed

lightning/src/ln/channelmanager.rs

+40-23
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ use crate::events::{self, Event, EventHandler, EventsProvider, InboundChannelFun
4747
// construct one themselves.
4848
use crate::ln::inbound_payment;
4949
use crate::ln::types::ChannelId;
50+
use crate::offers::flow::OffersMessageFlow;
5051
use crate::types::payment::{PaymentHash, PaymentPreimage, PaymentSecret};
5152
use 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
16211622
for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
16221623
where
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>
24442445
where
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>
35393542
where
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.
1020510218
pub 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>
1020810221
where
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>
1107011083
where
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>
1114611159
where
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>
1116811181
where
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>
1121111224
where
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>
1134411357
where
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>
1163011643
where
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>
1232812341
OffersMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
1232912342
where
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>
1256012573
AsyncPaymentsMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
1256112574
where
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>
1261612629
DNSResolverMessageHandler for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
1261712630
where
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>
1267912692
NodeIdLookUp for ChannelManager<M, T, ES, NS, SP, F, R, MR, L>
1268012693
where
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>
1317713190
where
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>
1349513508
where
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>
1356313576
where
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>>)
1359713610
where
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>)
1361613629
where
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

lightning/src/ln/invoice_utils.rs

+7-7
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ use core::iter::Iterator;
6363
/// [`MIN_FINAL_CLTV_EXPIRY_DETLA`]: crate::ln::channelmanager::MIN_FINAL_CLTV_EXPIRY_DELTA
6464
#[cfg_attr(feature = "std", doc = "")]
6565
#[cfg_attr(feature = "std", doc = "This can be used in a `no_std` environment, where [`std::time::SystemTime`] is not available and the current time is supplied by the caller.")]
66-
pub fn create_phantom_invoice<ES: Deref, NS: Deref, L: Deref>(
66+
pub fn create_phantom_invoice<ES: Deref + Clone, NS: Deref, L: Deref>(
6767
amt_msat: Option<u64>, payment_hash: Option<PaymentHash>, description: String,
6868
invoice_expiry_delta_secs: u32, phantom_route_hints: Vec<PhantomRouteHints>, entropy_source: ES,
6969
node_signer: NS, logger: L, network: Currency, min_final_cltv_expiry_delta: Option<u16>, duration_since_epoch: Duration,
@@ -118,7 +118,7 @@ where
118118
/// [`PhantomRouteHints::channels`]: crate::ln::channelmanager::PhantomRouteHints::channels
119119
#[cfg_attr(feature = "std", doc = "")]
120120
#[cfg_attr(feature = "std", doc = "This version can be used in a `no_std` environment, where [`std::time::SystemTime`] is not available and the current time is supplied by the caller.")]
121-
pub fn create_phantom_invoice_with_description_hash<ES: Deref, NS: Deref, L: Deref>(
121+
pub fn create_phantom_invoice_with_description_hash<ES: Deref + Clone, NS: Deref, L: Deref>(
122122
amt_msat: Option<u64>, payment_hash: Option<PaymentHash>, invoice_expiry_delta_secs: u32,
123123
description_hash: Sha256, phantom_route_hints: Vec<PhantomRouteHints>, entropy_source: ES,
124124
node_signer: NS, logger: L, network: Currency, min_final_cltv_expiry_delta: Option<u16>, duration_since_epoch: Duration,
@@ -137,7 +137,7 @@ where
137137

138138
const MAX_CHANNEL_HINTS: usize = 3;
139139

140-
fn _create_phantom_invoice<ES: Deref, NS: Deref, L: Deref>(
140+
fn _create_phantom_invoice<ES: Deref + Clone, NS: Deref, L: Deref>(
141141
amt_msat: Option<u64>, payment_hash: Option<PaymentHash>, description: Bolt11InvoiceDescription,
142142
invoice_expiry_delta_secs: u32, phantom_route_hints: Vec<PhantomRouteHints>, entropy_source: ES,
143143
node_signer: NS, logger: L, network: Currency, min_final_cltv_expiry_delta: Option<u16>, duration_since_epoch: Duration,
@@ -328,7 +328,7 @@ fn rotate_through_iterators<T, I: Iterator<Item = T>>(mut vecs: Vec<I>) -> impl
328328
/// confirmations during routing.
329329
///
330330
/// [`MIN_FINAL_CLTV_EXPIRY_DETLA`]: crate::ln::channelmanager::MIN_FINAL_CLTV_EXPIRY_DELTA
331-
pub fn create_invoice_from_channelmanager<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>(
331+
pub fn create_invoice_from_channelmanager<M: Deref, T: Deref, ES: Deref + Clone, NS: Deref, SP: Deref, F: Deref, R: Deref + Clone, MR: Deref + Clone, L: Deref>(
332332
channelmanager: &ChannelManager<M, T, ES, NS, SP, F, R, MR, L>, amt_msat: Option<u64>,
333333
description: String, invoice_expiry_delta_secs: u32, min_final_cltv_expiry_delta: Option<u16>,
334334
) -> Result<Bolt11Invoice, SignOrCreationError<()>>
@@ -371,7 +371,7 @@ where
371371
/// confirmations during routing.
372372
///
373373
/// [`MIN_FINAL_CLTV_EXPIRY_DETLA`]: crate::ln::channelmanager::MIN_FINAL_CLTV_EXPIRY_DELTA
374-
pub fn create_invoice_from_channelmanager_with_description_hash<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>(
374+
pub fn create_invoice_from_channelmanager_with_description_hash<M: Deref, T: Deref, ES: Deref + Clone, NS: Deref, SP: Deref, F: Deref, R: Deref + Clone, MR: Deref + Clone, L: Deref>(
375375
channelmanager: &ChannelManager<M, T, ES, NS, SP, F, R, MR, L>, amt_msat: Option<u64>,
376376
description_hash: Sha256, invoice_expiry_delta_secs: u32,
377377
min_final_cltv_expiry_delta: Option<u16>,
@@ -405,7 +405,7 @@ where
405405
/// This may be useful if you're building an on-chain swap or involving another protocol where
406406
/// the payment hash is also involved outside the scope of lightning and want to set the
407407
/// description hash.
408-
pub fn create_invoice_from_channelmanager_with_description_hash_and_payment_hash<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>(
408+
pub fn create_invoice_from_channelmanager_with_description_hash_and_payment_hash<M: Deref, T: Deref, ES: Deref + Clone, NS: Deref, SP: Deref, F: Deref, R: Deref + Clone, MR: Deref + Clone, L: Deref>(
409409
channelmanager: &ChannelManager<M, T, ES, NS, SP, F, R, MR, L>, amt_msat: Option<u64>,
410410
description_hash: Sha256, invoice_expiry_delta_secs: u32, payment_hash: PaymentHash,
411411
min_final_cltv_expiry_delta: Option<u16>,
@@ -437,7 +437,7 @@ where
437437
/// This version allows for providing a custom [`PaymentHash`] for the invoice.
438438
/// This may be useful if you're building an on-chain swap or involving another protocol where
439439
/// the payment hash is also involved outside the scope of lightning.
440-
pub fn create_invoice_from_channelmanager_with_payment_hash<M: Deref, T: Deref, ES: Deref, NS: Deref, SP: Deref, F: Deref, R: Deref, MR: Deref, L: Deref>(
440+
pub fn create_invoice_from_channelmanager_with_payment_hash<M: Deref, T: Deref, ES: Deref + Clone, NS: Deref, SP: Deref, F: Deref, R: Deref + Clone, MR: Deref + Clone, L: Deref>(
441441
channelmanager: &ChannelManager<M, T, ES, NS, SP, F, R, MR, L>, amt_msat: Option<u64>,
442442
description: String, invoice_expiry_delta_secs: u32, payment_hash: PaymentHash,
443443
min_final_cltv_expiry_delta: Option<u16>,

0 commit comments

Comments
 (0)