Digamos que quiero codificar el texto de la versión King James de la Biblia en la cadena de bloques, una pieza a la vez (reemplace esto con cualquier idea loca para consumir grandes cantidades de espacio de bloque). OP_RETURN no es práctico porque solo puedo trabajar con fragmentos de 80 bytes.
Me doy cuenta de que SegWit permite almacenar muchos más datos, hasta 3 MB/bloque, en datos testigo.
Claramente, no puedo usar un programa testigo V0 porque mis datos de testigo deben tomar la forma
<signature> <pubkey>
Sin embargo, creo que puedo usar un programa testigo V1. Los scripts con esa versión no serán compatibles inmediatamente después de la implementación de SegWit, pero observo esto en BIP-141 :
Si el byte de la versión es del 1 al 16, no se produce ninguna interpretación adicional del programa testigo o la pila testigo, y no hay restricción de tamaño para la pila testigo. Estas versiones están reservadas para futuras ampliaciones.
Así que aquí está mi plan. Voy a crear un script de salida de la forma:
<0x01> <0x0000>
Este es un programa testigo V1. De acuerdo con BIP-141, el programa testigo no debe interpretarse y la siguiente pila testigo no tendrá restricciones de tamaño.
Luego voy a gastar esa salida con una entrada de transacción testigo. El testigo de mi transacción codifica mil bytes de texto.
Cuando publique esta transacción de gasto, se propagará por nodos. No pueden rechazarlo como inválido porque eso rompería la compatibilidad hacia adelante cuando se introduzcan los scripts V1. BIP-141 no dice nada sobre si tales transacciones deben o no ser retransmitidas (ni BIP-144), por lo que supongo que lo serán.
Siempre que pague una tarifa lo suficientemente alta, mi transacción eventualmente será minada. Incluso obtengo un 75% de descuento sobre el uso de OP_RETURN porque mi texto está codificado en el testigo.
Y no hay nada que el protocolo haga para detenerme. ¿O hay?
Editar: para simplificar las cosas, suponga que SegWit se ha implementado ampliamente y que la mayoría de los nodos entienden los programas testigo V0. Claramente, los nodos que no sean SegWit no transmitirán una transacción testigo porque se considerará no estándar. Estoy interesado en el comportamiento de los nodos SegWit.
Su transacción, aunque no es inválida, no es estándar. Dado que no es estándar, no se propagará y se rechazará por no ser estándar. Sin embargo, esto no significa que no se pueda incluir en un bloque; puede. Solo requiere que el minero y todos los nodos entre usted y ese minero estén ejecutando algún software que acepte y transmita transacciones no estándar. Sin embargo, no muchos nodos realmente lo hacen, por lo que es posible que tenga dificultades para obtener una buena propagación de su transacción.
CSᵠ