Implementación de la Función buyItem en Sway para Compra de Artículos
Clase 10 de 16 • Curso de Programación de Contratos Inteligentes con Sway
Resumen
¿Cómo implementar la función buyItem en Sway?
La implementación de la función buyItem
en Sway requiere una cuidadosa atención a la lógica de negocio y a los detalles del lenguaje. Esta función se utiliza cuando un usuario desea comprar un artículo en un mercado, verificando que el usuario haga todo correctamente. A continuación, analizamos paso a paso cómo se lleva a cabo dicha implementación.
¿Cómo se establece el acceso y los argumentos iniciales?
La función buyItem
requiere acceso tanto de lectura como de escritura en el almacenamiento, ya que va a modificar datos existentes. Inicia con un argumento de tipo itemId
de tipo U64
, que se utiliza para identificar qué artículo desea comprar el usuario.
¿Cómo se gestionan los identificadores de activos?
En primer lugar, obtenemos el assetId
desde el mensaje recibido para identificar el tipo de token que el usuario está enviando. Comparamos este identificador con uno de base para asegurarnos de que el tipo de token sea el correcto antes de proceder. Si no coincide, se lanza un error.
let asset_id: ContractId = msg_asset_id;
require!(asset_id == BASE_ASSET_ID, InvalidError::IncorrectAssetId);
¿Cómo se verifica la cantidad correcta de tokens?
La siguiente verificación implica la cantidad de tokens que se envían. Se definen variables para almacenar la cantidad de tokens y a través de una comparación se asegura que el usuario está enviando al menos la cantidad requerida. Si no es suficiente, se lanza otro error.
let amount: u64 = msg_amount;
require!(amount >= item.price, InvalidError::NotEnoughTokens(amount));
¿Cómo se gestiona el artículo a comprar y su validación?
Después de verificar los tokens, se accede al artículo utilizando su itemId
. Se comprueba que el itemId
sea válido (mayor que cero), y se lanza un error en caso contrario.
let mut item: Item = storage.item_map.get(item_id).unwrap();
require!(item_id > 0, InvalidError::InvalidItemId);
¿Cómo actualizar el número de artículos comprados?
Una vez validado el artículo, el siguiente paso es actualizar la propiedad total_bought
del artículo para reflejar la nueva compra.
item.total_bought += 1;
storage.item_map.insert(item_id, item);
¿Cómo añadir compras al vector de compras y calcular comisiones?
El vector de compras se actualiza con la ID del artículo y la identidad del comprador, quien originalmente inició la transacción. Si el importe supera un cierto umbral, se calcula una comisión que se retira del monto total antes de pagar al vendedor.
let sender = msg_sender;
storage.purchases.push((item_id, sender.unwrap()));
let new_amount = if amount > 1000 {
amount - (amount / 20)
} else {
amount
};
¿Cómo se realiza la transferencia al vendedor?
Independientemente de si se cobró comisión o no, la transferencia se realiza al propietario del artículo con el importe correcto.
transfer(new_amount, asset_id, item.owner);
Recomendaciones y práctica
Implementar funciones complejas como buyItem
requiere práctica y comprensión profunda del lenguaje Sway. Se sugieren las siguientes prácticas para afianzar el aprendizaje:
- Práctica constante: Codear y experimentar con diferentes escenarios utilizando Sway fortalecerá tu capacidad para manipular contratos inteligentes.
- Explora nuevas lógicas de comisión: Intenta implementar una lógica donde la comisión se base en el número de ventas y no en el importe, como ejercicio propuesto.
- Comparte mejoras: Documenta tu código personalizado y compártelo para obtener retroalimentación, lo cual enriquecerá tu aprendizaje.
Recuerda, el camino al dominio de un lenguaje como Sway es un viaje continuo lleno de desafíos emocionantes. ¡Sigue practicando y mejorando!