mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-19 15:14:23 +01:00
Removing duplicated wscript generation for channel txs
This commit is contained in:
committed by
Rusty Russell
parent
72327f5cc2
commit
fe85cf9a4f
@@ -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));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
*funding_wscript = bitcoin_redeem_2of2(*funding_wscript,
|
||||||
&channel->funding_pubkey[side],
|
&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;
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
vendored
2
external/libwally-core
vendored
Submodule external/libwally-core updated: ae84c26519...0041b04644
Reference in New Issue
Block a user