Para la escalabilidad de Bitcoin, las principales tecnologías incluyen canales de estado, cadenas laterales y validación del lado del cliente. Los canales de estado proporcionan una solución de pago segura y diversa pero tienen capacidad limitada para verificar cálculos arbitrariamente complejos. Esta limitación reduce su aplicabilidad en varios escenarios que requieren lógica condicional y interacciones complejas. Las cadenas laterales admiten una amplia gama de aplicaciones y ofrecen diversidad más allá de las capacidades de Bitcoin, pero tienen una seguridad más baja. Esta diferencia de seguridad se deriva del uso por parte de las cadenas laterales de mecanismos de consenso independientes, que son mucho menos robustos que el mecanismo de consenso de Bitcoin. La validación del lado del cliente, utilizando el modelo UTXO de Bitcoin, puede manejar transacciones más complejas, pero carece de verificación bidireccional y restricciones con Bitcoin, lo que conduce a una seguridad más baja. El diseño fuera de la cadena de los protocolos de validación del lado del cliente depende de servidores o infraestructura en la nube, lo que podría conducir a la centralización o a la censura potencial a través de servidores comprometidos. El diseño fuera de la cadena de la validación del lado del cliente también introduce más complejidad en la infraestructura de la cadena de bloques, lo que podría conducir a problemas de escalabilidad.
En diciembre de 2023, Robin Linus, el líder del proyecto ZeroSync, publicó un libro blanco titulado "BitVM: Calcula cualquier cosa en Bitcoin”, lo que generó considerable reflexión sobre cómo mejorar la programabilidad de Bitcoin. El documento propone una solución de contrato Bitcoin completa de Turing que puede ejecutar cualquier cálculo complejo en Bitcoin sin cambiar las reglas de consenso de la red ni alterar los principios fundamentales de Bitcoin. BitVM aprovecha los scripts de Bitcoin y Taproot para implementar Rollups optimistas. Utiliza firmas de Lamport (también conocidas como compromiso de bit) para establecer conexiones entre dos UTXOs de Bitcoin, permitiendo scripts de Bitcoin con estado. Un programa grande se compromete dentro de una dirección Taproot, y los operadores y validadores participan en extensas interacciones fuera de la cadena, dejando una huella mínima en la cadena de bloques. Si ambas partes cooperan, se puede ejecutar cualquier cálculo complejo y con estado fuera de la cadena sin dejar rastro en la cadena de bloques. Sin embargo, si las partes no cooperan, se requiere una ejecución en cadena en caso de disputa. Por lo tanto, BitVM expande significativamente los casos de uso potenciales de Bitcoin, permitiéndole servir no solo como moneda, sino también como una plataforma de verificación para varias aplicaciones descentralizadas y tareas computacionales complejas.
Sin embargo, a pesar de las ventajas de la tecnología BitVM en la escalabilidad de Bitcoin, todavía se encuentra en las primeras etapas y enfrenta algunos problemas de eficiencia y seguridad, como: (1) Los desafíos y respuestas requieren múltiples interacciones, lo que conlleva altas tarifas de transacción y largos períodos de desafío; (2) Las firmas únicas de Lamport tienen longitudes de datos largas, lo que hace necesario reducir el tamaño de los datos; (3) La complejidad de las funciones hash requiere funciones hash amigables con Bitcoin para reducir costos; (4) Los contratos BitVM existentes son grandes y la capacidad del bloque de Bitcoin es limitada, por lo que el uso de scripts sin scripts podría ayudar a lograr BitVM de Scripts Sin Scripts, ahorrando espacio en el bloque de Bitcoin y mejorando la eficiencia de BitVM; (5) BitVM actual opera en un modelo de permisos, con desafíos iniciados solo por miembros del consorcio y limitados a dos partes, lo que debería ampliarse a un modelo de desafío multiparte sin permisos para reducir aún más las suposiciones de confianza. Para abordar estos problemas, el documento sugiere varias ideas de optimización para mejorar la eficiencia y seguridad de BitVM.
Las computaciones de BitVM ocurren fuera de la cadena, mientras que la verificación de estas computaciones tiene lugar en la cadena. Dada la limitación de 1MB de los bloques de Bitcoin, cuando se necesita la verificación de computaciones complejas, la tecnología OP puede ser utilizada en un modo de desafío-respuesta para soportar una mayor complejidad en la verificación de computaciones.
Similar to Optimistic Rollup and the MATT proposal (Merkelize All The Things), the sistema BitVM se basa en pruebas de fraude y protocolos de desafío-respuesta pero no requiere cambios en las reglas de consenso de Bitcoin. Los primitivos subyacentes de BitVM son simples, principalmente basados en cerraduras hash, cerraduras temporales y árboles de Taproot grandes.
Los probadores se comprometen con el programa byte por byte, pero verificar todas las computaciones en la cadena sería prohibitivamente costoso. Por lo tanto, los verificadores realizan una serie de desafíos cuidadosamente diseñados para refutar sucintamente las afirmaciones falsas del probador. Los probadores y verificadores firman conjuntamente una serie de transacciones de desafío y respuesta para resolver disputas, lo que permite la verificación de computaciones generales en Bitcoin.
Los componentes clave de BitVM incluyen:
Suponiendo que el recuento máximo de pasos para el programa de desafío de BitVM es de 2^{32}, necesitaría aproximadamente 17 GB de memoria (2^{32}×4 bytes). En el peor de los casos, alrededor de 40 rondas de desafíos y respuestas podrían llevar aproximadamente seis meses, con un tamaño total de script de alrededor de 150 KB. Tal escenario proporcionaría incentivos insuficientes, pero rara vez ocurre en la práctica.
Usar Pruebas de Conocimiento Cero para reducir el número de desafíos en BitVM podría mejorar su eficiencia. Según la teoría de Prueba de Conocimiento Cero, si los datos satisfacen un algoritmo F, entonces la prueba satisface el algoritmo de verificación Verificar, dando como resultado Verdadero. Por el contrario, si los datos no satisfacen F, entonces la prueba no satisfará Verificar, dando como resultado Falso. En el sistema BitVM, si el desafiante no acepta los datos del probador, se inicia un desafío.
Para el algoritmo F, utilizando un enfoque de búsqueda binaria, asumiendo que se necesitan 2^n iteraciones para encontrar el punto de error. Si la complejidad del algoritmo es demasiado alta, n es grande y tarda mucho tiempo en completarse. Sin embargo, la complejidad del algoritmo de verificación de Prueba de Conocimiento Cero Verify es fija. Al revelar públicamente la prueba y el proceso de verificación Verify, es posible ver una salida de Falso. La ventaja de las Pruebas de Conocimiento Cero radica en la menor complejidad computacional requerida para abrir el algoritmo de verificación Verify en comparación con abrir el algoritmo original F utilizando búsqueda binaria. Por lo tanto, con las Pruebas de Conocimiento Cero, BitVM ya no desafía al algoritmo original F, sino más bien al algoritmo de verificación Verify, reduciendo el número de rondas de desafío y acortando el período de desafío.
Aunque la validez de las Pruebas de Conocimiento Cero y las Pruebas de Fraude se basa en diferentes suposiciones de seguridad, se pueden combinar para construir una Prueba de Fraude ZK e implementar una Prueba ZK a Pedido. A diferencia de un ZK Rollup completo, el modelo a Pedido requiere una Prueba ZK solo cuando se hace un desafío, manteniendo un diseño optimista en el que se asume que el estado generado es válido hasta que se cuestione. Si un estado no se cuestiona, no se necesita una Prueba ZK. Sin embargo, si se plantea un desafío, se debe generar una Prueba ZK para la corrección de todas las transacciones dentro del bloque desafiado. En el futuro, podría ser posible generar Pruebas de Fraude ZK para instrucciones individuales en disputa, evitando el costo computacional de generar continuamente Pruebas ZK.
Según las reglas de consenso, el tamaño máximo para las transacciones heredadas (no Segwit) es de 1MB, lo que podría llenar un bloque entero. Sin embargo, el límite de normalidad para las transacciones heredadas está establecido en 100kB. Para las transacciones Segwit, el tamaño máximo permitido por las reglas de consenso es de 4MB, conocido como el límite de peso, pero su límite de normalidad es de 400kB.
Las firmas de Lamport son un componente fundamental de BitVM, y reducir la longitud de las firmas y claves públicas ayuda a disminuir el tamaño de los datos de transacción, reduciendo así las tarifas de transacción. Las firmas de un solo uso de Lamport requieren una función hash (como una función de permutación unidireccional f). En un esquema de firma de un solo uso de Lamport, la longitud del mensaje es de v bits, y tanto la clave pública como la longitud de las firmas son de 2v bits. Estas largas firmas y claves públicas consumen una cantidad significativa de gas de almacenamiento. Por lo tanto, es necesario explorar esquemas de firma que puedan reducir la longitud de las firmas y claves públicas. En comparación con las firmas de un solo uso de Lamport, las firmas de un solo uso de Winternitz reducen en gran medida las longitudes de las firmas y claves públicas, pero aumentan la complejidad computacional de firma y verificación.
En el esquema de firma de un solo uso de Winternitz, una función especial P mapea un mensaje de v bits a un vector s de longitud n, con cada elemento de s tomando un valor en {0,...,d}. El esquema de firma de un solo uso de Lamport es un caso especial del esquema de Winternitz, donde d=1. En el esquema de Winternitz, la relación entre n, d y v es aproximadamente n≈v/log2(d+1). Cuando d=15, n≈(v/4)+1. Para una firma de Winternitz con n elementos, las longitudes de clave pública y firma son cuatro veces más cortas que las del esquema de firma de un solo uso de Lamport, pero la complejidad de verificación es cuatro veces mayor. Utilizando d=15, v=160, f=ripemd160(x) en BitVM para firmas de un solo uso de Winternitz puede reducir el tamaño de compromiso de bits en un 50%, reduciendo así las comisiones de transacción de BitVM en al menos un 50%. En el futuro, al optimizar la implementación actual de script de Bitcoin de Winternitz, se podría explorar esquemas de firma de un solo uso más compactos expresables en el script de Bitcoin.
Actualmente, la red Bitcoin no admite OP_CAT, lo que hace imposible concatenar cadenas para la verificación de la ruta de Merkle. Por lo tanto, es necesario implementar una función hash compatible con Bitcoin utilizando el script Bitcoin existente, de la manera más eficiente en tamaño tanto para el tamaño del script como para el tamaño del testigo del script, para admitir la verificación de prueba de inclusión de Merkle.
BLAKE3 es una versión optimizada de la función hash BLAKE2 e introduce un modo de árbol Bao. En comparación con BLAKE2s, el número de rondas de la función de compresión se ha reducido de 10 a 7. La función hash BLAKE3 divide su entrada en trozos de 1024 bytes, siendo el último trozo posiblemente más corto pero no vacío. Cuando hay solo un trozo, sirve como nodo raíz y único nodo del árbol. Estos trozos se disponen como nodos hoja de un árbol binario, y cada trozo se comprime de forma independiente.
Cuando BitVM se utiliza para verificar pruebas de inclusión de Merkle, la entrada para la operación de hash consiste en dos valores de hash de 256 bits concatenados, totalizando 64 bytes. Con la función de hash BLAKE3, estos 64 bytes pueden caber en un solo fragmento, lo que significa que la operación de hash BLAKE3 solo necesita aplicar la función de compresión una vez a este solo fragmento. En la función de compresión de BLAKE3, se requieren siete funciones de ronda y seis funciones de permutación.
BitVM ya ha implementado operaciones básicas como XOR, adición modular y desplazamiento de bits a la derecha basado en valores u32, lo que facilita ensamblar una función hash BLAKE3 usando el script de Bitcoin. La pila utiliza cuatro bytes separados para representar palabras u32, lo que facilita la adición de u32, el XOR bit a bit de u32 y las rotaciones bit a bit de u32 requeridas por BLAKE3. La función hash BLAKE3 en el script de Bitcoin actualmente tiene alrededor de 100 kB, suficiente para construir una versión de juguete de BitVM.
Además, al dividir estos códigos BLAKE3, el Verificador y el Probador pueden reducir significativamente los requisitos de datos en cadena al dividir la ejecución en el juego de desafío-respuesta en lugar de realizarlo en su totalidad. Por último, implementar funciones hash como Keccak-256 y Grøstl en el script de Bitcoin identificará la función hash más amigable con Bitcoin y explorará otras nuevas funciones hash amigables con Bitcoin.
Las ventajas de Scriptless Scripts incluyen funcionalidad, privacidad y eficiencia:
Los Scripts sin guiones pueden usarse para implementar compromisos de puertas lógicas en el circuito BitVM, ahorrando espacio de script BitVM y mejorando la eficiencia de BitVM, utilizando firmas multi-firma de Schnorr y firmas de adaptador en lugar de proporcionar valores hash y preimágenes como la solución BitVM. Aunque los esquemas actuales de Scripts sin guiones pueden reducir el espacio de script BitVM, requieren una interacción extensa entre el probador y el desafiante para combinar claves públicas. Las futuras mejoras tendrán como objetivo integrar Scripts sin guiones en módulos funcionales específicos de BitVM.
Un desafío multiparte sin permisos permite a cualquier persona participar sin una lista blanca, lo que significa que los usuarios pueden retirarse de L2 sin la participación de ningún tercero de confianza. Además, cualquier usuario que desee participar en el protocolo de desafío de OP puede cuestionar y eliminar retiros inválidos.
Expandir BitVM en un modelo de desafío multiparte sin permisos implica abordar los siguientes ataques:





