Browse Source

Removing duplicated wscript generation for channel txs

travis-debug
Dr. Maxim Orlovsky 5 years ago
committed by Rusty Russell
parent
commit
fe85cf9a4f
  1. 25
      channeld/channeld.c
  2. 37
      channeld/full_channel.c
  3. 4
      channeld/full_channel.h
  4. 21
      channeld/test/run-full_channel.c
  5. 6
      common/htlc_tx.c
  6. 40
      devtools/mkcommit.c
  7. 2
      external/libwally-core

25
channeld/channeld.c

@ -810,14 +810,14 @@ static secp256k1_ecdsa_signature *calc_commitsigs(const tal_t *ctx,
{ {
size_t i; size_t i;
struct bitcoin_tx **txs; struct bitcoin_tx **txs;
const u8 **wscripts; const u8 *funding_wscript;
const struct htlc **htlc_map; const struct htlc **htlc_map;
struct pubkey local_htlckey; struct pubkey local_htlckey;
const u8 *msg; const u8 *msg;
secp256k1_ecdsa_signature *htlc_sigs; secp256k1_ecdsa_signature *htlc_sigs;
txs = channel_txs(tmpctx, &htlc_map, txs = channel_txs(tmpctx, &htlc_map,
&wscripts, peer->channel, &peer->remote_per_commit, &funding_wscript, peer->channel, &peer->remote_per_commit,
commit_index, REMOTE); commit_index, REMOTE);
msg = towire_hsm_sign_remote_commitment_tx(NULL, txs[0], msg = towire_hsm_sign_remote_commitment_tx(NULL, txs[0],
@ -838,7 +838,7 @@ static secp256k1_ecdsa_signature *calc_commitsigs(const tal_t *ctx,
type_to_string(tmpctx, struct bitcoin_signature, type_to_string(tmpctx, struct bitcoin_signature,
commit_sig), commit_sig),
type_to_string(tmpctx, struct bitcoin_tx, txs[0]), type_to_string(tmpctx, struct bitcoin_tx, txs[0]),
tal_hex(tmpctx, wscripts[0]), tal_hex(tmpctx, funding_wscript),
type_to_string(tmpctx, struct pubkey, type_to_string(tmpctx, struct pubkey,
&peer->channel->funding_pubkey[LOCAL])); &peer->channel->funding_pubkey[LOCAL]));
dump_htlcs(peer->channel, "Sending commit_sig"); dump_htlcs(peer->channel, "Sending commit_sig");
@ -861,7 +861,7 @@ static secp256k1_ecdsa_signature *calc_commitsigs(const tal_t *ctx,
for (i = 0; i < tal_count(htlc_sigs); i++) { for (i = 0; i < tal_count(htlc_sigs); i++) {
struct bitcoin_signature sig; struct bitcoin_signature sig;
msg = towire_hsm_sign_remote_htlc_tx(NULL, txs[i + 1], msg = towire_hsm_sign_remote_htlc_tx(NULL, txs[i + 1],
wscripts[i + 1], txs[i+1]->output_witscripts[0]->ptr,
*txs[i+1]->input_amounts[0], *txs[i+1]->input_amounts[0],
&peer->remote_per_commit); &peer->remote_per_commit);
@ -876,10 +876,11 @@ static secp256k1_ecdsa_signature *calc_commitsigs(const tal_t *ctx,
type_to_string(tmpctx, struct bitcoin_signature, type_to_string(tmpctx, struct bitcoin_signature,
&sig), &sig),
type_to_string(tmpctx, struct bitcoin_tx, txs[1+i]), type_to_string(tmpctx, struct bitcoin_tx, txs[1+i]),
tal_hex(tmpctx, wscripts[1+i]), tal_hex(tmpctx, txs[i+1]->output_witscripts[0]->ptr),
type_to_string(tmpctx, struct pubkey, type_to_string(tmpctx, struct pubkey,
&local_htlckey)); &local_htlckey));
assert(check_tx_sig(txs[1+i], 0, NULL, wscripts[1+i], assert(check_tx_sig(txs[1+i], 0, NULL,
txs[i+1]->output_witscripts[0]->ptr,
&local_htlckey, &local_htlckey,
&sig)); &sig));
} }
@ -1201,7 +1202,7 @@ static void handle_peer_commit_sig(struct peer *peer, const u8 *msg)
struct pubkey remote_htlckey; struct pubkey remote_htlckey;
struct bitcoin_tx **txs; struct bitcoin_tx **txs;
const struct htlc **htlc_map, **changed_htlcs; const struct htlc **htlc_map, **changed_htlcs;
const u8 **wscripts; const u8 *funding_wscript;
size_t i; size_t i;
changed_htlcs = tal_arr(msg, const struct htlc *, 0); changed_htlcs = tal_arr(msg, const struct htlc *, 0);
@ -1241,7 +1242,7 @@ static void handle_peer_commit_sig(struct peer *peer, const u8 *msg)
txs = txs =
channel_txs(tmpctx, &htlc_map, channel_txs(tmpctx, &htlc_map,
&wscripts, peer->channel, &peer->next_local_per_commit, &funding_wscript, peer->channel, &peer->next_local_per_commit,
peer->next_index[LOCAL], LOCAL); peer->next_index[LOCAL], LOCAL);
if (!derive_simple_key(&peer->channel->basepoints[REMOTE].htlc, if (!derive_simple_key(&peer->channel->basepoints[REMOTE].htlc,
@ -1261,7 +1262,7 @@ static void handle_peer_commit_sig(struct peer *peer, const u8 *msg)
* - if `signature` is not valid for its local commitment transaction: * - if `signature` is not valid for its local commitment transaction:
* - MUST fail the channel. * - MUST fail the channel.
*/ */
if (!check_tx_sig(txs[0], 0, NULL, wscripts[0], if (!check_tx_sig(txs[0], 0, NULL, funding_wscript,
&peer->channel->funding_pubkey[REMOTE], &commit_sig)) { &peer->channel->funding_pubkey[REMOTE], &commit_sig)) {
dump_htlcs(peer->channel, "receiving commit_sig"); dump_htlcs(peer->channel, "receiving commit_sig");
peer_failed(peer->pps, peer_failed(peer->pps,
@ -1271,7 +1272,7 @@ static void handle_peer_commit_sig(struct peer *peer, const u8 *msg)
type_to_string(msg, struct bitcoin_signature, type_to_string(msg, struct bitcoin_signature,
&commit_sig), &commit_sig),
type_to_string(msg, struct bitcoin_tx, txs[0]), type_to_string(msg, struct bitcoin_tx, txs[0]),
tal_hex(msg, wscripts[0]), tal_hex(msg, funding_wscript),
type_to_string(msg, struct pubkey, type_to_string(msg, struct pubkey,
&peer->channel->funding_pubkey &peer->channel->funding_pubkey
[REMOTE]), [REMOTE]),
@ -1305,14 +1306,14 @@ static void handle_peer_commit_sig(struct peer *peer, const u8 *msg)
sig.s = htlc_sigs[i]; sig.s = htlc_sigs[i];
sig.sighash_type = SIGHASH_ALL; sig.sighash_type = SIGHASH_ALL;
if (!check_tx_sig(txs[1+i], 0, NULL, wscripts[1+i], if (!check_tx_sig(txs[1+i], 0, NULL, txs[1+i]->output_witscripts[0]->ptr,
&remote_htlckey, &sig)) &remote_htlckey, &sig))
peer_failed(peer->pps, peer_failed(peer->pps,
&peer->channel_id, &peer->channel_id,
"Bad commit_sig signature %s for htlc %s wscript %s key %s", "Bad commit_sig signature %s for htlc %s wscript %s key %s",
type_to_string(msg, struct bitcoin_signature, &sig), type_to_string(msg, struct bitcoin_signature, &sig),
type_to_string(msg, struct bitcoin_tx, txs[1+i]), type_to_string(msg, struct bitcoin_tx, txs[1+i]),
tal_hex(msg, wscripts[1+i]), tal_hex(msg, txs[1+i]->output_witscripts[0]->ptr),
type_to_string(msg, struct pubkey, type_to_string(msg, struct pubkey,
&remote_htlckey)); &remote_htlckey));
} }

37
channeld/full_channel.c

@ -222,7 +222,6 @@ static bool sum_offered_msatoshis(struct amount_msat *total,
} }
static void add_htlcs(struct bitcoin_tx ***txs, static void add_htlcs(struct bitcoin_tx ***txs,
const u8 ***wscripts,
const struct htlc **htlcmap, const struct htlc **htlcmap,
const struct channel *channel, const struct channel *channel,
const struct keyset *keyset, const struct keyset *keyset,
@ -238,7 +237,7 @@ static void add_htlcs(struct bitcoin_tx ***txs,
for (i = 0; i < tal_count(htlcmap); i++) { for (i = 0; i < tal_count(htlcmap); i++) {
const struct htlc *htlc = htlcmap[i]; const struct htlc *htlc = htlcmap[i];
struct bitcoin_tx *tx; struct bitcoin_tx *tx;
u8 *wscript; struct witscript *witscript;
if (!htlc) if (!htlc)
continue; continue;
@ -250,29 +249,22 @@ static void add_htlcs(struct bitcoin_tx ***txs,
channel->config[!side].to_self_delay, channel->config[!side].to_self_delay,
feerate_per_kw, feerate_per_kw,
keyset); keyset);
wscript = bitcoin_wscript_htlc_offer(*wscripts,
&keyset->self_htlc_key,
&keyset->other_htlc_key,
&htlc->rhash,
&keyset->self_revocation_key);
} else { } else {
tx = htlc_success_tx(*txs, chainparams, &txid, i, tx = htlc_success_tx(*txs, chainparams, &txid, i,
htlc->amount, htlc->amount,
channel->config[!side].to_self_delay, channel->config[!side].to_self_delay,
feerate_per_kw, feerate_per_kw,
keyset); keyset);
wscript = bitcoin_wscript_htlc_receive(*wscripts,
&htlc->expiry,
&keyset->self_htlc_key,
&keyset->other_htlc_key,
&htlc->rhash,
&keyset->self_revocation_key);
} }
/* Re-use the previously-generated witness script */
witscript = (*txs)[0]->output_witscripts[i];
tx->output_witscripts[0] =
tal(tx->output_witscripts, struct witscript);
tx->output_witscripts[0]->ptr =
tal_dup_arr(tx->output_witscripts[0], u8,
witscript->ptr, tal_count(witscript->ptr), 0);
/* Append to array. */ /* Append to array. */
assert(tal_count(*txs) == tal_count(*wscripts));
tal_arr_expand(wscripts, wscript);
tal_arr_expand(txs, tx); tal_arr_expand(txs, tx);
} }
} }
@ -280,7 +272,7 @@ static void add_htlcs(struct bitcoin_tx ***txs,
/* FIXME: We could cache these. */ /* FIXME: We could cache these. */
struct bitcoin_tx **channel_txs(const tal_t *ctx, struct bitcoin_tx **channel_txs(const tal_t *ctx,
const struct htlc ***htlcmap, const struct htlc ***htlcmap,
const u8 ***wscripts, const u8 **funding_wscript,
const struct channel *channel, const struct channel *channel,
const struct pubkey *per_commitment_point, const struct pubkey *per_commitment_point,
u64 commitment_number, u64 commitment_number,
@ -310,12 +302,13 @@ struct bitcoin_tx **channel_txs(const tal_t *ctx,
channel->view[side].owed[!side], committed, htlcmap, channel->view[side].owed[!side], committed, htlcmap,
commitment_number ^ channel->commitment_number_obscurer, side); commitment_number ^ channel->commitment_number_obscurer, side);
*wscripts = tal_arr(ctx, const u8 *, 1); /* Generating and saving witness script required to spend
(*wscripts)[0] = bitcoin_redeem_2of2(*wscripts, * the funding output */
&channel->funding_pubkey[side], *funding_wscript = bitcoin_redeem_2of2(*funding_wscript,
&channel->funding_pubkey[!side]); &channel->funding_pubkey[side],
&channel->funding_pubkey[!side]);
add_htlcs(&txs, wscripts, *htlcmap, channel, &keyset, side); add_htlcs(&txs, *htlcmap, channel, &keyset, side);
tal_free(committed); tal_free(committed);
return txs; return txs;

4
channeld/full_channel.h

@ -50,7 +50,7 @@ struct channel *new_full_channel(const tal_t *ctx,
* @ctx: tal context to allocate return value from. * @ctx: tal context to allocate return value from.
* @channel: The channel to evaluate * @channel: The channel to evaluate
* @htlc_map: Pointer to htlcs for each tx output (allocated off @ctx). * @htlc_map: Pointer to htlcs for each tx output (allocated off @ctx).
* @wscripts: Pointer to array of wscript for each tx returned (alloced off @ctx) * @funding_wscript: Pointer to wscript for the funding tx output
* @per_commitment_point: Per-commitment point to determine keys * @per_commitment_point: Per-commitment point to determine keys
* @commitment_number: The index of this commitment. * @commitment_number: The index of this commitment.
* @side: which side to get the commitment transaction for * @side: which side to get the commitment transaction for
@ -61,7 +61,7 @@ struct channel *new_full_channel(const tal_t *ctx,
*/ */
struct bitcoin_tx **channel_txs(const tal_t *ctx, struct bitcoin_tx **channel_txs(const tal_t *ctx,
const struct htlc ***htlcmap, const struct htlc ***htlcmap,
const u8 ***wscripts, const u8 **funding_wscript,
const struct channel *channel, const struct channel *channel,
const struct pubkey *per_commitment_point, const struct pubkey *per_commitment_point,
u64 commitment_number, u64 commitment_number,

21
channeld/test/run-full_channel.c

@ -355,7 +355,7 @@ int main(void)
struct channel_config *local_config, *remote_config; struct channel_config *local_config, *remote_config;
struct amount_msat to_local, to_remote; struct amount_msat to_local, to_remote;
const struct htlc **htlc_map, **htlcs; const struct htlc **htlc_map, **htlcs;
const u8 *funding_wscript, **wscripts; const u8 *funding_wscript, *funding_wscript_alt;
size_t i; size_t i;
wally_init(0); wally_init(0);
@ -521,16 +521,15 @@ int main(void)
NULL, &htlc_map, 0x2bb038521914 ^ 42, LOCAL); NULL, &htlc_map, 0x2bb038521914 ^ 42, LOCAL);
txs = channel_txs(tmpctx, txs = channel_txs(tmpctx,
&htlc_map, &wscripts, &htlc_map, &funding_wscript_alt,
lchannel, &local_per_commitment_point, 42, LOCAL); lchannel, &local_per_commitment_point, 42, LOCAL);
assert(tal_count(txs) == 1); assert(tal_count(txs) == 1);
assert(tal_count(htlc_map) == 2); assert(tal_count(htlc_map) == 2);
assert(tal_count(wscripts) == 1); assert(scripteq(funding_wscript_alt, funding_wscript));
assert(scripteq(wscripts[0], funding_wscript));
tx_must_be_eq(txs[0], raw_tx); tx_must_be_eq(txs[0], raw_tx);
txs2 = channel_txs(tmpctx, txs2 = channel_txs(tmpctx,
&htlc_map, &wscripts, &htlc_map, &funding_wscript,
rchannel, &local_per_commitment_point, 42, REMOTE); rchannel, &local_per_commitment_point, 42, REMOTE);
txs_must_be_eq(txs, txs2); txs_must_be_eq(txs, txs2);
@ -557,10 +556,10 @@ int main(void)
assert(lchannel->view[REMOTE].owed[REMOTE].millisatoshis assert(lchannel->view[REMOTE].owed[REMOTE].millisatoshis
== rchannel->view[LOCAL].owed[LOCAL].millisatoshis); == rchannel->view[LOCAL].owed[LOCAL].millisatoshis);
txs = channel_txs(tmpctx, &htlc_map, &wscripts, txs = channel_txs(tmpctx, &htlc_map, &funding_wscript,
lchannel, &local_per_commitment_point, 42, LOCAL); lchannel, &local_per_commitment_point, 42, LOCAL);
assert(tal_count(txs) == 1); assert(tal_count(txs) == 1);
txs2 = channel_txs(tmpctx, &htlc_map, &wscripts, txs2 = channel_txs(tmpctx, &htlc_map, &funding_wscript,
rchannel, &local_per_commitment_point, 42, REMOTE); rchannel, &local_per_commitment_point, 42, REMOTE);
txs_must_be_eq(txs, txs2); txs_must_be_eq(txs, txs2);
@ -575,10 +574,10 @@ int main(void)
assert(lchannel->view[REMOTE].owed[REMOTE].millisatoshis assert(lchannel->view[REMOTE].owed[REMOTE].millisatoshis
== rchannel->view[LOCAL].owed[LOCAL].millisatoshis); == rchannel->view[LOCAL].owed[LOCAL].millisatoshis);
txs = channel_txs(tmpctx, &htlc_map, &wscripts, txs = channel_txs(tmpctx, &htlc_map, &funding_wscript,
lchannel, &local_per_commitment_point, 42, LOCAL); lchannel, &local_per_commitment_point, 42, LOCAL);
assert(tal_count(txs) == 6); assert(tal_count(txs) == 6);
txs2 = channel_txs(tmpctx, &htlc_map, &wscripts, txs2 = channel_txs(tmpctx, &htlc_map, &funding_wscript,
rchannel, &local_per_commitment_point, 42, REMOTE); rchannel, &local_per_commitment_point, 42, REMOTE);
txs_must_be_eq(txs, txs2); txs_must_be_eq(txs, txs2);
@ -644,12 +643,12 @@ int main(void)
to_local, to_remote, htlcs, &htlc_map, 0x2bb038521914 ^ 42, to_local, to_remote, htlcs, &htlc_map, 0x2bb038521914 ^ 42,
LOCAL); LOCAL);
txs = channel_txs(tmpctx, &htlc_map, &wscripts, txs = channel_txs(tmpctx, &htlc_map, &funding_wscript,
lchannel, &local_per_commitment_point, 42, lchannel, &local_per_commitment_point, 42,
LOCAL); LOCAL);
tx_must_be_eq(txs[0], raw_tx); tx_must_be_eq(txs[0], raw_tx);
txs2 = channel_txs(tmpctx, &htlc_map, &wscripts, txs2 = channel_txs(tmpctx, &htlc_map, &funding_wscript,
rchannel, &local_per_commitment_point, rchannel, &local_per_commitment_point,
42, REMOTE); 42, REMOTE);
txs_must_be_eq(txs, txs2); txs_must_be_eq(txs, txs2);

6
common/htlc_tx.c

@ -65,6 +65,12 @@ static struct bitcoin_tx *htlc_tx(const tal_t *ctx,
bitcoin_tx_finalize(tx); bitcoin_tx_finalize(tx);
assert(bitcoin_tx_check(tx)); assert(bitcoin_tx_check(tx));
tx->output_witscripts[0] =
tal(tx->output_witscripts, struct witscript);
tx->output_witscripts[0]->ptr =
tal_dup_arr(tx->output_witscripts[0], u8,
wscript, tal_count(wscript), 0);
tal_free(wscript); tal_free(wscript);
return tx; return tx;

40
devtools/mkcommit.c

@ -259,7 +259,7 @@ int main(int argc, char *argv[])
struct bitcoin_tx **local_txs, **remote_txs; struct bitcoin_tx **local_txs, **remote_txs;
enum side fee_payer; enum side fee_payer;
u8 **witness; u8 **witness;
const u8 **wscripts; const u8 *funding_wscript;
struct channel *channel; struct channel *channel;
struct existing_htlc **htlcs = tal_arr(NULL, struct existing_htlc *, 0); struct existing_htlc **htlcs = tal_arr(NULL, struct existing_htlc *, 0);
const struct htlc **htlcmap; const struct htlc **htlcmap;
@ -393,15 +393,11 @@ int main(int argc, char *argv[])
cast_const2(const struct existing_htlc **, htlcs))) cast_const2(const struct existing_htlc **, htlcs)))
errx(1, "Cannot add HTLCs"); errx(1, "Cannot add HTLCs");
u8 *funding_wscript = bitcoin_redeem_2of2(NULL,
&funding_localkey,
&funding_remotekey);
/* Create the local commitment_tx */ /* Create the local commitment_tx */
if (!per_commit_point(&localseed, &local_per_commit_point, commitnum)) if (!per_commit_point(&localseed, &local_per_commit_point, commitnum))
errx(1, "Bad deriving local per-commitment-point"); errx(1, "Bad deriving local per-commitment-point");
local_txs = channel_txs(NULL, &htlcmap, &wscripts, channel, local_txs = channel_txs(NULL, &htlcmap, &funding_wscript, channel,
&local_per_commit_point, commitnum, LOCAL); &local_per_commit_point, commitnum, LOCAL);
printf("## local_commitment\n" printf("## local_commitment\n"
@ -477,14 +473,17 @@ int main(int argc, char *argv[])
local_txs[1+i]->input_amounts[0] local_txs[1+i]->input_amounts[0]
= tal_dup(local_txs[1+i], struct amount_sat, &amt); = tal_dup(local_txs[1+i], struct amount_sat, &amt);
printf("# wscript: %s\n", tal_hex(NULL, wscripts[1+i])); printf("# wscript: %s\n", tal_hex(NULL, local_txs[1+i]->output_witscripts[1+i]->ptr));
bitcoin_tx_hash_for_sig(local_txs[1+i], 0, wscripts[1+i], bitcoin_tx_hash_for_sig(local_txs[1+i], 0,
local_txs[1+i]->output_witscripts[1+i]->ptr,
SIGHASH_ALL, &hash); SIGHASH_ALL, &hash);
sign_tx_input(local_txs[1+i], 0, NULL, wscripts[1+i], sign_tx_input(local_txs[1+i], 0, NULL,
local_txs[1+i]->output_witscripts[1+i]->ptr,
&local_htlc_privkey, &local_htlc_pubkey, &local_htlc_privkey, &local_htlc_pubkey,
SIGHASH_ALL, &local_htlc_sig); SIGHASH_ALL, &local_htlc_sig);
sign_tx_input(local_txs[1+i], 0, NULL, wscripts[1+i], sign_tx_input(local_txs[1+i], 0, NULL,
local_txs[1+i]->output_witscripts[1+i]->ptr,
&remote_htlc_privkey, &remote_htlc_pubkey, &remote_htlc_privkey, &remote_htlc_pubkey,
SIGHASH_ALL, &remote_htlc_sig); SIGHASH_ALL, &remote_htlc_sig);
printf("localsig_on_local output %zu: %s\n", printf("localsig_on_local output %zu: %s\n",
@ -496,13 +495,13 @@ int main(int argc, char *argv[])
witness = bitcoin_witness_htlc_timeout_tx(NULL, witness = bitcoin_witness_htlc_timeout_tx(NULL,
&local_htlc_sig, &local_htlc_sig,
&remote_htlc_sig, &remote_htlc_sig,
wscripts[1+i]); local_txs[1+i]->output_witscripts[1+i]->ptr);
else else
witness = bitcoin_witness_htlc_success_tx(NULL, witness = bitcoin_witness_htlc_success_tx(NULL,
&local_htlc_sig, &local_htlc_sig,
&remote_htlc_sig, &remote_htlc_sig,
preimage_of(&htlcmap[i]->rhash, cast_const2(const struct existing_htlc **, htlcs)), preimage_of(&htlcmap[i]->rhash, cast_const2(const struct existing_htlc **, htlcs)),
wscripts[1+i]); local_txs[1+i]->output_witscripts[1+i]->ptr);
bitcoin_tx_input_set_witness(local_txs[1+i], 0, witness); bitcoin_tx_input_set_witness(local_txs[1+i], 0, witness);
printf("htlc tx for output %zu: %s\n", printf("htlc tx for output %zu: %s\n",
i, tal_hex(NULL, linearize_tx(NULL, local_txs[1+i]))); i, tal_hex(NULL, linearize_tx(NULL, local_txs[1+i])));
@ -512,7 +511,7 @@ int main(int argc, char *argv[])
/* Create the remote commitment tx */ /* Create the remote commitment tx */
if (!per_commit_point(&remoteseed, &remote_per_commit_point, commitnum)) if (!per_commit_point(&remoteseed, &remote_per_commit_point, commitnum))
errx(1, "Bad deriving remote per-commitment-point"); errx(1, "Bad deriving remote per-commitment-point");
remote_txs = channel_txs(NULL, &htlcmap, &wscripts, channel, remote_txs = channel_txs(NULL, &htlcmap, &funding_wscript, channel,
&remote_per_commit_point, commitnum, REMOTE); &remote_per_commit_point, commitnum, REMOTE);
remote_txs[0]->input_amounts[0] remote_txs[0]->input_amounts[0]
= tal_dup(remote_txs[0], struct amount_sat, &funding_amount); = tal_dup(remote_txs[0], struct amount_sat, &funding_amount);
@ -589,13 +588,16 @@ int main(int argc, char *argv[])
remote_txs[1+i]->input_amounts[0] remote_txs[1+i]->input_amounts[0]
= tal_dup(remote_txs[1+i], struct amount_sat, &amt); = tal_dup(remote_txs[1+i], struct amount_sat, &amt);
printf("# wscript: %s\n", tal_hex(NULL, wscripts[1+i])); printf("# wscript: %s\n", tal_hex(NULL, remote_txs[1+i]->output_witscripts[1+i]->ptr));
bitcoin_tx_hash_for_sig(remote_txs[1+i], 0, wscripts[1+i], bitcoin_tx_hash_for_sig(remote_txs[1+i], 0,
remote_txs[1+i]->output_witscripts[1+i]->ptr,
SIGHASH_ALL, &hash); SIGHASH_ALL, &hash);
sign_tx_input(remote_txs[1+i], 0, NULL, wscripts[1+i], sign_tx_input(remote_txs[1+i], 0, NULL,
remote_txs[1+i]->output_witscripts[1+i]->ptr,
&local_htlc_privkey, &local_htlc_pubkey, &local_htlc_privkey, &local_htlc_pubkey,
SIGHASH_ALL, &local_htlc_sig); SIGHASH_ALL, &local_htlc_sig);
sign_tx_input(remote_txs[1+i], 0, NULL, wscripts[1+i], sign_tx_input(remote_txs[1+i], 0, NULL,
remote_txs[1+i]->output_witscripts[1+i]->ptr,
&remote_htlc_privkey, &remote_htlc_pubkey, &remote_htlc_privkey, &remote_htlc_pubkey,
SIGHASH_ALL, &remote_htlc_sig); SIGHASH_ALL, &remote_htlc_sig);
printf("localsig_on_remote output %zu: %s\n", printf("localsig_on_remote output %zu: %s\n",
@ -607,13 +609,13 @@ int main(int argc, char *argv[])
witness = bitcoin_witness_htlc_timeout_tx(NULL, witness = bitcoin_witness_htlc_timeout_tx(NULL,
&remote_htlc_sig, &remote_htlc_sig,
&local_htlc_sig, &local_htlc_sig,
wscripts[1+i]); remote_txs[1+i]->output_witscripts[1+i]->ptr);
else else
witness = bitcoin_witness_htlc_success_tx(NULL, witness = bitcoin_witness_htlc_success_tx(NULL,
&remote_htlc_sig, &remote_htlc_sig,
&local_htlc_sig, &local_htlc_sig,
preimage_of(&htlcmap[i]->rhash, cast_const2(const struct existing_htlc **, htlcs)), preimage_of(&htlcmap[i]->rhash, cast_const2(const struct existing_htlc **, htlcs)),
wscripts[1+i]); remote_txs[1+i]->output_witscripts[1+i]->ptr);
bitcoin_tx_input_set_witness(remote_txs[1+i], 0, witness); bitcoin_tx_input_set_witness(remote_txs[1+i], 0, witness);
printf("htlc tx for output %zu: %s\n", printf("htlc tx for output %zu: %s\n",
i, tal_hex(NULL, linearize_tx(NULL, remote_txs[1+i]))); i, tal_hex(NULL, linearize_tx(NULL, remote_txs[1+i])));

2
external/libwally-core

@ -1 +1 @@
Subproject commit ae84c26519b6c513332c19bc183dc0b584f4bf33 Subproject commit 0041b04644687e0aac7c1611fe31c810babac66d
Loading…
Cancel
Save