Los smart contracts pueden ser escritos en distintos lenguajes de programación, siempre y cuando existan el compilador y librerías capaces de traducir y servir de interfaz con las distintas capacidades smart contracts de la blockchain que usemos.
Esto significa que es posible usar cualquier lenguaje de programación para crearlos, pero los desarrolladores de la blockchain deben crear el set de herramientas básico para tal fin. En tal sentido, aquí te mostramos el Top 5 de los lenguajes de programación más usados para crear Smart contracts en el mundo cripto.
Solidity
Solidity es un lenguaje de alto nivel de tipado estático con el que se pueden programar smart contracts para la red de Ethereum. Su sintaxis es muy similar a la de lenguajes muy conocidos como C++ o Javascript. Solidity fue creado con el propósito de permitir la escritura de smart contracts de forma sencilla para la red Ethereum. Se trata de un lenguaje diseñado para sacar el máximo provecho a la Ethereum Virtual Machine, permitiendo la creación y desarrollo de smart contracts que puedan ser ejecutados de forma óptima en la EVM.
Para ello el programador puede desarrollar sus aplicaciones en un lenguaje sencillo de utilizar, leer y mantener para que, al terminar, el motor de Solidity convierta ese código sencillo en el código máquina que la EVM entenderá, un código máquina prácticamente imposible de entender por una persona.
En esencia Solidity facilita el desarrollo de smart contracts sobre Ethereum y, aunque no es el único lenguaje, sí fue el primero, el más versátil y sobre el que más contratos inteligentes hay desarrollados. Su principal característica es que este lenguaje de programación es de tipo Turing Complete, lo que les permite a los desarrolladores crear aplicaciones muy complejas y avanzadas para que puedan sacar el máximo provecho de esta tecnología.
Solidity es ampliamente usado en Ethereum y en cualquier otra blockchain construida con compatibilidad EVM, por ejemplo, BNB Chain, Polygon, Avalanche, Polkadot/Kusama (parachains como Moonbeam y Moonriver tienen soporte a Solidity), entre otras redes.
Vyper
Vyper es un lenguaje de programación basado en Python dirigido a crear Smart contracts para la máquina virtual de Ethereum (EVM). Al estar basado en Python, este lenguaje disfruta de una enorme facilidad para desarrollar dApps para quienes están acostumbrados a este lenguaje, y al mismo tiempo, se alimenta de las potentes herramientas de depuración que están creadas para el mismo.
Entre sus principales objetivos tenemos:
- Ofrecer una mejor seguridad, ya que debería ser posible y natural construir contratos inteligentes seguros en Vyper.
- Simplicidad del lenguaje y del compilador: El lenguaje y la implementación del compilador deben esforzarse por ser simples.
- Mejorar la auditoría del código. El código de Vyper debe ser lo más legible posible. Además, debe ser lo más difícil posible escribir código engañoso. La simplicidad para el lector es más importante que la simplicidad para el escritor, y la simplicidad para los lectores con poca experiencia previa con Vyper (y poca experiencia previa con la programación en general) es particularmente importante.
- Permite una mejor comprobación de límites y desbordamiento, especialmente en los accesos a arrays y en la aritmética.
- Soporte para enteros con signo y números decimales de punto fijo.
- Decidibilidad: Es posible calcular un límite superior preciso para el consumo de gas de cualquier llamada a una función de Vyper.
- Tipificación fuerte, para evitar los problemas de seguridad que el tipado dinámico puede traer.
- Código del compilador pequeño y comprensible.
- Soporte limitado para funciones puras: Cualquier cosa marcada como constante no puede cambiar el estado, lo que ayuda a mejorar la seguridad.
Vyper puede ser usado en Ethereum o en cualquier red EVM compatible como Polygon, BNB Chain, u otras redes derivadas de la EVM y sus primitivas criptográficas.
Rust
Rust es un lenguaje de programación compilado, de propósito general y multiparadigma que empezó su desarrollo como parte del proyecto Mozilla y que actualmente forma parte de la Rust Foundation. El lenguaje está centrado en ofrecer un alto nivel de seguridad, hasta el punto en que actualmente es considerado como uno de los lenguajes de programación más seguros para la generación de aplicaciones.
El desarrollo de Rust es totalmente abierto, por lo que se busca la opinión y contribución de la comunidad. Gracias a esto, Rust ha sido ampliamente utilizado en distintos proyectos que van desde el navegador Web Mozilla Firefox, el kernel de GNU/Linux y por supuesto en el mundo de las criptomonedas. Por ejemplo, Rust es usado para la construcción de nodos de referencia para Bitroin (Electrum-RS), también es usado para ampliar las capacidades Smart contracts de Bitcoin (por medio de miniscript) y también es usado en otras blockchain como Near (donde es el lenguaje por defecto), Ethereum (con un SDK para la EVM) y Substrate (para ambientes Polkadot/Kusama).
Ride
Ride es un lenguaje de programación funcional sencillo y fácil de desarrollar para contratos inteligentes y aplicaciones descentralizadas (dApps) que es aplicado en la blockchain de Waves. Así, en Waves, los contratos inteligentes son escritos en Ride y estos scripts pueden ser asignados a cuentas o tokens (activos). Por ejemplo, una cuenta con un script asignado le convierte en una dApp o cuenta inteligente. Mientras que un activo con un script asignado, le convierte en un activo inteligente.
Así, la funcionalidad de los scripts depende de su tipo:
- El script de la dApp permite definir funciones invocables que pueden realizar diversas acciones en la blockchain y una función de verificación que permite o deniega las transacciones y órdenes que se envían en nombre de la cuenta de la dApp.
- El script de la cuenta permite o deniega las transacciones y órdenes que se envían en nombre de la cuenta.
- El script de los activos permite o deniega las transacciones relacionadas con el activo.
Ride se crea específicamente para su ejecución en un entorno de blockchain y se optimiza para este fin. Dado que el blockchain es un libro de contabilidad distribuido, ubicado en muchos ordenadores de todo el mundo, no hay forma de acceder al sistema de archivos ni de mostrar nada en la consola. En su lugar, las funciones de Ride pueden leer datos de la blockchain:
Por otro lado, la complejidad se define para cada función y operador de Ride. Las complejidades de las funciones y operadores utilizados conforman la complejidad del script. No hay bucles en Ride, por lo que la complejidad del script puede calcularse de antemano. La complejidad máxima del script está limitada. Debido a estas limitaciones, Waves tiene tarifas bajas y predecibles para la ejecución de scripts.
Debido a la falta de bucles, el lenguaje Ride no es Turing completo. Por eso no siempre es posible implementar la lógica necesaria dentro de una sola llamada de script. Sin embargo, todavía es posible realizar cálculos Turing-completos si el algoritmo se divide en varias funciones (o incluso varios contratos inteligentes) y se invoca secuencialmente utilizando varias transacciones. En este caso, Ride se parece mucho a Bitcoin Script, primero por no ser Turing Completo y segundo, por ser un lenguaje de programación mucho más seguro que sus contrapartes más avanzadas (Solidity, Rust o Cairo, por ejemplo).
Cairo
Cairo es un lenguaje para escribir programas demostrables: la ejecución de un programa Cairo produce una traza que puede ser enviada a un proveer sin confianza, que genera una prueba STARK para la validez de la declaración o el cálculo representado por el programa Cairo. La prueba puede entonces ser verificada utilizando un verificador (que puede o no estar en la cadena).
Cairo no es un lenguaje de blockchain y por tanto no puede utilizarse para escribir contratos inteligentes (aunque puede llegar a serlo, más adelante). Sin embargo, Cairo es especialmente útil para crear funciones donde el uso de criptografía ZKP es esencial para mantener la seguridad y privacidad, de allí que se haya ganado un espacio en el desarrollo de dApps pensadas en proteger la privacidad, especialmente en plataformas de identidad soberana, DEX sobre zk-Rollups o cualquier aplicativo que use criptografía ZKP.
Mención Especial C++
El lenguaje de programación C++ es un viejo conocido en el mundo de la programación, y es usado como lenguaje de programación para Smart contracts en EOS. De esta manera, los desarrolladores pueden crear contratos inteligentes en EOSIO utilizando el lenguaje de programación C++. El kit de herramientas de desarrollo de contratos de EOSIO o EOSIO.CDT proporciona las bibliotecas y herramientas necesarias para construir un contrato inteligente. Consulte el manual de EOSIO.CDT para obtener más detalles sobre cómo empezar con EOSIO.CDT.
Para desplegar el contrato inteligente en la cadena de bloques, primero hay que utilizar la herramienta eosio-cpp para compilar el contrato inteligente. La compilación crea un archivo Web Assembly (WASM) y un archivo de interfaz binaria de aplicación (ABI) correspondiente.
El archivo Web Assembly o .wasm es el código binario que el motor WASM de la blockchain ejecuta. El motor de ensamblaje web o motor WASM está alojado en el demonio de nodeos y ejecuta el código del contrato inteligente. La interfaz binaria de la aplicación o archivo. abi define cómo los datos son transferidos hacia y desde el motor WASM. De esta manera, se puede usar el lenguaje de programación C++ y su capacidad Turing Completa para crear Smart contracts en EOS.