Acuñado de NFTs bajo demanda en WAX Blockchain; Drop System con AtomicAssets

Marcos DK
eosbarcelona
Published in
10 min readNov 16, 2020

No hay ninguna duda de que WAX Blockchain es, hoy por hoy, el Rey de los NFTs. Gracias a los smart contract de SimpleAssets y de AtomicAssets crear artículos digitales coleccionables es muy sencillo y barato tanto para grandes compañías como Topps como para cualquier usuario de la cadena. No es necesario tener muchos conocimientos técnicos para crear una colección de fotografías o ilustraciones en assets coleccionables y comerciables. En este mismo canal hemos publicado algún artículo sobre cómo hacerlo:

Creando NFT con SimpleAssets:

Creando NFT con AtomicAssets:

Para poder comerciar con los NFT es necesario que estos existan, por supuesto. Los NFT deben de estar acuñados para poder transferirse o venderse. El sistema tradicional de acuñado tiene dos inconvenientes:

  • Hay que estar atento al stock y a las ventas para reponer.
  • Las wallets de los creadores suelen quedar atestadas de NFTs acuñados esperando ser puestos a la venta.

El equipo de Pink Network, creadores del smart contract AtomicAssets, ha desarrollado un smart contract para generar NFT bajo demanda que ha venido a dar una práctica solución a este asunto: atomicdropsx. Gracias a este sistema serán los compradores quienes provocarán la acción de acuñado del NFT justo en el momento de la compra con lo que liberarán al creador de la tarea de mantener el stock en el market para que la demanda quede siempre satisfecha.

Antes de continuar quiero dejar claro un detalle de vital importancia. Este smart contract no ha sido lanzado oficialmente hasta la fecha; las acciones del smart contract pueden ser llamadas libremente para crear los “drops” y los NFT pueden reclamarse desde AtomicHub pero los usuarios deben ser conscientes de que el smart contract puede sufrir modificaciones, mejoras o incluso podría dejar de ser operativo si así lo decide el gremio Pink Network.

Para la explicación de cómo podemos crear un drop para distribuir nuestros NFTs voy a utilizar la testnet en lugar de la mainet y recomiendo a los usuarios que también lo hagan así, al menos una vez, antes de lanzarse a crear drops en la blockchain real.

Direcciones en Testnet:

Direcciones en Mainnet:

Todo el proceso se realiza de idéntica forma en la cadena de pruebas que en la real.

Como preparar nuestro NFT para distribuirlo con el sistema de Drops de AtomicAssets

Antes de empezar, sobre todo si estamos realizando una práctica en testnet, deberemos crear, al menos, una colección, un esquema y una plantilla para generar nuestros NFTs.

Ver: AtomicAssets: Estructura del estándar de NFT más popular de la blockchain.

Para que este smart contract pueda distribuir nuestros NFT será necesario que le otorguemos permiso. En WAX Blockchain todas las acciones que puede realizar un smart contract necesitan la autorización de una cuenta al menos. Para autorizar que el smart contract “atomicdropsx” pueda acuñar los NFTs por nosotros debemos hacer un cambio en el diseño de la colección a la que pertenece nuestro NFT.

En la vista de colección de nuestro editor de NFTs en AtomicHub veremos un botón para activar la vista de detalles avanzados:

Al hacer clic sobre el botón se despliegan dos cuadros de lista gracias a los cuales podremos añadir cuentas autorizadas al uso de los NFT (izquierda) y cuentas que recibirán notificaciones de las acciones que afecten a nuestros tokens (derecha).

En este caso deberemos añadir como cuenta autorizada a la cuenta del smart contract atomicdropsx por lo que hacemos clic en el botón “Edit Collection” para activar la edición y añadimos el nombre de la cuenta:

Una vez añadido el nombre de la cuenta se hace un clic en “Update Collection” para que los cambios queden almacenados.

Como sabemos, todo lo que se almacena en WAX Blockchain consume RAM. Esto afecta al código de los smart contracts y también a los NFTs que vayamos a acuñar. Pero ahora será el smart contract “atomicdropsx” quien acuñe los NFTs por nosotros por lo que necesitará RAM para poder hacerlo.

Nuestro siguiente paso será proveer al smart contract “atomicdropsx” de la RAM necesaria para que acuñe sin problemas nuestros NFTs. Será necesario realizar una transferencia de WAX para que el smart contract compre RAM y esta transferencia debe tener un memo construido de tal forma que identifique la colección a la que irá asociado.

deposit_collection_ram:<nombre_de_nuestra_colección>

Para el ejemplo de este artículo cuya colección se llama “totalwaxmrpg” sería de esta forma:

Si ahora vamos a la dirección del smart contract “atomicdropsx” y buscamos en la tabla “rambalances” deberemos encontrar el nombre de nuestra colección con la RAM disponible para nosotros. La cantidad de RAM a comprar dependerá de cuantos NFTs esperamos que pueda acuñar este smart contract por nosotros.

Aunque nuestra colección vaya a acuñar múltiples plantillas de NFTs, estos dos primeros pasos solo será necesario que los realicemos una vez (salvo si la RAM se agota y debemos realizar una nueva transferencia para poder seguir acuñando NFTs). Ya tenemos todo listo para configurar nuestro primer “Drop”.

Creación de un Drop con el smart contract para AtomicAssets, “atomicdropsx”

Para hacerlo vamos a utilizar el propio explorador de bloques tal y como hemos explicado en otros artículos acerca de cómo interactuar directamente con los smart contracts.

La acción con la que vamos a interactuar se llama “createdrop”

Datos a introducir:

  • authorized_account: Cuenta propietaria de la colección (la nuestra): arpegiator25 (en mi ejemplo)
  • collection_name: Nombre de la colección a la que pertenece el asset a acuñar: “totalwaxmrpg
  • assets_to_mint: Array que contiene el número de plantilla del asset a acuñar y, opcionalmente, los tokens que pueden acompañar al NFT para ser liberados en caso de ser quemado (Backed Tokens). Si vamos a hacer uso de la funcionalidad “Backed Tokens” será necesario que previamente hayamos transferido al smart contract “atomicdropsx” los tokens necesarios para esta distribución (acción “addcolbal”). Podemos listar el balance disponible de las colecciones observando la tabla “colbalances”. En caso de un drop normal, sin Backed Tokens, sería:
[ { “template_id”: 22912, “tokens_to_back”: [] } ]siendo 22912 el número de la plantilla seleccionada
  • listing_price: Precio de venta del NFT. El smart contract admite, por ahora, la venta en WAX y en DUST. La cantidad deberá expresarse con el formato “asset”, lo que implica detallar los decimales del asset y su símbolo. Si el precio de venta queremos que sea de 50 WAX deberemos escribir: 50.00000000 WAX. Si queremos hacer un drop gratuito (para fines publicitarios, por ejemplo) será 0.00000000 WAX
  • settlement_symbol: Símbolo de la moneda utilizada en el paso anterior. Hay que especificar el símbolo de la moneda y su precisión decimal. En el caso de WAX es: 8,WAX
  • price_recipient: dirección de la cuenta que recibirá los pagos cada vez que se haga la venta. Normalmente será la del creador del asset; la nuestra.
  • auth_required: Interruptor que permite especificar si el drop estará disponible para cualquiera (valor por defecto) o si por el contrario solo podrán hacer uso de él los usuarios cuyas cuentas incluiremos en un listado blanco a través de la acción “addtowl” (Add to White-list).

Podemos pensar que esto no tiene mucho sentido para un NFT que pretendemos vender, pero quizás nos interese limitarlos a un grupo de usuarios concreto. Por ejemplo, a los miembros de nuestro canal de Telegram o de Discord. Es una idea…

  • max_claimable: Número máximo de NFTs que el smart contract acuñará por nosotros. No debe sobrepasar el número máximo que especificamos en el momento de creación de la plantilla, pero tampoco tiene por qué coincidir con el total. Podemos hacer un drop solo de una parte del total posible.
  • account_limit: límite de NFTs que una única cuenta podrá reclamar. 0 para no especificar límite. Si queremos distribuir un NFT gratis para promocionar algo estaría bien limitar a 1 este valor para que pueda llegar al máximo número de usuarios posibles.
  • account_limit_cooldown: Podemos asociar el campo anterior a un temporizador de tal forma que si un usuario alcanza el límite de NFTs reclamados deba esperar el número de segundos que hemos especificado aquí antes de poder seguir reclamando más. También es una forma de facilitar la distribución evitando el acaparamiento masivo por parte de unos pocos. 0 para no especificar límite.
  • start_time: Podemos especificar la fecha y la hora a partir de la cual el drop podrá ser reclamado. El tiempo debe especificarse en formato segundos según el formato Unix para fechas. 0 para que el drop esté disponible en cuanto lo publiquemos.

Podemos hacer uso de conversores on-line para ayudarnos a calcular los segundos para una fecha determinada (https://www.epochconverter.com).

  • end_time: Fecha y hora límite tras la que el drop dejará de estar disponible independientemente del número de unidades acuñadas y/o disponibles. El formato es el mismo que el campo anterior. 0 para no especificar límite; el drop estará disponible hasta que las unidades se agoten (max_claimable), el smart contract agote la RAM disponible para la colección o nosotros mismos decidamos cancelar el drop, como veremos más adelante.
  • display_data: Debemos prestar especial atención a este campo ya que será el texto que acompañe al drop en la ventana de venta (o reclamación). Aquí es donde describiremos al usuario qué está reclamando y por qué debe de hacerlo. Será nuestro pequeño texto publicitario. Debemos especificar un objeto JSON en forma de string que contiene 2 elementos: “name” y “description”. El texto admite algunos modificadores de formato como ** para negritas, \n para salto de línea o [texto](url) para enlaces. Veamos este ejemplo:
{“name”:”Magina la Maga”,”description”:”**Siente el poder de la magia** \n \n No te quedes sin disfrutar de este fabuloso token que hará que la suerte te acompañe en tus futuras operaciones de compra/venta en el market! \n \n Visite nuestra [tienda on-line](https://wax.atomichub.io/) para obtener más artículos. \n \n **NOTA**: *El creador del token no puede garantizar que el efecto de la magia acompañe a todos los compradores. Declinamos toda responsabilidad en caso de malas compras*”}

Una vez creado el drop podremos localizar la transacción en la propia cuenta “atomicdropsx” para comprobar que está todo correcto y anotar el número de drop (drop_id) que le ha sido asignado:

Si ahora utilizamos el número de drop en la url de atomichub.io de esta forma:

https://wax-test.atomichub.io/drops/44

podremos acceder al interfaz público a través del cual los usuarios podrán reclamar el drop. Para el ejemplo he sido un poco exagerado; el precio del NFT ha sido de 1 millón de WAX y he especificado como fecha tope el 31 de diciembre de 2021 a las 23:59:59.

Cómo modificar o cancelar un drop activo en el market de AtomicHub y recuperar los activos no consumidos

El smart contract “atomicdropsx” disponde de varias acciones para modificar algunos de los datos de configuración del drop así como de la posibilidad de cancelarlo.

  • setacclimit: Permite modificar los parámetros que limitan el número de assets que una única cuenta puede reclamar así como el cooldown (si lo tuviera).
  • setdropdata: Permite modificar la descripción que acompaña al drop.
  • setdroptimes: Permite modificar las fechas de inicio y de finalización del periodo activo del drop.
  • erasedrop: Elimina el drop. No afecta a los assets ya acuñados ni a la colección a la que pertenece. Si la plantilla dispone aún de más unidades posibles para acuñar, estas podrán ser acuñadas con normalidad por el método tradicional o a través de un nuevo drop.

Si hemos cancelado los drops que teníamos activos y aún tenemos RAM reservada o aún hay balance de assets para el apartado Baked Tokens podremos reclamarlos:

  • withdraw: Podremos reclamar los tokens transferidos para hacer baked y que no hayan sido consumidos.
  • withdrawram: Podremos reclamar el valor de la RAM (en bytes) que aún esté disponible y que ya no vaya a ser utilizada. El smart contract venderá la RAM y nos transferirá su valor en WAX a nuestra cuenta.

¡Que no se te escape ni un solo drop!

Como hemos explicado, esta herramienta no ha tenido un lanzamiento “oficial” por lo que es más bien una herramienta “DIY” (Hágaselo usted mismo). Si queremos que los posibles compradores conozcan la existencia del drop deberemos publicar en nuestra web o en las redes sociales o en grupos de servicios de mensajería los enlaces a nuestros lanzamientos.

Si hemos creado más de un drop podemos generar un enlace que los incorpore a todos simplemente concatenando los números de drop_id:

https://wax-test.atomichub.io/drops/44+45+46+47+48

El mismo problema tienen todos los demás creadores que hacen uso de esta herramienta por lo que es complicado estar al tanto de todos los lanzamientos.

Por fortuna, el desarrollador Javier Mendoça ha creado una app para dispositivos móviles que nos avisará en tiempo real de todos los drops que se generen. La aplicación se llama “Atomic Drops Notifier” y puede descargarse gratis desde Google Store:

https://play.google.com/store/apps/details?id=com.javiermendonca.atomicdropsnotifier

--

--

Marcos DK
eosbarcelona

Programador y creador de contenidos digitales. Profesor de informática, game dev y líder de 3DK Render, WAX Guild.