Desarrollo de Contratos Inteligentes en Sway: Mercado Online Intermedio

Clase 8 de 16Curso 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:

  1. Crear una carpeta nueva: Utiliza el comando mkdir para crear una nueva carpeta, por ejemplo:

    mkdir SwayStore
    
  2. Acceder a la carpeta: Navega dentro de la carpeta creada usando el comando cd:

    cd SwayStore
    
  3. 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 tipo U64.
  • price: el precio del ítem de tipo U64.
  • 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

  1. Tipo de programa: Inicia definiendo el tipo de programa:

    contract;
    
  2. Declarar dependencias: Conecta el archivo main con la librería usando la palabra clave dep seguida del nombre de la librería:

    dep sway_store;
    use sway_store::*;
    
  3. 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.