Definition
OP_CHECKSIGADD (opcode 0xba) is the Tapscript replacement for legacy multisignature, introduced in BIP 342 alongside the Taproot upgrade. It pops three stack elements — a public key, an integer counter, and a signature — and verifies the signature against the key using BIP 340 Schnorr rules. If the signature is valid it pushes the counter incremented by one; if the signature is empty it pushes the counter unchanged. This lets a script tally valid signatures one at a time.
Building m-of-n without OP_CHECKMULTISIG
Chaining OP_CHECKSIGADD across several keys, then comparing the accumulated counter to a threshold with <m> OP_GREATERTHANOREQUAL (or OP_NUMEQUAL), reproduces any m-of-n policy that OP_CHECKMULTISIG once provided — but in a form designed for the Schnorr era.
Why the design changed
Legacy OP_CHECKMULTISIG does not associate a given signature with a given public key until runtime, creating a combinatorial matching problem that blocks efficient batch verification. By making each signature check explicit and order-bound, OP_CHECKSIGADD keeps every operation individually batch-verifiable, improving validation efficiency and scalability for multi-party scripts. OP_CHECKMULTISIG and OP_CHECKMULTISIGVERIFY are disabled entirely inside Tapscript.
OP_CHECKSIGADD is the modern counterpart to OP_CHECKSIG, and like all signing operations in Tapscript it draws against the per-input sigop budget each time it validates a non-empty signature.
In Simple Terms
OP_CHECKSIGADD (opcode 0xba) is the Tapscript replacement for legacy multisignature, introduced in BIP 342 alongside the Taproot upgrade. It pops three stack elements — a…
