script: make "sig_and_empty" more generic, make htlc tx witness fns clearer.

For non-delayed HTLC success spends, we have a similar pattern ("<sig>
<preimage> <wscript>") so a we want to use the same function.

The other routines don't say "witness" in them, and should.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell 2017-09-16 09:09:06 +09:30
parent 86ecc6a058
commit 6ef64cd52b
4 changed files with 43 additions and 40 deletions

View file

@ -422,14 +422,15 @@ bool is_p2wpkh(const u8 *script)
return true; return true;
} }
u8 **bitcoin_witness_sig_and_empty(const tal_t *ctx, u8 **bitcoin_witness_sig_and_element(const tal_t *ctx,
const secp256k1_ecdsa_signature *sig, const secp256k1_ecdsa_signature *sig,
const void *elem, size_t elemsize,
const u8 *witnessscript) const u8 *witnessscript)
{ {
u8 **witness = tal_arr(ctx, u8 *, 3); u8 **witness = tal_arr(ctx, u8 *, 3);
witness[0] = stack_sig(witness, sig); witness[0] = stack_sig(witness, sig);
witness[1] = NULL; witness[1] = tal_dup_arr(witness, u8, elem, elemsize, 0);
witness[2] = tal_dup_arr(witness, u8, witness[2] = tal_dup_arr(witness, u8,
witnessscript, tal_count(witnessscript), 0); witnessscript, tal_count(witnessscript), 0);
@ -662,7 +663,7 @@ u8 *bitcoin_wscript_htlc_receive(const tal_t *ctx,
*... *...
* * `txin[0]` witness stack: `0 <remotesig> <localsig> <payment_preimage>` for HTLC-Success, `0 <remotesig> <localsig> 0` for HTLC-Timeout. * * `txin[0]` witness stack: `0 <remotesig> <localsig> <payment_preimage>` for HTLC-Success, `0 <remotesig> <localsig> 0` for HTLC-Timeout.
*/ */
u8 **bitcoin_htlc_offer_spend_timeout(const tal_t *ctx, u8 **bitcoin_witness_htlc_timeout_tx(const tal_t *ctx,
const secp256k1_ecdsa_signature *localsig, const secp256k1_ecdsa_signature *localsig,
const secp256k1_ecdsa_signature *remotesig, const secp256k1_ecdsa_signature *remotesig,
const u8 *wscript) const u8 *wscript)
@ -678,7 +679,7 @@ u8 **bitcoin_htlc_offer_spend_timeout(const tal_t *ctx,
return witness; return witness;
} }
u8 **bitcoin_htlc_receive_spend_preimage(const tal_t *ctx, u8 **bitcoin_witness_htlc_success_tx(const tal_t *ctx,
const secp256k1_ecdsa_signature *localsig, const secp256k1_ecdsa_signature *localsig,
const secp256k1_ecdsa_signature *remotesig, const secp256k1_ecdsa_signature *remotesig,
const struct preimage *preimage, const struct preimage *preimage,
@ -694,7 +695,6 @@ u8 **bitcoin_htlc_receive_spend_preimage(const tal_t *ctx,
return witness; return witness;
} }
u8 *bitcoin_wscript_htlc_tx(const tal_t *ctx, u8 *bitcoin_wscript_htlc_tx(const tal_t *ctx,
u16 to_self_delay, u16 to_self_delay,
const struct pubkey *revocation_pubkey, const struct pubkey *revocation_pubkey,

View file

@ -66,9 +66,10 @@ u8 **bitcoin_witness_p2wpkh(const tal_t *ctx,
const secp256k1_ecdsa_signature *sig, const secp256k1_ecdsa_signature *sig,
const struct pubkey *key); const struct pubkey *key);
/* Create a witness which contains sig, an empty entry, and the witnessscript */ /* Create a witness which contains sig, another entry, and the witnessscript */
u8 **bitcoin_witness_sig_and_empty(const tal_t *ctx, u8 **bitcoin_witness_sig_and_element(const tal_t *ctx,
const secp256k1_ecdsa_signature *sig, const secp256k1_ecdsa_signature *sig,
const void *elem, size_t elemsize,
const u8 *witnessscript); const u8 *witnessscript);
/* BOLT #3 to-local output */ /* BOLT #3 to-local output */
@ -86,7 +87,7 @@ u8 *bitcoin_wscript_htlc_offer(const tal_t *ctx,
const struct pubkey *remotekey, const struct pubkey *remotekey,
const struct sha256 *payment_hash, const struct sha256 *payment_hash,
const struct pubkey *revocationkey); const struct pubkey *revocationkey);
u8 **bitcoin_htlc_offer_spend_timeout(const tal_t *ctx, u8 **bitcoin_witness_htlc_timeout_tx(const tal_t *ctx,
const secp256k1_ecdsa_signature *localsig, const secp256k1_ecdsa_signature *localsig,
const secp256k1_ecdsa_signature *remotesig, const secp256k1_ecdsa_signature *remotesig,
const u8 *wscript); const u8 *wscript);
@ -96,7 +97,7 @@ u8 *bitcoin_wscript_htlc_receive(const tal_t *ctx,
const struct pubkey *remotekey, const struct pubkey *remotekey,
const struct sha256 *payment_hash, const struct sha256 *payment_hash,
const struct pubkey *revocationkey); const struct pubkey *revocationkey);
u8 **bitcoin_htlc_receive_spend_preimage(const tal_t *ctx, u8 **bitcoin_witness_htlc_success_tx(const tal_t *ctx,
const secp256k1_ecdsa_signature *localsig, const secp256k1_ecdsa_signature *localsig,
const secp256k1_ecdsa_signature *remotesig, const secp256k1_ecdsa_signature *remotesig,
const struct preimage *preimage, const struct preimage *preimage,

View file

@ -109,7 +109,7 @@ void htlc_success_tx_add_witness(struct bitcoin_tx *htlc_success,
&hash, revocationkey); &hash, revocationkey);
htlc_success->input[0].witness htlc_success->input[0].witness
= bitcoin_htlc_receive_spend_preimage(htlc_success->input, = bitcoin_witness_htlc_success_tx(htlc_success->input,
localsig, remotesig, localsig, remotesig,
payment_preimage, payment_preimage,
wscript); wscript);
@ -150,7 +150,7 @@ void htlc_timeout_tx_add_witness(struct bitcoin_tx *htlc_timeout,
payment_hash, revocationkey); payment_hash, revocationkey);
htlc_timeout->input[0].witness htlc_timeout->input[0].witness
= bitcoin_htlc_offer_spend_timeout(htlc_timeout->input, = bitcoin_witness_htlc_timeout_tx(htlc_timeout->input,
localsig, remotesig, localsig, remotesig,
wscript); wscript);
tal_free(wscript); tal_free(wscript);

View file

@ -659,8 +659,10 @@ static struct bitcoin_tx *tx_to_us(const tal_t *ctx,
tx->output[0].amount -= fee; tx->output[0].amount -= fee;
sign_tx_input(tx, 0, NULL, wscript, privkey, pubkey, &sig); sign_tx_input(tx, 0, NULL, wscript, privkey, pubkey, &sig);
tx->input[0].witness = bitcoin_witness_sig_and_empty(tx->input, tx->input[0].witness = bitcoin_witness_sig_and_element(tx->input,
&sig, wscript); &sig,
NULL, 0,
wscript);
return tx; return tx;
} }
@ -711,7 +713,7 @@ static void resolve_our_htlc_ourcommit(struct tracked_output *out,
&keyset->self_payment_key, &localsig); &keyset->self_payment_key, &localsig);
tx->input[0].witness tx->input[0].witness
= bitcoin_htlc_offer_spend_timeout(tx->input, = bitcoin_witness_htlc_timeout_tx(tx->input,
&localsig, &localsig,
remotesig, remotesig,
wscript); wscript);