Skip to content

Commit

Permalink
wally: Migrate hsmd to use the wally tx
Browse files Browse the repository at this point in the history
Signed-off-by: Christian Decker <[email protected]>
  • Loading branch information
cdecker authored and rustyrussell committed Apr 8, 2019
1 parent 50ade73 commit c39963b
Showing 1 changed file with 11 additions and 12 deletions.
23 changes: 11 additions & 12 deletions hsmd/hsmd.c
Original file line number Diff line number Diff line change
Expand Up @@ -773,8 +773,7 @@ static struct io_plan *handle_sign_commitment_tx(struct io_conn *conn,
* pointer, as we don't always know it (and zero is a valid amount, so
* NULL is better to mean 'unknown' and has the nice property that
* you'll crash if you assume it's there and you're wrong. */
tx->input_amounts[0] = tal_dup(tx->input, struct amount_sat, &funding);
tx->input_amounts[0] = tx->input_amounts[0];
tx->input_amounts[0] = tal_dup(tx, struct amount_sat, &funding);
sign_tx_input(tx, 0, NULL, funding_wscript,
&secrets.funding_privkey,
&local_funding_pubkey,
Expand Down Expand Up @@ -819,7 +818,7 @@ static struct io_plan *handle_sign_remote_commitment_tx(struct io_conn *conn,
&local_funding_pubkey,
&remote_funding_pubkey);
/* Need input amount for signing */
tx->input_amounts[0] = tal_dup(tx->input, struct amount_sat, &funding);
tx->input_amounts[0] = tal_dup(tx, struct amount_sat, &funding);
sign_tx_input(tx, 0, NULL, funding_wscript,
&secrets.funding_privkey,
&local_funding_pubkey,
Expand Down Expand Up @@ -868,7 +867,7 @@ static struct io_plan *handle_sign_remote_htlc_tx(struct io_conn *conn,
"Failed deriving htlc pubkey");

/* Need input amount for signing */
tx->input_amounts[0] = tal_dup(tx->input, struct amount_sat, &amount);
tx->input_amounts[0] = tal_dup(tx, struct amount_sat, &amount);
sign_tx_input(tx, 0, NULL, wscript, &htlc_privkey, &htlc_pubkey,
SIGHASH_ALL, &sig);

Expand All @@ -892,10 +891,10 @@ static struct io_plan *handle_sign_to_us_tx(struct io_conn *conn,
if (!pubkey_from_privkey(privkey, &pubkey))
return bad_req_fmt(conn, c, msg_in, "bad pubkey_from_privkey");

if (tal_count(tx->input) != 1)
if (tx->wtx->num_inputs != 1)
return bad_req_fmt(conn, c, msg_in, "bad txinput count");

tx->input_amounts[0] = tal_dup(tx->input, struct amount_sat, &input_sat);
tx->input_amounts[0] = tal_dup(tx, struct amount_sat, &input_sat);
sign_tx_input(tx, 0, NULL, wscript, privkey, &pubkey, SIGHASH_ALL, &sig);

return req_reply(conn, c, take(towire_hsm_sign_tx_reply(NULL, &sig)));
Expand Down Expand Up @@ -1090,11 +1089,11 @@ static struct io_plan *handle_sign_local_htlc_tx(struct io_conn *conn,
if (!pubkey_from_privkey(&htlc_privkey, &htlc_pubkey))
return bad_req_fmt(conn, c, msg_in, "bad pubkey_from_privkey");

if (tal_count(tx->input) != 1)
if (tx->wtx->num_inputs != 1)
return bad_req_fmt(conn, c, msg_in, "bad txinput count");

/* FIXME: Check that output script is correct! */
tx->input_amounts[0] = tal_dup(tx->input, struct amount_sat, &input_sat);
tx->input_amounts[0] = tal_dup(tx, struct amount_sat, &input_sat);
sign_tx_input(tx, 0, NULL, wscript, &htlc_privkey, &htlc_pubkey,
SIGHASH_ALL, &sig);

Expand Down Expand Up @@ -1209,7 +1208,7 @@ static struct io_plan *handle_sign_mutual_close_tx(struct io_conn *conn,
&local_funding_pubkey,
&remote_funding_pubkey);
/* Need input amount for signing */
tx->input_amounts[0] = tal_dup(tx->input, struct amount_sat, &funding);
tx->input_amounts[0] = tal_dup(tx, struct amount_sat, &funding);
sign_tx_input(tx, 0, NULL, funding_wscript,
&secrets.funding_privkey,
&local_funding_pubkey,
Expand Down Expand Up @@ -1339,7 +1338,7 @@ static void sign_all_inputs(struct bitcoin_tx *tx, struct utxo **utxos)
* define what it is?
*
*... I'm not sure that helps! */
assert(tal_count(tx->input) == tal_count(utxos));
assert(tx->wtx->num_inputs == tal_count(utxos));
for (size_t i = 0; i < tal_count(utxos); i++) {
struct pubkey inkey;
struct privkey inprivkey;
Expand All @@ -1357,13 +1356,13 @@ static void sign_all_inputs(struct bitcoin_tx *tx, struct utxo **utxos)
/* For P2SH-wrapped Segwit, the (implied) redeemScript
* is defined in BIP141 */
subscript = bitcoin_redeem_p2sh_p2wpkh(tmpctx, &inkey);
script = bitcoin_scriptsig_p2sh_p2wpkh(tx->input, &inkey);
script = bitcoin_scriptsig_p2sh_p2wpkh(tx, &inkey);
bitcoin_tx_input_set_script(tx, i, script);
} else {
/* Pure segwit uses an empty inputScript; NULL has
* tal_count() == 0, so it works great here. */
subscript = NULL;
tx->input[i].script = NULL;
bitcoin_tx_input_set_script(tx, i, NULL);
}
/* This is the core crypto magic. */
sign_tx_input(tx, i, subscript, wscript, &inprivkey, &inkey,
Expand Down

0 comments on commit c39963b

Please sign in to comment.