¿SegWit permitirá m de n multisig con n y m muy grandes?

Al leer esta respuesta , entiendo que en m-of-n direcciones multisig, my nestán limitadas por el tamaño máximo permitido por el P2SH redeemScript(es decir, 520 bytes).

Sin embargo, en esta sección de BIP141, se indica que witnessScriptpuede tener hasta 10 000 bytes. Según tengo entendido, esto implica que con la adopción de SegWit debería ser posible crear y usar m-of-n direcciones multisig con muy grandes my nque se considerarán válidas.

Según mis cálculos, podremos tener ns tan grandes como alrededor de 300. ¿Estoy entendiendo esto correctamente?

Por ejemplo, ¿se consideraría válido y gastable bajo SegWit el siguiente witnessScript, que debería representar una dirección multisig de 50 de 100?

0x01 0x32 <100 public keys> 0x01 0x64 OP_CHECKMULTISIG

Respuestas (1)

Al leer esta respuesta, entiendo que en m-de-n direcciones multisig, m y n están limitadas por el tamaño máximo permitido por el P2SH redimeScript (es decir, 520 bytes).

Eso es correcto. Aunque el OP_CHECKMULTISIGcódigo de operación del script admite más claves, más de 15 claves públicas simplemente no caben en un script de redención P2SH, por lo que se convierte en el factor limitante.

Sin embargo, en esta sección de BIP141, se establece que el script testigo puede tener hasta 10 000 bytes. Según tengo entendido, esto implica que con la adopción de SegWit debería ser posible crear y usar m-of-n direcciones multisig con m y n muy grandes que se considerarán válidas.

BIP141 solo describe las reglas de consenso, es decir, qué transacciones son válidas dentro de los bloques. Hay una serie de reglas de estandarización que se aplican a las transacciones que se transmiten y aceptan en los grupos de memoria, para evitar posibles vías de abuso antes de que se entiendan. Bitcoin Core 0.13.1 y versiones superiores limitan los scripts testigo a 3600 bytes para ese propósito.

Por ejemplo, ¿el siguiente script de testigo, que debería representar una dirección multisig de 50 de 100, se consideraría válido y gastable bajo SegWit?

0x01 0x32 <100 signatures> 0x01 0x64 OP_CHECKMULTISIG

Supongo que te refieres a claves públicas allí en lugar de firmas.

No. OP_CHECKMULTISIG en sí solo admite hasta 20 de 20, por lo que si desea usar ese código de operación, no puede pasar de 20. Sin embargo, puede construir otros scripts que superen esos límites.

En particular:

<pubkey1> OP_CHECKSIG
OP_SWAP <pubkey2> OP_CHECKSIG OP_ADD
OP_SWAP <pubkey3> OP_CHECKSIG OP_ADD
...
OP_SWAP <pubkey67> OP_CHECKSIG OP_ADD
<m> OP_NUMEQUALVERIFY

implementaría una política m-of-67, con menos de 3600 bytes.

Gracias por tu gran respuesta. Sí, quise decir "100 claves públicas", lo arreglé en la pregunta original.
Entonces, si entiendo correctamente su solución alternativa, los scripts de 10000 bytes permitirían direcciones multisig con nhasta 276 (es decir floor((10,000 - 34 - 3) / 36), donde la primera línea es de 34 bytes, la última línea es de 3 bytes, considerando mcomo OP_PUSHDATA1 seguido de uno -número de bytes, y todas las demás líneas son 36 bytes), ¿es correcto?
Sí, pero eso excedería el límite de 201 script ops.
¿No es demasiado tarde para ampliar el límite de guiones testigo? (Solo pregunto, no necesito este aumento) ¿Y qué pasa con el límite de 20 operaciones sigop para un script?
Cualquiera de estos límites se puede cambiar fácilmente en una nueva versión de software (para límites de estandarización como 3600 bytes) o una nueva versión de script (para límites de consenso como 10k bytes o 201 operaciones). Dado el control de versiones del script que introduce segwit, este último debería ser simple.