Enum InboundHTLCStateDetails

Source
pub enum InboundHTLCStateDetails {
    AwaitingRemoteRevokeToAdd,
    Committed,
    AwaitingRemoteRevokeToRemoveFulfill,
    AwaitingRemoteRevokeToRemoveFail,
}
Expand description

Exposes the state of pending inbound HTLCs.

At a high level, an HTLC being forwarded from one Lightning node to another Lightning node goes through the following states in the state machine:

  • Announced for addition by the originating node through the update_add_htlc message.
  • Added to the commitment transaction of the receiving node and originating node in turn through the exchange of commitment_signed and revoke_and_ack messages.
  • Announced for resolution (fulfillment or failure) by the receiving node through either one of the update_fulfill_htlc, update_fail_htlc, and update_fail_malformed_htlc messages.
  • Removed from the commitment transaction of the originating node and receiving node in turn through the exchange of commitment_signed and revoke_and_ack messages.

This can be used to inspect what next message an HTLC is waiting for to advance its state.

Variants§

§

AwaitingRemoteRevokeToAdd

We have added this HTLC in our commitment transaction by receiving commitment_signed and returning revoke_and_ack. We are awaiting the appropriate revoke_and_ack’s from the remote before this HTLC is included on the remote commitment transaction.

§

Committed

This HTLC has been included in the commitment_signed and revoke_and_ack messages on both sides and is included in both commitment transactions.

This HTLC is now safe to either forward or be claimed as a payment by us. The HTLC will remain in this state until the forwarded upstream HTLC has been resolved and we resolve this HTLC correspondingly, or until we claim it as a payment. If it is part of a multipart payment, it will only be claimed together with other required parts.

§

AwaitingRemoteRevokeToRemoveFulfill

We have received the preimage for this HTLC and it is being removed by fulfilling it with update_fulfill_htlc. This HTLC is still on both commitment transactions, but we are awaiting the appropriate revoke_and_ack’s from the remote before this HTLC is removed from the remote commitment transaction after update_fulfill_htlc.

§

AwaitingRemoteRevokeToRemoveFail

The HTLC is being removed by failing it with update_fail_htlc or update_fail_malformed_htlc. This HTLC is still on both commitment transactions, but we are awaiting the appropriate revoke_and_ack’s from the remote before this HTLC is removed from the remote commitment transaction.

Trait Implementations§

Source§

impl Clone for InboundHTLCStateDetails

Source§

fn clone(&self) -> InboundHTLCStateDetails

Returns a duplicate of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for InboundHTLCStateDetails

Source§

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

Formats the value using the given formatter. Read more
Source§

impl MaybeReadable for InboundHTLCStateDetails

Source§

fn read<R: Read>(reader: &mut R) -> Result<Option<Self>, DecodeError>

Reads a Self in from the given Read.
Source§

impl PartialEq for InboundHTLCStateDetails

Source§

fn eq(&self, other: &InboundHTLCStateDetails) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Writeable for InboundHTLCStateDetails

Source§

fn write<W: Writer>(&self, writer: &mut W) -> Result<(), Error>

Writes self out to the given Writer.
Source§

fn encode(&self) -> Vec<u8>

Writes self out to a Vec<u8>.
Source§

fn serialized_length(&self) -> usize

Gets the length of this object after it has been serialized. This can be overridden to optimize cases where we prepend an object with its length.
Source§

impl StructuralPartialEq for InboundHTLCStateDetails

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: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

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

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> ToOwned for T
where T: Clone,

Source§

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>,

Source§

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>,

Source§

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.
Source§

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

Source§

fn vzip(self) -> V