Al leer esta respuesta , entiendo que en m-of-n direcciones multisig, m
y n
está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 witnessScript
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 muy grandes m
y n
que se considerarán válidas.
Según mis cálculos, podremos tener n
s 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
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_CHECKMULTISIG
có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.
simone bronzini
simone bronzini
n
hasta 276 (es decirfloor((10,000 - 34 - 3) / 36)
, donde la primera línea es de 34 bytes, la última línea es de 3 bytes, considerandom
como OP_PUSHDATA1 seguido de uno -número de bytes, y todas las demás líneas son 36 bytes), ¿es correcto?pieter wuille
amaclin
pieter wuille