¿Se podría usar CHECKSIGADD en nuevas firmas múltiples ECDSA en lugar de CHECKMULTISIG?

La bifurcación blanda de Taproot propuesta ( BIP 342 ) define el nuevo código de operación OP_CHECKSIGADD para verificar las firmas múltiples de Schnorr, mientras que OP_CHECKMULTISIG (y OP_CHECKMULTISIGVERIFY) están deshabilitados para los gastos de Taproot (SegWit versión 1). ¿Podríamos usar el código de operación OP_CHECKSIGADD para verificar las nuevas firmas múltiples ECDSA de la versión 0 de SegWit? Obviamente, no obtiene los mismos beneficios de verificación por lotes si las firmas individuales son ECDSA, pero aún sería más eficiente usar el sistema de contador de CHECKSIGADD.

Para obtener una explicación de cómo funciona el código de operación CHECKSIGADD, consulte esta presentación de James Chiang. O consulte Tapscript BIP 342 .

"El código de operación 186 (0xba) se llama OP_CHECKSIGADD"

"OP_CHECKSIGADD es funcionalmente equivalente a OP_ROT OP_SWAP OP_CHECKSIG OP_ADD"

Respuestas (1)

No, porque el código de operación 186 (0xba) no está definido para los gastos de la versión 0 de SegWit. Solo puede aprovechar este código de operación en los gastos de la versión 1 de SegWit. Si incluyó este código de operación en su secuencia de comandos de transacción SegWit versión 0, cualquier intento de gastarlo encontraría este error de secuencia de comandos .

Además, Pieter Wuille agregó en los comentarios:

De hecho, habilitar la misma semántica para las versiones de script existentes sería una bifurcación difícil. Extrae elementos de la pila, por lo que una secuencia de comandos que consiste simplemente en "OP_CHECKSIGADD OP_SIZE 1 OP_EQUAL" y alimenta 3 elementos como entrada no sería válida actualmente, pero sería válida si se agregara dicho código de operación.

De hecho, el código de operación solo existe en los gastos de tapscript.
De hecho, habilitar la misma semántica para las versiones de script existentes sería una bifurcación difícil. Extrae elementos de la pila, por lo que una secuencia de comandos que consiste simplemente en "OP_CHECKSIGADD OP_SIZE 1 OP_EQUAL" y alimenta 3 elementos como entrada no sería válida actualmente, pero sería válida si se agregara dicho código de operación.