Implemente contratos inteligentes en Bitcoin simulando la máquina virtual de Bitcoin.

Enlace original: https://github.com/atomicals/avm-whitepaper/blob/main/avm.md

Resumen

Hasta ahora, todos los protocolos de activos digitales superpuestos en Bitcoin siguen reglas fijas para crear y transferir activos digitales. Al permitir a los programadores definir la lógica de la máquina de estados para crear y gestionar estas reglas, podemos desarrollar contratos inteligentes totalmente flexibles (completos de Turing) para activos digitales superpuestos. Proponemos una solución que utiliza Bitcoin como base de datos global, almacena código de contrato inteligente en transacciones y ejecuta estos códigos en un entorno sandbox superponiendo un indexador de activos digitales. El conjunto de instrucciones de código de operación Bitcoin Script original se adoptó como lenguaje de programación porque tiene todas las propiedades necesarias para una ejecución eficiente en entornos con recursos limitados. Los hashes de estado se utilizan para rastrear transacciones superpuestas y proporcionar una manera conveniente para que los participantes verifiquen su estado de sincronización. La solución que proponemos es un paso natural en la evolución del protocolo de activos digitales superpuesto de Bitcoin y sirve como plataforma para probar el código de operación original de Bitcoin, demostrando su flexibilidad y seguridad.

1. Introducción

El sistema de efectivo electrónico peer-to-peer de Bitcoin [1] se utilizó originalmente principalmente como depósito de valor, por lo que se le llamó "oro digital", y su función como medio de intercambio era relativamente menor. Antes de que Satoshi Nakamoto se fuera, desactivó muchos de los códigos de operación (Op Codes) originales utilizados para secuencias de comandos avanzadas por razones de seguridad, específicamente para evitar posibles ataques de denegación de servicio. Estos códigos de operación deshabilitados incluyen principalmente operaciones aritméticas y binarias, que son operaciones fundamentales en las que confían los desarrolladores en los entornos de programación más básicos. Sin soporte para estos códigos de operación críticos, la funcionalidad disponible para los desarrolladores de aplicaciones de Bitcoin y los usuarios finales es muy limitada. En particular, el código de operación "OP_CAT" (conexión de datos), que podría haberse utilizado para crear restricciones personalizadas de consumo y transferencia, los llamados contratos. Por lo tanto, debido a estas decisiones históricas, Bitcoin no logró convertirse en la poderosa plataforma de contratos inteligentes originalmente imaginada por Satoshi Nakamoto, y solo pudo existir como una especie de oro digital. En resumen, debido a la desactivación de estos códigos de operación clave, Bitcoin tiene que existir sólo como oro digital y no puede convertirse en un sistema de contrato inteligente completo para proteger este sistema de efectivo electrónico emergente.

“La naturaleza de Bitcoin es que una vez que se lanza la versión 0.1, su diseño central queda fijo de por vida. Debido a esto, tengo la intención de diseñarlo para que admita todos los tipos de transacciones que se me ocurran. El problema es que todos los tipos de transacciones lo requieren. código de soporte especial y campos de datos, se utilicen o no, y solo pueden manejar una situación específica a la vez. Esto puede generar una sobrecarga excesiva para casos especiales. Las secuencias de comandos proporcionan una solución al problema para que ambas partes puedan describir. su transacción como un predicado que es evaluado por la red de nodos." - Satoshi Nakamoto [2]

Desde que Bitcoin deshabilitó por primera vez algunos códigos de operación, se han introducido una variedad de protecciones. Uno de los límites importantes es MAX_SIGOPS, que limita la cantidad máxima de operaciones de firma permitidas en cualquier transacción en particular. Al mirar hacia atrás en la historia, podemos observar el desempeño de estos códigos de operación originales en versiones bifurcadas de Bitcoin como BSC y BSV. Estas bifurcaciones reactivaron la mayoría de los códigos de operación originales hace unos años. Hasta ahora, estos códigos de operación no han causado ningún problema de seguridad ni ataques de denegación de servicio y han causado poca controversia. En cambio, amplían enormemente el potencial de desarrollo de estas bifurcaciones de Bitcoin.

A pesar de las limitaciones actuales de los contratos inteligentes de Bitcoin, han surgido varios protocolos de superposición que permiten crear y transferir activos digitales en el propio Bitcoin. El primer estándar de token no fungible convencional fue un protocolo llamado Ordinals, seguido de cerca por BRC20, un estándar de token fungible. Poco después, surgieron más protocolos de activos digitales, como Atomics Digital Objects y ARC20, que utiliza unidades satoshi como unidades de cuenta, así como Bitcoin Stamp y el reciente protocolo de token fungible Runes (lanzado en abril de 2024). Esta generación de protocolos superpuestos básicamente crea y administra activos digitales a través de transacciones de Bitcoin, mientras que el indexador de protocolos superpuestos rastrea y administra el ciclo de vida de los activos digitales leyendo datos directamente de transacciones especiales de Bitcoin. Lo que falta en estos protocolos es la capacidad de los desarrolladores de personalizar el comportamiento de los activos digitales; hasta ahora, no ha habido una manera de crear contratos inteligentes avanzados para estos protocolos superpuestos.

Proponemos un método para crear y ejecutar contratos inteligentes para varios activos digitales superpuestos mediante la simulación de la máquina virtual Bitcoin y su intérprete de script. En este enfoque, la cadena de bloques de Bitcoin no solo proporciona marcas de tiempo y datos para los programas de contratos inteligentes almacenados en la cadena, sino que, al mismo tiempo, la ejecución de estos programas también se realiza en un entorno de pruebas a través de varios indexadores de protocolos superpuestos. Los nodos indexadores del protocolo superpuesto son administrados conjuntamente por desarrolladores de aplicaciones, proveedores de servicios y usuarios, formando un consenso espontáneo. Este concepto y su tecnología son ampliamente aplicables a todos los protocolos de superposición, con los ajustes apropiados al respectivo indexador de protocolos de superposición.

Mostramos el poder y la elegancia del diseño original de Bitcoin. Este nuevo paradigma sirve como plataforma para probar varios códigos de operación, aunque uno para protocolos de superposición de activos digitales, y esperamos que Bitcoin eventualmente pueda volver a habilitar todos los códigos de operación originales, liberando todo el potencial de la creación de Satoshi.

2. Bitcoin como base de datos global

La red Bitcoin es esencialmente un servidor de marca de tiempo distribuido diseñado para resolver el problema del doble gasto. El sistema está diseñado no sólo para la transmisión y almacenamiento de transacciones monetarias, sino también para almacenar datos como facturas y archivos de gran tamaño. Satoshi incluyó varios códigos de operación como OP_RETURN, que permite agregar datos arbitrarios, y OP_PUSHDATA4, que permite enviar datos hasta 4 GB. Incluso la primera transacción de Bitcoin, la transacción de Genesis Coinbase, incluía datos textuales arbitrarios: “The Times 03/Ene/2009 Canciller al borde del segundo rescate para los bancos”.

A lo largo de los años, ha habido repetidos intentos de evitar que Bitcoin se utilice como medio de almacenamiento de datos limitando el tamaño máximo de envío a 520 bytes y limitando el uso de OP_RETURN a 40 bytes (posteriormente ampliado a 80 bytes). De hecho, esto ha sido visto como un vector de ataque que podría causar que la “inflación de blockchain” se salga de control y desplace usos puramente monetarios. Esto parecía una medida de protección razonable en ese momento.

En los últimos años, los desarrolladores de Bitcoin han reintroducido efectivamente la capacidad de almacenar grandes cantidades de datos arbitrarios similares a las versiones anteriores de Bitcoin con la introducción de las actualizaciones Segregated Witness (SegWit) y Taproot. Los desarrolladores de aplicaciones aprovecharon rápidamente esta oportunidad y aprovecharon Bitcoin como un libro de contabilidad global inmutable para almacenar datos valiosos. El mercado de activos digitales de Bitcoin ha crecido exponencialmente, alcanzando límites de mercado multimillonarios y generando cientos de millones de dólares en tarifas de red para los mineros en un período de tiempo relativamente corto.

3. Protocolo de superposición

Hal Finney propuso y predijo el concepto de utilizar Bitcoin como una base de datos global, descentralizada y consistente para soportar "la superposición de otros protocolos". La idea básica consiste en crear activos superpuestos mediante la señalización y la asociación de estos activos con historiales comerciales específicos. Este mecanismo añade una nueva dimensión a Bitcoin como sistema monetario, en el sentido de que los propios resultados de las transacciones pueden representar cualquier otro tipo de activo digital, como tokens, puntos, medios digitales o incluso derechos de representación para activos físicos.

“En una discusión sobre el hilo BitDNS, planteé la idea de superponer otros protocolos en Bitcoin. Desde cierta perspectiva, Bitcoin es una base de datos global, descentralizada pero consistente.

Esta base de datos se utiliza principalmente para registrar la transferencia de monedas, pero puede utilizarse para muchos otros fines. Muchas aplicaciones pueden beneficiarse de una base de datos globalmente consistente. Según mi descripción de BitDNS, este mecanismo se implementará mediante el uso de un misterioso y complejo sistema de "script" para agregar datos adicionales a las transacciones regulares de Bitcoin. Estos datos aparecerán como NOP (sin instrucción de operación) para el cliente actual y serán ignorados, pero los clientes conscientes del protocolo de superposición examinarán los datos adicionales dentro de estos bloques NOP y los interpretarán de acuerdo con el protocolo de superposición.

Específicamente, podría imaginarme usar OP_NOP1 para marcar los datos superpuestos, luego usar OP_PUSHDATA para enviar los datos específicos, luego usar OP_DROP para eliminar los datos de la pila y, finalmente, ejecutar el código de operación de transacción normal. Esto no tiene ningún impacto en los clientes habituales y parece una transacción normal (puede ser una transacción virtual, como transferirse 0,01 Bitcoin a usted mismo), pero el código que reconoce el protocolo de superposición reconocerá que se trata de una transacción de acuerdo.

Por ejemplo, Bitcoin se puede utilizar como un servicio económico de sellado de tiempo, que le permite demostrar que un documento existía antes de una fecha determinada. Todo lo que necesita hacer es crear una transacción ficticia para usted y modificar el cliente para realizar una operación OP_PUSHDATA, insertar el hash del documento en ella y luego eliminarlo de la pila con OP_DROP. Este hash vivirá permanentemente en la cadena de bloques y servirá como prueba de que el documento existía en esa fecha. ”——Hal Finney[3]

El primer protocolo de superposición que obtuvo un uso generalizado fue la teoría de los ordinales. Según el manual de Ordinals, un solo satoshi puede grabar cualquier contenido, creando un artefacto digital único nativo de Bitcoin. Estos artefactos son duraderos, inmutables, seguros y descentralizados y pueden almacenarse en billeteras de Bitcoin y transferirse mediante transacciones de Bitcoin.

En 2023, los desarrolladores se dieron cuenta de que se necesitaba un estándar de token homogéneo en Bitcoin, por lo que desarrollaron BRC20. BRC20 utiliza la teoría de Ordinals para construir un modelo de cuenta superpuesta asociado con la dirección de la billetera, lo que le permite enviar y recibir unidades de token. De hecho, crea un protocolo de superposición en capas basado en Ordinals, que a su vez es un protocolo de superposición basado en Bitcoin.

A principios de 2024, surgió un nuevo protocolo llamado Atomics Protocol Digital Objects en respuesta al crecimiento continuo del mercado de estándares de tokens y tecnología de indexación. Como se describe en la guía de Atomics, el protocolo Atomics es un protocolo simple pero flexible para acuñar, transferir y actualizar objetos digitales (comúnmente conocidos como transacciones no gastadas) en cadenas de bloques como Bitcoin que utilizan salidas de transacciones no gastadas (UTXO). ). Atómico (o "atómico") es una forma de organizar una cadena de propiedad digital según unas pocas reglas simples. El protocolo Atomics también incluye un estándar de token fungible llamado ARC20, donde cada unidad de token está respaldada por al menos una unidad satoshi y opera utilizando la misma arquitectura UTXO que el propio Bitcoin.

A principios de 2024, se lanzó otro protocolo de superposición llamado Runes, que se implementó directamente en el indexador de Ordinals para completar la funcionalidad de la teoría de Ordinals y, finalmente, incluir también un estándar de token fungible.

4. Máquina de estados

Hasta ahora, todos los protocolos de superposición de Bitcoin funcionan en base a máquinas de estados fijos o predefinidos. Hay dos componentes principales de estos protocolos superpuestos: los responsables de la señalización para crear activos digitales y las reglas que rigen la transferencia de esos activos digitales. Estas reglas de la máquina de estado están codificadas en los respectivos indexadores de protocolos de superposición y los desarrolladores no pueden personalizar las reglas de creación o transferencia.

Proponemos un modelo de programación de máquina de estados dinámicos que permite a los desarrolladores definir las reglas de creación y transferencia de sus activos digitales con total autonomía. Básicamente, esto permite a los desarrolladores definir sus propias reglas de protocolo de metasuperposición sin tener que crear un nuevo indexador de protocolo y, en su lugar, aprovechar los indexadores de protocolos de superposición existentes.

La idea básica es permitir a los desarrolladores almacenar su código de contrato inteligente en la cadena de bloques, haciéndolo legible e interpretable por todas las partes involucradas. Al almacenar código en cadena, garantiza que la lógica se ejecute de la misma manera en partes distribuidas y no conectadas, lo que facilita la sincronización del estado. El lenguaje de programación de contratos inteligentes debe tener los siguientes atributos importantes:

  • Tiempo de ejecución determinista y predecible.

  • Permite flexibilidad arbitraria (integridad de Turing) [4].

  • y la capacidad de ejecutarse eficientemente en sistemas con recursos limitados.

Como puede verse en estos requisitos, Bitcoin Script es muy adecuado para usarse como un conjunto de instrucciones que define reglas para la creación y transferencia de activos digitales. La clave es que debe admitir cualquier tipo de transición de estado y al mismo tiempo limitar el tiempo de ejecución para evitar ataques de denegación de servicio y bucles infinitos de programas. El script de Bitcoin es Turing completo, es un autómata pushdown de dos pilas (PDA de 2 pilas). Debido al uso de tecnología de desenrollado de bucles, no se permiten bucles, por lo que el tiempo de ejecución es predecible y está linealmente relacionado con la duración del programa. Características.

El código del programa de contrato inteligente se almacena en las transacciones de Bitcoin y el indexador del protocolo de superposición carga el código en la memoria y lo ejecuta de manera consistente. Todas las partes involucradas pueden ejecutar la misma lógica y lograr las mismas transiciones de estado.

5. Consenso sobre el estatus

La sincronización de estados se puede lograr mediante hash de estados (statehash), un mecanismo que comunica el estado interno del indexador de protocolos de superposición a observadores externos. Al exponer los hash de estado, las partes distribuidas pueden saber fácilmente si siguen las mismas reglas y están sincronizadas entre sí.

Dado que todos los datos se almacenan en la cadena y tienen una marca de tiempo en orden cronológico, no hay necesidad de mecanismos complejos de sincronización de compromiso de estado. Esto permite que cualquiera obtenga resultados de estado consistentes mientras sigue las mismas reglas.

6. Activos digitales virtuales

Cualquier protocolo de superposición puede adoptar esta tecnología de programación de máquina de estados dinámicos, lo que permite virtualizar y materializar los activos digitales en contratos inteligentes. Básicamente, esto significa que podemos pensar en el concepto de depósitos y retiros como una convención, ya que todo lo demás es una convención para construir el estado del indexador en función del historial completo de transacciones en la cadena de bloques.

En BRC20, un saldo simbólico es una representación abstracta de una cuenta y puede describirse como un activo digital virtual, es decir, un activo digital encima de otro activo digital (Bitcoin). Los tokens Atomics ARC20 son abstracciones que mantienen afinidad con las unidades satoshi subyacentes, pero también son un activo digital virtual. Más precisamente, se denominan “activos digitales virtuales” porque existen como una abstracción sobre otro activo digital (Bitcoin).

Ampliando aún más esta analogía, podemos definir una máquina de estado que permite depositar cualquier tipo de token en el contrato y luego retirarlo, de manera similar a cómo el lenguaje de programación Solidity de la cadena de bloques Ethereum permite marcar los métodos como pagaderos, lo que indica que Ether. se puede pagar con este método y recuperar más tarde de acuerdo con las reglas del programa de contrato inteligente. El seguimiento y la gestión de estos activos digitales se pueden lograr a través de códigos de operación especiales como OP_FT_WITHDRAW y OP_NFT_WITHDRAW, así como un mecanismo que permite que los métodos pagaderos en el estado de contrato inteligente acepten tokens.

7. Arquitectura del sistema

Para garantizar una ejecución coherente de los scripts, el intérprete de scripts se configura en un entorno de pruebas bien delimitado con enlaces estáticos o dinámicos. Esta configuración permite que diferentes lenguajes y entornos de programación invoquen el sandbox y obtengan resultados consistentes, asegurando una ejecución consistente.

El intérprete de sandbox es una versión simplificada del intérprete de scripts de Bitcoin que difiere en algunos aspectos clave, como el hecho de que puede aceptar directamente scripts de bloqueo de ejecución (scriptPubKey) y parámetros de script de desbloqueo (scriptSig), así como algunos otros que ayudar a virtualizar parámetros útiles para la gestión de activos digitales. Están diseñados para simplificar y mejorar el procesamiento y la gestión de activos digitales virtuales para que puedan operar en la red Bitcoin de manera más eficiente y segura.

8. Conclusión

Proponemos un sistema que implementa contratos inteligentes que superponen activos digitales en Bitcoin simulando la máquina virtual de Bitcoin. Hasta la fecha, los activos digitales superpuestos en Bitcoin han estado completamente sujetos a reglas de transición estatales predefinidas que solo permiten la creación y transferencia de estos activos. Para abordar esta limitación, desarrollamos una tecnología general que utiliza Bitcoin como base de datos global, almacena código de contrato inteligente en transacciones y ejecuta estos códigos en un entorno de ejecución de espacio aislado superpuesto con un indexador de activos digitales.

El conjunto de instrucciones original de Bitcoin Script es muy poderoso porque implementa un autómata pushdown de dos pilas (PDA de 2 pilas), que se ha demostrado que es completo en Turing. Nuestro sistema utiliza hashes de estado para que todos los participantes puedan verificar fácilmente que el estado de su indexador esté sincronizado correctamente. Este sistema está diseñado para ser extremadamente flexible, no solo siendo una extensión natural de los protocolos superpuestos existentes, sino también demostrando el inmenso potencial del lenguaje de programación Bitcoin original. Este enfoque proporciona una funcionalidad más avanzada para superponer protocolos dentro del ecosistema de Bitcoin, lo que le permite admitir aplicaciones de contratos inteligentes más complejas.

referencias

[1] Satoshi Nakamoto, "Bitcoin: un sistema de efectivo electrónico entre pares" https://bitcoin.org/bitcoin.pdf, 2008.

[2] Satoshi Nakamoto, "La naturaleza de Bitcoin es tal que una vez que se lanzó la versión 0.1, el diseño central quedó grabado en piedra para el resto de su vida...", https://satoshi.nakamotoinstitute.org/posts/ bitcointalk/126/, 2010.

[3] Hal Finney, "En una discusión sobre el hilo BitDNS se me ocurrió una idea para superponer otros protocolos en Bitcoin...", https://bitcointalk.org/index.php?topic=2077.msg26888, 2010.

[4] Colaboradores de Wikipedia. "La integridad de Turing". Wikipedia, la enciclopedia libre. Wikipedia, la enciclopedia libre, https://en.wikipedia.org/wiki/Turing_completeness, 2024


#atomicals #AVM #比特币生态 #Quark #atomarc