@@ -216,21 +216,20 @@ pub trait ChannelKeys : Send+Clone {
216
216
/// making the callee generate it via some util function we expose)!
217
217
fn sign_remote_commitment < T : secp256k1:: Signing + secp256k1:: Verification > ( & self , feerate_per_kw : u64 , commitment_tx : & Transaction , keys : & TxCreationKeys , htlcs : & [ & HTLCOutputInCommitment ] , to_self_delay : u16 , secp_ctx : & Secp256k1 < T > ) -> Result < ( Signature , Vec < Signature > ) , ( ) > ;
218
218
219
- /// Create a signature for a local commitment transaction
219
+ /// Create a signature for a local commitment transaction. This will only ever be called with
220
+ /// the same local_commitment_tx (or a copy thereof), though there are currently no guarantees
221
+ /// that it will not be called multiple times.
220
222
///
221
223
/// TODO: Document the things someone using this interface should enforce before signing.
222
224
/// TODO: Add more input vars to enable better checking (preferably removing commitment_tx and
223
- /// TODO: Ensure test-only version doesn't enforce uniqueness of signature when it's enforced in this method
224
- /// making the callee generate it via some util function we expose)!
225
- fn sign_local_commitment < T : secp256k1:: Signing + secp256k1:: Verification > ( & self , local_commitment_tx : & mut LocalCommitmentTransaction , secp_ctx : & Secp256k1 < T > ) ;
225
+ fn sign_local_commitment < T : secp256k1:: Signing + secp256k1:: Verification > ( & self , local_commitment_tx : & LocalCommitmentTransaction , secp_ctx : & Secp256k1 < T > ) -> Result < Signature , ( ) > ;
226
226
227
- /// Create a signature for a local commitment transaction without enforcing one-time signing.
228
- ///
229
- /// Testing revocation logic by our test framework needs to sign multiple local commitment
230
- /// transactions. This unsafe test-only version doesn't enforce one-time signing security
231
- /// requirement.
227
+ /// Same as sign_local_commitment, but exists only for tests to get access to local commitment
228
+ /// transactions which will be broadcasted later, after the channel has moved on to a newer
229
+ /// state. Thus, needs its own method as sign_local_commitment may enforce that we only ever
230
+ /// get called once.
232
231
#[ cfg( test) ]
233
- fn unsafe_sign_local_commitment < T : secp256k1:: Signing + secp256k1:: Verification > ( & self , local_commitment_tx : & mut LocalCommitmentTransaction , secp_ctx : & Secp256k1 < T > ) ;
232
+ fn unsafe_sign_local_commitment < T : secp256k1:: Signing + secp256k1:: Verification > ( & self , local_commitment_tx : & LocalCommitmentTransaction , secp_ctx : & Secp256k1 < T > ) -> Result < Signature , ( ) > ;
234
233
235
234
/// Signs a transaction created by build_htlc_transaction. If the transaction is an
236
235
/// HTLC-Success transaction, preimage must be set!
@@ -363,21 +362,21 @@ impl ChannelKeys for InMemoryChannelKeys {
363
362
Ok ( ( commitment_sig, htlc_sigs) )
364
363
}
365
364
366
- fn sign_local_commitment < T : secp256k1:: Signing + secp256k1:: Verification > ( & self , local_commitment_tx : & mut LocalCommitmentTransaction , secp_ctx : & Secp256k1 < T > ) {
365
+ fn sign_local_commitment < T : secp256k1:: Signing + secp256k1:: Verification > ( & self , local_commitment_tx : & LocalCommitmentTransaction , secp_ctx : & Secp256k1 < T > ) -> Result < Signature , ( ) > {
367
366
let funding_pubkey = PublicKey :: from_secret_key ( secp_ctx, & self . funding_key ) ;
368
367
let remote_channel_pubkeys = self . remote_channel_pubkeys . as_ref ( ) . expect ( "must set remote channel pubkeys before signing" ) ;
369
368
let channel_funding_redeemscript = make_funding_redeemscript ( & funding_pubkey, & remote_channel_pubkeys. funding_pubkey ) ;
370
369
371
- local_commitment_tx. add_local_sig ( & self . funding_key , & channel_funding_redeemscript, self . channel_value_satoshis , secp_ctx) ;
370
+ Ok ( local_commitment_tx. get_local_sig ( & self . funding_key , & channel_funding_redeemscript, self . channel_value_satoshis , secp_ctx) )
372
371
}
373
372
374
373
#[ cfg( test) ]
375
- fn unsafe_sign_local_commitment < T : secp256k1:: Signing + secp256k1:: Verification > ( & self , local_commitment_tx : & mut LocalCommitmentTransaction , secp_ctx : & Secp256k1 < T > ) {
374
+ fn unsafe_sign_local_commitment < T : secp256k1:: Signing + secp256k1:: Verification > ( & self , local_commitment_tx : & LocalCommitmentTransaction , secp_ctx : & Secp256k1 < T > ) -> Result < Signature , ( ) > {
376
375
let funding_pubkey = PublicKey :: from_secret_key ( secp_ctx, & self . funding_key ) ;
377
376
let remote_channel_pubkeys = self . remote_channel_pubkeys . as_ref ( ) . expect ( "must set remote channel pubkeys before signing" ) ;
378
377
let channel_funding_redeemscript = make_funding_redeemscript ( & funding_pubkey, & remote_channel_pubkeys. funding_pubkey ) ;
379
378
380
- local_commitment_tx. add_local_sig ( & self . funding_key , & channel_funding_redeemscript, self . channel_value_satoshis , secp_ctx) ;
379
+ Ok ( local_commitment_tx. get_local_sig ( & self . funding_key , & channel_funding_redeemscript, self . channel_value_satoshis , secp_ctx) )
381
380
}
382
381
383
382
fn sign_htlc_transaction < T : secp256k1:: Signing > ( & self , local_commitment_tx : & mut LocalCommitmentTransaction , htlc_index : u32 , preimage : Option < PaymentPreimage > , local_csv : u16 , secp_ctx : & Secp256k1 < T > ) {
0 commit comments