Desarrollo de Contratos Inteligentes en Sway: Mercado Online Intermedio
Clase 8 de 16 • Curso de Programación de Contratos Inteligentes con Sway
Resumen
¿Cómo podemos encontrar la librería estándar de Sway?
Para desarrollar contratos inteligentes en Sway, es esencial familiarizarse con su librería estándar. Si eres nuevo en el mundo de Sway, un buen punto de partida es explorar el repositorio en GitHub. Al navegar al repositorio de Fuel Labs, encontrarás una carpeta denominada Sway Lib STD
. Esta carpeta ofrece una visión general y explica cómo importar funcionalidades en tu contrato. Al explorar la carpeta de origen, descubrirás una lista detallada de todos los elementos que puedes utilizar. Este proceso es fundamental para escribir contratos inteligentes más complejos, ya que facilita el acceso a las funcionalidades necesarias mientras desarrollas tu proyecto.
¿Cómo empezar un nuevo proyecto Sway?
Para iniciar un nuevo proyecto en Sway, sigue estos pasos básicos en tu terminal:
-
Crear una carpeta nueva: Utiliza el comando
mkdir
para crear una nueva carpeta, por ejemplo:mkdir SwayStore
-
Acceder a la carpeta: Navega dentro de la carpeta creada usando el comando
cd
:cd SwayStore
-
Crear un nuevo proyecto Sway: Usa el comando
forc new
seguido del nombre que desees darle a tu contrato:forc new SwayStoreContract
Este proceso genera la estructura básica de tu proyecto en Sway y podrás empezar a trabajar en tu código.
¿Cómo definir tu ABI y estructura de datos?
Cuando desarrollamos un contrato inteligente avanzado, es fundamental definir de manera correcta el ABI (Application Binary Interface) y las estructuras de datos. En nuestro proyecto, comenzamos creando un archivo sway_store.sw
que defina nuestra ABI y las estructuras de datos necesarias.
Definir la ABI
El ABI en Sway se define comenzando por especificar el tipo de programa como una librería. A continuación, nombramos la librería, en nuestro ejemplo sway_store
, y definimos la ABI con las funciones necesarias:
abi swat_store {
fn list_item(storage: read_write, price: u64, metadata: str[20]);
fn buy_item(storage: read_write, item_id: u64);
fn get_item(storage: read, item_id: u64) -> Item;
fn initialize_owner(storage: read_write) -> Identity;
fn withdraw_funds(storage: read);
}
Estructura del Item
Además, definimos una estructura llamada Item
que representa un objeto en nuestro mercado. Esta estructura incluye:
id
: un identificador único de tipoU64
.price
: el precio del ítem de tipoU64
.owner
: la identidad del propietario.metadata
: una cadena de hasta 20 caracteres.bought_total
: un contador que indica cuántas veces se ha comprado el ítem.
struct Item {
id: U64,
price: U64,
owner: Identity,
metadata: str[20],
bought_total: U64
}
Estas definiciones proporcionan la base para el funcionamiento del mercado online similar a Amazon que estamos desarrollando.
¿Cómo implementar las funciones en el archivo main de Sway?
Tras definir el ABI y la estructura de datos, el siguiente paso es implementar las funciones en el archivo principal main.sw
. Aquí es donde se escriben las implementaciones de las funciones que definimos en la ABI.
Configuración inicial
-
Tipo de programa: Inicia definiendo el tipo de programa:
contract;
-
Declarar dependencias: Conecta el archivo
main
con la librería usando la palabra clavedep
seguida del nombre de la librería:dep sway_store; use sway_store::*;
-
Variables de almacenamiento: Define las variables que usará el contrato, teniendo en cuenta que en Sway, todas las variables de almacenamiento se declaran en un bloque específico:
storage { item_counter: U64 = 0, item_map: StorageMap<U64, Item>, purchases: StorageVec<(U64, Identity)>, owner: Option<Identity> }
Manejo de errores con Enums
Para gestionar errores potenciales, definimos enumeraciones que identifican diversos errores, como IncorrectAssetId
, NotEnoughTokens
, y OwnerNotInitialized
, entre otros. Estos enums ayudarán a manejar de manera eficiente las excepciones que puedan surgir durante la ejecución del contrato.
Estos pasos iniciales son cruciales para estructurar adecuadamente tu contrato en Sway y te permitirán avanzar hacia la implementación y funcionalidad deseadas en tu aplicativo. Motivaos para explorar y practicar creando vuestra solución personalizada en vuestro entorno.