Para un algoritmo f, dos participantes mutuamente desconfiados, Alice y Bob, pueden establecer confianza de las siguientes formas:
Para los anteriores 2, 3 y 4, sea x una transacción de Capa2 y el estado inicial, f sea el programa de consenso de Capa2 y y sea el estado final de la transacción, correspondiente a la solución de escalado de Capa2 de la cadena de bloques. Entre ellos:
Tabla 1: Formas de establecer confianza
Además, es importante tener en cuenta:
Actualmente, gracias a los contratos inteligentes Turing completos de Solidity, las pruebas de fraude y las pruebas de validez son ampliamente utilizadas en la escalabilidad de Capa 2 de Ethereum. Sin embargo, bajo el paradigma de Bitcoin, limitado por la funcionalidad limitada de los opcodes de Bitcoin, los 1000 elementos de pila y otras restricciones, la aplicación de estas tecnologías aún se encuentra en etapa exploratoria. Este artículo resume las limitaciones y las tecnologías innovadoras bajo el paradigma de Bitcoin en el contexto de la escalabilidad de Capa 2 de Bitcoin, estudia las tecnologías de prueba de validez y prueba de fraude, y describe la tecnología de segmentación de scripts única bajo el paradigma de Bitcoin.
Bajo el paradigma de Bitcoin, existen muchas limitaciones, pero se pueden utilizar varios métodos o técnicas ingeniosas para superar estas limitaciones. Por ejemplo, el compromiso de bits puede superar la limitación estatal de UTXO, taproot puede superar las limitaciones del espacio de script, la salida del conector puede superar las limitaciones del método de gasto de UTXO, y los contratos pueden superar las limitaciones de pre-firma.
Bitcoin adopta el modelo UTXO, donde cada UTXO está bloqueado en un script de bloqueo que define las condiciones que deben cumplirse para gastar ese UTXO. Los scripts de Bitcoin tienen las siguientes limitaciones:
Actualmente, los scripts de Bitcoin son completamente sin estado. Al ejecutar un script de Bitcoin, su entorno de ejecución se restablece después de cada script. Esto conduce a la incapacidad de los scripts de Bitcoin para admitir nativamente los scripts de restricción 1 y 2 que tienen el mismo valor x. Sin embargo, este problema se puede evitar mediante algunos métodos, siendo la idea principal firmar un valor de alguna manera. Si se puede crear una firma para un valor, es posible lograr scripts de Bitcoin con estado. Es decir, al verificar la firma del valor x en los scripts 1 y 2, se puede garantizar que se utilice el mismo valor x en ambos scripts. Si hay una firma conflictiva, lo que significa que se firman dos valores diferentes para la misma variable x, se puede aplicar una penalización. Esta solución se conoce como compromiso de bit.
El principio del compromiso de bit es relativamente simple. Un bit se refiere a establecer dos valores hash diferentes, hash0 y hash1, para cada bit en el mensaje que se va a firmar. Si el valor del bit a firmar es 0, se revela la preimagen0 de hash0; si el valor del bit a firmar es 1, se revela la preimagen1 de hash1.
Tomando un mensaje de un solo bit m ∈{0,1} como ejemplo, el script de desbloqueo de compromiso de bit correspondiente son solo algunas preimágenes: si el valor del bit es 0, el script de desbloqueo correspondiente es preimage0 - “0xfa7fa5b1dea37d71a0b841967f6a3b119dbea140”; si el valor del bit es 1, el script de desbloqueo correspondiente es preimage1 - “0x47c31e611a3bd2f3a7a42207613046703fa27496”. Por lo tanto, con el compromiso de bit, es posible superar la limitación sin estado de UTXO y lograr scripts de Bitcoin con estado, lo que hace posible diversas características nuevas interesantes.
OP_HASH160
OP_DUP
0xf592e757267b7f307324f1e78b34472f8b6f46f3> // Este es hash1
OP_EQUAL
OP_DUP
OP_ROT
0x100b9f19ebd537fdc371fa1367d7ccc802dc2524> // This is hash0
OP_EQUAL
OP_BOOLOR
OP_VERIFY
// Ahora el valor del compromiso de bits está en la pila. Ya sea "0" o "1".
Actualmente, existen 2 implementaciones de compromiso de bits:
Actualmente, la biblioteca BitVM2 implementa firmas de Winternitz basadas 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 el estado a través del compromiso de bits es costoso. Por lo tanto, en la implementación de BitVM2, el mensaje se hashea primero para obtener un valor hash de 256 bits, y luego se realiza el compromiso de bits en el valor hash para ahorrar recursos, en lugar de comprometer cada bit del mensaje original más largo directamente.
La actualización del soft fork de Bitcoin Taproot, activada en noviembre de 2021, incluye tres propuestas: firmas Schnorr (BIP 340), Taproot (BIP 341) y TapScript (BIP 342). Introduce un nuevo tipo de transacción: transacciones Pay-to-Taproot (P2TR). Las transacciones P2TR pueden crear un formato de transacción más privado, flexible y escalable al combinar las ventajas de Taproot, MAST (Árbol de Sintaxis Abstracta de Merkel) y firmas Schnorr.
P2TR admite dos métodos de gasto: gastar según la ruta de la clave o la ruta del script.
De acuerdo con las disposiciones en Taproot (BIP 341), al gastar a través del camino del script, el camino Merkle correspondiente no puede exceder una longitud máxima de 128. Esto significa que el número de tapleafs en el taptree no puede exceder 2^128. Desde la actualización SegWit en 2017, la red de Bitcoin mide el tamaño de bloque en unidades de peso, con un máximo de soporte de 4 millones de unidades de peso (aproximadamente 4MB). Cuando se gasta una salida P2TR a través del camino del script, solo necesita revelar un solo script de tapleaf, lo que significa que el bloque está empaquetado con un solo script de tapleaf. Esto implica que para las transacciones P2TR, el tamaño de script correspondiente a cada tapleaf puede ser un máximo de alrededor de 4MB. Sin embargo, según la política predeterminada de Bitcoin, muchos nodos solo reenvían transacciones más pequeñas que 400K; las transacciones más grandes deben colaborar con los mineros para ser empacadas.
El espacio de script premium aportado por Taproot hace que sea más valioso simular operaciones criptográficas como la multiplicación y el hashing utilizando los opcodes existentes.
Al construir una computación verificable basada en P2TR, el tamaño del script correspondiente ya no está limitado a la restricción de 4MB, sino que se puede dividir en múltiples subfunciones distribuidas en múltiples tapleafs, rompiendo así la limitación de espacio de script de 4MB. De hecho, el algoritmo verificador Groth16 implementado en el actual BitVM2 tiene un tamaño de hasta 2GB. Sin embargo, se puede dividir y distribuir en alrededor de 1000 tapleafs, y al combinarlo con el compromiso de bits, se puede restringir la coherencia entre las entradas y salidas de cada subfunción, asegurando la integridad y la corrección de toda la computación.
Actualmente, Bitcoin proporciona dos métodos de gasto nativos para un solo UTXO: gasto por script o por clave pública. Por lo tanto, siempre y cuando se cumplan la firma de clave pública o las condiciones de script correctas, se puede gastar el UTXO. Dos UTXOs se pueden gastar de forma independiente, y no se pueden agregar restricciones para limitar los dos UTXOs, lo que significa que deben cumplirse condiciones adicionales para gastarlos.
Sin embargo, Burak, el fundador del protocolo Ark, utilizó inteligentemente la bandera SIGHASH para lograr la salida del conector. Específicamente, Alice puede crear una firma para enviar sus BTC a Bob. Sin embargo, como la firma puede comprometer a múltiples entradas, Alice puede establecer su firma para que sea condicional: la firma es válida para la transacción Taketx si y solo si esa transacción consume la segunda entrada. La segunda entrada se llama el conector, que vincula UTXO A y UTXO B. En otras palabras, la transacción Taketx es válida si y solo si UTXO B no ha sido gastado por la Challengetx. Por lo tanto, al destruir la salida del conector, se puede bloquear la efectividad de la transacción Taketx.
Figura 1: Ilustración de salida del conector
En el protocolo 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 por otra transacción para garantizar su gasto exclusivo. En la implementación práctica, se introducen UTXOs adicionales con bloqueo de tiempo para permitir un período de desafío-respuesta. Además, la salida del conector correspondiente también puede configurarse con diferentes estrategias de gasto según sea necesario, como permitir que cualquier parte gaste en el caso de transacciones de desafío, mientras que solo se permite que el operador gaste o permitir que cualquiera gaste después de un tiempo de espera para las transacciones de respuesta.
Actualmente, los scripts de Bitcoin principalmente limitan las condiciones para desbloquear, sin restringir cómo se puede gastar aún más el UTXO. Esto se debe a que los scripts de Bitcoin no pueden leer el contenido de la transacción en sí, lo que significa que no pueden lograr la introspección de la transacción. Si los scripts de Bitcoin pudieran verificar cualquier contenido de la transacción (incluidas las salidas), la funcionalidad del contrato podría realizarse.
Las implementaciones de contratos actuales se pueden dividir en dos categorías:
Tanto las pruebas de validez como las pruebas de fraude se pueden utilizar para la escalabilidad de Bitcoin L2, con las principales diferencias mostradas en la Tabla 2.
Tabla 2: Pruebas de Validez vs. Pruebas de Fraude
Basándose en el compromiso de bits, taproot, pre-firmado y salida de conector, se pueden construir pruebas de fraude basadas en Bitcoin. Basándose en taproot, también se pueden construir pruebas de validez basadas en Bitcoin mediante la introducción de opcodes de contrato, como OP_CAT. Además, según si Bob tiene un sistema de admisión, las pruebas de fraude se pueden dividir en pruebas de fraude con permiso y pruebas de fraude sin permiso. En las pruebas de fraude con permiso, solo grupos específicos pueden actuar como Bob para iniciar desafíos, mientras que en las pruebas de fraude sin permiso, cualquier tercero puede actuar como Bob para iniciar desafíos. La seguridad de las pruebas de fraude sin permiso es superior a la de las pruebas con permiso, lo que reduce el riesgo de colusión entre los participantes permitidos.
Según el número de interacciones de desafío-respuesta entre Alice y Bob, las pruebas de fraude se pueden dividir en pruebas de fraude de una sola ronda y pruebas de fraude de múltiples rondas, como se muestra en la Figura 2.
Figura 2: Pruebas de Fraude de Una Ronda vs. Pruebas de Fraude de Múltiples Rondas
Como se muestra en la Tabla 3, las pruebas de fraude pueden implementarse a través de diferentes modelos de interacción, incluidos modelos de interacción de una ronda y modelos de interacción de varias rondas.
Tabla 3: Interacción de una sola ronda vs. Interacción de varias rondas
En el paradigma de escalado de Capa 2 de Bitcoin, BitVM1 adopta un mecanismo de prueba de fraude de múltiples rondas, mientras que BitVM2 emplea un mecanismo de prueba de fraude de una sola ronda, y bitcoin-circle stark utiliza pruebas de validez. Entre estos, BitVM1 y BitVM2 se pueden implementar sin realizar ninguna modificación en el protocolo Bitcoin, mientras que bitcoin-circle stark requiere la introducción de un nuevo opcode OP_CAT.
Para la mayoría de las tareas computacionales, el signet, testnet y mainnet de Bitcoin no pueden representar completamente un script de 4MB, lo que hace necesario el uso de la tecnología de división de scripts, es decir, dividir el script de cálculo completo en fragmentos más pequeños que 4MB, distribuidos en varios tapleafs.
Como se muestra en la Tabla 3, las pruebas de fraude de varias rondas son adecuadas para escenarios en los que hay un deseo de reducir la computación de arbitraje en cadena y/o donde no es posible señalar segmentos de computación problemáticos en un solo paso. Como su nombre indica, las pruebas de fraude de varias rondas requieren múltiples rondas de interacción entre el demostrador y el verificador para localizar los segmentos de computación problemáticos, seguidos por el arbitraje basado en los segmentos identificados.
El libro blanco temprano de BitVM de Robin Linus (comúnmente conocido como BitVM1) utilizó pruebas de fraude de múltiples rondas. Suponiendo que cada período de desafío dure una semana y empleando un método de búsqueda binaria para localizar los segmentos de cálculo problemáticos, el período de respuesta al desafío en cadena para el Verificador Groth16 podría extenderse hasta 30 semanas, lo que resulta en una mala puntualidad. Aunque actualmente hay equipos investigando métodos de búsqueda n-arios más eficientes que la búsqueda binaria, su puntualidad sigue siendo significativamente menor en comparación con el ciclo de 2 semanas en pruebas de fraude de una sola ronda.
Actualmente, las pruebas de fraude de varias rondas en el paradigma de Bitcoin emplean desafíos con permiso, mientras que las pruebas de fraude de una sola ronda han logrado un método de desafío sin permiso, reduciendo el riesgo de colusión entre los participantes y, por lo tanto, mejorando la seguridad. Con este fin, Robin Linus aprovechó al máximo las ventajas de Taproot para optimizar BitVM1. No solo se redujo el número de rondas de interacción a una, sino que el método de desafío también se amplió a un enfoque sin permiso, aunque a costa de aumentar el cálculo de arbitraje en cadena.
En este modelo, la verificación de pruebas de fraude puede completarse a través de una sola interacción entre el probador y el verificador. El verificador solo necesita iniciar un desafío, y el probador solo necesita responder una vez. En esta respuesta, el probador debe proporcionar pruebas que afirmen que su cálculo es correcto. Si el verificador encuentra inconsistencias en esa evidencia, el desafío tiene éxito; de lo contrario, falla. Las características de las pruebas de fraude interactivas de una sola ronda se muestran en la Tabla 3.
Figura 3: Prueba de Fraude de Una Ronda
El 15 de agosto de 2024, Robin Linus publicó el Libro Blanco Técnico BitVM2: Puenteando Bitcoin a Capa 2, que implementó un puente entre cadenas utilizando un método de prueba de fraude de una sola ronda similar al mostrado en la Figura 3.
OPCAT formaba parte del lenguaje de script original cuando se lanzó Bitcoin, pero se deshabilitó en 2010 debido a vulnerabilidades de seguridad. Sin embargo, la comunidad de Bitcoin ha estado discutiendo su reactivación durante años. OPCAT ahora ha sido asignado el número 347 y se ha habilitado en el signet de Bitcoin.
La función principal de OP_CAT es combinar dos elementos en la pila y empujar el resultado combinado de nuevo a la pila. Esta funcionalidad abre la posibilidad para contratos y Verificadores STARK en Bitcoin:
Aunque la carga computacional requerida para ejecutar el algoritmo verificador correspondiente para verificar la prueba después de la prueba SNARK/STARK es mucho menor que la requerida para ejecutar directamente el cálculo original f, la cantidad de script necesario al convertirlo para implementar el algoritmo verificador en el script de Bitcoin sigue siendo enorme. Actualmente, según los códigos de operación existentes de Bitcoin, el tamaño optimizado del script del verificador Groth16 y el tamaño del script del verificador Fflonk siguen siendo superiores a 2 GB. Sin embargo, el tamaño de un solo bloque de Bitcoin es de solo 4 MB, lo que hace imposible ejecutar todo el script del verificador dentro de un solo bloque. Sin embargo, desde la actualización de Taproot, Bitcoin admite la ejecución de scripts mediante tapleaf, lo que permite que el script del verificador se divida en varios fragmentos, y cada fragmento sirve como una hoja tap para construir un taptree. La coherencia de los valores entre los fragmentos se puede garantizar mediante el compromiso de bits.
En presencia de contratos OP_CAT, el Verificador STARK se puede dividir en múltiples transacciones estándar más pequeñas que 400KB, lo que permite completar la verificación de la prueba de validez STARK sin necesidad de colaborar con los mineros.
Esta sección se centra en la tecnología de división relevante de los scripts de Bitcoin bajo las condiciones existentes sin introducir o activar nuevos opcodes.
Al realizar la división de secuencias de comandos, se deben equilibrar las siguientes dimensiones de información:
Actualmente, los métodos para la división de scripts se pueden dividir en las siguientes tres categorías principales:
Por ejemplo, después de múltiples rondas de optimización, el tamaño del script del verificador Groth16 se redujo de aproximadamente 7GB a aproximadamente 1.26GB. Además de esta optimización computacional general, cada fragmento también se puede optimizar individualmente para aprovechar al máximo el espacio de la pila. Por ejemplo, al introducir algoritmos basados en tablas de búsqueda mejoradas y cargar y descargar dinámicamente la tabla de búsqueda, el tamaño del script de cada fragmento se puede reducir aún más.
Los costos computacionales y los entornos de tiempo de ejecución de los lenguajes de programación web2 son completamente diferentes de los de los scripts de Bitcoin, por lo que simplemente traducir las implementaciones existentes de varios algoritmos en scripts de Bitcoin no es factible. Por lo tanto, es necesario considerar las optimizaciones específicas para el escenario de Bitcoin:
Este artículo primero presenta las limitaciones de los scripts de Bitcoin y discute el uso de compromisos de Bitcoin para superar la limitación sin estado de UTXO, el uso de Taproot para superar las limitaciones del espacio de script, el uso de salidas de conector para evitar las restricciones del método de gasto de UTXO y el uso de contratos para superar las limitaciones de pre-firma. Luego proporciona una descripción general y un resumen completo de las características de las pruebas de fraudes y las pruebas de validez, las características de las pruebas de fraude con permisos y sin permisos, las diferencias entre pruebas de fraude de una sola ronda y de múltiples rondas, y la tecnología de división de scripts de Bitcoin.
Para un algoritmo f, dos participantes mutuamente desconfiados, Alice y Bob, pueden establecer confianza de las siguientes formas:
Para los anteriores 2, 3 y 4, sea x una transacción de Capa2 y el estado inicial, f sea el programa de consenso de Capa2 y y sea el estado final de la transacción, correspondiente a la solución de escalado de Capa2 de la cadena de bloques. Entre ellos:
Tabla 1: Formas de establecer confianza
Además, es importante tener en cuenta:
Actualmente, gracias a los contratos inteligentes Turing completos de Solidity, las pruebas de fraude y las pruebas de validez son ampliamente utilizadas en la escalabilidad de Capa 2 de Ethereum. Sin embargo, bajo el paradigma de Bitcoin, limitado por la funcionalidad limitada de los opcodes de Bitcoin, los 1000 elementos de pila y otras restricciones, la aplicación de estas tecnologías aún se encuentra en etapa exploratoria. Este artículo resume las limitaciones y las tecnologías innovadoras bajo el paradigma de Bitcoin en el contexto de la escalabilidad de Capa 2 de Bitcoin, estudia las tecnologías de prueba de validez y prueba de fraude, y describe la tecnología de segmentación de scripts única bajo el paradigma de Bitcoin.
Bajo el paradigma de Bitcoin, existen muchas limitaciones, pero se pueden utilizar varios métodos o técnicas ingeniosas para superar estas limitaciones. Por ejemplo, el compromiso de bits puede superar la limitación estatal de UTXO, taproot puede superar las limitaciones del espacio de script, la salida del conector puede superar las limitaciones del método de gasto de UTXO, y los contratos pueden superar las limitaciones de pre-firma.
Bitcoin adopta el modelo UTXO, donde cada UTXO está bloqueado en un script de bloqueo que define las condiciones que deben cumplirse para gastar ese UTXO. Los scripts de Bitcoin tienen las siguientes limitaciones:
Actualmente, los scripts de Bitcoin son completamente sin estado. Al ejecutar un script de Bitcoin, su entorno de ejecución se restablece después de cada script. Esto conduce a la incapacidad de los scripts de Bitcoin para admitir nativamente los scripts de restricción 1 y 2 que tienen el mismo valor x. Sin embargo, este problema se puede evitar mediante algunos métodos, siendo la idea principal firmar un valor de alguna manera. Si se puede crear una firma para un valor, es posible lograr scripts de Bitcoin con estado. Es decir, al verificar la firma del valor x en los scripts 1 y 2, se puede garantizar que se utilice el mismo valor x en ambos scripts. Si hay una firma conflictiva, lo que significa que se firman dos valores diferentes para la misma variable x, se puede aplicar una penalización. Esta solución se conoce como compromiso de bit.
El principio del compromiso de bit es relativamente simple. Un bit se refiere a establecer dos valores hash diferentes, hash0 y hash1, para cada bit en el mensaje que se va a firmar. Si el valor del bit a firmar es 0, se revela la preimagen0 de hash0; si el valor del bit a firmar es 1, se revela la preimagen1 de hash1.
Tomando un mensaje de un solo bit m ∈{0,1} como ejemplo, el script de desbloqueo de compromiso de bit correspondiente son solo algunas preimágenes: si el valor del bit es 0, el script de desbloqueo correspondiente es preimage0 - “0xfa7fa5b1dea37d71a0b841967f6a3b119dbea140”; si el valor del bit es 1, el script de desbloqueo correspondiente es preimage1 - “0x47c31e611a3bd2f3a7a42207613046703fa27496”. Por lo tanto, con el compromiso de bit, es posible superar la limitación sin estado de UTXO y lograr scripts de Bitcoin con estado, lo que hace posible diversas características nuevas interesantes.
OP_HASH160
OP_DUP
0xf592e757267b7f307324f1e78b34472f8b6f46f3> // Este es hash1
OP_EQUAL
OP_DUP
OP_ROT
0x100b9f19ebd537fdc371fa1367d7ccc802dc2524> // This is hash0
OP_EQUAL
OP_BOOLOR
OP_VERIFY
// Ahora el valor del compromiso de bits está en la pila. Ya sea "0" o "1".
Actualmente, existen 2 implementaciones de compromiso de bits:
Actualmente, la biblioteca BitVM2 implementa firmas de Winternitz basadas 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 el estado a través del compromiso de bits es costoso. Por lo tanto, en la implementación de BitVM2, el mensaje se hashea primero para obtener un valor hash de 256 bits, y luego se realiza el compromiso de bits en el valor hash para ahorrar recursos, en lugar de comprometer cada bit del mensaje original más largo directamente.
La actualización del soft fork de Bitcoin Taproot, activada en noviembre de 2021, incluye tres propuestas: firmas Schnorr (BIP 340), Taproot (BIP 341) y TapScript (BIP 342). Introduce un nuevo tipo de transacción: transacciones Pay-to-Taproot (P2TR). Las transacciones P2TR pueden crear un formato de transacción más privado, flexible y escalable al combinar las ventajas de Taproot, MAST (Árbol de Sintaxis Abstracta de Merkel) y firmas Schnorr.
P2TR admite dos métodos de gasto: gastar según la ruta de la clave o la ruta del script.
De acuerdo con las disposiciones en Taproot (BIP 341), al gastar a través del camino del script, el camino Merkle correspondiente no puede exceder una longitud máxima de 128. Esto significa que el número de tapleafs en el taptree no puede exceder 2^128. Desde la actualización SegWit en 2017, la red de Bitcoin mide el tamaño de bloque en unidades de peso, con un máximo de soporte de 4 millones de unidades de peso (aproximadamente 4MB). Cuando se gasta una salida P2TR a través del camino del script, solo necesita revelar un solo script de tapleaf, lo que significa que el bloque está empaquetado con un solo script de tapleaf. Esto implica que para las transacciones P2TR, el tamaño de script correspondiente a cada tapleaf puede ser un máximo de alrededor de 4MB. Sin embargo, según la política predeterminada de Bitcoin, muchos nodos solo reenvían transacciones más pequeñas que 400K; las transacciones más grandes deben colaborar con los mineros para ser empacadas.
El espacio de script premium aportado por Taproot hace que sea más valioso simular operaciones criptográficas como la multiplicación y el hashing utilizando los opcodes existentes.
Al construir una computación verificable basada en P2TR, el tamaño del script correspondiente ya no está limitado a la restricción de 4MB, sino que se puede dividir en múltiples subfunciones distribuidas en múltiples tapleafs, rompiendo así la limitación de espacio de script de 4MB. De hecho, el algoritmo verificador Groth16 implementado en el actual BitVM2 tiene un tamaño de hasta 2GB. Sin embargo, se puede dividir y distribuir en alrededor de 1000 tapleafs, y al combinarlo con el compromiso de bits, se puede restringir la coherencia entre las entradas y salidas de cada subfunción, asegurando la integridad y la corrección de toda la computación.
Actualmente, Bitcoin proporciona dos métodos de gasto nativos para un solo UTXO: gasto por script o por clave pública. Por lo tanto, siempre y cuando se cumplan la firma de clave pública o las condiciones de script correctas, se puede gastar el UTXO. Dos UTXOs se pueden gastar de forma independiente, y no se pueden agregar restricciones para limitar los dos UTXOs, lo que significa que deben cumplirse condiciones adicionales para gastarlos.
Sin embargo, Burak, el fundador del protocolo Ark, utilizó inteligentemente la bandera SIGHASH para lograr la salida del conector. Específicamente, Alice puede crear una firma para enviar sus BTC a Bob. Sin embargo, como la firma puede comprometer a múltiples entradas, Alice puede establecer su firma para que sea condicional: la firma es válida para la transacción Taketx si y solo si esa transacción consume la segunda entrada. La segunda entrada se llama el conector, que vincula UTXO A y UTXO B. En otras palabras, la transacción Taketx es válida si y solo si UTXO B no ha sido gastado por la Challengetx. Por lo tanto, al destruir la salida del conector, se puede bloquear la efectividad de la transacción Taketx.
Figura 1: Ilustración de salida del conector
En el protocolo 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 por otra transacción para garantizar su gasto exclusivo. En la implementación práctica, se introducen UTXOs adicionales con bloqueo de tiempo para permitir un período de desafío-respuesta. Además, la salida del conector correspondiente también puede configurarse con diferentes estrategias de gasto según sea necesario, como permitir que cualquier parte gaste en el caso de transacciones de desafío, mientras que solo se permite que el operador gaste o permitir que cualquiera gaste después de un tiempo de espera para las transacciones de respuesta.
Actualmente, los scripts de Bitcoin principalmente limitan las condiciones para desbloquear, sin restringir cómo se puede gastar aún más el UTXO. Esto se debe a que los scripts de Bitcoin no pueden leer el contenido de la transacción en sí, lo que significa que no pueden lograr la introspección de la transacción. Si los scripts de Bitcoin pudieran verificar cualquier contenido de la transacción (incluidas las salidas), la funcionalidad del contrato podría realizarse.
Las implementaciones de contratos actuales se pueden dividir en dos categorías:
Tanto las pruebas de validez como las pruebas de fraude se pueden utilizar para la escalabilidad de Bitcoin L2, con las principales diferencias mostradas en la Tabla 2.
Tabla 2: Pruebas de Validez vs. Pruebas de Fraude
Basándose en el compromiso de bits, taproot, pre-firmado y salida de conector, se pueden construir pruebas de fraude basadas en Bitcoin. Basándose en taproot, también se pueden construir pruebas de validez basadas en Bitcoin mediante la introducción de opcodes de contrato, como OP_CAT. Además, según si Bob tiene un sistema de admisión, las pruebas de fraude se pueden dividir en pruebas de fraude con permiso y pruebas de fraude sin permiso. En las pruebas de fraude con permiso, solo grupos específicos pueden actuar como Bob para iniciar desafíos, mientras que en las pruebas de fraude sin permiso, cualquier tercero puede actuar como Bob para iniciar desafíos. La seguridad de las pruebas de fraude sin permiso es superior a la de las pruebas con permiso, lo que reduce el riesgo de colusión entre los participantes permitidos.
Según el número de interacciones de desafío-respuesta entre Alice y Bob, las pruebas de fraude se pueden dividir en pruebas de fraude de una sola ronda y pruebas de fraude de múltiples rondas, como se muestra en la Figura 2.
Figura 2: Pruebas de Fraude de Una Ronda vs. Pruebas de Fraude de Múltiples Rondas
Como se muestra en la Tabla 3, las pruebas de fraude pueden implementarse a través de diferentes modelos de interacción, incluidos modelos de interacción de una ronda y modelos de interacción de varias rondas.
Tabla 3: Interacción de una sola ronda vs. Interacción de varias rondas
En el paradigma de escalado de Capa 2 de Bitcoin, BitVM1 adopta un mecanismo de prueba de fraude de múltiples rondas, mientras que BitVM2 emplea un mecanismo de prueba de fraude de una sola ronda, y bitcoin-circle stark utiliza pruebas de validez. Entre estos, BitVM1 y BitVM2 se pueden implementar sin realizar ninguna modificación en el protocolo Bitcoin, mientras que bitcoin-circle stark requiere la introducción de un nuevo opcode OP_CAT.
Para la mayoría de las tareas computacionales, el signet, testnet y mainnet de Bitcoin no pueden representar completamente un script de 4MB, lo que hace necesario el uso de la tecnología de división de scripts, es decir, dividir el script de cálculo completo en fragmentos más pequeños que 4MB, distribuidos en varios tapleafs.
Como se muestra en la Tabla 3, las pruebas de fraude de varias rondas son adecuadas para escenarios en los que hay un deseo de reducir la computación de arbitraje en cadena y/o donde no es posible señalar segmentos de computación problemáticos en un solo paso. Como su nombre indica, las pruebas de fraude de varias rondas requieren múltiples rondas de interacción entre el demostrador y el verificador para localizar los segmentos de computación problemáticos, seguidos por el arbitraje basado en los segmentos identificados.
El libro blanco temprano de BitVM de Robin Linus (comúnmente conocido como BitVM1) utilizó pruebas de fraude de múltiples rondas. Suponiendo que cada período de desafío dure una semana y empleando un método de búsqueda binaria para localizar los segmentos de cálculo problemáticos, el período de respuesta al desafío en cadena para el Verificador Groth16 podría extenderse hasta 30 semanas, lo que resulta en una mala puntualidad. Aunque actualmente hay equipos investigando métodos de búsqueda n-arios más eficientes que la búsqueda binaria, su puntualidad sigue siendo significativamente menor en comparación con el ciclo de 2 semanas en pruebas de fraude de una sola ronda.
Actualmente, las pruebas de fraude de varias rondas en el paradigma de Bitcoin emplean desafíos con permiso, mientras que las pruebas de fraude de una sola ronda han logrado un método de desafío sin permiso, reduciendo el riesgo de colusión entre los participantes y, por lo tanto, mejorando la seguridad. Con este fin, Robin Linus aprovechó al máximo las ventajas de Taproot para optimizar BitVM1. No solo se redujo el número de rondas de interacción a una, sino que el método de desafío también se amplió a un enfoque sin permiso, aunque a costa de aumentar el cálculo de arbitraje en cadena.
En este modelo, la verificación de pruebas de fraude puede completarse a través de una sola interacción entre el probador y el verificador. El verificador solo necesita iniciar un desafío, y el probador solo necesita responder una vez. En esta respuesta, el probador debe proporcionar pruebas que afirmen que su cálculo es correcto. Si el verificador encuentra inconsistencias en esa evidencia, el desafío tiene éxito; de lo contrario, falla. Las características de las pruebas de fraude interactivas de una sola ronda se muestran en la Tabla 3.
Figura 3: Prueba de Fraude de Una Ronda
El 15 de agosto de 2024, Robin Linus publicó el Libro Blanco Técnico BitVM2: Puenteando Bitcoin a Capa 2, que implementó un puente entre cadenas utilizando un método de prueba de fraude de una sola ronda similar al mostrado en la Figura 3.
OPCAT formaba parte del lenguaje de script original cuando se lanzó Bitcoin, pero se deshabilitó en 2010 debido a vulnerabilidades de seguridad. Sin embargo, la comunidad de Bitcoin ha estado discutiendo su reactivación durante años. OPCAT ahora ha sido asignado el número 347 y se ha habilitado en el signet de Bitcoin.
La función principal de OP_CAT es combinar dos elementos en la pila y empujar el resultado combinado de nuevo a la pila. Esta funcionalidad abre la posibilidad para contratos y Verificadores STARK en Bitcoin:
Aunque la carga computacional requerida para ejecutar el algoritmo verificador correspondiente para verificar la prueba después de la prueba SNARK/STARK es mucho menor que la requerida para ejecutar directamente el cálculo original f, la cantidad de script necesario al convertirlo para implementar el algoritmo verificador en el script de Bitcoin sigue siendo enorme. Actualmente, según los códigos de operación existentes de Bitcoin, el tamaño optimizado del script del verificador Groth16 y el tamaño del script del verificador Fflonk siguen siendo superiores a 2 GB. Sin embargo, el tamaño de un solo bloque de Bitcoin es de solo 4 MB, lo que hace imposible ejecutar todo el script del verificador dentro de un solo bloque. Sin embargo, desde la actualización de Taproot, Bitcoin admite la ejecución de scripts mediante tapleaf, lo que permite que el script del verificador se divida en varios fragmentos, y cada fragmento sirve como una hoja tap para construir un taptree. La coherencia de los valores entre los fragmentos se puede garantizar mediante el compromiso de bits.
En presencia de contratos OP_CAT, el Verificador STARK se puede dividir en múltiples transacciones estándar más pequeñas que 400KB, lo que permite completar la verificación de la prueba de validez STARK sin necesidad de colaborar con los mineros.
Esta sección se centra en la tecnología de división relevante de los scripts de Bitcoin bajo las condiciones existentes sin introducir o activar nuevos opcodes.
Al realizar la división de secuencias de comandos, se deben equilibrar las siguientes dimensiones de información:
Actualmente, los métodos para la división de scripts se pueden dividir en las siguientes tres categorías principales:
Por ejemplo, después de múltiples rondas de optimización, el tamaño del script del verificador Groth16 se redujo de aproximadamente 7GB a aproximadamente 1.26GB. Además de esta optimización computacional general, cada fragmento también se puede optimizar individualmente para aprovechar al máximo el espacio de la pila. Por ejemplo, al introducir algoritmos basados en tablas de búsqueda mejoradas y cargar y descargar dinámicamente la tabla de búsqueda, el tamaño del script de cada fragmento se puede reducir aún más.
Los costos computacionales y los entornos de tiempo de ejecución de los lenguajes de programación web2 son completamente diferentes de los de los scripts de Bitcoin, por lo que simplemente traducir las implementaciones existentes de varios algoritmos en scripts de Bitcoin no es factible. Por lo tanto, es necesario considerar las optimizaciones específicas para el escenario de Bitcoin:
Este artículo primero presenta las limitaciones de los scripts de Bitcoin y discute el uso de compromisos de Bitcoin para superar la limitación sin estado de UTXO, el uso de Taproot para superar las limitaciones del espacio de script, el uso de salidas de conector para evitar las restricciones del método de gasto de UTXO y el uso de contratos para superar las limitaciones de pre-firma. Luego proporciona una descripción general y un resumen completo de las características de las pruebas de fraudes y las pruebas de validez, las características de las pruebas de fraude con permisos y sin permisos, las diferencias entre pruebas de fraude de una sola ronda y de múltiples rondas, y la tecnología de división de scripts de Bitcoin.