<p>No because the opcode 186 (0xba) is undefined for SegWit version 0 spends. You can only take advantage of this opcode in SegWit version 1 spends. If you included this opcode in your SegWit version 0 transaction script any attempt to spend it would encounter this script <a href="https://github.com/bitcoin/bitcoin/blob/master/src/script/script_error.cpp#L40" rel="nofollow noreferrer">error</a>.</p>
<p>In addition Pieter Wuille added in the comments:</p>
<blockquote>
<p>In fact, enabling the same semantics for existing script versions would be a hardfork. It pops elements off the stack, so a script consisting of just &quot;OP_CHECKSIGADD OP_SIZE 1 OP_EQUAL&quot;, and fed 3 elements as input would be invalid currently, but valid if such an opcode was added</p>
</blockquote>

CC BY-SA 4.0
2020-07-29T16:49:08.000Z
Indeed, the opcode only exists in tapscript spends.
Pieter Wuille
CC BY-SA 4.0
2020-07-29T18:02:03.217Z
In fact, enabling the same semantics for existing script versions would be a hardfork. It pops elements off the stack, so a script consisting of just "OP_CHECKSIGADD OP_SIZE 1 OP_EQUAL", and fed 3 elements as input would be invalid currently, but valid if such an opcode was added.
Pieter Wuille
CC BY-SA 4.0
2020-07-29T12:40:39.697Z
2021-06-08T09:40:58.323Z
2021-06-08T09:40:58.323Z
Michael Folkson
<p>The proposed Taproot soft fork (<a href="https://youtu.be/nXGe9_M5pjk?t=121" rel="nofollow noreferrer">BIP 342</a>) defines the new opcode OP_CHECKSIGADD to verify Schnorr multisignatures whilst OP_CHECKMULTISIG (and OP_CHECKMULTISIGVERIFY) are disabled for Taproot spends (SegWit version 1). Could we use the OP_CHECKSIGADD opcode for verifying new SegWit version 0 ECDSA multisignatures? Obviously you don't get the same batch verification benefits if the individual signatures are ECDSA but it would still be more efficient to use the counter system of CHECKSIGADD?</p>
<p>For an explanation of how the opcode CHECKSIGADD works see this <a href="https://youtu.be/nXGe9_M5pjk?t=121" rel="nofollow noreferrer">presentation</a> from James Chiang. Or see Tapscript <a href="https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki#cite_note-4" rel="nofollow noreferrer">BIP 342</a>.</p>
<p>&quot;The opcode 186 (0xba) is named as OP_CHECKSIGADD&quot;</p>
<p>&quot;OP_CHECKSIGADD is functionally equivalent to OP_ROT OP_SWAP OP_CHECKSIG OP_ADD&quot;</p>

<script><multi-signature><taproot><opcodes>
Could CHECKSIGADD be used on new ECDSA multisignatures instead of CHECKMULTISIG?
Michael Folkson
# Could CHECKSIGADD be used on new ECDSA multisignatures instead of CHECKMULTISIG?

(Asked by: username_0 on 2020-07-29)

The proposed Taproot soft fork ([BIP 342](https://youtu.be/nXGe9_M5pjk?t=121)) defines the new opcode OP\_CHECKSIGADD to verify Schnorr multisignatures whilst OP\_CHECKMULTISIG (and OP\_CHECKMULTISIGVERIFY) are disabled for Taproot spends (SegWit version 1). Could we use the OP\_CHECKSIGADD opcode for verifying new SegWit version 0 ECDSA multisignatures? Obviously you don't get the same batch verification benefits if the individual signatures are ECDSA but it would still be more efficient to use the counter system of CHECKSIGADD?

For an explanation of how the opcode CHECKSIGADD works see this [presentation](https://youtu.be/nXGe9_M5pjk?t=121) from James Chiang. Or see Tapscript [BIP 342](https://github.com/bitcoin/bips/blob/master/bip-0342.mediawiki#cite_note-4).

"The opcode 186 (0xba) is named as OP\_CHECKSIGADD"

"OP\_CHECKSIGADD is functionally equivalent to OP\_ROT OP\_SWAP OP\_CHECKSIG OP\_ADD"

**Tags:** script, multi-signature, taproot, opcodes


---

## 1 answers

### Answer by username_0 on 2020-07-29. Score: 1 | Accepted answer

No because the opcode 186 (0xba) is undefined for SegWit version 0 spends. You can only take advantage of this opcode in SegWit version 1 spends. If you included this opcode in your SegWit version 0 transaction script any attempt to spend it would encounter this script [error](https://github.com/bitcoin/bitcoin/blob/master/src/script/script_error.cpp#L40).

In addition username_1 username_1 added in the comments:

> In fact, enabling the same semantics for existing script versions would be a hardfork. It pops elements off the stack, so a script consisting of just "OP\_CHECKSIGADD OP\_SIZE 1 OP\_EQUAL", and fed 3 elements as input would be invalid currently, but valid if such an opcode was added

> **Comments:**
> **username_1**: Indeed, the opcode only exists in tapscript spends.  
> **username_1**: In fact, enabling the same semantics for existing script versions would be a hardfork. It pops elements off the stack, so a script consisting of just "OP_CHECKSIGADD OP_SIZE 1 OP_EQUAL", and fed 3 elements as input would be invalid currently, but valid if such an opcode was added.  

---

