gui: fix coin control input size accounting for taproot spends

Github-Pull: gui#766
Rebased-From: 00a52e6394
This commit is contained in:
Sebastian Falbesoner 2023-10-07 01:01:57 +02:00 committed by Luke Dashjr
parent e4382fbef5
commit 02a19ff924

View File

@ -518,7 +518,19 @@ void CoinControlDialog::updateLabels(WalletModel *model, QDialog* dialog)
std::vector<unsigned char> witnessprogram;
if (out.tx->vout[out.i].scriptPubKey.IsWitnessProgram(witnessversion, witnessprogram))
{
nBytesInputs += (32 + 4 + 1 + (107 / WITNESS_SCALE_FACTOR) + 4);
// add input skeleton bytes (outpoint, scriptSig size, nSequence)
nBytesInputs += (32 + 4 + 1 + 4);
if (witnessversion == 0) { // P2WPKH
// 1 WU (witness item count) + 72 WU (ECDSA signature with len byte) + 34 WU (pubkey with len byte)
nBytesInputs += 107 / WITNESS_SCALE_FACTOR;
} else if (witnessversion == 1) { // P2TR key-path spend
// 1 WU (witness item count) + 65 WU (Schnorr signature with len byte)
nBytesInputs += 66 / WITNESS_SCALE_FACTOR;
} else {
// not supported, should be unreachable
throw std::runtime_error("Trying to spend future segwit version script");
}
fWitness = true;
}
else if(ExtractDestination(out.tx->vout[out.i].scriptPubKey, address))