Estoy tratando de descubrir las limitaciones que tienen los scripts con respecto a su tamaño, límites que harían que un script no sea válido ( ignorando el estándar). Según esta pregunta y también estas líneas de código en el código fuente de bitcoin core 1 2 3 , parece que se aplican las siguientes reglas:
Maximum script size = 10,000
Maximum data size to be pushed to the stack = 520
Para probar estas reglas, hice un montón de transacciones en TestNet, todas las cuales rompieron alguna regla y se incluyeron en bloques (todos enviados desde n3eynMTEiGgPTuoKPApnRjE9pAuaAk3gkB
)? Ejemplo:
Tx ID: 88bac1e84c235aa0418345bf430fb43b336875974b6e87dc958de196f9222c35
PubkeyScript length=0xfd1527=10,005
script= 4d11275b2c...394e75
o Push_10001_byte<5b2c...394e> OP_DROP
Como puede ver, la longitud del script ya es 10 005 > 10 000 y la primera inserción de datos es 10 001 > 520. En otras palabras, rompí ambas reglas.
Además, que yo sepa, las reglas de "consenso" son exactamente las mismas en TestNet (con una excepción: ajuste de dificultad), ¿es correcto? Entonces, ¿cómo es válida esta transacción?
Esas reglas de consenso son, de hecho, las mismas para testnet y mainnet.
Sin embargo, solo se aplican cuando se ejecutan los scripts . Entonces, debe crear una entrada tratando de gastarla para probar esto.
Entusiasta de la codificación
pieter wuille
claris