mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-01-09 15:18:09 +01:00
b356dda0ba
Elements requires us to have an explicit fee output instead of bitcoin's implied fee. We add the fee output mostly after sorting the other outputs since that matches the behavior in elements itself. Signed-off-by: Christian Decker <decker.christian@gmail.com>
56 lines
1.5 KiB
C
56 lines
1.5 KiB
C
#include "funding_tx.h"
|
|
#include <assert.h>
|
|
#include <bitcoin/pubkey.h>
|
|
#include <bitcoin/script.h>
|
|
#include <bitcoin/tx.h>
|
|
#include <ccan/ptrint/ptrint.h>
|
|
#include <common/permute_tx.h>
|
|
#include <common/utxo.h>
|
|
|
|
#ifndef SUPERVERBOSE
|
|
#define SUPERVERBOSE(...)
|
|
#endif
|
|
|
|
struct bitcoin_tx *funding_tx(const tal_t *ctx,
|
|
const struct chainparams *chainparams,
|
|
u16 *outnum,
|
|
const struct utxo **utxomap,
|
|
struct amount_sat funding,
|
|
const struct pubkey *local_fundingkey,
|
|
const struct pubkey *remote_fundingkey,
|
|
struct amount_sat change,
|
|
const struct pubkey *changekey,
|
|
const struct ext_key *bip32_base)
|
|
{
|
|
u8 *wscript;
|
|
struct bitcoin_tx *tx;
|
|
bool has_change = !amount_sat_eq(change, AMOUNT_SAT(0));
|
|
|
|
tx = tx_spending_utxos(ctx, chainparams, utxomap, bip32_base, has_change, 1);
|
|
|
|
|
|
wscript = bitcoin_redeem_2of2(tx, local_fundingkey, remote_fundingkey);
|
|
SUPERVERBOSE("# funding witness script = %s\n",
|
|
tal_hex(wscript, wscript));
|
|
bitcoin_tx_add_output(tx, scriptpubkey_p2wsh(tx, wscript), funding);
|
|
tal_free(wscript);
|
|
|
|
if (has_change) {
|
|
const void *map[2];
|
|
map[0] = int2ptr(0);
|
|
map[1] = int2ptr(1);
|
|
bitcoin_tx_add_output(tx, scriptpubkey_p2wpkh(tx, changekey),
|
|
change);
|
|
permute_outputs(tx, NULL, map);
|
|
*outnum = (map[0] == int2ptr(0) ? 0 : 1);
|
|
} else {
|
|
*outnum = 0;
|
|
}
|
|
|
|
permute_inputs(tx, (const void **)utxomap);
|
|
|
|
bitcoin_tx_add_fee_output(tx);
|
|
assert(bitcoin_tx_check(tx));
|
|
return tx;
|
|
}
|