@@ -56,26 +56,30 @@ pub enum SpendableOutputDescriptor {
56
56
/// <BIP 143 signature> <empty vector> (MINIMALIF standard rule) <provided witnessScript>
57
57
///
58
58
/// Note that the nSequence field in the spending input must be set to to_self_delay
59
- /// (which means the transaction not being broadcastable until at least to_self_delay
59
+ /// (which means the transaction is not broadcastable until at least to_self_delay
60
60
/// blocks after the outpoint confirms).
61
61
///
62
62
/// These are generally the result of a "revocable" output to us, spendable only by us unless
63
- /// it is an output from us having broadcast an old state (which should never happen).
63
+ /// it is an output from an old state which we broadcast (which should never happen).
64
64
///
65
- /// WitnessScript may be regenerated by passing the revocation_pubkey, to_self_delay and
66
- /// delayed_payment_pubkey to chan_utils::get_revokeable_redeemscript.
65
+ /// To derive the delayed_payment key which is used to sign for this input, you must pass the
66
+ /// local delayed_payment_base_key (ie the private key which corresponds to the pubkey in
67
+ /// ChannelKeys::pubkeys().delayed_payment_basepoint) and the provided per_commitment_point to
68
+ /// chan_utils::derive_private_key. The public key can be generated without the secret key
69
+ /// using chan_utils::derive_public_key and only the delayed_payment_basepoint which appears in
70
+ /// ChannelKeys::pubkeys().
67
71
///
68
- /// To derive the delayed_payment key corresponding to the channel state, you must pass the
69
- /// local delayed_payment_base_key and the provided per_commitment_point to
70
- /// chan_utils::derive_private_key. The resulting key should be used to sign the spending
71
- /// transaction.
72
- ///
73
- /// To derive the revocation_pubkey corresponding to the channel state, you must pass the
74
- /// remote revocation_basepoint and the provided per_commitment point to
72
+ /// To derive the revocation_pubkey which is used in the witness script generation, you must
73
+ /// pass the remote revocation_basepoint (which appears in the call to
74
+ /// ChannelKeys::set_remote_channel_pubkeys) and the provided per_commitment point to
75
75
/// chan_utils::derive_public_revocation_key.
76
76
///
77
- /// Both remote revocation_basepoint and local delayed_payment_base_key should be given
78
- /// by ChannelKeys, either default implementation (InMemoryChannelKeys) or custom one.
77
+ /// The witness script which is hashed and included in the output script_pubkey may be
78
+ /// regenerated by passing the revocation_pubkey (derived as above), our delayed_payment pubkey
79
+ /// (derived as above), and the to_self_delay contained here to
80
+ /// chan_utils::get_revokeable_redeemscript.
81
+ //
82
+ // TODO: we need to expose utility methods in KeyManager to do all the relevant derivation.
79
83
DynamicOutputP2WSH {
80
84
/// The outpoint which is spendable
81
85
outpoint : OutPoint ,
@@ -92,7 +96,8 @@ pub enum SpendableOutputDescriptor {
92
96
/// The remote_revocation_pubkey used to derive witnessScript
93
97
remote_revocation_pubkey : PublicKey
94
98
} ,
95
- /// An output to a P2WPKH, spendable exclusively by our payment key.
99
+ /// An output to a P2WPKH, spendable exclusively by our payment key (ie the private key which
100
+ /// corresponds to the public key in ChannelKeys::pubkeys().payment_point).
96
101
/// The witness in the spending input, is, thus, simply:
97
102
/// <BIP 143 signature> <payment key>
98
103
///
@@ -272,47 +277,47 @@ pub trait ChannelKeys : Send+Clone {
272
277
/// return value must contain a signature.
273
278
fn sign_local_commitment_htlc_transactions < T : secp256k1:: Signing + secp256k1:: Verification > ( & self , local_commitment_tx : & LocalCommitmentTransaction , local_csv : u16 , secp_ctx : & Secp256k1 < T > ) -> Result < Vec < Option < Signature > > , ( ) > ;
274
279
275
- /// Create a signature for a transaction spending an HTLC or commitment transaction output
276
- /// when our counterparty broadcast an old state.
280
+ /// Create a signature for the given input in a transaction spending an HTLC or commitment
281
+ /// transaction output when our counterparty broadcast an old state.
277
282
///
278
- /// Justice transaction may claim multiples outputs at same time if timelock are similar.
283
+ /// A justice transaction may claim multiples outputs at same time if timelock are similar,
284
+ /// but only a signature for the input at index `input` should be signed for here.
279
285
/// It may be called multiples time for same output(s) if a fee-bump is needed with regards
280
286
/// to an upcoming timelock expiration.
281
287
///
282
- /// Input index is a pointer towards outpoint spent, commited by sigs ( BIP 143) .
288
+ /// Amount is value of the output spent by this input, committed to in the BIP 143 signature .
283
289
///
284
- /// Amount is value of the output spent by this input, committed by sigs (BIP 143).
290
+ /// per_commitment_key is revocation secret which was provided by our counterparty when they
291
+ /// revoked the state which they eventually broadcast. It's not a _local_ secret key and does
292
+ /// not allow the spending of any funds by itself (you need our local revocation_secret to do
293
+ /// so).
285
294
///
286
- /// Per_commitment key is revocation secret such as provided by remote party while
287
- /// revocating detected onchain transaction. It's not a _local_ secret key, therefore
288
- /// it may cross interfaces, a node compromise won't allow to spend revoked output without
289
- /// also compromissing revocation key.
295
+ /// htlc holds HTLC elements (hash, timelock) if the output being spent is a HTLC output, thus
296
+ /// changing the format of the witness script (which is committed to in the BIP 143
297
+ /// signatures).
290
298
///
291
- /// htlc holds HTLC elements (hash, timelock) if output spent is a HTLC one, committed as
292
- /// part of witnessScript by sigs (BIP 143).
293
- ///
294
- /// on_remote_tx_csv is the relative lock-time challenge if output spent is on remote
295
- /// balance or 2nd-stage HTLC transactions, committed as part of witnessScript by sigs
296
- /// (BIP 143).
299
+ /// on_remote_tx_csv is the relative lock-time that that our counterparty would have to set on
300
+ /// their transaction were they to spend the same output. It is included in the witness script
301
+ /// and thus committed to in the BIP 143 signature.
297
302
fn sign_justice_transaction < T : secp256k1:: Signing + secp256k1:: Verification > ( & self , justice_tx : & Transaction , input : usize , amount : u64 , per_commitment_key : & SecretKey , htlc : & Option < HTLCOutputInCommitment > , on_remote_tx_csv : u16 , secp_ctx : & Secp256k1 < T > ) -> Result < Signature , ( ) > ;
298
303
299
304
/// Create a signature for a claiming transaction for a HTLC output on a remote commitment
300
305
/// transaction, either offered or received.
301
306
///
302
- /// HTLC transaction may claim multiples offered outputs at same time if we know preimage
303
- /// for each at detection. It may be called multtiples time for same output(s) if a fee-bump
304
- /// is needed with regards to an upcoming timelock expiration.
307
+ /// Such a transaction may claim multiples offered outputs at same time if we know the preimage
308
+ /// for each when we create it, but only the input at index `input` should be signed for here.
309
+ /// It may be called multiple time for same output(s) if a fee-bump is needed with regards to
310
+ /// an upcoming timelock expiration.
305
311
///
306
312
/// Witness_script is either a offered or received script as defined in BOLT3 for HTLC
307
313
/// outputs.
308
314
///
309
- /// Input index is a pointer towards outpoint spent, commited by sigs (BIP 143).
310
- ///
311
- /// Amount is value of the output spent by this input, committed by sigs (BIP 143).
315
+ /// Amount is value of the output spent by this input, committed to in the BIP 143 signature.
312
316
///
313
317
/// Per_commitment_point is the dynamic point corresponding to the channel state
314
- /// detected onchain. It has been generated by remote party and is used to derive
315
- /// channel state keys, committed as part of witnessScript by sigs (BIP 143).
318
+ /// detected onchain. It has been generated by our counterparty and is used to derive
319
+ /// channel state keys, which are then included in the witness script and committed to in the
320
+ /// BIP 143 signature.
316
321
fn sign_remote_htlc_transaction < T : secp256k1:: Signing + secp256k1:: Verification > ( & self , htlc_tx : & Transaction , input : usize , amount : u64 , per_commitment_point : & PublicKey , htlc : & HTLCOutputInCommitment , secp_ctx : & Secp256k1 < T > ) -> Result < Signature , ( ) > ;
317
322
318
323
/// Create a signature for a (proposed) closing transaction.
0 commit comments