From cafc49fabd385e8394b61f364a7710ed547fdd8a Mon Sep 17 00:00:00 2001 From: Andrew Kozlik Date: Sat, 13 Nov 2021 20:55:17 +0100 Subject: [PATCH] fix(legacy): Fix transaction weight calculation. Fix size of multisig script length encoding in segwit (varint vs. OP_PUSH). --- legacy/firmware/transaction.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/legacy/firmware/transaction.c b/legacy/firmware/transaction.c index 8e0f16474..259ed9343 100644 --- a/legacy/firmware/transaction.c +++ b/legacy/firmware/transaction.c @@ -923,9 +923,14 @@ static uint32_t tx_input_script_size(const TxInputType *txinput) { uint32_t multisig_script_size = TXSIZE_MULTISIGSCRIPT + cryptoMultisigPubkeyCount(&(txinput->multisig)) * (1 + TXSIZE_PUBKEY); + if (txinput->script_type == InputScriptType_SPENDWITNESS || + txinput->script_type == InputScriptType_SPENDP2SHWITNESS) { + multisig_script_size += ser_length_size(multisig_script_size); + } else { + multisig_script_size += op_push_size(multisig_script_size); + } input_script_size = 1 // the OP_FALSE bug in multisig + txinput->multisig.m * (1 + TXSIZE_DER_SIGNATURE) + - op_push_size(multisig_script_size) + multisig_script_size; } else if (txinput->script_type == InputScriptType_SPENDTAPROOT) { input_script_size = 1 + TXSIZE_SCHNORR_SIGNATURE;