From 31dd3dc9e5b27fa2bbb5170ad98107a36fe55958 Mon Sep 17 00:00:00 2001 From: Andrew Chow Date: Wed, 17 Aug 2022 11:36:45 -0400 Subject: bumpfee: Clear scriptSigs and scriptWitnesses before calculated max size The max size calculation expects some inputs to have empty scriptSigs and witnesses, so we need to clear these before doing that calculation. --- src/wallet/feebumper.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/wallet/feebumper.cpp b/src/wallet/feebumper.cpp index d2e3f07301..c0d2ca3240 100644 --- a/src/wallet/feebumper.cpp +++ b/src/wallet/feebumper.cpp @@ -242,7 +242,13 @@ Result CreateRateBumpTransaction(CWallet& wallet, const uint256& txid, const CCo if (coin_control.m_feerate) { // The user provided a feeRate argument. // We calculate this here to avoid compiler warning on the cs_wallet lock - const int64_t maxTxSize{CalculateMaximumSignedTxSize(*wtx.tx, &wallet, &new_coin_control).vsize}; + // We need to make a temporary transaction with no input witnesses as the dummy signer expects them to be empty for external inputs + CMutableTransaction mtx{*wtx.tx}; + for (auto& txin : mtx.vin) { + txin.scriptSig.clear(); + txin.scriptWitness.SetNull(); + } + const int64_t maxTxSize{CalculateMaximumSignedTxSize(CTransaction(mtx), &wallet, &new_coin_control).vsize}; Result res = CheckFeeRate(wallet, wtx, *new_coin_control.m_feerate, maxTxSize, old_fee, errors); if (res != Result::OK) { return res; -- cgit v1.2.3