diff --git a/channeld/test/run-commit_tx.c b/channeld/test/run-commit_tx.c index 9bf0f882b..8b24787d9 100644 --- a/channeld/test/run-commit_tx.c +++ b/channeld/test/run-commit_tx.c @@ -320,6 +320,7 @@ static void report(struct bitcoin_tx *tx, { char *txhex; struct bitcoin_signature localsig, remotesig; + u8 **witness; sign_tx_input(tx, 0, NULL, @@ -337,10 +338,11 @@ static void report(struct bitcoin_tx *tx, &localsig); printf("# local_signature = %s\n", type_to_string(tmpctx, struct bitcoin_signature, &localsig)); - tx->input[0].witness = bitcoin_witness_2of2(tx->input, - &localsig, &remotesig, - local_funding_pubkey, - remote_funding_pubkey); + + witness = + bitcoin_witness_2of2(tx->input, &localsig, &remotesig, + local_funding_pubkey, remote_funding_pubkey); + bitcoin_tx_input_set_witness(tx, 0, witness); txhex = tal_hex(tmpctx, linearize_tx(tx, tx)); printf("output commit_tx: %s\n", txhex); diff --git a/channeld/test/run-full_channel.c b/channeld/test/run-full_channel.c index bbc4b8826..6b7e2bda9 100644 --- a/channeld/test/run-full_channel.c +++ b/channeld/test/run-full_channel.c @@ -570,7 +570,7 @@ int main(void) * output htlc_success_tx 0: 020000000001018154ecccf11a5fb56c39654c4deb4d2296f83c69268280b94d021370c94e219700000000000000000001e8030000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402206a6e59f18764a5bf8d4fa45eebc591566689441229c918b480fb2af8cc6a4aeb02205248f273be447684b33e3c8d1d85a8e0ca9fa0bae9ae33f0527ada9c162919a60147304402207cb324fa0de88f452ffa9389678127ebcf4cabe1dd848b8e076c1a1962bf34720220116ed922b12311bd602d67e60d2529917f21c5b82f25ff6506c0f87886b4dfd5012000000000000000000000000000000000000000000000000000000000000000008a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a914b8bcb07f6344b42ab04250c86a6e8b75d3fdbbc688527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f401b175ac686800000000 */ raw_tx = tx_from_hex(tmpctx, "020000000001018154ecccf11a5fb56c39654c4deb4d2296f83c69268280b94d021370c94e219700000000000000000001e8030000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402206a6e59f18764a5bf8d4fa45eebc591566689441229c918b480fb2af8cc6a4aeb02205248f273be447684b33e3c8d1d85a8e0ca9fa0bae9ae33f0527ada9c162919a60147304402207cb324fa0de88f452ffa9389678127ebcf4cabe1dd848b8e076c1a1962bf34720220116ed922b12311bd602d67e60d2529917f21c5b82f25ff6506c0f87886b4dfd5012000000000000000000000000000000000000000000000000000000000000000008a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a914b8bcb07f6344b42ab04250c86a6e8b75d3fdbbc688527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f401b175ac686800000000"); - raw_tx->input[0].witness = NULL; + bitcoin_tx_input_set_witness(raw_tx, 0, NULL); tx_must_be_eq(raw_tx, txs[1]); /* BOLT #3: @@ -578,7 +578,7 @@ int main(void) * output htlc_timeout_tx 2: 020000000001018154ecccf11a5fb56c39654c4deb4d2296f83c69268280b94d021370c94e219701000000000000000001d0070000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100d5275b3619953cb0c3b5aa577f04bc512380e60fa551762ce3d7a1bb7401cff9022037237ab0dac3fe100cde094e82e2bed9ba0ed1bb40154b48e56aa70f259e608b01483045022100c89172099507ff50f4c925e6c5150e871fb6e83dd73ff9fbb72f6ce829a9633f02203a63821d9162e99f9be712a68f9e589483994feae2661e4546cd5b6cec007be501008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a914b43e1b38138a41b37f7cd9a1d274bc63e3a9b5d188ac6868f6010000 */ raw_tx = tx_from_hex(tmpctx, "020000000001018154ecccf11a5fb56c39654c4deb4d2296f83c69268280b94d021370c94e219701000000000000000001d0070000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100d5275b3619953cb0c3b5aa577f04bc512380e60fa551762ce3d7a1bb7401cff9022037237ab0dac3fe100cde094e82e2bed9ba0ed1bb40154b48e56aa70f259e608b01483045022100c89172099507ff50f4c925e6c5150e871fb6e83dd73ff9fbb72f6ce829a9633f02203a63821d9162e99f9be712a68f9e589483994feae2661e4546cd5b6cec007be501008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a914b43e1b38138a41b37f7cd9a1d274bc63e3a9b5d188ac6868f6010000"); - raw_tx->input[0].witness = NULL; + bitcoin_tx_input_set_witness(raw_tx, 0, NULL); tx_must_be_eq(raw_tx, txs[2]); /* BOLT #3: @@ -586,7 +586,7 @@ int main(void) * output htlc_success_tx 1: 020000000001018154ecccf11a5fb56c39654c4deb4d2296f83c69268280b94d021370c94e219702000000000000000001d0070000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402201b63ec807771baf4fdff523c644080de17f1da478989308ad13a58b51db91d360220568939d38c9ce295adba15665fa68f51d967e8ed14a007b751540a80b325f20201483045022100def389deab09cee69eaa1ec14d9428770e45bcbe9feb46468ecf481371165c2f022015d2e3c46600b2ebba8dcc899768874cc6851fd1ecb3fffd15db1cc3de7e10da012001010101010101010101010101010101010101010101010101010101010101018a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a9144b6b2e5444c2639cc0fb7bcea5afba3f3cdce23988527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f501b175ac686800000000 */ raw_tx = tx_from_hex(tmpctx, "020000000001018154ecccf11a5fb56c39654c4deb4d2296f83c69268280b94d021370c94e219702000000000000000001d0070000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402201b63ec807771baf4fdff523c644080de17f1da478989308ad13a58b51db91d360220568939d38c9ce295adba15665fa68f51d967e8ed14a007b751540a80b325f20201483045022100def389deab09cee69eaa1ec14d9428770e45bcbe9feb46468ecf481371165c2f022015d2e3c46600b2ebba8dcc899768874cc6851fd1ecb3fffd15db1cc3de7e10da012001010101010101010101010101010101010101010101010101010101010101018a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a9144b6b2e5444c2639cc0fb7bcea5afba3f3cdce23988527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f501b175ac686800000000"); - raw_tx->input[0].witness = NULL; + bitcoin_tx_input_set_witness(raw_tx, 0, NULL); tx_must_be_eq(raw_tx, txs[3]); /* BOLT #3: @@ -594,7 +594,7 @@ int main(void) * output htlc_timeout_tx 3: 020000000001018154ecccf11a5fb56c39654c4deb4d2296f83c69268280b94d021370c94e219703000000000000000001b80b0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100daee1808f9861b6c3ecd14f7b707eca02dd6bdfc714ba2f33bc8cdba507bb182022026654bf8863af77d74f51f4e0b62d461a019561bb12acb120d3f7195d148a554014730440220643aacb19bbb72bd2b635bc3f7375481f5981bace78cdd8319b2988ffcc6704202203d27784ec8ad51ed3bd517a05525a5139bb0b755dd719e0054332d186ac0872701008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6868f7010000 */ raw_tx = tx_from_hex(tmpctx, "020000000001018154ecccf11a5fb56c39654c4deb4d2296f83c69268280b94d021370c94e219703000000000000000001b80b0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e0500483045022100daee1808f9861b6c3ecd14f7b707eca02dd6bdfc714ba2f33bc8cdba507bb182022026654bf8863af77d74f51f4e0b62d461a019561bb12acb120d3f7195d148a554014730440220643aacb19bbb72bd2b635bc3f7375481f5981bace78cdd8319b2988ffcc6704202203d27784ec8ad51ed3bd517a05525a5139bb0b755dd719e0054332d186ac0872701008576a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c820120876475527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae67a9148a486ff2e31d6158bf39e2608864d63fefd09d5b88ac6868f7010000"); - raw_tx->input[0].witness = NULL; + bitcoin_tx_input_set_witness(raw_tx, 0, NULL); tx_must_be_eq(raw_tx, txs[4]); /* BOLT #3: @@ -602,7 +602,7 @@ int main(void) * output htlc_success_tx 4: 020000000001018154ecccf11a5fb56c39654c4deb4d2296f83c69268280b94d021370c94e219704000000000000000001a00f0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402207e0410e45454b0978a623f36a10626ef17b27d9ad44e2760f98cfa3efb37924f0220220bd8acd43ecaa916a80bd4f919c495a2c58982ce7c8625153f8596692a801d014730440220549e80b4496803cbc4a1d09d46df50109f546d43fbbf86cd90b174b1484acd5402205f12a4f995cb9bded597eabfee195a285986aa6d93ae5bb72507ebc6a4e2349e012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000 */ raw_tx = tx_from_hex(tmpctx, "020000000001018154ecccf11a5fb56c39654c4deb4d2296f83c69268280b94d021370c94e219704000000000000000001a00f0000000000002200204adb4e2f00643db396dd120d4e7dc17625f5f2c11a40d857accc862d6b7dd80e050047304402207e0410e45454b0978a623f36a10626ef17b27d9ad44e2760f98cfa3efb37924f0220220bd8acd43ecaa916a80bd4f919c495a2c58982ce7c8625153f8596692a801d014730440220549e80b4496803cbc4a1d09d46df50109f546d43fbbf86cd90b174b1484acd5402205f12a4f995cb9bded597eabfee195a285986aa6d93ae5bb72507ebc6a4e2349e012004040404040404040404040404040404040404040404040404040404040404048a76a91414011f7254d96b819c76986c277d115efce6f7b58763ac67210394854aa6eab5b2a8122cc726e9dded053a2184d88256816826d6231c068d4a5b7c8201208763a91418bc1a114ccf9c052d3d23e28d3b0a9d1227434288527c21030d417a46946384f88d5f3337267c5e579765875dc4daca813e21734b140639e752ae677502f801b175ac686800000000"); - raw_tx->input[0].witness = NULL; + bitcoin_tx_input_set_witness(raw_tx, 0, NULL); tx_must_be_eq(raw_tx, txs[5]); /* FIXME: Compare HTLCs for these too! */ diff --git a/common/test/run-funding_tx.c b/common/test/run-funding_tx.c index 275fd11a8..874944b9b 100644 --- a/common/test/run-funding_tx.c +++ b/common/test/run-funding_tx.c @@ -97,7 +97,7 @@ int main(void) const struct utxo **utxomap; struct amount_sat funding_sat; u16 funding_outnum; - u8 *subscript; + u8 *subscript, *script; struct bitcoin_signature sig; struct bitcoin_address addr; @@ -181,8 +181,8 @@ int main(void) sign_tx_input(funding, 0, subscript, NULL, &input_privkey, &inputkey, SIGHASH_ALL, &sig); - funding->input[0].script = bitcoin_redeem_p2pkh(funding, &inputkey, - &sig); + script = bitcoin_redeem_p2pkh(funding, &inputkey, &sig); + bitcoin_tx_input_set_script(funding, 0, script); printf("funding tx: %s\n", tal_hex(tmpctx, linearize_tx(tmpctx, funding))); diff --git a/hsmd/hsmd.c b/hsmd/hsmd.c index 79f7a13bb..c271661ea 100644 --- a/hsmd/hsmd.c +++ b/hsmd/hsmd.c @@ -1343,7 +1343,7 @@ static void sign_all_inputs(struct bitcoin_tx *tx, struct utxo **utxos) struct pubkey inkey; struct privkey inprivkey; const struct utxo *in = utxos[i]; - u8 *subscript, *wscript; + u8 *subscript, *wscript, *script; struct bitcoin_signature sig; /* Figure out keys to spend this. */ @@ -1356,9 +1356,8 @@ 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); - tx->input[i].script - = bitcoin_scriptsig_p2sh_p2wpkh(tx->input, - &inkey); + script = bitcoin_scriptsig_p2sh_p2wpkh(tx->input, &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. */ @@ -1370,7 +1369,8 @@ static void sign_all_inputs(struct bitcoin_tx *tx, struct utxo **utxos) SIGHASH_ALL, &sig); /* The witness is [sig] [key] */ - tx->input[i].witness = bitcoin_witness_p2wpkh(tx, &sig, &inkey); + bitcoin_tx_input_set_witness( + tx, i, bitcoin_witness_p2wpkh(tx, &sig, &inkey)); } } diff --git a/onchaind/onchaind.c b/onchaind/onchaind.c index c47fd7599..aa42e948b 100644 --- a/onchaind/onchaind.c +++ b/onchaind/onchaind.c @@ -140,7 +140,7 @@ static bool grind_htlc_tx_fee(struct amount_sat *fee, if (!amount_sat_sub(&out, *tx->input[0].amount, *fee)) break; - tx->output[0].amount = out; + bitcoin_tx_output_set_amount(tx, 0, &out); if (!check_tx_sig(tx, 0, NULL, wscript, &keyset->other_htlc_key, remotesig)) continue; @@ -157,6 +157,7 @@ static bool set_htlc_timeout_fee(struct bitcoin_tx *tx, const u8 *wscript) { static struct amount_sat fee = AMOUNT_SAT_INIT(UINT64_MAX); + struct amount_sat amount = tx->output[0].amount; /* BOLT #3: * @@ -168,11 +169,13 @@ static bool set_htlc_timeout_fee(struct bitcoin_tx *tx, if (amount_sat_eq(fee, AMOUNT_SAT(UINT64_MAX))) return grind_htlc_tx_fee(&fee, tx, remotesig, wscript, 663); - if (!amount_sat_sub(&tx->output[0].amount, tx->output[0].amount, fee)) + if (!amount_sat_sub(&amount, amount, fee)) status_failed(STATUS_FAIL_INTERNAL_ERROR, "Cannot deduct htlc-timeout fee %s from tx %s", type_to_string(tmpctx, struct amount_sat, &fee), type_to_string(tmpctx, struct bitcoin_tx, tx)); + + bitcoin_tx_output_set_amount(tx, 0, &amount); return check_tx_sig(tx, 0, NULL, wscript, &keyset->other_htlc_key, remotesig); }