Para un algoritmo f, dos partes no confiables, Alice y Bob, pueden establecer confianza de la siguiente manera:
Para los puntos 2, 3 y 4 anteriores, sea x el estado inicial y las transacciones de Layer2, f el programa de consenso de Layer2, y el estado final de las transacciones, que corresponde a la solución de escalado de Layer2 en blockchain.
Tabla 1: Métodos para establecer la confianza
Además, es importante tener en cuenta:
Actualmente, los contratos inteligentes Turing completo, la prueba de fraude y la prueba de validez, gracias a Solidity, se aplican ampliamente en la capa 2 de Ethereum. Sin embargo, en el marco de BTC, debido a las limitaciones de la funcionalidad de los códigos de operación de BTC, la limitada cantidad de elementos de la pila (solo 1000) y otras restricciones, la aplicación de estas tecnologías aún está en una etapa exploratoria. Este artículo resume las limitaciones y las tecnologías innovadoras en el marco de BTC, investiga las tecnologías de prueba de validez y prueba de fraude, y describe la técnica única de segmentación de scripts en el marco de BTC.
Dentro del marco de BTC existen muchas limitaciones, pero estas limitaciones pueden superarse mediante varios métodos o tecnologías ingeniosas. Por ejemplo, el uso de compromisos Bit puede romper la restricción de estado sin usar de UTXO, Taproot puede resolver la limitación del espacio de script, las salidas de enlace pueden superar la limitación del método de consumo de UTXO, mientras que los contratos inteligentes pueden romper la limitación de pre-firma.
BTC utiliza el modelo UTXO, donde cada UTXO está bloqueado en un script de bloqueo que define las condiciones que deben cumplirse para gastar ese UTXO. Hay algunas limitaciones en el script BTC:
Actualmente, el script de BTC es completamente sin estado. Al ejecutar el script de BTC, el entorno de ejecución de cada script se restablecerá una vez completado. Esto hace que el script de BTC no pueda admitir nativamente que los scripts 1 y 2 compartan el mismo valor x. Sin embargo, este problema se puede resolver mediante algunos métodos, cuya idea principal es firmar de alguna manera un valor. Si se puede generar una firma para un valor, se puede lograr un script de BTC con estado. En otras palabras, al verificar las firmas de los valores de x en los scripts 1 y 2, se puede garantizar que se utilice el mismo valor x en estos dos scripts. Si hay conflictos de firmas, es decir, se firman dos valores diferentes para la misma variable x, se puede imponer una penalización. Este método se conoce como compromiso Bit.
El principio prometido por Bit es relativamente simple. Cada Bit corresponde a dos valores hash diferentes, hash0 y hash1. Si el valor de Bit a firmar es 0, se revela el preimagen de hash0; si el valor de Bit es 1, se revela el preimagen de hash1.
Tomando como ejemplo un mensaje de un solo bit m ∈ {0,1}, el script de desbloqueo de la promesa de bits correspondiente consta solo de algunos antecedentes: si el valor de bit es 0, el script de desbloqueo es preimage0 - “0xfa7fa5b1dea37d71a0b841967f6a3b119dbea140”; Si el valor de bit es 1, el script de desbloqueo es preimage1 - “0x47c31e611a3bd2f3a7a42207613046703fa27496”. Por lo tanto, a través de la promesa de Bit, es posible romper las limitaciones sin estado de los UTXO e implementar scripts BTC con estado, lo que a su vez hace posible todo tipo de nuevas características interesantes.
OP_HASH160
OP_DUP
0xf592e757267b7f307324f1e78b34472f8b6f46f3> // 这是hash1
OP_EQUAL
OP_DUP
OP_ROT
0x100b9f19ebd537fdc371fa1367d7ccc802dc2524> // 这是hash0
OP_EQUAL
OP_BOOLOR
OP_VERIFY
// El valor prometido de Bit ahora está en la pila. Puede ser “0” o “1”.
Actualmente, Bit promete dos formas de implementación:
Actualmente, la biblioteca BitVM2 implementa la firma de Winternitz basada en la función hash Blake3. La longitud de la firma correspondiente a un solo Bit es de aproximadamente 26 bytes. Por lo tanto, se puede observar que introducir un estado a través del compromiso de Bit tiene un costo. Por lo tanto, en la implementación de BitVM2, el mensaje primero se hashea para obtener un valor hash de 256 bits, y luego se compromete a Bit con ese valor hash para ahorrar gastos, en lugar de comprometer directamente cada Bit del mensaje original más largo.
La actualización de la bifurcación suave Taproot de BTC se activó en noviembre de 2021 e incluye tres propuestas: firma Schnorr (BIP 340), Taproot (BIP 341) y TapScript (BIP 342). Esta actualización introduce un nuevo tipo de transacción: transacciones Pay-to-Taproot (P2TR). Al combinar las ventajas de Taproot, MAST (Merkle Abstract Syntax Tree) y la firma Schnorr, las transacciones P2TR pueden crear formatos de transacción más privados, flexibles y escalables.
P2TR admite dos formas de gasto: a través de la ruta de Llave secreta o la ruta de script. Según la especificación de Taproot (BIP 341), cuando se gasta a través de la ruta de script, la longitud de la ruta de Merkle correspondiente no puede superar los 128. Esto significa que la cantidad de tapleaf en el taptree no puede superar los 2^128. Desde la actualización de SegWit en 2017, la red BTC mide el tamaño del Bloquear en unidades de peso, con un máximo de 4 millones de unidades de peso (aproximadamente 4MB). Cuando se gasta la salida de P2TR a través de la ruta de script, solo se revela un único script de tapleaf, lo que significa que el Bloquear solo contiene un script de tapleaf. Por lo tanto, para las transacciones de P2TR, el tamaño máximo del script correspondiente a cada tapleaf puede alcanzar aproximadamente 4MB. Sin embargo, según la política predeterminada de BTC, muchos Nodos solo retransmiten transacciones de menos de 400K; las transacciones más grandes requieren la colaboración de Minero para ser empaquetadas.
La prima de espacio de script introducida por Taproot hace que sea más valioso simular operaciones criptográficas como la multiplicación y hash con códigos de operación existentes. Al construir cálculos verificables basados en P2TR, el tamaño del script ya no está limitado a 4MB, sino que puede dividirse en múltiples subfunciones distribuidas en múltiples tapleaves, superando así la limitación de espacio de script de 4MB. De hecho, el tamaño del verificador Groth16 implementado actualmente en BitVM2 es de hasta 2GB. Sin embargo, puede dividirse y distribuirse en aproximadamente 1000 tapleaves, y combinarse con compromisos Bit para garantizar la consistencia entre las entradas y salidas de cada subfunción, asegurando así la integridad y corrección de todo el cálculo.
Actualmente, BTC ofrece dos formas nativas de gasto para una única salida de transacción no gastada (UTXO): gasto a través de un script o una llave pública. Por lo tanto, siempre que se cumpla la firma correcta de la llave pública o las condiciones del script, se puede gastar el UTXO. Dos UTXO pueden ser gastados de forma independiente, y no se pueden agregar restricciones para restringir estos dos UTXO, lo que significa que se deben cumplir condiciones adicionales para gastarlos.
Sin embargo, el fundador de ARK, Burak, inteligentemente utilizó la marca SIGHASH para lograr una salida de conector. En concreto, Alice puede crear una firma que envíe sus BTC a Bob. Dado que la firma puede comprometer varios insumos, Alice puede condicionar su firma a que solo sea válida cuando se consume el segundo insumo, que se conoce como conector y que conecta UTXO A y UTXO B. En otras palabras, la transacción Taketx solo es válida si UTXO B no ha sido consumida por Challengetx. Por lo tanto, al destruir la salida del conector, se puede evitar la validez de la transacción Taketx.
Figura 1: Diagrama de salida del conector
En BitVM2, la salida del conector actúa como una función if…else. Una vez que la salida del conector es gastada por una transacción, no puede ser gastada de nuevo por otra transacción, lo que garantiza su exclusividad. En la implementación real, se introducen UTXO adicionales con bloqueo temporal para permitir el ciclo de desafío-respuesta. Además, la salida del conector también puede establecer diferentes estrategias de gasto según sea necesario, por ejemplo, permitir que cualquiera gaste en caso de transacciones de desafío, pero solo permitir que el operador gaste en caso de transacciones de respuesta o permitir que cualquiera gaste después de un tiempo de espera.
Actualmente, el script de BTC limita principalmente las condiciones de desbloqueo, pero no limita cómo se gasta la salida de transacción no gastada (UTXO) más adelante. Esto se debe a que el script de BTC no puede leer el contenido de la transacción en sí, por lo que no puede lograr la introspección de la transacción. Si el script de BTC pudiera verificar cualquier contenido de la transacción (incluida la salida), entonces podría lograr funciones de contrato.
La implementación actual del contrato se puede dividir en dos categorías:
tanto la prueba de validez como la prueba de fraude pueden ser utilizadas en la extensión Layer2 de BTC, sus principales diferencias se muestran en la tabla 2.
表 2:prueba de validez与prueba de fraude
Basado en las promesas de Bit, Taproot, pre-firmas y salidas de conector, se puede construir una prueba de fraude basada en BTC. Además, mediante la introducción de códigos de operación de contrato (por ejemplo, OP_CAT), también se puede construir una prueba de validez de BTC basada en Taproot. Además, la prueba de fraude se puede dividir en prueba de fraude con licencia y prueba de fraude sin licencia según si Bob tiene acceso al sistema sumar. En la prueba de fraude con licencia, solo un grupo específico puede desafiar a Bob, mientras que en la prueba de fraude sin licencia, cualquier tercero puede desafiar a Bob. La seguridad de la prueba de fraude sin licencia es mayor que la de la prueba de fraude con licencia, ya que Soltar el riesgo de colusión entre los participantes.
Según el número de interacciones de desafío-respuesta entre Alice y Bob, la prueba de fraude puede dividirse en prueba de fraude de una sola ronda y prueba de fraude de múltiples rondas, como se muestra en la figura 2.
Figura 2: prueba de fraude en una sola rueda vs prueba de fraude en varias ruedas
Como se muestra en la tabla 3, la prueba de fraude puede lograrse a través de diferentes modelos de interacción, incluyendo el modelo de interacción de una sola ronda y el modelo de interacción de múltiples rondas.
Tabla 3: Interacción de una sola ronda y de múltiples rondas
En el paradigma de expansión Layer2 de BTC, BitVM1 utiliza un mecanismo de prueba de fraude de múltiples rondas, mientras que BitVM2 utiliza un mecanismo de prueba de fraude de una sola ronda y bitcoin-circle stark utiliza una prueba de validez. Entre estos mecanismos, BitVM1 y BitVM2 pueden lograrlo sin modificar el protocolo BTC, mientras que bitcoin-circle stark requiere la introducción de un nuevo código de operación OP_CAT.
Para la mayoría de las tareas de cálculo, las signet, testnet y mainnet de BTC no pueden admitir completamente scripts de 4MB, por lo que se requiere la técnica de división de scripts, es decir, dividir el script de cálculo completo en bloques de menos de 4MB y distribuirlo en diferentes Tapleaf.
Como se muestra en la tabla 3, las rondas múltiples de prueba de fraude son adecuadas para aquellos que desean reducir los cálculos de arbitraje on-chain, o para situaciones en las que no se puede localizar el segmento de cálculo del problema de una vez. Como su nombre lo indica, las rondas múltiples de prueba de fraude requieren interacciones múltiples entre los probadores y los validadores para encontrar el segmento de cálculo del problema, y luego arbitrar en función de estos segmentos.
El White Paper temprano de BitVM de Robin Linus (comúnmente conocido como BitVM1) utilizó múltiples rondas de prueba de fraude. Suponiendo que cada período de desafío dure una semana y utilizando el método de búsqueda binaria para localizar el segmento de cálculo con problemas, el período de respuesta al desafío on-chain del verificador Groth16 podría extenderse hasta 30 semanas, lo que resulta en una baja eficiencia en términos de tiempo. Aunque actualmente hay equipos investigando métodos de búsqueda n-arios más eficientes que la búsqueda binaria, su eficiencia en términos de tiempo sigue siendo significativamente inferior al ciclo de 2 semanas de una sola ronda de prueba de fraude.
Actualmente, en BTC, el uso de pruebas de fraude de múltiples rondas implica un desafío con licencia, mientras que las pruebas de fraude de una sola ronda implementan un método sin desafío con licencia, lo que reduce el riesgo de conspiración entre los participantes y mejora la seguridad. Para lograr esto, Robin Linus aprovechó al máximo las ventajas de Taproot para optimizar BitVM1, reduciendo la cantidad de rondas de interacción a una sola y expandiendo el método de desafío a uno sin licencia, aunque esto aumenta el costo del cálculo de arbitraje en la cadena.
En este modelo, la validación de la prueba de fraude solo requiere una interacción entre el probador y los validadores. Los validadores solo necesitan lanzar un desafío una vez, mientras que el probador solo necesita responder una vez. En la respuesta, el probador debe proporcionar evidencia para demostrar que sus cálculos son correctos. Si los validadores encuentran alguna inconsistencia en la evidencia, el desafío tiene éxito; de lo contrario, falla. Las características de la interacción de una sola ronda de la prueba de fraude se muestran en la tabla 3.
Figura 3: Ronda única prueba de fraude
El 15 de agosto de 2024, Robin Linus publicó el White Paper técnico ‘BitVM2: Conectando BTC a la Capa 2’, que implementa un puente cross-chain que utiliza un método de prueba de fraude de una sola ronda similar al mostrado en la figura 3.
OP_CAT es parte del lenguaje de script cuando BTC fue lanzado, pero fue desactivado en 2010 debido a vulnerabilidades de seguridad. Sin embargo, la comunidad de BTC ha estado discutiendo la posibilidad de volver a habilitar OP_CAT durante muchos años. Actualmente, OP_CAT se ha asignado el número 347 y se ha activado en la red signet de BTC.
La función principal de OP_CAT es combinar dos elementos en la pila y empujar el resultado de vuelta a la pila. Esta función abre nuevas posibilidades para los contratos y los validadores STARK en BTC:
A pesar de que la carga computacional necesaria para la prueba de validación después de las pruebas SNARK/STARK es mucho menor que la carga de ejecutar directamente el cálculo original f, la cantidad de scripts necesarios para convertirlo en un script de validador Bitcoin sigue siendo grande. Actualmente, con base en los códigos de operación de Bitcoin existentes, el tamaño de los scripts de validador Groth16 y Fflonk optimizados supera los 2 GB, mientras que el tamaño de un solo bloque Bitcoin es solo de 4 MB, por lo que no es posible ejecutar todo el script del validador en un solo bloque. Sin embargo, desde la actualización de Taproot, Bitcoin admite la ejecución de scripts a través de tapleaf, lo que permite que el script del validador se divida en varios bloques, cada uno de los cuales se construye como un tapleaf para formar un taptree. La consistencia entre bloques se puede garantizar mediante compromisos de bits.
En el caso del contrato OP_CAT, el verificador STARK puede dividirse en varias transacciones estándar de menos de 400KB, lo que permite que la validación completa de STARK prueba de validez se realice sin la necesidad de colaborar con el Minero.
Esta sección se centra en la técnica de división de scripts BTC en condiciones existentes sin introducir o activar ningún nuevo código de operación.
Al realizar la fragmentación de scripts, es necesario equilibrar la información de los siguientes aspectos:
Actualmente, los métodos de división de scripts se pueden clasificar en las siguientes tres categorías:
Por ejemplo, después de múltiples rondas de optimización, el tamaño del script del verificador Groth16 ha disminuido de alrededor de 7GB a aproximadamente 1.26GB. Además de la optimización general de cálculos, cada bloque también puede ser optimizado individualmente para aprovechar al máximo el espacio de la pila. Por ejemplo, mediante la introducción de algoritmos de tabla de búsqueda más eficientes, y la carga y descarga dinámica de tablas de búsqueda, se puede reducir aún más el tamaño del script de cada bloque.
Debido a que el costo de cálculo y el entorno de ejecución del lenguaje de programación Web2 son completamente diferentes de los del script BTC, simplemente convertir la implementación existente de Algoritmo en un script BTC no es viable. Por lo tanto, es necesario considerar una optimización específica para el escenario BTC:
Este artículo discute primero las limitaciones del script BTC y discute varias soluciones: superar las limitaciones sin estado de UTXO utilizando compromisos BTC, superar las limitaciones del espacio de script mediante el uso de Taproot, superar las limitaciones del método de gasto de UTXO mediante la conexión de salidas, y superar las limitaciones de la pre-firma mediante contratos. Luego, el artículo ofrece una descripción completa de las características de prueba de fraude y prueba de validez, incluidas las características de prueba de fraude con y sin licencia, las diferencias entre prueba de fraude de una ronda y prueba de fraude de múltiples rondas, y la tecnología de división de scripts BTC relacionada.