Saltar al contenido principal
Change page

Lenguajes de los contratos inteligentes

Un gran aspecto de Ethereum es que los contratos inteligentes se pueden programar utilizando lenguajes relativamente fáciles de usar para los desarrolladores. Si tiene experiencia con Python o cualquier lenguaje de llaves (opens in a new tab), puede encontrar un lenguaje con una sintaxis familiar.

Los dos lenguajes más activos y mantenidos son:

  • Solidity
  • Vyper

Remix IDE proporciona un entorno de desarrollo integral para crear y probar contratos tanto en Solidity como en Vyper. Pruebe el IDE de Remix en el navegador (opens in a new tab) para comenzar a programar.

Los desarrolladores más experimentados también podrían querer usar Yul, un lenguaje intermedio para la Máquina Virtual de Ethereum, o Yul+, una extensión de Yul.

Si tiene curiosidad y le gusta ayudar a probar nuevos lenguajes que aún están en pleno desarrollo, puede experimentar con Fe, un lenguaje emergente de contratos inteligentes que actualmente se encuentra en sus primeras etapas.

Requisitos previos

El conocimiento previo de lenguajes de programación, especialmente de JavaScript o Python, puede ayudarle a comprender las diferencias en los lenguajes de contratos inteligentes. También le recomendamos que entienda los contratos inteligentes como concepto antes de profundizar demasiado en las comparaciones de lenguajes. Introducción a los contratos inteligentes.

Solidity

  • Lenguaje de alto nivel orientado a objetos para implementar contratos inteligentes.
  • Lenguaje de llaves que ha sido profundamente influenciado por C++.
  • De tipado estático (el tipo de una variable se conoce en el momento de la compilación).
  • Soporta:
    • Herencia (puede extender otros contratos).
    • Bibliotecas (puede crear código reutilizable que puede llamar desde diferentes contratos, como funciones estáticas en una clase estática en otros lenguajes de programación orientados a objetos).
    • Tipos complejos definidos por el usuario.

Contrato de ejemplo

Este ejemplo debería darle una idea de cómo es la sintaxis de un contrato en Solidity. Para obtener una descripción más detallada de las funciones y variables, consulte la documentación (opens in a new tab).

Vyper

  • Lenguaje de programación pitónico (estilo Python)
  • Tipado fuerte
  • Código de compilador pequeño y comprensible
  • Generación eficiente de código de bytes
  • Deliberadamente tiene menos características que Solidity con el objetivo de hacer que los contratos sean más seguros y fáciles de auditar. Vyper no soporta:
    • Modificadores
    • Herencia
    • Ensamblador en línea (inline assembly)
    • Sobrecarga de funciones
    • Sobrecarga de operadores
    • Llamadas recursivas
    • Bucles de longitud infinita
    • Puntos fijos binarios

Para obtener más información, lea los fundamentos de Vyper (opens in a new tab).

Ejemplo

Este ejemplo debería darle una idea de cómo es la sintaxis de un contrato en Vyper. Para obtener una descripción más detallada de las funciones y variables, consulte la documentación (opens in a new tab).

Yul y Yul+

Si es nuevo en Ethereum y aún no ha programado con lenguajes de contratos inteligentes, le recomendamos que comience con Solidity o Vyper. Solo investigue Yul o Yul+ una vez que esté familiarizado con las mejores prácticas de seguridad de los contratos inteligentes y los detalles específicos de trabajar con la EVM.

Yul

  • Lenguaje intermedio para Ethereum.
  • Soporta la EVM y Ewasm (opens in a new tab), un WebAssembly adaptado a Ethereum, y está diseñado para ser un denominador común utilizable en ambas plataformas.
  • Buen objetivo para las etapas de optimización de alto nivel que pueden beneficiar a las plataformas EVM y Ewasm por igual.

Yul+

  • Una extensión de bajo nivel y altamente eficiente para Yul.
  • Diseñado inicialmente para un contrato de rollup optimista.
  • Yul+ puede considerarse como una propuesta de actualización experimental para Yul, añadiéndole nuevas características.

Contrato de ejemplo

El siguiente ejemplo sencillo implementa una función de potencia. Se puede compilar utilizando solc --strict-assembly --bin input.yul. El ejemplo debe almacenarse en el archivo input.yul.

Si ya tiene mucha experiencia con los contratos inteligentes, puede encontrar una implementación completa de ERC-20 en Yul aquí (opens in a new tab).

Fe

  • Lenguaje de tipado estático para la Máquina Virtual de Ethereum (EVM).
  • Inspirado en Python y Rust.
  • Su objetivo es ser fácil de aprender, incluso para los desarrolladores que son nuevos en el ecosistema de Ethereum.
  • El desarrollo de Fe aún se encuentra en sus primeras etapas; el lenguaje tuvo su lanzamiento alfa en enero de 2021.

Contrato de ejemplo

El siguiente es un contrato sencillo implementado en Fe.

Cómo elegir

Al igual que con cualquier otro lenguaje de programación, se trata principalmente de elegir la herramienta adecuada para el trabajo adecuado, así como de las preferencias personales.

Aquí hay algunas cosas a considerar si aún no ha probado ninguno de los lenguajes:

¿Qué tiene de bueno Solidity?

  • Si es principiante, hay muchos tutoriales y herramientas de aprendizaje disponibles. Vea más sobre esto en la sección Aprender programando.
  • Buenas herramientas para desarrolladores disponibles.
  • Solidity tiene una gran comunidad de desarrolladores, lo que significa que lo más probable es que encuentre respuestas a sus preguntas con bastante rapidez.

¿Qué tiene de bueno Vyper?

  • Excelente manera de comenzar para los desarrolladores de Python que desean escribir contratos inteligentes.
  • Vyper tiene un menor número de características, lo que lo hace ideal para la creación rápida de prototipos de ideas.
  • Vyper tiene como objetivo ser fácil de auditar y lo más legible posible para los humanos.

¿Qué tienen de bueno Yul y Yul+?

  • Lenguaje de bajo nivel simplista y funcional.
  • Permite acercarse mucho más a la EVM pura, lo que puede ayudar a optimizar el uso de gas de sus contratos.

Comparaciones de lenguajes

Para ver comparaciones de sintaxis básica, el ciclo de vida del contrato, interfaces, operadores, estructuras de datos, funciones, flujo de control y más, consulte esta hoja de referencia de Auditless (opens in a new tab)

Lecturas adicionales