Package org.ldk.structs
Class BaseSign
- java.lang.Object
-
- org.ldk.structs.BaseSign
-
public class BaseSign extends Object
A trait to sign lightning channel transactions as described in BOLT 3. Signing services could be implemented on a hardware wallet. In this case, the current Sign would be a front-end on top of a communication channel connected to your secure device and lightning key material wouldn't reside on a hot server. Nevertheless, a this deployment would still need to trust the ChannelManager to avoid loss of funds as this latest component could ask to sign commitment transaction with HTLCs paying to attacker pubkeys. A more secure iteration would be to use hashlock (or payment points) to pair invoice/incoming HTLCs with outgoing HTLCs to implement a no-trust-ChannelManager at the price of more state and computation on the hardware wallet side. In the future, we are looking forward to design such interface. In any case, ChannelMonitor or fallback watchtowers are always going to be trusted to act, as liveness and breach reply correctness are always going to be hard requirements of LN security model, orthogonal of key management issues.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static interface
BaseSign.BaseSignInterface
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description byte[]
channel_keys_id()
Gets an arbitrary identifier describing the set of keys which are provided back to you in some SpendableOutputDescriptor types.protected void
finalize()
byte[]
get_per_commitment_point(long idx)
Gets the per-commitment point for a specific commitment number Note that the commitment number starts at (1 << 48) - 1 and counts backwards.ChannelPublicKeys
get_pubkeys()
Frees any resources associated with this object given its this_arg pointer.static BaseSign
new_impl(BaseSign.BaseSignInterface arg, ChannelPublicKeys pubkeys)
void
ready_channel(ChannelTransactionParameters channel_parameters)
Set the counterparty static channel data, including basepoints, counterparty_selected/holder_selected_contest_delay and funding outpoint.byte[]
release_commitment_secret(long idx)
Gets the commitment secret for a specific commitment number as part of the revocation process An external signer implementation should error here if the commitment was already signed and should refuse to sign it in the future.Result_SignatureNoneZ
sign_channel_announcement(UnsignedChannelAnnouncement msg)
Signs a channel announcement message with our funding key, proving it comes from one of the channel participants.Result_SignatureNoneZ
sign_closing_transaction(byte[] closing_tx)
Create a signature for a (proposed) closing transaction.Result_C2Tuple_SignatureCVec_SignatureZZNoneZ
sign_counterparty_commitment(CommitmentTransaction commitment_tx)
Create a signature for a counterparty's commitment transaction and associated HTLC transactions.Result_SignatureNoneZ
sign_counterparty_htlc_transaction(byte[] htlc_tx, long input, long amount, byte[] per_commitment_point, HTLCOutputInCommitment htlc)
Create a signature for a claiming transaction for a HTLC output on a counterparty's commitment transaction, either offered or received.Result_C2Tuple_SignatureCVec_SignatureZZNoneZ
sign_holder_commitment_and_htlcs(HolderCommitmentTransaction commitment_tx)
Create a signatures for a holder's commitment transaction and its claiming HTLC transactions.Result_SignatureNoneZ
sign_justice_revoked_htlc(byte[] justice_tx, long input, long amount, byte[] per_commitment_key, HTLCOutputInCommitment htlc)
Create a signature for the given input in a transaction spending a commitment transaction HTLC output when our counterparty broadcasts an old state.Result_SignatureNoneZ
sign_justice_revoked_output(byte[] justice_tx, long input, long amount, byte[] per_commitment_key)
Create a signature for the given input in a transaction spending an HTLC transaction output or a commitment transaction `to_local` output when our counterparty broadcasts an old state.
-
-
-
Method Detail
-
finalize
protected void finalize() throws Throwable
-
new_impl
public static BaseSign new_impl(BaseSign.BaseSignInterface arg, ChannelPublicKeys pubkeys)
-
get_per_commitment_point
public byte[] get_per_commitment_point(long idx)
Gets the per-commitment point for a specific commitment number Note that the commitment number starts at (1 << 48) - 1 and counts backwards.
-
release_commitment_secret
public byte[] release_commitment_secret(long idx)
Gets the commitment secret for a specific commitment number as part of the revocation process An external signer implementation should error here if the commitment was already signed and should refuse to sign it in the future. May be called more than once for the same index. Note that the commitment number starts at (1 << 48) - 1 and counts backwards.
-
channel_keys_id
public byte[] channel_keys_id()
Gets an arbitrary identifier describing the set of keys which are provided back to you in some SpendableOutputDescriptor types. This should be sufficient to identify this Sign object uniquely and lookup or re-derive its keys.
-
sign_counterparty_commitment
public Result_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_counterparty_commitment(CommitmentTransaction commitment_tx)
Create a signature for a counterparty's commitment transaction and associated HTLC transactions. Note that if signing fails or is rejected, the channel will be force-closed.
-
sign_holder_commitment_and_htlcs
public Result_C2Tuple_SignatureCVec_SignatureZZNoneZ sign_holder_commitment_and_htlcs(HolderCommitmentTransaction commitment_tx)
Create a signatures for a holder's commitment transaction and its claiming HTLC transactions. This will only ever be called with a non-revoked commitment_tx. This will be called with the latest commitment_tx when we initiate a force-close. This will be called with the previous latest, just to get claiming HTLC signatures, if we are reacting to a ChannelMonitor replica that decided to broadcast before it had been updated to the latest. This may be called multiple times for the same transaction. An external signer implementation should check that the commitment has not been revoked. May return Err if key derivation fails. Callers, such as ChannelMonitor, will panic in such a case.
-
sign_justice_revoked_output
public Result_SignatureNoneZ sign_justice_revoked_output(byte[] justice_tx, long input, long amount, byte[] per_commitment_key)
Create a signature for the given input in a transaction spending an HTLC transaction output or a commitment transaction `to_local` output when our counterparty broadcasts an old state. A justice transaction may claim multiple outputs at the same time if timelocks are similar, but only a signature for the input at index `input` should be signed for here. It may be called multiple times for same output(s) if a fee-bump is needed with regards to an upcoming timelock expiration. Amount is value of the output spent by this input, committed to in the BIP 143 signature. per_commitment_key is revocation secret which was provided by our counterparty when they revoked the state which they eventually broadcast. It's not a _holder_ secret key and does not allow the spending of any funds by itself (you need our holder revocation_secret to do so).
-
sign_justice_revoked_htlc
public Result_SignatureNoneZ sign_justice_revoked_htlc(byte[] justice_tx, long input, long amount, byte[] per_commitment_key, HTLCOutputInCommitment htlc)
Create a signature for the given input in a transaction spending a commitment transaction HTLC output when our counterparty broadcasts an old state. A justice transaction may claim multiple outputs at the same time if timelocks are similar, but only a signature for the input at index `input` should be signed for here. It may be called multiple times for same output(s) if a fee-bump is needed with regards to an upcoming timelock expiration. Amount is value of the output spent by this input, committed to in the BIP 143 signature. per_commitment_key is revocation secret which was provided by our counterparty when they revoked the state which they eventually broadcast. It's not a _holder_ secret key and does not allow the spending of any funds by itself (you need our holder revocation_secret to do so). htlc holds HTLC elements (hash, timelock), thus changing the format of the witness script (which is committed to in the BIP 143 signatures).
-
sign_counterparty_htlc_transaction
public Result_SignatureNoneZ sign_counterparty_htlc_transaction(byte[] htlc_tx, long input, long amount, byte[] per_commitment_point, HTLCOutputInCommitment htlc)
Create a signature for a claiming transaction for a HTLC output on a counterparty's commitment transaction, either offered or received. Such a transaction may claim multiples offered outputs at same time if we know the preimage for each when we create it, but only the input at index `input` should be signed for here. It may be called multiple times for same output(s) if a fee-bump is needed with regards to an upcoming timelock expiration. Witness_script is either a offered or received script as defined in BOLT3 for HTLC outputs. Amount is value of the output spent by this input, committed to in the BIP 143 signature. Per_commitment_point is the dynamic point corresponding to the channel state detected onchain. It has been generated by our counterparty and is used to derive channel state keys, which are then included in the witness script and committed to in the BIP 143 signature.
-
sign_closing_transaction
public Result_SignatureNoneZ sign_closing_transaction(byte[] closing_tx)
Create a signature for a (proposed) closing transaction. Note that, due to rounding, there may be one \"missing\" satoshi, and either party may have chosen to forgo their output as dust.
-
sign_channel_announcement
public Result_SignatureNoneZ sign_channel_announcement(UnsignedChannelAnnouncement msg)
Signs a channel announcement message with our funding key, proving it comes from one of the channel participants. Note that if this fails or is rejected, the channel will not be publicly announced and our counterparty may (though likely will not) close the channel on us for violating the protocol.
-
ready_channel
public void ready_channel(ChannelTransactionParameters channel_parameters)
Set the counterparty static channel data, including basepoints, counterparty_selected/holder_selected_contest_delay and funding outpoint. This is done as soon as the funding outpoint is known. Since these are static channel data, they MUST NOT be allowed to change to different values once set. channel_parameters.is_populated() MUST be true. We bind holder_selected_contest_delay late here for API convenience. Will be called before any signatures are applied.
-
get_pubkeys
public ChannelPublicKeys get_pubkeys()
Frees any resources associated with this object given its this_arg pointer. Does not need to free the outer struct containing function pointers and may be NULL is no resources need to be freed.
-
-