Enum InboundHTLCStateDetails
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§
§impl Clone for InboundHTLCStateDetails
impl Clone for InboundHTLCStateDetails
§fn clone(&self) -> InboundHTLCStateDetails
fn clone(&self) -> InboundHTLCStateDetails
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read more§impl Debug for InboundHTLCStateDetails
impl Debug for InboundHTLCStateDetails
§impl MaybeReadable for InboundHTLCStateDetails
impl MaybeReadable for InboundHTLCStateDetails
§fn read<R>(
reader: &mut R,
) -> Result<Option<InboundHTLCStateDetails>, DecodeError>where
R: Read,
fn read<R>(
reader: &mut R,
) -> Result<Option<InboundHTLCStateDetails>, DecodeError>where
R: Read,
Self
in from the given Read
.§impl PartialEq for InboundHTLCStateDetails
impl PartialEq for InboundHTLCStateDetails
§impl Writeable for InboundHTLCStateDetails
impl Writeable for InboundHTLCStateDetails
impl StructuralPartialEq for InboundHTLCStateDetails
Auto Trait Implementations§
impl Freeze for InboundHTLCStateDetails
impl RefUnwindSafe for InboundHTLCStateDetails
impl Send for InboundHTLCStateDetails
impl Sync for InboundHTLCStateDetails
impl Unpin for InboundHTLCStateDetails
impl UnwindSafe for InboundHTLCStateDetails
Blanket Implementations§
§impl<T> AnyEq for T
impl<T> AnyEq for T
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request
Source§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T
in a tonic::Request