Artículo del Blog
Autor
Oleg Andreev
Fecha de publicación
Contratos inteligentes
Zkvm
Siempre buscamos maneras de mejorar Stellar: más escalable, más eficiente, más flexible. Usualmente eso significa trabajar directamente en el protocolo. Pero a veces adoptamos un enfoque de “pizarra en blanco” e imaginamos maneras completamente diferentes para que funcione una blockchain. Investigaciones de cadenas laterales como esta nos ayudan a desarrollar características y aprender cosas que podemos aplicar de nuevo a Stellar.
Estamos emocionados de anunciar el último ejemplo de tal investigación, al que llamamos ZkVM, el máquina virtual de conocimiento cero. ZkVM es una arquitectura de blockchain multi-activo experimental para contratos inteligentes escalables y confidenciales.
Las transacciones de ZkVM contienen restricciones programables sobre datos y activos encriptados. Individuos y organizaciones pueden realizar sus transacciones y acuerdos financieros personalizados directamente en el registro compartido, en lugar de mantenerlos en bases de datos aisladas.
La blockchain de ZkVM utiliza un modelo de datos compacto que cabe en unos pocos kilobytes. La verificación de transacciones es altamente paralelizable y toma 1–2 ms por núcleo de CPU. Los nodos pueden arrancar instantáneamente desde una instantánea verificada por la red. Casi cualquier dispositivo informático puede ejecutar un nodo completo, sin depender de infraestructura intermedia y terceros de confianza.
Todas las blockchains existentes tienen limitaciones inherentes:
ZkVM está diseñado desde cero para ser un libro mayor multi-activo que se puede usar con el Protocolo de Consenso de Stellar. Puede procesar grandes volúmenes de transacciones, permitir un uso más amplio de los validadores completos, proteger datos confidenciales y apoyar la creación de un protocolo personalizado sobre las reglas de la blockchain, sin tener que actualizar la red con características adicionales. Stellar se beneficiaría de cualquiera de estas características.
Así es como funciona ZkVM:
ZkVM surgió de nuestro trabajo anterior sobre TxVM, que a su vez fue influenciado por el diseño de Bitcoin y Ethereum.
ZkVM utiliza un formato de transacción novedoso pionero en TxVM: una transacción se representa como un programa que manipula el flujo de activos directamente como objetos de primera clase y emite las actualizaciones necesarias al estado de la blockchain en forma de un registro de transacciones. Luego, el registro de transacciones se puede aplicar al estado del sistema por separado de la validación de transacciones, lo que permite un diseño altamente escalable, al tiempo que ofrece un entorno potente, pero seguro, para contratos personalizados.
Para ayudar a escalar el estado de la blockchain y permitir la transferencia de valor confidencial, ZkVM utiliza un modelo utxo para representar saldos: todos los saldos están representados por un conjunto de “outputs de transacción no gastados” (abreviado como utxos) que se pueden crear y destruir. Cada transacción demuestra la propiedad de los valores de activos en los outputs previamente creados, destruyendo esos outputs, luego emite, divide y fusiona los valores, y crea nuevos outputs no gastados.
Los outputs no gastados se almacenan de manera compacta como raíces de merkle a través del esquema Utreexo, lo que disminuye drásticamente los requisitos de almacenamiento y permite una implementación mucho más amplia de nodos completamente validadores.
En ZkVM cada output es un contrato persistido en el estado de la blockchain. Cada contrato contiene un número arbitrario de ítems que podrían ser valores o parámetros de datos, protegidos por un predicado — una condición que debe satisfacerse para desbloquear los ítems.
ZkVM utiliza una variante del diseño Taproot para permitir desbloquear los contratos con ya sea una firma criptográfica ordinaria firma, o revelando y ejecutando un sub-programa incrustado que verifica condiciones personalizadas.
Los contratos en ZkVM son bloques de construcción versátiles para los protocolos de nivel superior como cuentas, libros de órdenes y canales de pago. Esto podría permitir que una plataforma como Stellar mueva decisiones de diseño en tales protocolos fuera de la capa crítica de consenso, habilitando la experimentación rápida con una amplia gama de aplicaciones descentralizadas.
El uso del esquema Taproot en predicados ofrece un buen equilibrio entre confidencialidad y personalización: la lógica del contrato no necesita ser revelada si todas las partes de un contrato cooperan, pero aún proporciona seguridad en caso de que no lo hagan. Cuando la lógica del contrato tiene que ser revelada, los datos (como saldos, precios y otros parámetros del contrato) aún permanecen secretos debido al uso de un sistema de restricciones verificado en conocimiento cero.
ZkVM se construye sobre la implementación de vanguardia del sistema de demostración de conocimiento cero Bulletproofs. Los valores y datos están encriptados por defecto y representados como compromisos de Pedersen. ZkVM permite a los usuarios especificar expresiones aritméticas y lógicas sobre valores secretos que se convierten automáticamente en un sistema de restricciones Bulletproofs.
Las transacciones más simples contienen una única instrucción cloak que emite restricciones probando la distribución correcta de M valores de entrada en N valores de salida. Las condiciones de contrato personalizadas pueden imponer restricciones adicionales sobre los valores, como verificar el pago de interés requerido en un préstamo completamente en conocimiento cero. ZkVM admite un conjunto completo de instrucciones aritméticas y booleanas que permiten expresar condiciones arbitrarias comúnmente encontradas en contratos financieros.
El marco de Bulletproofs no requiere configuración de confianza y permite que cada transacción construya de manera eficiente un sistema de restricciones único sobre la marcha, permitiendo a los autores de transacciones crear nuevos protocolos sobre ZkVM sin la necesidad de actualizar toda la red para cada nueva característica.
Las transacciones resultantes son compactas y se pueden verificar de manera muy eficiente. Las transacciones pequeñas tienen un tamaño de alrededor de 1–1.5 Kb, mientras que los pagos agregados tienen un costo marginal de solo 200 bytes por par de entrada-salida. La verificación es altamente paralelizable y toma aproximadamente 1 ms por salida. Como resultado, ZkVM no requiere que los usuarios sacrifiquen seguridad por eficiencia: todos los datos pueden estar encriptados por defecto y revelados solo a las partes autorizadas según sea necesario.
Stellar se beneficiará enormemente del experimento en contratos inteligentes confidenciales, ya que abre puertas a una gama más amplia de nuevas aplicaciones.
Puedes encontrar más detalles sobre ZkVM en nuestro documento técnico (también disponible como PDF para aquellos que buscan una experiencia de revista brillante).
Desarrollamos la VM y todos sus sub-protocolos bajo el paraguas del proyecto de código abierto Project Slingshot. Comenzó con el equipo de protocolo en Interstellar y ahora está liderado por Stellar Development Foundation. Invitamos a todos a participar: por favor haz preguntas, reporta problemas y realiza solicitudes de extracción en nuestro repositorio.