pub struct ChannelHandshakeLimits {
    pub min_funding_satoshis: u64,
    pub max_funding_satoshis: u64,
    pub max_htlc_minimum_msat: u64,
    pub min_max_htlc_value_in_flight_msat: u64,
    pub max_channel_reserve_satoshis: u64,
    pub min_max_accepted_htlcs: u16,
    pub max_minimum_depth: u32,
    pub trust_own_funding_0conf: bool,
    pub force_announced_channel_preference: bool,
    pub their_to_self_delay: u16,
}
Expand description

Optional channel limits which are applied during channel creation.

These limits are only applied to our counterparty’s limits, not our own.

Use 0/<type>::max_value() as appropriate to skip checking.

Provides sane defaults for most configurations.

Most additional limits are disabled except those with which specify a default in individual field documentation. Note that this may result in barely-usable channels, but since they are applied mostly only to incoming channels that’s not much of a problem.

Fields§

§min_funding_satoshis: u64

Minimum allowed satoshis when a channel is funded. This is supplied by the sender and so only applies to inbound channels.

Default value: 0.

§max_funding_satoshis: u64

Maximum allowed satoshis when a channel is funded. This is supplied by the sender and so only applies to inbound channels.

Default value: 2^24 - 1.

§max_htlc_minimum_msat: u64

The remote node sets a limit on the minimum size of HTLCs we can send to them. This allows you to limit the maximum minimum-size they can require.

Default value: u64::max_value.

§min_max_htlc_value_in_flight_msat: u64

The remote node sets a limit on the maximum value of pending HTLCs to them at any given time to limit their funds exposure to HTLCs. This allows you to set a minimum such value.

Default value: 0.

§max_channel_reserve_satoshis: u64

The remote node will require we keep a certain amount in direct payment to ourselves at all time, ensuring that we are able to be punished if we broadcast an old state. This allows to you limit the amount which we will have to keep to ourselves (and cannot use for HTLCs).

Default value: u64::max_value.

§min_max_accepted_htlcs: u16

The remote node sets a limit on the maximum number of pending HTLCs to them at any given time. This allows you to set a minimum such value.

Default value: 0.

§max_minimum_depth: u32

Before a channel is usable the funding transaction will need to be confirmed by at least a certain number of blocks, specified by the node which is not the funder (as the funder can assume they aren’t going to double-spend themselves). This config allows you to set a limit on the maximum amount of time to wait.

Default value: 144, or roughly one day and only applies to outbound channels.

§trust_own_funding_0conf: bool

Whether we implicitly trust funding transactions generated by us for our own outbound channels to not be double-spent.

If this is set, we assume that our own funding transactions are never double-spent, and thus we can trust them without any confirmations. This is generally a reasonable assumption, given we’re the only ones who could ever double-spend it (assuming we have sole control of the signing keys).

You may wish to un-set this if you allow the user to (or do in an automated fashion) double-spend the funding transaction to RBF with an alternative channel open.

This only applies if our counterparty set their confirmations-required value to 0, and we always trust our own funding transaction at 1 confirmation irrespective of this value. Thus, this effectively acts as a min_minimum_depth, with the only possible values being true (0) and false (1).

Default value: true

§force_announced_channel_preference: bool

Set to force an incoming channel to match our announced channel preference in ChannelHandshakeConfig::announced_channel.

For a node which is not online reliably, this should be set to true and ChannelHandshakeConfig::announced_channel set to false, ensuring that no announced (aka public) channels will ever be opened.

Default value: true.

§their_to_self_delay: u16

Set to the amount of time we’re willing to wait to claim money back to us.

Not checking this value would be a security issue, as our peer would be able to set it to max relative lock-time (a year) and we would “lose” money as it would be locked for a long time.

Default value: 2016, which we also enforce as a maximum value so you can tweak config to reduce the loss of having useless locked funds (if your peer accepts)

Trait Implementations§

§

impl Clone for ChannelHandshakeLimits

§

fn clone(&self) -> ChannelHandshakeLimits

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
§

impl Debug for ChannelHandshakeLimits

§

fn fmt(&self, f: &mut Formatter<'_>) -> Result<(), Error>

Formats the value using the given formatter. Read more
§

impl Default for ChannelHandshakeLimits

§

fn default() -> ChannelHandshakeLimits

Returns the “default value” for a type. Read more
§

impl Copy for ChannelHandshakeLimits

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> CloneToUninit for T
where T: Copy,

source§

unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> CloneToUninit for T
where T: Clone,

source§

default unsafe fn clone_to_uninit(&self, dst: *mut T)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> FromRef<T> for T
where T: Clone,

§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> IntoRequest<T> for T

source§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
source§

impl<T> Same for T

§

type Output = T

Should always be Self
source§

impl<T> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> DartSafe for T

§

impl<T> TaskRetFutTrait for T
where T: Send,