Browse Source

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>
ppa-0.6.1
Rusty Russell 8 years ago
parent
commit
6ef64cd52b
  1. 10
      bitcoin/script.c
  2. 9
      bitcoin/script.h
  3. 4
      common/htlc_tx.c
  4. 8
      onchaind/onchain.c

10
bitcoin/script.c

@ -422,14 +422,15 @@ bool is_p2wpkh(const u8 *script)
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 void *elem, size_t elemsize,
const u8 *witnessscript)
{
u8 **witness = tal_arr(ctx, u8 *, 3);
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,
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.
*/
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 *remotesig,
const u8 *wscript)
@ -678,7 +679,7 @@ u8 **bitcoin_htlc_offer_spend_timeout(const tal_t *ctx,
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 *remotesig,
const struct preimage *preimage,
@ -694,7 +695,6 @@ u8 **bitcoin_htlc_receive_spend_preimage(const tal_t *ctx,
return witness;
}
u8 *bitcoin_wscript_htlc_tx(const tal_t *ctx,
u16 to_self_delay,
const struct pubkey *revocation_pubkey,

9
bitcoin/script.h

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

4
common/htlc_tx.c

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

8
onchaind/onchain.c

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

Loading…
Cancel
Save