mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-22 08:34:20 +01:00
lightningd/hsm: use funding_tx helper to sign funding transaction.
DRY. Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
@@ -41,7 +41,7 @@ $(LIGHTNINGD_HSM_OBJS): $(CORE_TX_HEADERS)
|
|||||||
|
|
||||||
lightningd/hsm-all: lightningd/lightningd_hsm $(LIGHTNINGD_HSM_CLIENT_OBJS)
|
lightningd/hsm-all: lightningd/lightningd_hsm $(LIGHTNINGD_HSM_CLIENT_OBJS)
|
||||||
|
|
||||||
lightningd/lightningd_hsm: $(LIGHTNINGD_HSM_OBJS) $(CORE_OBJS) $(CORE_TX_OBJS) $(BITCOIN_OBJS) $(WIRE_OBJS) $(CCAN_OBJS) $(LIBBASE58_OBJS) lightningd/utxo.o libsecp256k1.a libsodium.a libwallycore.a
|
lightningd/lightningd_hsm: $(LIGHTNINGD_HSM_OBJS) $(LIGHTNINGD_OLD_LIB_OBJS) $(LIGHTNINGD_LIB_OBJS) $(CORE_OBJS) $(CORE_TX_OBJS) $(BITCOIN_OBJS) $(WIRE_OBJS) $(CCAN_OBJS) $(LIBBASE58_OBJS) lightningd/utxo.o libsecp256k1.a libsodium.a libwallycore.a
|
||||||
$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS)
|
$(CC) $(CFLAGS) -o $@ $^ $(LDLIBS)
|
||||||
|
|
||||||
lightningd/hsm/gen_hsm_client_wire.h: $(WIRE_GEN) lightningd/hsm/hsm_client_wire_csv
|
lightningd/hsm/gen_hsm_client_wire.h: $(WIRE_GEN) lightningd/hsm/hsm_client_wire_csv
|
||||||
|
|||||||
@@ -15,6 +15,7 @@
|
|||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <inttypes.h>
|
#include <inttypes.h>
|
||||||
|
#include <lightningd/funding_tx.h>
|
||||||
#include <lightningd/hsm/client.h>
|
#include <lightningd/hsm/client.h>
|
||||||
#include <lightningd/hsm/gen_hsm_client_wire.h>
|
#include <lightningd/hsm/gen_hsm_client_wire.h>
|
||||||
#include <lightningd/hsm/gen_hsm_control_wire.h>
|
#include <lightningd/hsm/gen_hsm_control_wire.h>
|
||||||
@@ -360,11 +361,13 @@ static u8 *sign_funding_tx(const tal_t *ctx, const u8 *data)
|
|||||||
u32 change_keyindex;
|
u32 change_keyindex;
|
||||||
struct pubkey local_pubkey, remote_pubkey;
|
struct pubkey local_pubkey, remote_pubkey;
|
||||||
struct utxo *inputs;
|
struct utxo *inputs;
|
||||||
|
const struct utxo **utxomap;
|
||||||
struct bitcoin_tx *tx;
|
struct bitcoin_tx *tx;
|
||||||
u8 *wscript, *msg_out;
|
u8 *wscript, *msg_out;
|
||||||
secp256k1_ecdsa_signature *sig;
|
secp256k1_ecdsa_signature *sig;
|
||||||
const void **inmap;
|
u32 outnum;
|
||||||
size_t i;
|
size_t i;
|
||||||
|
struct pubkey changekey;
|
||||||
|
|
||||||
/* FIXME: Check fee is "reasonable" */
|
/* FIXME: Check fee is "reasonable" */
|
||||||
if (!fromwire_hsmctl_sign_funding(tmpctx, data, NULL,
|
if (!fromwire_hsmctl_sign_funding(tmpctx, data, NULL,
|
||||||
@@ -373,35 +376,24 @@ static u8 *sign_funding_tx(const tal_t *ctx, const u8 *data)
|
|||||||
&remote_pubkey, &inputs))
|
&remote_pubkey, &inputs))
|
||||||
status_failed(WIRE_HSMSTATUS_BAD_REQUEST, "Bad SIGN_FUNDING");
|
status_failed(WIRE_HSMSTATUS_BAD_REQUEST, "Bad SIGN_FUNDING");
|
||||||
|
|
||||||
tx = bitcoin_tx(tmpctx, tal_count(inputs), 1 + !!change_out);
|
/* FIXME: unmarshall gives array, not array of pointers. */
|
||||||
inmap = tal_arr(tmpctx, const void *, tal_count(inputs));
|
utxomap = tal_arr(tmpctx, const struct utxo *, tal_count(inputs));
|
||||||
for (i = 0; i < tal_count(inputs); i++) {
|
for (i = 0; i < tal_count(inputs); i++)
|
||||||
tx->input[i].txid = inputs[i].txid;
|
utxomap[i] = &inputs[i];
|
||||||
tx->input[i].index = inputs[i].outnum;
|
|
||||||
tx->input[i].amount = tal_dup(tx->input, u64, &inputs[i].amount);
|
if (change_out)
|
||||||
inmap[i] = int2ptr(i);
|
|
||||||
}
|
|
||||||
tx->output[0].amount = satoshi_out;
|
|
||||||
wscript = bitcoin_redeem_2of2(tx, &local_pubkey, &remote_pubkey);
|
|
||||||
tx->output[0].script = scriptpubkey_p2wsh(tx, wscript);
|
|
||||||
if (change_out) {
|
|
||||||
struct pubkey changekey;
|
|
||||||
bitcoin_pubkey(&changekey, change_keyindex);
|
bitcoin_pubkey(&changekey, change_keyindex);
|
||||||
|
|
||||||
tx->output[1].amount = change_out;
|
tx = funding_tx(tmpctx, &outnum, utxomap,
|
||||||
tx->output[1].script = scriptpubkey_p2wpkh(tx, &changekey);
|
satoshi_out, &local_pubkey, &remote_pubkey,
|
||||||
}
|
change_out, &changekey);
|
||||||
|
|
||||||
/* Now permute. */
|
|
||||||
permute_outputs(tx->output, tal_count(tx->output), NULL);
|
|
||||||
permute_inputs(tx->input, tal_count(tx->input), inmap);
|
|
||||||
|
|
||||||
/* Now generate signatures. */
|
/* Now generate signatures. */
|
||||||
sig = tal_arr(tmpctx, secp256k1_ecdsa_signature, tal_count(inputs));
|
sig = tal_arr(tmpctx, secp256k1_ecdsa_signature, tal_count(inputs));
|
||||||
for (i = 0; i < tal_count(inputs); i++) {
|
for (i = 0; i < tal_count(inputs); i++) {
|
||||||
struct pubkey inkey;
|
struct pubkey inkey;
|
||||||
struct privkey inprivkey;
|
struct privkey inprivkey;
|
||||||
const struct utxo *in = &inputs[ptr2int(inmap[i])];
|
const struct utxo *in = utxomap[i];
|
||||||
u8 *subscript;
|
u8 *subscript;
|
||||||
|
|
||||||
bitcoin_keypair(&inprivkey, &inkey, in->keyindex);
|
bitcoin_keypair(&inprivkey, &inkey, in->keyindex);
|
||||||
|
|||||||
Reference in New Issue
Block a user