From 459298ab0e35f97072228f9984cd0b6973989895 Mon Sep 17 00:00:00 2001 From: Greg Sanders Date: Wed, 12 Nov 2025 13:13:58 -0500 Subject: [PATCH] bip54: clarify sigops counting, borrow bip16 language --- bip-0054.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/bip-0054.md b/bip-0054.md index c5e8a615..bc34646e 100644 --- a/bip-0054.md +++ b/bip-0054.md @@ -69,12 +69,14 @@ Given a block at height `N`: A limit is set on the number of potentially executed signature operations in validating a transaction. It applies to all transactions in the block except the coinbase transaction[^1]. For each input in the transaction, count the number of `CHECKSIG` and `CHECKMULTISIG` in the input -scriptSig and previous output's scriptPubKey, including the P2SH redeemScript. The accounting is the -same as for [bip-0016][BIP16 specs]: a `CHECKSIG`/`CHECKSIGVERIFY` operation accounts for 1 and a -`CHECKMULTISIG`/`CHECKMULTISIGVERIFY` accounts for the number of public keys associated, or 20 if -the number of public keys is greater than 16. A `CHECKMULTISIG`/`CHECKMULTISIGVERIFY` not directly -preceded by a minimally-pushed number between 1 and 16 (included) accounts for 20. If the -total is strictly higher than 2500, the transaction is invalid. +scriptSig and previous output's scriptPubKey, including the P2SH redeemScript. If the total summed +over all transaction inputs is strictly higher than 2500, the transaction is invalid. The accounting is the +same as for [bip-0016][BIP16 specs], evaluating the scriptSig, scriptPubKey, and P2SH redeemScript +separately: + +1. `CHECKSIG` and `CHECKSIGVERIFY` count as 1 signature operation, whether or not they are evaluated. +2. `CHECKMULTISIG` and `CHECKMULTISIGVERIFY` immediately preceded by `OP_1` through `OP_16` are counted as 1 to 16 signature operations, whether or not they are evaluated. +3. All other `CHECKMULTISIG` and `CHECKMULTISIGVERIFY` are counted as 20 signature operations, whether or not they are evaluated. Transactions whose witness-stripped serialized size is exactly 64 bytes are invalid.