Contratos inteligentes y Soroban

Soroban es una herramienta de alto rendimiento diseñada para ejecutar contratos inteligentes en la cadena de bloques de Stellar.
CryptoConexion, Contratos-inteligentes, soroban

Los contratos inteligentes en Soroban permiten a los desarrolladores crear aplicaciones descentralizadas (DApps) seguras y eficientes. Soroban ofrece un rendimiento superior, eficiencia de gas y seguridad mejorada en comparación con otras plataformas de contratos inteligentes.




En este tutorial, sintetizamos los conceptos fundamentales abordados en el segundo workshop del programa  StellarEdu titulado ‘Contratos inteligentes y Soroban’, para aprender cómo crear un contrato inteligente y su despliegue e integración en Soroban.

Introducción a Soroban

Antes de iniciar, recordemos lo expuesto sobre Soroban en tutoriales previos, ya que esta herramienta es fundamental en el workshop enfocado en el desarrollo de contratos inteligentes en Stellar.

Soroban es una herramienta de alto rendimiento diseñada para ejecutar contratos inteligentes en la cadena de bloques de Stellar. Ofrece una serie de ventajas sobre otras herramientas, como mayor velocidad, eficiencia y seguridad. Soroban está en desarrollo activo, pero ya está disponible para su uso en aplicaciones reales.

Características principales:

  • Rendimiento superior: Soroban es una de las herramientas más rápidas del mundo, capaz de ejecutar contratos inteligentes hasta 100 veces más rápido que otras herramientas populares.
  • Eficiencia de gas: utiliza un modelo de gas eficiente que permite a los desarrolladores escribir contratos inteligentes más compactos y con menos consumo de recursos.
  • Seguridad mejorada: Soroban está diseñado con la seguridad en mente, utilizando técnicas de vanguardia para proteger los contratos inteligentes de ataques.
  • Compatibilidad con WebAssembly: es compatible con WebAssembly, lo que permite a los desarrolladores escribir contratos inteligentes en una variedad de lenguajes de programación.
  • Entorno de desarrollo rico: Soroban cuenta con un entorno de desarrollo rico que incluye herramientas para la escritura, compilación y depuración de contratos inteligentes.

Casos de uso:

Soroban se puede utilizar para una amplia variedad de casos de uso, incluyendo:

  • Emisión de tokens: es ideal para crear tokens personalizados en la cadena de bloques de Stellar.
  • Aplicaciones descentralizadas (DApps): Soroban se puede utilizar para desarrollar DApps seguras y eficientes en la cadena de bloques de Stellar.
  • Finanzas descentralizadas (DeFi): se utiliza para crear aplicaciones DeFi innovadoras en la cadena de bloques de Stellar.
  • Gestión de cadenas de suministro: útil para rastrear y gestionar cadenas de suministro de manera segura y transparente en la cadena de bloques de Stellar.
  • Identidad digital: sirve para crear sistemas de identidad digital seguros y confiables.

Cómo crear y desplegar un contrato inteligente

Para la creación y despliegue de un contrato inteligente en Stellar se deben seguir los siguientes pasos:

Set up:

1.- En primer lugar vamos a instalar Rustup, que es el gestor de herramientas para Rust, un lenguaje de programación de sistemas que se utiliza ampliamente en el desarrollo de software de bajo nivel y se considera una opción popular para la programación en la blockchain de Stellar.

Para ello se debe ejecutar la siguiente instrucción en la línea de comandos:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

Al ejecutar este comando, se está instalando Rustup en tu sistema, a fin de instalar y administrar múltiples versiones del compilador Rust en tu máquina. Esto es importante para el desarrollo en Rust, ya que te permite manejar diferentes proyectos que pueden requerir versiones específicas de Rust.

2.- Ejecuta el comando:

rustup target add wasm32-unknown-unknown

Este comando agrega la arquitectura `wasm32-unknown-unknown` como un objetivo (target) para Rustup. En el contexto de la blockchain de Stellar, este comando es relevante para el desarrollo de contratos inteligentes y otras aplicaciones que utilizan WebAssembly (Wasm).

La arquitectura ‘wasm32-unknown-unknown’ es específica para la compilación de programas a WebAssembly (Wasm) sin una plataforma determinada de destino en mente. Wasm es un formato binario de código portable que se ejecuta de manera eficiente en cualquier navegador web y también puede ejecutarse fuera del navegador, lo que lo hace ideal para aplicaciones descentralizadas (DApps) en la blockchain de Stellar.

Al agregar esta arquitectura como un objetivo en Rustup, estás configurando tu entorno de desarrollo para compilar código Rust a Wasm, lo que permite crear contratos inteligentes y otras aplicaciones que se ejecuten en la blockchain de Stellar utilizando esta tecnología.

3.- Instala la interfaz de línea de comandos de Soroban. Para ello ejecuta el siguiente comando:

cargo install --locked soroban-cli

Desglosemos el comando:

  • cargo: es el gestor de paquetes y herramientas para el lenguaje de programación Rust.
  • install: es un subcomando de cargo que se utiliza para instalar paquetes o herramientas de Rust.
  • --locked: esta opción garantiza que se instale exactamente la misma versión del paquete que está especificada en el archivo Cargo.lock del proyecto. Esto ayuda a mantener la consistencia entre los entornos de desarrollo.
  • soroban-cli: es el nombre del paquete que se desea instalar, en este caso, la CLI de Soroban.

La instalación de esta interfaz sirve para interactuar con la plataforma y desarrollar contratos inteligentes para la blockchain de Stellar directamente desde la línea de comandos.

Creación del proyecto

Una vez realizado el set up en el entorno de programación, es posible pasar a la creación del proyecto, para ello hay que seguir los siguientes pasos:

1.- Crea el proyecto como tal. Para ello ejecuta el siguiente comando:

soroban contract init <Nombre del proyecto>

Desglosemos el comando:

- ‘soroban’: es el nombre del programa o la herramienta que estás ejecutando desde la línea de comandos. En este caso, se refiere a Soroban.

- ‘contract’: es un subcomando de Soroban que se utiliza para trabajar con contratos inteligentes.

- ‘init’: es un subcomando de ‘contract’ que se utiliza para inicializar un nuevo proyecto de contrato inteligente.

- ‘<Nombre del proyecto>’: es el nombre que deseas asignar al nuevo proyecto de contrato inteligente. Debes reemplazar ‘<Nombre del proyecto>’ con el nombre deseado para tu proyecto.

Al ejecutar este comando, Soroban creará un nuevo directorio con la estructura básica de un proyecto de contrato inteligente, incluyendo archivos y carpetas necesarios para comenzar a desarrollar tu contrato en la blockchain de Stellar.

2.- Conecta tu proyecto con la red de pruebas, para ello ejecuta este comando:

soroban network add testnet  --rpc-url https://soroban-testnet.stellar.org:443 --network-passphrase "Test SDF Network ; September 2015"

A continuación el desglose del comando:

- ‘soroban’: es el nombre del programa o la herramienta que estás ejecutando desde la línea de comandos, en este caso, Soroban.

- ‘network add testnet’: es un subcomando de Soroban que se utiliza para agregar una nueva red de pruebas a tu entorno de desarrollo.

- ‘--rpc-url https://soroban-testnet.stellar.org:443’: es la URL del punto final RPC (Remote Procedure Call) de la red de pruebas de Stellar. Este punto final proporciona acceso a la red de pruebas para enviar transacciones y realizar consultas.

- ‘--network-passphrase "Test SDF Network ; September 2015"’: es la frase de paso de la red de pruebas de Stellar. Esta frase identifica la red de pruebas y asegura que estés interactuando con la red correcta.

Al ejecutar este comando, Soroban agregará la red de pruebas de Stellar a tu entorno de desarrollo, lo que te permitirá desarrollar y probar tus contratos inteligentes en la red de pruebas antes de desplegarlos en la red principal.

3.- Es momento de crear tu identidad para interactuar con la red, para ello ejecuta el siguiente comando:

soroban keys generate alice --network testnet

Este comando genera un nuevo par de claves (clave pública y clave secreta) para una cuenta en la red de pruebas (testnet) de Stellar. Aquí el desglose:

- ‘soroban’: es el nombre del programa o la herramienta que estás ejecutando desde la línea de comandos, en este caso, Soroban.

- ‘keys generate alice’: es un subcomando de Soroban que se utiliza para generar un nuevo par de claves para una cuenta. "alice" es el nombre de la cuenta que se está creando en el ejemplo, pero tú puedes reemplazarlo con el nombre que desees.

- ‘--network testnet’: es la especificación de la red en la que deseas generar las claves. En este caso, estás generando las claves para la red de pruebas (testnet) de Stellar.

Estas claves generadas se utilizan para acceder y administrar la cuenta en la red de Stellar. Es importante mantener la clave secreta en secreto, ya que proporciona acceso completo a la cuenta y los activos asociados a ella.

Desarrollo del contrato inteligente

Ahora ya tienes todo listo para empezar el desarrollo de tu contrato inteligente, ¡empecemos!

1.- Ejecuta las pruebas unitarias y de desarrollo del proyecto. Para ello ejecuta este comando:

cargo test

El comando ‘cargo test’ se utiliza en el entorno de desarrollo de Rust para ejecutar las pruebas unitarias y de integración escritas para un proyecto. Aquí el desglose:

- ‘cargo’: es la herramienta de construcción y administración de paquetes para Rust.

- ‘test’: es un subcomando de Cargo que se utiliza para ejecutar las pruebas asociadas con un proyecto Rust.

Cuando ejecutas ‘cargo test’, Cargo buscará automáticamente las pruebas en el directorio ‘tests/’ y ejecutará todas las funciones marcadas con el atributo ‘#[test]’ dentro de esos archivos. También ejecutará las pruebas integradas que se encuentren en el mismo archivo que el código de producción utilizando el atributo ‘#[cfg(test)]’.

El resultado de la ejecución de ‘cargo test’ mostrará información sobre qué pruebas se ejecutaron, cuántas pasaron, cuántas fallaron y cualquier salida adicional de las pruebas. Este comando es útil durante el desarrollo para garantizar que el código funcione como se espera y para detectar cualquier regresión cuando se realizan cambios en el código.

2.- Compila tu contrato inteligente. Una vez desarrollado el contrato hay que compilarlo, para ello ejecuta este comando:

soroban contract build

Cuando ejecutas este comando, Soroban compila el código fuente del contrato inteligente, realiza las optimizaciones necesarias y produce un archivo binario que contiene el contrato compilado listo para ser implementado en la red de Stellar. Este archivo binario generalmente tiene la extensión ‘.wasm’ y contiene el código bytecode que será ejecutado por la máquina virtual de Soroban en la blockchain de Stellar.

La ejecución de ‘soroban contract build’ es un paso importante en el proceso de desarrollo de contratos inteligentes en la plataforma Soroban, ya que convierte el código fuente legible por humanos en un formato que la red de Stellar puede entender y ejecutar.

3.- Despliega tu contrato en la red de Stellar. Para ello ejecuta este comando:

soroban contract deploy --wasm <CONTRATO.wasm> \
--source alice --network testnet

El comando ‘soroban contract deploy’ se utiliza en el contexto de la plataforma Soroban para implementar un contrato inteligente en la blockchain de Stellar. Al ejecutar este comando, se despliega el contrato inteligente en la red de Stellar, lo que significa que el contrato se hace disponible para su ejecución y uso por parte de los usuarios de la red.

Este es el desglose del comando:

- ‘--wasm <CONTRATO.wasm>’: el parámetro especifica el archivo binario del contrato inteligente compilado en formato WebAssembly (.wasm). Este archivo contiene el código bytecode del contrato que se desplegará en la red de Stellar.

- ‘--source alice’: este parámetro especifica la cuenta de origen desde la cual se realizará la transacción de despliegue del contrato inteligente. En este caso, ‘alice’ es el nombre de la cuenta que se utilizará como origen.

- ‘--network testnet’: este parámetro especifica la red de Stellar en la que se desplegará el contrato inteligente. En este caso, se está desplegando en la red de pruebas (testnet) de Stellar.

4.- Ejecuta las funciones del contrato. Para ello ejecuta el siguiente comando:

soroban contract invoke --id <ID del CONTRATO> \
--source alice --network testnet -- increment

Este comando se utiliza en el contexto de la plataforma Soroban para invocar un método o función específica en un contrato inteligente desplegado en la blockchain de Stellar. Al ejecutar este comando, se realiza una transacción de invocación que ejecuta la lógica especificada en el contrato inteligente.

Desglosamos el comando:

- ‘--id <ID del CONTRATO>’: este parámetro especifica el identificador único del contrato inteligente en la blockchain de Stellar. Es necesario proporcionar el ID del contrato en el que se desea invocar la función.

- ‘--source alice’: este parámetro especifica la cuenta de origen desde la cual se realizará la transacción de invocación del contrato inteligente. En este caso, ‘alice’ es el nombre de la cuenta que se utilizará como origen.

- ‘--network testnet’: este parámetro especifica la red de Stellar en la que se encuentra desplegado el contrato inteligente. En este caso, se está utilizando la red de pruebas (testnet) de Stellar.

- ‘-- increment’: es el nombre del método o función que se está invocando en el contrato inteligente. En este ejemplo, se está llamando a una función llamada ‘increment’.

Y es todo lo requerido para desarrollar tu contrato inteligente.

Integración del contrato inteligente

A continuación pasamos a la fase de integración del contrato inteligente con la app web. Para ello sigue los siguientes pasos:

1.- En caso de no tenerlo, instala NodeJs. Puedes hacerlo desde aquí.

2.- Inicializa tu nuevo proyecto en Soroban, para ello ejecuta este comando:

soroban contract init ./  --frontend-template \  git@github.com:sebamiro/increment-contract-front-template.git

El comando ‘soroban contract init’ se utiliza para inicializar un nuevo proyecto de contrato inteligente en Soroban. 

Este es el desglose del comando:

- ‘./’: se refiere al directorio en el que se inicializará el proyecto del contrato inteligente. En este caso, el proyecto se inicializará en el directorio actual.

- ‘--frontend-template’: este parámetro especifica que se utilizará una plantilla de frontend para el proyecto del contrato inteligente.

- ‘git@github.com:sebamiro/increment-contract-front-template.git’: esta es la URL del repositorio de la plantilla de frontend que se utilizará para el proyecto del contrato inteligente. En este caso, la plantilla se encuentra en el repositorio git de GitHub ubicado en esa dirección.

Editaremos el archivo ./src/lib/contractAddress y pondremos el id de nuestro contrato.

Esta web nos va a pedir que conectemos nuestra wallet  Freighter, que es la cartera utilizada compatible con Stellar, y podremos vincular la identidad que creamos previamente con la wallet.

3.- Instala las dependencias ejecutando este comando:

npm install

El desglose del comando es el siguiente:

  • npm: es el administrador de paquetes de Node.js que se utiliza para instalar y administrar paquetes.
  • install: es el comando de npm utilizado para instalar paquetes.

Cuando se ejecuta npm install en un directorio de proyecto que contiene un archivo package.json, npm buscará las dependencias enumeradas en ese archivo y las instalará en el directorio node_modules del proyecto. Esto permite que el proyecto tenga acceso a todas las bibliotecas y herramientas que necesita para funcionar correctamente.

4.- Inicializa el servidor en modo desarrollo. Para ello ejecuta el siguiente comando:

npm run dev

Este comando se utiliza en entornos de desarrollo de aplicaciones web que utilizan npm (Node Package Manager). Generalmente está configurado en el archivo ‘package.json’ de un proyecto y se utiliza para ejecutar un script llamado ‘dev’ que inicia el servidor de desarrollo.

Cuando ejecutas ‘npm run dev’, npm busca el script ‘dev’ en el archivo ‘package.json’ y ejecuta el comando asociado. Por lo general, este comando se utiliza para iniciar un servidor de desarrollo local que proporciona funciones de recarga en vivo, compilación automática y otras herramientas útiles para desarrolladores mientras trabajan en su aplicación.

En el contexto de Stellar, este comando podría usarse en el desarrollo de aplicaciones frontend o herramientas relacionadas con Stellar que utilicen JavaScript o TypeScript junto con npm como administrador de paquetes.

Y con esto hemos terminado de repasar todo lo necesario para que puedas comenzar a desarrollar en Stellar.

Recursos adicionales

Al finalizar este segundo tutorial ya tienes las capacidades base suficientes para comenzar en el desarrollo en Stellar, no obstante te recomendamos los siguientes recursos que te ayudarán en el camino:

Te recomendamos que veas el workshop que se encuentra en nuestro canal de YouTube, para que además de estos conceptos puedas ver más elementos y recomendaciones compartidas en el taller.

Sigue aprendiendo con nuestros artículos relacionados:
CryptoConexion | StellarEdu | Stellar | Blockchain

StellarEdu, descubre el poder de esta blockchain
StellarEdu es un programa educativo, en español y portugués, diseñado especialmente para introducirte en el ecosistema de la blockchain de Stellar.

Comparte nuestro artículo:
LinkedIn
Facebook
Twitter
Reddit
Telegram
WhatsApp
Email
Más sobre:
Te puede interesar