Browse Source

funding tx: include segwit marker + flag in fee calculation

Noticed an off by one error when running tests for dual-funding;
we're not including the two 'header' segwit bytes in our weight
calculations.
pull/2938/head
lisa neigut 6 years ago
committed by Rusty Russell
parent
commit
c7f3fa34b2
  1. 3
      common/wallet_tx.c
  2. 2
      devtools/mkfunding.c
  3. 3
      wallet/wallet.c

3
common/wallet_tx.c

@ -184,7 +184,8 @@ struct command_result *wtx_from_utxos(struct wallet_tx *tx,
/* The transaction has `tal_count(tx.utxos)` inputs and one output */
/* (version + in count + out count + locktime) (index + value + script length) */
weight = 4 * (4 + 1 + 1 + 4) + 4 * (8 + 1 + out_len);
/* + segwit marker + flag */
weight = 4 * (4 + 1 + 1 + 4) + 4 * (8 + 1 + out_len) + 1 + 1;
for (size_t i = 0; i < tal_count(utxos); i++) {
if (!*utxos[i]->blockheight || *utxos[i]->blockheight > maxheight) {
tal_arr_remove(&utxos, i);

2
devtools/mkfunding.c

@ -90,6 +90,8 @@ int main(int argc, char *argv[])
/* nVersion, input count, output count, nLocktime */
weight = 4 * (4 + 1 + 1 + 4);
/* Add segwit fields: marker + flag */
weight += 1 + 1;
/* Single output: Satoshis, script length, p2wsh. */
weight += 4 * (8 + 1 + BITCOIN_SCRIPTPUBKEY_P2WSH_LEN);
/* Single input: txid, index, scriptlen, nSequence */

3
wallet/wallet.c

@ -289,6 +289,9 @@ static const struct utxo **wallet_select(const tal_t *ctx, struct wallet *w,
/* version, input count, output count, locktime */
weight = (4 + 1 + 1 + 4) * 4;
/* Add segwit fields: marker + flag */
weight += 1 + 1;
/* The main output: amount, len, scriptpubkey */
weight += (8 + 1 + outscriptlen) * 4;

Loading…
Cancel
Save