WEB3DEV Español

Cover image for Desarrollo de Contratos Inteligentes en el Protocolo NEAR con Rust
Juliana Cabeza
Juliana Cabeza

Posted on

Desarrollo de Contratos Inteligentes en el Protocolo NEAR con Rust

Desentrañando las joyas del Protocolo NEAR y Rust

El Protocolo NEAR emerge como una blockchain de vanguardia, con fragmentación y prueba de participación, ganando su lugar en el mundo de las Aplicaciones Descentralizadas (DApps). Su punto de venta exclusivo es la integración con Rust, un lenguaje de programación de sistemas conocido por su enfoque incansable en la seguridad de la memoria y la concurrencia, convirtiéndose en un candidato ideal para las demandas del desarrollo de contratos inteligentes.

Image description

Revolucionando Códigos de Contratos Inteligentes

Los principios de diseño de Rust priorizan abstracciones sin costo, semántica de movimiento y seguridad de memoria garantizada, estableciendo un alto estándar en el ámbito del desarrollo blockchain. Su sistema de verificador de préstamos (borrow checker) y modelo de propiedad son factores decisivos en la prevención de carreras de datos y la garantía de la seguridad de los hilos (threads), elementos críticos en el mundo inmutable y transparente de los contratos inteligentes.

Herramientas y SDK: La Base de NEAR y el Desarrollo en Rust

Los desarrolladores que se embarcan en este viaje necesitan dominar la herramienta Rust y las complejidades de la interfaz de línea de comandos (CLI) y el kit de desarrollo de software (SDK) de NEAR.

Image description

El NEAR CLI ofrece una variedad de opciones al ser inicializado.

Esta caja de herramientas no se trata solo de escribir código Rust; se trata de entender cómo transpilarlo a WebAssembly (Wasm) — el bytecode que se ejecuta en la blockchain NEAR. Este proceso implica aprovechar el poder de cargo, el gestor de paquetes y sistema de construcción de Rust, e integrar con las bibliotecas específicas de la blockchain NEAR proporcionadas en el SDK.

Configuración de la herramienta Rust y Wasm

Para comenzar a desarrollar contratos inteligentes en el Protocolo NEAR utilizando Rust, el primer paso implica configurar el entorno Rust y la herramienta WebAssembly (Wasm). La herramienta Wasm es esencial, ya que los contratos inteligentes que desarrollas se compilarán a Wasm para ejecutarse en la blockchain NEAR. Para usuarios de Linux o MacOS, el proceso de configuración se inicia a través de la línea de comandos utilizando:

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

source $HOME/.cargo/env

Enter fullscreen mode Exit fullscreen mode

A continuación, se añade la herramienta wasm32-unknown-unknown:

rustup target add wasm32-unknown-unknown
Enter fullscreen mode Exit fullscreen mode

Esta configuración establece la base para el desarrollo e implementación de contratos inteligentes basados en Rust en NEAR.

Inicialización del Proyecto: Aplicación NEAR y SDK Rust

Crear una nueva aplicación NEAR con un front-end integrado puede realizarse de manera eficiente utilizando la herramienta create-near-app. Esta herramienta simplifica el proceso, especialmente al comenzar con el SDK Rust. El siguiente comando muestra cómo iniciar un proyecto con el SDK Rust y sin un framework de front-end específico (siendo el estándar HTML puro):

npx create-near-app my-project --contract rust --frontend none --tests rust
Enter fullscreen mode Exit fullscreen mode

Para desarrolladores centrados exclusivamente en el desarrollo e implementación de contratos en Rust, se recomienda encarecidamente utilizar el ejemplo de mensaje de estado (status message example) o la herramienta cargo-generate.

Configuración Avanzada del Proyecto con cargo-generate

Para una configuración más personalizada, cargo-generate es una herramienta invaluable. Permite la creación de un nuevo modelo de proyecto, especialmente adaptado para contratos NEAR basados en Rust. Para inicializar un proyecto con cargo-generate, se utilizan los siguientes comandos:

cargo install cargo-generate --features vendored-openssl   

cargo generate --git https://github.com/near-examples/rust-status-message --name my-project

cd my-project
Enter fullscreen mode Exit fullscreen mode

Al generar manualmente un nuevo crate con cargo new --lib <nombre-de-la-caja>, es crucial incluir configuraciones específicas en el archivo Cargo.toml. Estas configuraciones aseguran la configuración adecuada para la compatibilidad con el NEAR SDK, la optimización para un tamaño de código pequeño y las verificaciones de seguridad en operaciones aritméticas:

[dependencies]  

near-sdk = "4.0.0"

[lib]  

crate-type = ["cdylib"]  

[profile.release]  

codegen-units = 1  

opt-level = "z"  

lto = true   

debug = false   

panic = "abort"  

overflow-checks = true

Enter fullscreen mode Exit fullscreen mode

Estas configuraciones en el Cargo.toml optimizan el código Rust para una ejecución eficiente en el entorno de la blockchain NEAR, asegurando no solo rendimiento, sino también conformidad con estándares de seguridad.

Programación Asíncrona y Gestión de Estado en Rust en NEAR

  • Manipulación de Patrones Async/Await: en Rust, gestionar operaciones asíncronas implica dominar la sintaxis async/await, crucial para operaciones de entrada/salida no bloqueantes, un escenario común en el desarrollo de DApps.
  • Contratos Inteligentes Estatales: cuando se trata de gestión de estado en contratos inteligentes en NEAR, entender el enfoque sutil de Rust para la asignación de memoria y la serialización/deserialización de datos es fundamental. El sistema de tipos riguroso de Rust, combinado con sus potentes capacidades de macros, permite a los desarrolladores manejar eficientemente cambios de estado y gestión de almacenamiento en un entorno de blockchain.
  • Llamadas y Retornos entre Contratos: una investigación profunda sobre las llamadas asíncronas entre contratos de NEAR revela una interacción compleja entre los futuros de Rust y los mecanismos de manejo de errores. Esto requiere una comprensión sofisticada del modelo de concurrencia de Rust, especialmente en cómo se integra con el entorno de ejecución de NEAR y maneja patrones de retorno de llamada.

Paradigmas de Seguridad en Rust para Aplicaciones Blockchain

El desarrollo en Rust para blockchain requiere una comprensión integral de las mejores prácticas de seguridad.

Esto incluye ser hábil en aprovechar la seguridad de tipos y manejo de errores de Rust para prevenir vulnerabilidades comunes, como ataques de reentrancia, desbordamientos de enteros y acceso no autorizado; todos ellos muy comunes en entornos de programación menos rigurosos.

Recursos Avanzados de Rust para Contratos Inteligentes Optimizados

Aunque los recursos de Rust no previenen automáticamente estas vulnerabilidades lógicas, pueden contribuir a hacerlas menos probables:

  • Modelo de Propiedad y Préstamo: el sistema de propiedad de Rust puede ayudar a gestionar el estado de manera más segura. Al imponer reglas estrictas sobre cómo se accede y muta a los datos, Rust puede garantizar que el estado no sea modificado inesperadamente durante la ejecución.
  • Seguridad de Tipo y Claridad: el sistema de tipos y los requisitos para el manejo explícito de posibles condiciones de error hacen más fácil escribir código claro y comprensible, donde el programador debe considerar casos extremos y posibles vulnerabilidades.
  • Gestión de Concurrencia: aprovecha el avanzado modelo de concurrencia de Rust, incluyendo threads y canales, para crear contratos inteligentes de alto rendimiento y escalables que puedan manejar cálculos complejos y alta tasa de transferencia. Las sólidas garantías de Rust sobre concurrencia pueden ayudar en escenarios donde las llamadas de contrato son asíncronas, pero esto no se traduce directamente en la prevención de ataques.

Conclusión: Trabajando hacia el Futuro con NEAR y Rust

Esta exploración destaca la combinación formidable del Protocolo NEAR y Rust en el ecosistema de blockchain.

Como desarrollador en este espacio, dominar estas herramientas y conceptos no se trata solo de escribir código. Se trata de abrazar un nuevo paradigma en la computación descentralizada, donde la eficiencia, la seguridad y la escalabilidad no son solo ideales, sino requisitos previos.

La fusión de la tecnología blockchain de vanguardia de NEAR con las robustas capacidades de programación de Rust representa la vanguardia del desarrollo de contratos inteligentes, allanando el camino para una nueva generación de DApps seguras, eficientes y escalables.

Este artículo fue escrito por M. Kuck y traducido por Juliana Cabeza. El original en inglés se puede encontrar aquí.

Discussion (0)