Mercado Descentralizado: Compra y Venta de Logros con Criptomonedas
Clase 9 de 15 • Curso de Programación de Smart Contracts con Solidity
Resumen
¿Cómo combinar logros y monedas en un juego mediante un Marketplace?
En el mundo del desarrollo de videojuegos, la integración de sistemas de recompensa puede ser un pilar fundamental para mantener activa la participación y el interés de los jugadores. Imagine poder vincular un sistema de logros con una moneda interna del juego: los logros actúan como objetivos o trofeos, y las monedas como recompensa. Profundicemos en cómo puedes implementar un Marketplace descentralizado para comprar y vender logros en juegos usando contratos inteligentes.
¿Cómo resolver el desafío de logros y emisión de monedas?
El primer paso para lograr la integración fue incrementar la emisión de monedas si un jugador ya ha adquirido un logro. Este mecanismo se verifica gracias a la función balanceOf
en los contratos, que nos indica cuántos tokens posee una cuenta. Si el balance es mayor a cero, significa que el jugador ya tiene un logro, y, por ende, la recompensa se duplica.
¿Cómo modelar un Marketplace descentralizado?
Para crear un mercado de logros, es necesario un contrato separado que maneje las transacciones. Este contrato referenciará a las interfaces de los tokens fungibles (ERC20) y no fungibles (ERC721), lo cual optimiza el contrato al hacerlo más ligero.
En el Marketplace, las funciones claves son las de publicación y compra:
- Publicación: Validar que el ID del token a publicar no esté ya registrado y que el valor de publicación sea mayor a cero.
- Compra: Asegurarse de que el usuario tiene fondos suficientes y que el token está publicado y disponible para la venta.
Ejemplo de implementación de las validaciones y transferencias
El contrato Marketplace debe gestionar las aprobaciones para transferir los tokens al vender logros. A continuación, se revisa si la cuenta vendedora ha autorizado al Marketplace para administrar el token.
// Verificar si el Marketplace tiene permiso para transferir el logro
require(getApproved(tokenId) == address(this), "No hay permiso para transferir");
Al completar las validaciones, se lleva a cabo la transferencia del token y el registro de la operación.
// Transferir fondos desde el comprador al vendedor
IERC20(tokenContract).transferFrom(msg.sender, ownerAddress, salePrice);
// Transferir el logro del vendedor al comprador
IERC721(achievementContract).transferFrom(ownerAddress, msg.sender, tokenId);
Implementación de pruebas y desafíos futuros
Con el contrato desplegado, es crítico asignar las direcciones correctas a través de un constructor, garantizando la correcta inicialización de las variables. Pruebe estas operaciones asegurándose de que los permisos adecuados estén en su lugar antes de cada transacción.
Finalmente, te proponemos un desafío emocionante: transforma este Marketplace en un modelo de subastas, elevando así la plataforma a un nuevo nivel de interactividad y estrategia. Revisa estos conceptos y continúa aprendiendo. ¡El mundo del desarrollo de videojuegos basado en blockchain te espera!