mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-02-21 14:24:09 +01:00
channel_tx: add the commitment sig and pubkey data to the commit tx
needs to be update elsewhere too!
This commit is contained in:
parent
971f615695
commit
891f61ad48
4 changed files with 47 additions and 18 deletions
|
@ -12,6 +12,7 @@
|
|||
*/
|
||||
#include <bitcoin/chainparams.h>
|
||||
#include <bitcoin/privkey.h>
|
||||
#include <bitcoin/psbt.h>
|
||||
#include <bitcoin/script.h>
|
||||
#include <ccan/array_size/array_size.h>
|
||||
#include <ccan/cast/cast.h>
|
||||
|
@ -1289,6 +1290,10 @@ static void handle_peer_commit_sig(struct peer *peer, const u8 *msg)
|
|||
&funding_wscript, peer->channel, &peer->next_local_per_commit,
|
||||
peer->next_index[LOCAL], LOCAL);
|
||||
|
||||
/* Set the commit_sig on the commitment tx psbt */
|
||||
psbt_input_set_partial_sig(txs[0]->psbt, 0,
|
||||
&peer->channel->funding_pubkey[REMOTE], &commit_sig);
|
||||
|
||||
if (!derive_simple_key(&peer->channel->basepoints[REMOTE].htlc,
|
||||
&peer->next_local_per_commit, &remote_htlckey))
|
||||
status_failed(STATUS_FAIL_INTERNAL_ERROR,
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#include <assert.h>
|
||||
#include <bitcoin/chainparams.h>
|
||||
#include <bitcoin/preimage.h>
|
||||
#include <bitcoin/psbt.h>
|
||||
#include <bitcoin/script.h>
|
||||
#include <bitcoin/tx.h>
|
||||
#include <ccan/array_size/array_size.h>
|
||||
|
@ -311,6 +312,12 @@ struct bitcoin_tx **channel_txs(const tal_t *ctx,
|
|||
commitment_number ^ channel->commitment_number_obscurer,
|
||||
side);
|
||||
|
||||
/* Set the remote/local pubkeys on the commitment tx psbt */
|
||||
psbt_input_add_pubkey(txs[0]->psbt, 0,
|
||||
&channel->funding_pubkey[side]);
|
||||
psbt_input_add_pubkey(txs[0]->psbt, 0,
|
||||
&channel->funding_pubkey[!side]);
|
||||
|
||||
add_htlcs(&txs, *htlcmap, channel, &keyset, side);
|
||||
|
||||
tal_free(committed);
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
#include <assert.h>
|
||||
#include <bitcoin/chainparams.h>
|
||||
#include <bitcoin/psbt.h>
|
||||
#include <bitcoin/script.h>
|
||||
#include <ccan/array_size/array_size.h>
|
||||
#include <ccan/cast/cast.h>
|
||||
|
@ -76,6 +77,7 @@ struct bitcoin_tx *initial_channel_tx(const tal_t *ctx,
|
|||
char** err_reason)
|
||||
{
|
||||
struct keyset keyset;
|
||||
struct bitcoin_tx *init_tx;
|
||||
|
||||
/* This assumes no HTLCs! */
|
||||
assert(!channel->htlcs);
|
||||
|
@ -93,24 +95,32 @@ struct bitcoin_tx *initial_channel_tx(const tal_t *ctx,
|
|||
&channel->funding_pubkey[side],
|
||||
&channel->funding_pubkey[!side]);
|
||||
|
||||
return initial_commit_tx(ctx,
|
||||
&channel->funding_txid,
|
||||
channel->funding_txout,
|
||||
channel->funding,
|
||||
cast_const(u8 *, *wscript),
|
||||
channel->opener,
|
||||
/* They specify our to_self_delay and v.v. */
|
||||
channel->config[!side].to_self_delay,
|
||||
&keyset,
|
||||
channel_feerate(channel, side),
|
||||
channel->config[side].dust_limit,
|
||||
channel->view[side].owed[side],
|
||||
channel->view[side].owed[!side],
|
||||
channel->config[!side].channel_reserve,
|
||||
0 ^ channel->commitment_number_obscurer,
|
||||
direct_outputs,
|
||||
side,
|
||||
err_reason);
|
||||
init_tx = initial_commit_tx(ctx, &channel->funding_txid,
|
||||
channel->funding_txout,
|
||||
channel->funding,
|
||||
cast_const(u8 *, *wscript),
|
||||
channel->opener,
|
||||
/* They specify our to_self_delay and v.v. */
|
||||
channel->config[!side].to_self_delay,
|
||||
&keyset,
|
||||
channel_feerate(channel, side),
|
||||
channel->config[side].dust_limit,
|
||||
channel->view[side].owed[side],
|
||||
channel->view[side].owed[!side],
|
||||
channel->config[!side].channel_reserve,
|
||||
0 ^ channel->commitment_number_obscurer,
|
||||
direct_outputs,
|
||||
side,
|
||||
err_reason);
|
||||
|
||||
if (init_tx) {
|
||||
psbt_input_add_pubkey(init_tx->psbt, 0,
|
||||
&channel->funding_pubkey[side]);
|
||||
psbt_input_add_pubkey(init_tx->psbt, 0,
|
||||
&channel->funding_pubkey[!side]);
|
||||
}
|
||||
|
||||
return init_tx;
|
||||
}
|
||||
|
||||
u32 channel_feerate(const struct channel *channel, enum side side)
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include <bitcoin/block.h>
|
||||
#include <bitcoin/chainparams.h>
|
||||
#include <bitcoin/privkey.h>
|
||||
#include <bitcoin/psbt.h>
|
||||
#include <bitcoin/script.h>
|
||||
#include <ccan/array_size/array_size.h>
|
||||
#include <ccan/breakpoint/breakpoint.h>
|
||||
|
@ -844,6 +845,12 @@ static bool funder_finalize_channel_setup(struct state *state,
|
|||
&state->their_funding_pubkey));
|
||||
}
|
||||
|
||||
/* We save their sig to our first commitment tx */
|
||||
psbt_input_set_partial_sig((*tx)->psbt, 0,
|
||||
&state->their_funding_pubkey,
|
||||
sig);
|
||||
|
||||
|
||||
peer_billboard(false, "Funding channel: opening negotiation succeeded");
|
||||
|
||||
return true;
|
||||
|
|
Loading…
Add table
Reference in a new issue