Empaquetando NFTs y FTs. Llegan los MEGA-PACKS! (1)
En artículos anteriores hemos visto cómo acceder a las tablas del smart contract “simpleassets” de Cryptolions para gestionar tokens fungibles (FT) y no fungibles (NFT).
- SimpleAssets — La Navaja Suiza de los Activos Digitales Coleccionables sobre la Blockchain de WAX
- SimpleAssets: Análisis del Contract y Creación de NFTs desde el Explorador de Bloques de WAX
- Leyendo tablas del contract SimpleAssets (CryptoLions) desde JavaScript
- Creando NFTs desde JavaScript con CryptoLions SimpleAssets contract
Hemos aprendido a crear la estructura de un proyecto en node.js para poder interactuar con el contract y vimos cómo crear un NFT y cómo destruirlo (Burn).
Los NFTs son una revolución para el mundo de los videojuegos debido a las enormes posibilidades de tokenización para todo asset o consumible incluido en un juego. La opción que tiene un jugador de poder intercambiar o comerciar con esos assets en un mercado ofrece un atractivo extra para los jugadores e, incluso, para los coleccionistas de activos digitales.
Una posibilidad que, desde mi punto de vista, está pasando muy desapercibida es la de agrupar tokens en “paquetes” que, como un cofre del tesoro, pueden facilitar la transferencia de activos o, simplemente, añadir un nivel más de abstracción para la diversión del juego.
Pongamos un ejemplo. Gracias a los éxitos de ventas con las colecciones de Garbage Pail Kids, William Shatner, Blockchain Heros y, recientemente, Korgs, nos hemos ido acostumbrando a la apertura de packs de cartas cuyo contenido es desconocido hasta el preciso momento de la apertura.
En realidad los tokens que hace la función de pack no contienen nada; cuando se procede a la apertura el contenido del sobre se genera nuevo o se selecciona de una lista de tokens ya generados que se mantienen aparte. Las diferentes técnicas que pueden elegirse para la gestión de card packs sería un tema interesante para tratar en otro artículo.
Pero supongamos que queremos vender un pack de activos para un juego que sea un poco especial; queremos que se vea que el pack contiene un conjunto de NFTs y/o FTs concreto y visible. Podrían ser cartas y/o consumibles para un juego.
Action “attach” — Empaquetanto NFTs.
Si revisamos en las acciones del contrato “simpleassets” nos encontramos con la acción “attach” y sus parámetros.
“attach” permite agrupar uno o varios (array) NFTs dentro de otro NFT que hará de contenedor.
- owner: Propietario del NFT contenedor
- assetidc: ID del NFT que hará de contenedor
- assetids: Array de IDs de los NFT que queremos empaquetar en el contenedor.
Para ilustrar este artículo con un ejemplo, he creado con mi cuenta “radaquesttcg” un NFT que hará de contenedor; el Mega-Hero Pack!
Según el ejemplo, el contenedor va a incluir:
- 1 Booster Pack (FT)
- 5 Starter Packs (FT)
- 5 Game Art (NFT)
- 1000 Soul Crystal (FT)
Attach — Código en JavaScript
Siguiendo con la línea de ejemplos de artículos anteriores, vamos a crear una función en nuestra librería “simpleassets.js” para empaquetar NFTs en otro NFT.
En primer lugar, antes de llamar a esta función desde nuestro código principal, necesitamos conocer los IDs de los NFTs que queremos empaquetar. Esta lista de IDs la guardaremos en un array (aunque solo sea 1 NFT)
donde <owner> será el nombre de la cuenta propietaria del contenedor.
Action “attachf” — Empaquetando FTs
En nuestro ejemplo queremos empaquetar varios NFTs y varios FTs. Ya hemos visto que empaquetar varios NFTs es muy sencillo gracias al uso de un array, pero no va a ser tan simple con los FT; cada tipo de FT deberá empaquetarse por separado. Veamos los parámetros de la acción para entenderlo mejor:
- owner: Propietario del contenedor
- author: Autor del FT que vamos a empaquetar
- quantity: Cantidad (incluyendo decimales y símbolo) de FT a empaquetar
- assetidc: ID del NFT contenedor
Attachf — Código en JavaScript
Vamos a crear una función para empaquetar un FT cada vez que la llamemos. Más adelante veremos un método para agilizar este procesdimiento.
Y la función de llamada:
Owner y author serán los nombres de cuentas del propietario del contenedor y del autor del FT, respectivamente. En este caso queremos empaquetar 1000 unidades de Soul Crystal, cuyo símbolo es “SC” y, como vimos antes, el ID del contenedor es 100000004703740.
Habría que llamar a la función tantas veces como tipos de FT queramos empaquetar.
Resultado
Si todo ha salido correctamente podremos comprobarlo en el explorador de bloques:
Los exploradores de bloques y los markets no están preparados para analizar los tokens que hacen de contenedor. Como ya mencioné al inicio del artículo, esta función aún no está siendo muy utilizada. Estoy convencido de que a medida que más proyectos de juegos se unan al ecosistema de WAX, empezaremos a verlo con mucha más frecuencia.
Por el momento, si accedemos al contenedor desde un explorador lo veremos como un NFT más:
Pero si accedemos a las tablas del contrato “simpleassets” podremos consultar la tabla “sassets” y comprobar que sí contiene los tokens.
En el próximo artículo veremos cómo mejorar la búsqueda del contenido de nuestro contenedor, cómo desempaquetar y cómo realizar varias acciones repetitivas de una manera más optimizada.