Curso obligatorio para desarrolladores Web3: análisis completo del lenguaje de contratos inteligentes

La autoformación de los desarrolladores de Web3 - lenguajes de contratos inteligentes

Introducción básica

Los contratos inteligentes son un protocolo de ejecución automatizada que se ejecuta en una plataforma de blockchain, lo que permite a las partes del contrato realizar transacciones confiables directamente sin necesidad de intermediarios o de confiar en terceros. Estas transacciones son rastreables e irreversibles. Los contratos inteligentes contienen funciones de código y también pueden interactuar con otros contratos; cuando se cumplen las condiciones predefinidas, el contrato inteligente ejecutará automáticamente las funciones de código especificadas en el contrato.

El concepto de contratos inteligentes fue propuesto por el científico informático Nick Szabo en la década de 1990, pero no fue hasta la aparición de la cadena de bloques de Ethereum que los contratos inteligentes comenzaron a aplicarse ampliamente. Ethereum se lanzó en 2015 y admite el despliegue y ejecución de contratos inteligentes. A diferencia de Bitcoin, que se utiliza principalmente para transacciones simples de criptomonedas, Ethereum permite construir aplicaciones descentralizadas en su plataforma utilizando su lenguaje de programación Turing completo, por lo que se le conoce como la segunda generación de cadenas de bloques.

El lenguaje de contratos inteligentes es un lenguaje de programación utilizado para escribir contratos inteligentes, que se compilan en bytecode y se ejecutan en la máquina virtual de la plataforma de contratos inteligentes de la blockchain, implementando el código de lógica predefinida. Un lenguaje de contratos inteligentes debe permitir a los desarrolladores expresar las reglas del contrato de manera segura y eficiente, y generalmente proporciona una serie de herramientas y abstracciones para manejar transacciones y estados en la blockchain.

Desarrollo de Web3: la autodisciplina de los desarrolladores - contratos inteligentes

contratos inteligentes lenguaje

La mayoría de los desarrolladores de contratos inteligentes están desarrollando en Ethereum y en blockchains compatibles con EVM, mientras que Solana tiene la mayor cantidad de desarrolladores en el ecosistema de blockchains no compatibles con EVM, y Move fue diseñado específicamente para desarrollar contratos inteligentes en blockchain de forma segura.

Aunque hay muchas otras cadenas de bloques públicas que tienen lenguajes de contratos inteligentes especializados, como TON/FunC, Cardano/Plutus, ICP/Motoko, Flow/Cadence, Starknet/Cairo, son demasiado fragmentadas.

Por lo tanto, este artículo clasificará los lenguajes de contratos inteligentes según EVM, Solana y Move.

EVM

EVM es el núcleo de Ethereum, encargado de ejecutar contratos inteligentes y procesar transacciones. El protocolo de Ethereum especifica un bytecode que se ejecuta sobre EVM, y sobre este se han construido lenguajes intermedios como Yul y Yul+, y sobre el lenguaje intermedio se han construido lenguajes de alto nivel como Solidity/Vyper/Fe, que están diseñados para reducir la dificultad de desarrollo de contratos inteligentes para los usuarios finales. La ventaja de adoptar una estructura de múltiples niveles es que el lenguaje intermedio es adecuado tanto para la traducción a lenguaje de máquina como para la optimización de todo el programa, es fácil de verificar manualmente y realizar verificaciones de formalización, etc., pero a medida que hay más niveles, el costo de garantizar la confiabilidad verificable aumentará, ya que cada nivel necesita realizar la verificación correspondiente; por supuesto, los lenguajes de nivel inferior, debido a su simplicidad, tienen costos de verificación más bajos.

En Ethereum y en blockchains compatibles con EVM, los desarrolladores pueden utilizar diferentes lenguajes de programación de alto nivel. Actualmente, los lenguajes más populares y mejor mantenidos son Solidity y Vyper, además de que también pueden elegir Yul, Yul+, Fe y Huff.

Solidity fue propuesto por primera vez por el CTO de Ethereum, Gavin Wood, en 2014, y más tarde fue desarrollado por el equipo de Ethereum liderado por Christian Reitwiessner. Solidity, como un lenguaje de programación orientado a objetos, ha sido influenciado por C++, Python y JavaScript, y está diseñado específicamente para EVM. Para reutilizar el código, los contratos inteligentes se consideran objetos de clase, aprovechando la herencia múltiple. En particular, Solidity establece un estándar de interfaz de aplicación binaria (ABI) para interactuar con sus contratos. Actualmente, el ABI de Solidity se considera el estándar de hecho para el DSL de EVM.

Vyper fue desarrollado por el equipo de Vitalik Buterin, uno de los fundadores de Ethereum, como una alternativa a Solidity y se lanzó en 2017. Vyper es un lenguaje de programación similar a Python orientado a contratos y diseñado para EVM. Vyper está optimizado para la seguridad, la legibilidad, la capacidad de auditoría y la eficiencia del Gas. Vyper no utiliza un modelo orientado a objetos y no permite el uso de ensamblador en línea.

Yul es un lenguaje de ensamblaje con un control de flujo avanzado y una gran cantidad de abstracciones, que forma parte de la cadena de herramientas de Solidity. La mayoría de las funciones en Yul se exponen mediante bloques de ensamblaje en línea en Solidity, lo que permite aprovechar funciones no soportadas por Solidity y personalizar el almacenamiento, la memoria y calldata. Yul+ es una extensión de Yul que puede considerarse una actualización experimental de Yul.

Fe es un lenguaje de alto nivel similar a Rust, lanzado en enero de 2021. Fe no utiliza un modelo orientado a objetos, sino que reutiliza código a través de un sistema basado en módulos, donde se pueden declarar variables, tipos y funciones dentro de los módulos, permitiendo importaciones de manera similar a Rust.

Huff es un lenguaje de ensamblaje que tiene control de pila manual y una abstracción mínima del conjunto de instrucciones EVM. A través de la directiva "#include", se pueden analizar durante la compilación cualquier archivo Huff incluido, lo que permite la reutilización del código.

En Ethereum, la mayoría de los contratos inteligentes se desarrollan en Solidity, representando aproximadamente el 90%, diez veces más que Vyper, mientras que Fee, al haber comenzado más tarde, tiene pocos desarrolladores que lo utilicen. Yul y Yul+ generalmente se utilizan como bloques de ensamblador en línea de Solidity, permitiendo un acceso de bajo nivel al conjunto de instrucciones EVM, y se utilizan comúnmente para la optimización de Gas. Huff es más de bajo nivel que Yul/Yul+, permitiendo la manipulación manual de la pila y la invocación de instrucciones EVM, y se utiliza comúnmente para la optimización extrema de Gas.

La auto-cultivación de los desarrolladores de Web3 - lenguaje de contratos inteligentes

de Solana

Solana es conocida por su mecanismo PoH (Prueba de Historia) y su baja latencia y alta capacidad de procesamiento, siendo uno de los más famosos "asesinos de Ethereum". Solana también es una de las cadenas de bloques públicas con el crecimiento más rápido en capitalización de mercado y desarrollo ecológico en el último año, lo que ha catalizado un crecimiento significativo en su comunidad de desarrolladores.

Solana llama a los contratos inteligentes programas en la cadena (Program), que se escriben principalmente en el lenguaje Rust, pero a diferencia de otras cadenas públicas que utilizan el lenguaje Rust, Solana no utiliza un runtime WASM. Solana tiene su propia máquina virtual única, SVM, y su código de bytes SBF.

SVM es el runtime para ejecutar contratos inteligentes y procesar transacciones en la red de Solana, y su componente clave es Sealevel. Sealevel permite que múltiples contratos inteligentes se ejecuten simultáneamente sin afectar el rendimiento entre sí, lo que permite el procesamiento en paralelo en el runtime de Solana. Los contratos inteligentes de Solana especifican qué estados (cuentas) se leerán o escribirán durante la ejecución, lo que permite que las transacciones sin conflictos se ejecuten en paralelo, garantizando al mismo tiempo la consistencia de los datos.

SBF se basa en eBPF, que es el predecesor de BPF (Berkeley Packet Filter, filtro de paquetes de Berkeley), y originalmente se utilizaba para el filtrado eficiente de paquetes de datos de red. eBPF proporciona un conjunto de instrucciones más rico, lo que permite la intervención y modificación dinámica del comportamiento del núcleo del sistema operativo sin necesidad de modificar el código fuente, ofreciendo alta performance, seguridad y portabilidad. En comparación con eBPF, SBF utiliza un validador personalizado, que no solo verifica que el programa necesita determinar que termina dentro de un número específico de instrucciones (es decir, el famoso problema de la parada), sino que también comprueba si las instrucciones son correctas y si hay saltos fuera de los límites. Además del validador, también se abordan algunos detalles de eBPF que presentan ciertos problemas para la compilación de contratos inteligentes.

LLVM (Máquina Virtual de Bajo Nivel) es una arquitectura de compilación y una cadena de herramientas moderna, donde el compilador puede traducir Rust a un lenguaje intermedio llamado LLVM IR, que luego es traducido por el backend de LLVM IR a eBPF para la plataforma objetivo. Teóricamente, cualquier lenguaje de programación que soporte la compilación a LLVM IR puede usarse para escribir contratos inteligentes de Solana, pero en la práctica, Solana Labs ha realizado múltiples modificaciones a Rust y al backend de eBPF de LLVM, algunas de las cuales no están disponibles en la versión upstream (Rust y LLVM). Actualmente, el desarrollo de contratos en Solana solo es compatible con Rust y Solang.

Rust fue desarrollado bajo la dirección de Mozilla y lanzado en 2011. Su sintaxis es similar a la de C++, y es un lenguaje de programación estático y de propósito general diseñado para el rendimiento y la seguridad, especialmente la seguridad, sin limitarse a programas de contratos inteligentes. En comparación con Solidity, Rust es un lenguaje de programación de bajo nivel y multiparadigma, con alto rendimiento y seguridad de memoria. El compilador oficial de Rust es rustc, que realiza el análisis léxico, el análisis sintáctico y el análisis semántico del código fuente de Rust, y finalmente compila el código en LLVM IR.

Solang, desarrollado por Hyperlege Labs y lanzado en 2023, es un compilador de Solidity basado en la arquitectura LLVM para Solana y Polkadot, que permite escribir contratos inteligentes utilizando Solidity, aunque la sintaxis real ha sido modificada en algunos aspectos para alinearse con la arquitectura de Solana y Polkadot. El objetivo de Solang es simplificar la transición de los desarrolladores a Solana o Polkadot y ampliar el alcance del desarrollo de Solidity.

Rust es el lenguaje principal que Solana apoya oficialmente, con mayor estabilidad; la principal ventaja de Solang radica en su compatibilidad con el lenguaje Solidity.

La autoconstrucción del desarrollador Web3——contratos inteligentes

Move系

Move es un nuevo lenguaje de programación de contratos inteligentes, lanzado en 2019, que fue desarrollado originalmente para el proyecto de blockchain Diem de Meta. Move está diseñado para abordar problemas de seguridad en activos y transacciones, permitiendo que los activos y las transacciones sean definidos y controlados de manera rigurosa. Sus características de lenguaje son:

  1. Protección de tipos de recursos de primera clase (First Class Resources): Un tipo de recurso de primera clase es primero un tipo de variable, y luego se especifica que las variables de este tipo: no pueden ser copiadas; no pueden ser destruidas implícitamente; solo pueden ser "movidas" en diferentes direcciones de programa;

  2. Flexibilidad: El bytecode de Move se puede ejecutar directamente o puede llamar al código de otros módulos publicados, permitiendo la invocación de múltiples programas en una sola transacción, lo que posibilita realizar transferencias a múltiples personas en una sola transacción.

  3. Seguridad y verificabilidad: El sistema de codificación Move proporciona protección de seguridad específica para los recursos. Los recursos Move no pueden ser copiados, reutilizados o destruidos. Un tipo de recurso solo puede ser creado o destruido por el módulo que define su tipo. La máquina virtual Move verificará mediante bytecode estático y rechazará la ejecución de programas que no hayan pasado la verificación del bytecode, asegurando así su seguridad.

Después de la disolución del proyecto Diem, su equipo fundador salió para crear Aptos y Sui, que también utilizan Move como lenguaje central de contratos inteligentes. Aptos hereda Diem Move (Core Move), mientras que Sui escribe sus contratos inteligentes a través de su versión personalizada de Sui Move.

En Move, cada contrato inteligente es un módulo, compuesto por definiciones de funciones y estructuras, las estructuras se instancian en las funciones y se pueden pasar a otros módulos a través de llamadas a funciones. Sui Move, en comparación con Core Move, adopta un modelo de datos basado en objetos, existiendo en Sui tres tipos diferentes de objetos: objetos propietarios, objetos compartidos y objetos inmutables. La estrategia de paralelización de Sui es similar a la de Solana, las transacciones también necesitan especificar qué objetos operar, este diseño permite que Sui maneje de manera efectiva transacciones concurrentes, logrando capacidades de procesamiento paralelo sin la necesidad de un orden global requerido por las blockchains tradicionales.

El compilador, verificador y máquina virtual de Move están diseñados desde cero. El verificador es uno de los mecanismos de seguridad centrales de Move, utilizado para mantener el modelo de programación centrado en recursos de Move. El verificador de Move es una herramienta de análisis estático que analiza el bytecode de Move y determina si cumple con las reglas de seguridad de tipo, memoria y recursos requeridas; todos los módulos subidos a la cadena deben pasar por el verificador.

En comparación con lenguajes como Solidity, Move es un lenguaje amigable para la verificación formal, ya que no admite características como la asignación dinámica (dynamic dispatch), lo que permite que todas las rutas de los contratos se determinen en tiempo de compilación, sin necesidad de determinar las funciones a ejecutar en el momento de la ejecución del contrato, lo que permite un análisis y verificación exhaustivos.

Move también tiene una herramienta de verificación formal para contratos inteligentes, llamada Move Prover. Los desarrolladores deben escribir condiciones de verificación para los contratos inteligentes (en forma de afirmaciones), y Move Prover convertirá estas condiciones de verificación en fórmulas SMT en segundo plano, y luego utilizará un solucionador SMT para realizar la verificación.

La auto-cultivación de los desarrolladores de Web3——contratos inteligentes

contratos inteligentes herramientas de desarrollo

Para aquellos que quieren iniciarse en Web3 o aprender sobre el desarrollo de contratos en Ethereum y otras cadenas de bloques compatibles con EVM, Solidity es la opción indiscutible. Y debido a la popularidad de Solidity, las herramientas de desarrollo también han madurado, destacando las siguientes:

  • Hardhat es un entorno de desarrollo para compilar, desplegar, probar y depurar aplicaciones de Ethereum. Ayuda a los desarrolladores a gestionar y automatizar las tareas repetitivas inherentes al proceso de construcción de contratos inteligentes y DApps, y permite incorporar fácilmente más funcionalidades en torno a este flujo de trabajo;

  • OpenZeppelin proporciona contratos OpenZeppelin de código abierto, escritos en Solidity, para construir contratos inteligentes seguros. OpenZeppelin Contracts permite

Ver originales
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Recompensa
  • 3
  • Compartir
Comentar
0/400
ApeWithNoFearvip
· hace19h
¡No puedo con los contratos inteligentes, ¿qué voy a hacer!
Ver originalesResponder0
ImpermanentLossFanvip
· hace19h
contratos inteligentes alcista p个毛...en realidad es solo un bloque de código
Ver originalesResponder0
0xOverleveragedvip
· hace19h
No juego con monedas virtuales, solo comercio futuros. Con un alto apalancamiento es más interesante.
Ver originalesResponder0
  • Anclado
Opere con criptomonedas en cualquier momento y lugar
qrCode
Escanee para descargar la aplicación Gate
Comunidad
Español
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)