pub enum SpendableOutputDescriptor {
StaticOutput {
outpoint: OutPoint,
output: TxOut,
},
DelayedPaymentOutput(DelayedPaymentOutputDescriptor),
StaticPaymentOutput(StaticPaymentOutputDescriptor),
}
Expand description
Describes the necessary information to spend a spendable output.
When on-chain outputs are created by LDK (which our counterparty is not able to claim at any
point in the future) a SpendableOutputs
event is generated which you must track and be able
to spend on-chain. The information needed to do this is provided in this enum, including the
outpoint describing which txid
and output index
is available, the full output which exists
at that txid
/index
, and any keys or other information required to sign.
Variants§
StaticOutput
Fields
An output to a script which was provided via SignerProvider
directly, either from
get_destination_script
or get_shutdown_scriptpubkey
, thus you should already
know how to spend it. No secret keys are provided as LDK was never given any key.
These may include outputs from a transaction punishing our counterparty or claiming an HTLC
on-chain using the payment preimage or after it has timed out.
DelayedPaymentOutput(DelayedPaymentOutputDescriptor)
An output to a P2WSH script which can be spent with a single signature after an OP_CSV
delay.
The witness in the spending input should be:
<BIP 143 signature> <empty vector> (MINIMALIF standard rule) <provided witnessScript>
Note that the nSequence
field in the spending input must be set to
DelayedPaymentOutputDescriptor::to_self_delay
(which means the transaction is not
broadcastable until at least DelayedPaymentOutputDescriptor::to_self_delay
blocks after
the outpoint confirms, see BIP
68). Also note that LDK
won’t generate a SpendableOutputDescriptor
until the corresponding block height
is reached.
These are generally the result of a “revocable” output to us, spendable only by us unless it is an output from an old state which we broadcast (which should never happen).
To derive the delayed payment key which is used to sign this input, you must pass the
holder InMemorySigner::delayed_payment_base_key
(i.e., the private key which corresponds to the
ChannelPublicKeys::delayed_payment_basepoint
in ChannelSigner::pubkeys
) and the provided
DelayedPaymentOutputDescriptor::per_commitment_point
to chan_utils::derive_private_key
. The public key can be
generated without the secret key using chan_utils::derive_public_key
and only the
ChannelPublicKeys::delayed_payment_basepoint
which appears in ChannelSigner::pubkeys
.
To derive the DelayedPaymentOutputDescriptor::revocation_pubkey
provided here (which is
used in the witness script generation), you must pass the counterparty
ChannelPublicKeys::revocation_basepoint
(which appears in the call to
ChannelSigner::provide_channel_parameters
) and the provided
DelayedPaymentOutputDescriptor::per_commitment_point
to
chan_utils::derive_public_revocation_key
.
The witness script which is hashed and included in the output script_pubkey
may be
regenerated by passing the DelayedPaymentOutputDescriptor::revocation_pubkey
(derived
as explained above), our delayed payment pubkey (derived as explained above), and the
DelayedPaymentOutputDescriptor::to_self_delay
contained here to
chan_utils::get_revokeable_redeemscript
.
StaticPaymentOutput(StaticPaymentOutputDescriptor)
An output to a P2WPKH, spendable exclusively by our payment key (i.e., the private key
which corresponds to the payment_point
in ChannelSigner::pubkeys
). The witness
in the spending input is, thus, simply:
<BIP 143 signature> <payment key>
These are generally the result of our counterparty having broadcast the current state, allowing us to claim the non-HTLC-encumbered outputs immediately.
Trait Implementations§
source§impl Clone for SpendableOutputDescriptor
impl Clone for SpendableOutputDescriptor
source§fn clone(&self) -> SpendableOutputDescriptor
fn clone(&self) -> SpendableOutputDescriptor
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for SpendableOutputDescriptor
impl Debug for SpendableOutputDescriptor
source§impl PartialEq<SpendableOutputDescriptor> for SpendableOutputDescriptor
impl PartialEq<SpendableOutputDescriptor> for SpendableOutputDescriptor
source§fn eq(&self, other: &SpendableOutputDescriptor) -> bool
fn eq(&self, other: &SpendableOutputDescriptor) -> bool
self
and other
values to be equal, and is used
by ==
.