rgb_lightning/util/
config.rs

1// This file is Copyright its original authors, visible in version control
2// history.
3//
4// This file is licensed under the Apache License, Version 2.0 <LICENSE-APACHE
5// or http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
6// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
7// You may not use this file except in accordance with one or both of these
8// licenses.
9
10//! Various user-configurable channel limits and settings which ChannelManager
11//! applies for you.
12
13use crate::ln::channel::MAX_FUNDING_SATOSHIS_NO_WUMBO;
14use crate::ln::channelmanager::{BREAKDOWN_TIMEOUT, MAX_LOCAL_BREAKDOWN_TIMEOUT};
15
16/// Configuration we set when applicable.
17///
18/// Default::default() provides sane defaults.
19#[derive(Copy, Clone, Debug)]
20pub struct ChannelHandshakeConfig {
21	/// Confirmations we will wait for before considering the channel locked in.
22	/// Applied only for inbound channels (see ChannelHandshakeLimits::max_minimum_depth for the
23	/// equivalent limit applied to outbound channels).
24	///
25	/// A lower-bound of 1 is applied, requiring all channels to have a confirmed commitment
26	/// transaction before operation. If you wish to accept channels with zero confirmations, see
27	/// [`UserConfig::manually_accept_inbound_channels`] and
28	/// [`ChannelManager::accept_inbound_channel_from_trusted_peer_0conf`].
29	///
30	/// Default value: 6.
31	///
32	/// [`ChannelManager::accept_inbound_channel`]: crate::ln::channelmanager::ChannelManager::accept_inbound_channel
33	/// [`ChannelManager::accept_inbound_channel_from_trusted_peer_0conf`]: crate::ln::channelmanager::ChannelManager::accept_inbound_channel_from_trusted_peer_0conf
34	pub minimum_depth: u32,
35	/// Set to the number of blocks we require our counterparty to wait to claim their money (ie
36	/// the number of blocks we have to punish our counterparty if they broadcast a revoked
37	/// transaction).
38	///
39	/// This is one of the main parameters of our security model. We (or one of our watchtowers) MUST
40	/// be online to check for revoked transactions on-chain at least once every our_to_self_delay
41	/// blocks (minus some margin to allow us enough time to broadcast and confirm a transaction,
42	/// possibly with time in between to RBF the spending transaction).
43	///
44	/// Meanwhile, asking for a too high delay, we bother peer to freeze funds for nothing in
45	/// case of an honest unilateral channel close, which implicitly decrease the economic value of
46	/// our channel.
47	///
48	/// Default value: [`BREAKDOWN_TIMEOUT`], we enforce it as a minimum at channel opening so you
49	/// can tweak config to ask for more security, not less.
50	pub our_to_self_delay: u16,
51	/// Set to the smallest value HTLC we will accept to process.
52	///
53	/// This value is sent to our counterparty on channel-open and we close the channel any time
54	/// our counterparty misbehaves by sending us an HTLC with a value smaller than this.
55	///
56	/// Default value: 1. If the value is less than 1, it is ignored and set to 1, as is required
57	/// by the protocol.
58	pub our_htlc_minimum_msat: u64,
59	/// Sets the percentage of the channel value we will cap the total value of outstanding inbound
60	/// HTLCs to.
61	///
62	/// This can be set to a value between 1-100, where the value corresponds to the percent of the
63	/// channel value in whole percentages.
64	///
65	/// Note that:
66	/// * If configured to another value than the default value 10, any new channels created with
67	/// the non default value will cause versions of LDK prior to 0.0.104 to refuse to read the
68	/// `ChannelManager`.
69	///
70	/// * This caps the total value for inbound HTLCs in-flight only, and there's currently
71	/// no way to configure the cap for the total value of outbound HTLCs in-flight.
72	///
73	/// * The requirements for your node being online to ensure the safety of HTLC-encumbered funds
74	/// are different from the non-HTLC-encumbered funds. This makes this an important knob to
75	/// restrict exposure to loss due to being offline for too long.
76	/// See [`ChannelHandshakeConfig::our_to_self_delay`] and [`ChannelConfig::cltv_expiry_delta`]
77	/// for more information.
78	///
79	/// Default value: 10.
80	/// Minimum value: 1, any values less than 1 will be treated as 1 instead.
81	/// Maximum value: 100, any values larger than 100 will be treated as 100 instead.
82	pub max_inbound_htlc_value_in_flight_percent_of_channel: u8,
83	/// If set, we attempt to negotiate the `scid_privacy` (referred to as `scid_alias` in the
84	/// BOLTs) option for outbound private channels. This provides better privacy by not including
85	/// our real on-chain channel UTXO in each invoice and requiring that our counterparty only
86	/// relay HTLCs to us using the channel's SCID alias.
87	///
88	/// If this option is set, channels may be created that will not be readable by LDK versions
89	/// prior to 0.0.106, causing [`ChannelManager`]'s read method to return a
90	/// [`DecodeError::InvalidValue`].
91	///
92	/// Note that setting this to true does *not* prevent us from opening channels with
93	/// counterparties that do not support the `scid_alias` option; we will simply fall back to a
94	/// private channel without that option.
95	///
96	/// Ignored if the channel is negotiated to be announced, see
97	/// [`ChannelHandshakeConfig::announced_channel`] and
98	/// [`ChannelHandshakeLimits::force_announced_channel_preference`] for more.
99	///
100	/// Default value: false. This value is likely to change to true in the future.
101	///
102	/// [`ChannelManager`]: crate::ln::channelmanager::ChannelManager
103	/// [`DecodeError::InvalidValue`]: crate::ln::msgs::DecodeError::InvalidValue
104	pub negotiate_scid_privacy: bool,
105	/// Set to announce the channel publicly and notify all nodes that they can route via this
106	/// channel.
107	///
108	/// This should only be set to true for nodes which expect to be online reliably.
109	///
110	/// As the node which funds a channel picks this value this will only apply for new outbound
111	/// channels unless [`ChannelHandshakeLimits::force_announced_channel_preference`] is set.
112	///
113	/// Default value: false.
114	pub announced_channel: bool,
115	/// When set, we commit to an upfront shutdown_pubkey at channel open. If our counterparty
116	/// supports it, they will then enforce the mutual-close output to us matches what we provided
117	/// at intialization, preventing us from closing to an alternate pubkey.
118	///
119	/// This is set to true by default to provide a slight increase in security, though ultimately
120	/// any attacker who is able to take control of a channel can just as easily send the funds via
121	/// lightning payments, so we never require that our counterparties support this option.
122	///
123	/// The upfront key committed is provided from [`KeysInterface::get_shutdown_scriptpubkey`].
124	///
125	/// Default value: true.
126	///
127	/// [`KeysInterface::get_shutdown_scriptpubkey`]: crate::chain::keysinterface::KeysInterface::get_shutdown_scriptpubkey
128	pub commit_upfront_shutdown_pubkey: bool,
129
130	/// The Proportion of the channel value to configure as counterparty's channel reserve,
131	/// i.e., `their_channel_reserve_satoshis` for both outbound and inbound channels.
132	///
133	/// `their_channel_reserve_satoshis` is the minimum balance that the other node has to maintain
134	/// on their side, at all times.
135	/// This ensures that if our counterparty broadcasts a revoked state, we can punish them by
136	/// claiming at least this value on chain.
137	///
138	/// Channel reserve values greater than 30% could be considered highly unreasonable, since that
139	/// amount can never be used for payments.
140	/// Also, if our selected channel reserve for counterparty and counterparty's selected
141	/// channel reserve for us sum up to equal or greater than channel value, channel negotiations
142	/// will fail.
143	///
144	/// Note: Versions of LDK earlier than v0.0.104 will fail to read channels with any channel reserve
145	/// other than the default value.
146	///
147	/// Default value: 1% of channel value, i.e., configured as 10,000 millionths.
148	/// Minimum value: If the calculated proportional value is less than 1000 sats, it will be treated
149	///                as 1000 sats instead, which is a safe implementation-specific lower bound.
150	/// Maximum value: 1,000,000, any values larger than 1 Million will be treated as 1 Million (or 100%)
151	///                instead, although channel negotiations will fail in that case.
152	pub their_channel_reserve_proportional_millionths: u32
153}
154
155impl Default for ChannelHandshakeConfig {
156	fn default() -> ChannelHandshakeConfig {
157		ChannelHandshakeConfig {
158			minimum_depth: 6,
159			our_to_self_delay: BREAKDOWN_TIMEOUT,
160			our_htlc_minimum_msat: 1,
161			max_inbound_htlc_value_in_flight_percent_of_channel: 10,
162			negotiate_scid_privacy: false,
163			announced_channel: false,
164			commit_upfront_shutdown_pubkey: true,
165			their_channel_reserve_proportional_millionths: 10_000,
166		}
167	}
168}
169
170/// Optional channel limits which are applied during channel creation.
171///
172/// These limits are only applied to our counterparty's limits, not our own.
173///
174/// Use 0/<type>::max_value() as appropriate to skip checking.
175///
176/// Provides sane defaults for most configurations.
177///
178/// Most additional limits are disabled except those with which specify a default in individual
179/// field documentation. Note that this may result in barely-usable channels, but since they
180/// are applied mostly only to incoming channels that's not much of a problem.
181#[derive(Copy, Clone, Debug)]
182pub struct ChannelHandshakeLimits {
183	/// Minimum allowed satoshis when a channel is funded. This is supplied by the sender and so
184	/// only applies to inbound channels.
185	///
186	/// Default value: 0.
187	pub min_funding_satoshis: u64,
188	/// Maximum allowed satoshis when a channel is funded. This is supplied by the sender and so
189	/// only applies to inbound channels.
190	///
191	/// Default value: 2^24 - 1.
192	pub max_funding_satoshis: u64,
193	/// The remote node sets a limit on the minimum size of HTLCs we can send to them. This allows
194	/// you to limit the maximum minimum-size they can require.
195	///
196	/// Default value: u64::max_value.
197	pub max_htlc_minimum_msat: u64,
198	/// The remote node sets a limit on the maximum value of pending HTLCs to them at any given
199	/// time to limit their funds exposure to HTLCs. This allows you to set a minimum such value.
200	///
201	/// Default value: 0.
202	pub min_max_htlc_value_in_flight_msat: u64,
203	/// The remote node will require we keep a certain amount in direct payment to ourselves at all
204	/// time, ensuring that we are able to be punished if we broadcast an old state. This allows to
205	/// you limit the amount which we will have to keep to ourselves (and cannot use for HTLCs).
206	///
207	/// Default value: u64::max_value.
208	pub max_channel_reserve_satoshis: u64,
209	/// The remote node sets a limit on the maximum number of pending HTLCs to them at any given
210	/// time. This allows you to set a minimum such value.
211	///
212	/// Default value: 0.
213	pub min_max_accepted_htlcs: u16,
214	/// Before a channel is usable the funding transaction will need to be confirmed by at least a
215	/// certain number of blocks, specified by the node which is not the funder (as the funder can
216	/// assume they aren't going to double-spend themselves).
217	/// This config allows you to set a limit on the maximum amount of time to wait.
218	///
219	/// Default value: 144, or roughly one day and only applies to outbound channels.
220	pub max_minimum_depth: u32,
221	/// Whether we implicitly trust funding transactions generated by us for our own outbound
222	/// channels to not be double-spent.
223	///
224	/// If this is set, we assume that our own funding transactions are *never* double-spent, and
225	/// thus we can trust them without any confirmations. This is generally a reasonable
226	/// assumption, given we're the only ones who could ever double-spend it (assuming we have sole
227	/// control of the signing keys).
228	///
229	/// You may wish to un-set this if you allow the user to (or do in an automated fashion)
230	/// double-spend the funding transaction to RBF with an alternative channel open.
231	///
232	/// This only applies if our counterparty set their confirmations-required value to 0, and we
233	/// always trust our own funding transaction at 1 confirmation irrespective of this value.
234	/// Thus, this effectively acts as a `min_minimum_depth`, with the only possible values being
235	/// `true` (0) and `false` (1).
236	///
237	/// Default value: true
238	pub trust_own_funding_0conf: bool,
239	/// Set to force an incoming channel to match our announced channel preference in
240	/// [`ChannelHandshakeConfig::announced_channel`].
241	///
242	/// For a node which is not online reliably, this should be set to true and
243	/// [`ChannelHandshakeConfig::announced_channel`] set to false, ensuring that no announced (aka public)
244	/// channels will ever be opened.
245	///
246	/// Default value: true.
247	pub force_announced_channel_preference: bool,
248	/// Set to the amount of time we're willing to wait to claim money back to us.
249	///
250	/// Not checking this value would be a security issue, as our peer would be able to set it to
251	/// max relative lock-time (a year) and we would "lose" money as it would be locked for a long time.
252	///
253	/// Default value: 2016, which we also enforce as a maximum value so you can tweak config to
254	/// reduce the loss of having useless locked funds (if your peer accepts)
255	pub their_to_self_delay: u16
256}
257
258impl Default for ChannelHandshakeLimits {
259	fn default() -> Self {
260		ChannelHandshakeLimits {
261			min_funding_satoshis: 0,
262			max_funding_satoshis: MAX_FUNDING_SATOSHIS_NO_WUMBO,
263			max_htlc_minimum_msat: <u64>::max_value(),
264			min_max_htlc_value_in_flight_msat: 0,
265			max_channel_reserve_satoshis: <u64>::max_value(),
266			min_max_accepted_htlcs: 0,
267			trust_own_funding_0conf: true,
268			max_minimum_depth: 144,
269			force_announced_channel_preference: true,
270			their_to_self_delay: MAX_LOCAL_BREAKDOWN_TIMEOUT,
271		}
272	}
273}
274
275/// Options which apply on a per-channel basis and may change at runtime or based on negotiation
276/// with our counterparty.
277#[derive(Copy, Clone, Debug, PartialEq, Eq)]
278pub struct ChannelConfig {
279	/// Amount (in millionths of a satoshi) charged per satoshi for payments forwarded outbound
280	/// over the channel.
281	/// This may be allowed to change at runtime in a later update, however doing so must result in
282	/// update messages sent to notify all nodes of our updated relay fee.
283	///
284	/// Default value: 0.
285	pub forwarding_fee_proportional_millionths: u32,
286	/// Amount (in milli-satoshi) charged for payments forwarded outbound over the channel, in
287	/// excess of [`forwarding_fee_proportional_millionths`].
288	/// This may be allowed to change at runtime in a later update, however doing so must result in
289	/// update messages sent to notify all nodes of our updated relay fee.
290	///
291	/// The default value of a single satoshi roughly matches the market rate on many routing nodes
292	/// as of July 2021. Adjusting it upwards or downwards may change whether nodes route through
293	/// this node.
294	///
295	/// Default value: 1000.
296	///
297	/// [`forwarding_fee_proportional_millionths`]: ChannelConfig::forwarding_fee_proportional_millionths
298	pub forwarding_fee_base_msat: u32,
299	/// The difference in the CLTV value between incoming HTLCs and an outbound HTLC forwarded over
300	/// the channel this config applies to.
301	///
302	/// This is analogous to [`ChannelHandshakeConfig::our_to_self_delay`] but applies to in-flight
303	/// HTLC balance when a channel appears on-chain whereas
304	/// [`ChannelHandshakeConfig::our_to_self_delay`] applies to the remaining
305	/// (non-HTLC-encumbered) balance.
306	///
307	/// Thus, for HTLC-encumbered balances to be enforced on-chain when a channel is force-closed,
308	/// we (or one of our watchtowers) MUST be online to check for broadcast of the current
309	/// commitment transaction at least once per this many blocks (minus some margin to allow us
310	/// enough time to broadcast and confirm a transaction, possibly with time in between to RBF
311	/// the spending transaction).
312	///
313	/// Default value: 72 (12 hours at an average of 6 blocks/hour).
314	/// Minimum value: [`MIN_CLTV_EXPIRY_DELTA`], any values less than this will be treated as
315	///                [`MIN_CLTV_EXPIRY_DELTA`] instead.
316	///
317	/// [`MIN_CLTV_EXPIRY_DELTA`]: crate::ln::channelmanager::MIN_CLTV_EXPIRY_DELTA
318	pub cltv_expiry_delta: u16,
319	/// Limit our total exposure to in-flight HTLCs which are burned to fees as they are too
320	/// small to claim on-chain.
321	///
322	/// When an HTLC present in one of our channels is below a "dust" threshold, the HTLC will
323	/// not be claimable on-chain, instead being turned into additional miner fees if either
324	/// party force-closes the channel. Because the threshold is per-HTLC, our total exposure
325	/// to such payments may be sustantial if there are many dust HTLCs present when the
326	/// channel is force-closed.
327	///
328	/// The dust threshold for each HTLC is based on the `dust_limit_satoshis` for each party in a
329	/// channel negotiated throughout the channel open process, along with the fees required to have
330	/// a broadcastable HTLC spending transaction. When a channel supports anchor outputs
331	/// (specifically the zero fee HTLC transaction variant), this threshold no longer takes into
332	/// account the HTLC transaction fee as it is zero.
333	///
334	/// This limit is applied for sent, forwarded, and received HTLCs and limits the total
335	/// exposure across all three types per-channel. Setting this too low may prevent the
336	/// sending or receipt of low-value HTLCs on high-traffic nodes, and this limit is very
337	/// important to prevent stealing of dust HTLCs by miners.
338	///
339	/// Default value: 5_000_000 msat.
340	pub max_dust_htlc_exposure_msat: u64,
341	/// The additional fee we're willing to pay to avoid waiting for the counterparty's
342	/// `to_self_delay` to reclaim funds.
343	///
344	/// When we close a channel cooperatively with our counterparty, we negotiate a fee for the
345	/// closing transaction which both sides find acceptable, ultimately paid by the channel
346	/// funder/initiator.
347	///
348	/// When we are the funder, because we have to pay the channel closing fee, we bound the
349	/// acceptable fee by our [`Background`] and [`Normal`] fees, with the upper bound increased by
350	/// this value. Because the on-chain fee we'd pay to force-close the channel is kept near our
351	/// [`Normal`] feerate during normal operation, this value represents the additional fee we're
352	/// willing to pay in order to avoid waiting for our counterparty's to_self_delay to reclaim our
353	/// funds.
354	///
355	/// When we are not the funder, we require the closing transaction fee pay at least our
356	/// [`Background`] fee estimate, but allow our counterparty to pay as much fee as they like.
357	/// Thus, this value is ignored when we are not the funder.
358	///
359	/// Default value: 1000 satoshis.
360	///
361	/// [`Normal`]: crate::chain::chaininterface::ConfirmationTarget::Normal
362	/// [`Background`]: crate::chain::chaininterface::ConfirmationTarget::Background
363	pub force_close_avoidance_max_fee_satoshis: u64,
364}
365
366impl Default for ChannelConfig {
367	/// Provides sane defaults for most configurations (but with zero relay fees!).
368	fn default() -> Self {
369		ChannelConfig {
370			forwarding_fee_proportional_millionths: 0,
371			forwarding_fee_base_msat: 1000,
372			cltv_expiry_delta: 6 * 12, // 6 blocks/hour * 12 hours
373			max_dust_htlc_exposure_msat: 5_000_000,
374			force_close_avoidance_max_fee_satoshis: 1000,
375		}
376	}
377}
378
379impl_writeable_tlv_based!(ChannelConfig, {
380	(0, forwarding_fee_proportional_millionths, required),
381	(2, forwarding_fee_base_msat, required),
382	(4, cltv_expiry_delta, required),
383	(6, max_dust_htlc_exposure_msat, required),
384	// ChannelConfig serialized this field with a required type of 8 prior to the introduction of
385	// LegacyChannelConfig. To make sure that serialization is not compatible with this one, we use
386	// the next required type of 10, which if seen by the old serialization will always fail.
387	(10, force_close_avoidance_max_fee_satoshis, required),
388});
389
390/// Legacy version of [`ChannelConfig`] that stored the static
391/// [`ChannelHandshakeConfig::announced_channel`] and
392/// [`ChannelHandshakeConfig::commit_upfront_shutdown_pubkey`] fields.
393#[derive(Copy, Clone, Debug)]
394pub(crate) struct LegacyChannelConfig {
395	pub(crate) options: ChannelConfig,
396	/// Deprecated but may still be read from. See [`ChannelHandshakeConfig::announced_channel`] to
397	/// set this when opening/accepting a channel.
398	pub(crate) announced_channel: bool,
399	/// Deprecated but may still be read from. See
400	/// [`ChannelHandshakeConfig::commit_upfront_shutdown_pubkey`] to set this when
401	/// opening/accepting a channel.
402	pub(crate) commit_upfront_shutdown_pubkey: bool,
403}
404
405impl Default for LegacyChannelConfig {
406	fn default() -> Self {
407		Self {
408			options: ChannelConfig::default(),
409			announced_channel: false,
410			commit_upfront_shutdown_pubkey: true,
411		}
412	}
413}
414
415impl crate::util::ser::Writeable for LegacyChannelConfig {
416	fn write<W: crate::util::ser::Writer>(&self, writer: &mut W) -> Result<(), crate::io::Error> {
417		write_tlv_fields!(writer, {
418			(0, self.options.forwarding_fee_proportional_millionths, required),
419			(1, self.options.max_dust_htlc_exposure_msat, (default_value, 5_000_000)),
420			(2, self.options.cltv_expiry_delta, required),
421			(3, self.options.force_close_avoidance_max_fee_satoshis, (default_value, 1000)),
422			(4, self.announced_channel, required),
423			(6, self.commit_upfront_shutdown_pubkey, required),
424			(8, self.options.forwarding_fee_base_msat, required),
425		});
426		Ok(())
427	}
428}
429
430impl crate::util::ser::Readable for LegacyChannelConfig {
431	fn read<R: crate::io::Read>(reader: &mut R) -> Result<Self, crate::ln::msgs::DecodeError> {
432		let mut forwarding_fee_proportional_millionths = 0;
433		let mut max_dust_htlc_exposure_msat = 5_000_000;
434		let mut cltv_expiry_delta = 0;
435		let mut force_close_avoidance_max_fee_satoshis = 1000;
436		let mut announced_channel = false;
437		let mut commit_upfront_shutdown_pubkey = false;
438		let mut forwarding_fee_base_msat = 0;
439		read_tlv_fields!(reader, {
440			(0, forwarding_fee_proportional_millionths, required),
441			(1, max_dust_htlc_exposure_msat, (default_value, 5_000_000u64)),
442			(2, cltv_expiry_delta, required),
443			(3, force_close_avoidance_max_fee_satoshis, (default_value, 1000u64)),
444			(4, announced_channel, required),
445			(6, commit_upfront_shutdown_pubkey, required),
446			(8, forwarding_fee_base_msat, required),
447		});
448		Ok(Self {
449			options: ChannelConfig {
450				forwarding_fee_proportional_millionths,
451				max_dust_htlc_exposure_msat,
452				cltv_expiry_delta,
453				force_close_avoidance_max_fee_satoshis,
454				forwarding_fee_base_msat,
455			},
456			announced_channel,
457			commit_upfront_shutdown_pubkey,
458		})
459	}
460}
461
462/// Top-level config which holds ChannelHandshakeLimits and ChannelConfig.
463///
464/// Default::default() provides sane defaults for most configurations
465/// (but currently with 0 relay fees!)
466#[derive(Copy, Clone, Debug)]
467pub struct UserConfig {
468	/// Channel handshake config that we propose to our counterparty.
469	pub channel_handshake_config: ChannelHandshakeConfig,
470	/// Limits applied to our counterparty's proposed channel handshake config settings.
471	pub channel_handshake_limits: ChannelHandshakeLimits,
472	/// Channel config which affects behavior during channel lifetime.
473	pub channel_config: ChannelConfig,
474	/// If this is set to false, we will reject any HTLCs which were to be forwarded over private
475	/// channels. This prevents us from taking on HTLC-forwarding risk when we intend to run as a
476	/// node which is not online reliably.
477	///
478	/// For nodes which are not online reliably, you should set all channels to *not* be announced
479	/// (using [`ChannelHandshakeConfig::announced_channel`] and
480	/// [`ChannelHandshakeLimits::force_announced_channel_preference`]) and set this to false to
481	/// ensure you are not exposed to any forwarding risk.
482	///
483	/// Note that because you cannot change a channel's announced state after creation, there is no
484	/// way to disable forwarding on public channels retroactively. Thus, in order to change a node
485	/// from a publicly-announced forwarding node to a private non-forwarding node you must close
486	/// all your channels and open new ones. For privacy, you should also change your node_id
487	/// (swapping all private and public key material for new ones) at that time.
488	///
489	/// Default value: false.
490	pub accept_forwards_to_priv_channels: bool,
491	/// If this is set to false, we do not accept inbound requests to open a new channel.
492	/// Default value: true.
493	pub accept_inbound_channels: bool,
494	/// If this is set to true, the user needs to manually accept inbound requests to open a new
495	/// channel.
496	///
497	/// When set to true, [`Event::OpenChannelRequest`] will be triggered once a request to open a
498	/// new inbound channel is received through a [`msgs::OpenChannel`] message. In that case, a
499	/// [`msgs::AcceptChannel`] message will not be sent back to the counterparty node unless the
500	/// user explicitly chooses to accept the request.
501	///
502	/// Default value: false.
503	///
504	/// [`Event::OpenChannelRequest`]: crate::util::events::Event::OpenChannelRequest
505	/// [`msgs::OpenChannel`]: crate::ln::msgs::OpenChannel
506	/// [`msgs::AcceptChannel`]: crate::ln::msgs::AcceptChannel
507	pub manually_accept_inbound_channels: bool,
508	///  If this is set to true, LDK will intercept HTLCs that are attempting to be forwarded over
509	///  fake short channel ids generated via [`ChannelManager::get_intercept_scid`]. Upon HTLC
510	///  intercept, LDK will generate an [`Event::HTLCIntercepted`] which MUST be handled by the user.
511	///
512	///  Setting this to true may break backwards compatibility with LDK versions < 0.0.113.
513	///
514	///  Default value: false.
515	///
516	/// [`ChannelManager::get_intercept_scid`]: crate::ln::channelmanager::ChannelManager::get_intercept_scid
517	/// [`Event::HTLCIntercepted`]: crate::util::events::Event::HTLCIntercepted
518	pub accept_intercept_htlcs: bool,
519}
520
521impl Default for UserConfig {
522	fn default() -> Self {
523		UserConfig {
524			channel_handshake_config: ChannelHandshakeConfig::default(),
525			channel_handshake_limits: ChannelHandshakeLimits::default(),
526			channel_config: ChannelConfig::default(),
527			accept_forwards_to_priv_channels: false,
528			accept_inbound_channels: true,
529			manually_accept_inbound_channels: false,
530			accept_intercept_htlcs: false,
531		}
532	}
533}