Acuñación y envío de tokens

Ahora que tenemos nuestro contrato inteligente desplegado podemos acuñar tokens que pueden ser enviados a otras direcciones Archway.

Minting tokens

MintMsg es un tipo de mensaje del paquete cw721_base importado por el Cargo.toml de nuestro proyecto. Lo utiliza el gestor de ejecución de nuestro contrato para establecer el estado de un NFT con metadatos correspondientes al modelo TokenInfo que vimos anteriormente.

Para acuñar un NFT, necesitamos enviar una transacción al contrato inteligente con nuestros parámetros MintMsg en formato JSON. Para añadir rasgos personalizados, podemos utilizar la plantilla NFT de metadatos on-chain e incluir valores de metadatos arbitrarios utilizando el atributo extensions de MintMsg.

Esta es la cadena JSON que utilizaremos para acuñar nuestra NFT de prueba:

{
  "mint": {
    "token_id": "1",
    "owner": "archway1f395p0gg67mmfd5zcqvpnp9cxnu0hg6r9hfczq",
    "extension": {
      "name": "Archway NFT #1",
      "description": "Building With NFTs",
      "image": "ipfs://QmZdPdZzZum2jQ7jg1ekfeE3LSz1avAaa42G6mfimw9TEn",
      "attributes": [
        {
          "trait_type": "tutorial",
          "value": "https://docs.archway.io/developers/guides/nft-project/start"
        }
      ]
    }
  }
}

Para ejecutar nuestra transacción mint añadimos los argumentos JSON usando el flag --args del comando tx de la Archway Developer CLI.

Developer CLI
archway contracts execute basic-nft --args '{"mint":{"token_id":"1","owner":"archway1f395p0gg67mmfd5zcqvpnp9cxnu0hg6r9hfczq","extension":{"name":"Archway NFT #1","description":"Building With NFTs","image":"ipfs://QmZdPdZzZum2jQ7jg1ekfeE3LSz1avAaa42G6mfimw9TEn","attributes":[{"trait_type":"tutorial","value":"https://docs.archway.io/developers/guides/nft-project/start"}]}}}'

Archwayd
archwayd tx wasm execute --chain-id constantine-3 --gas 5000000 --fees 8000aconst archway188u72zstacfq4uknszr0cqry8vn68ynrcfcee4xjlmk6v2vhewysnkr798  '{"mint":{"token_id":"1","owner":"archway1f395p0gg67mmfd5zcqvpnp9cxnu0hg6r9hfczq","extension":{"name":"Archway NFT #1","description":"Building With NFTs","image":"ipfs://QmZdPdZzZum2jQ7jg1ekfeE3LSz1avAaa42G6mfimw9TEn","attributes":[{"trait_type":"tutorial","value":"https://docs.archway.io/developers/guides/nft-project/start"}]}}}' --from my-wallet --node https://rpc.constantine.archway.tech:443

Para confirmar que el NFT está ahora correctamente almacenado en la cadena, ejecute el comando de consulta, especificando el token_id declarado en la transacción de acuñación:

archway contracts query smart basic-nft --args '{"nft_info":{"token_id":"1"}}'
# Show output here

El comportamiento del punto de entrada nft_info se define aquí si desea leer el modelo de respuesta en detalle.

Enviando tokens

Para transferir un token, tenemos que enviar un mensaje del tipo TransferNft, lo que conseguimos enviando una transacción al punto de entrada transfer_nft expuesto por el contrato. Los parámetros que enviamos al punto de entrada son: la dirección del destinatario; y el token_id que se enviará al destinatario.

En formato JSON, los argumentos de nuestra transacción tienen este aspecto:

{
  "transfer_nft": {
    "recipient": "archway1y00hm50lffnxt5m0kuy9afk83gyuye684zwcr5",
    "token_id": "1"
  }
}

Utilizando la Developer CLI, emitimos la transacción e incluimos los parámetros anteriores de la siguiente manera:

Developer CLI
archway contracts execute basic-nft --args '{"transfer_nft":{"recipient":"archway1y00hm50lffnxt5m0kuy9afk83gyuye684zwcr5","token_id":"1"}}'

Archwayd
archwayd tx wasm execute --chain-id constantine-3 --gas 5000000 --fees 8000aconst archway19tj3m5rnspptlyjellxr7hqp9n7szym3wmgxs5g60guk64gpeaqq4r3h5c '{"transfer_nft":{"recipient":"archway1y00hm50lffnxt5m0kuy9afk83gyuye684zwcr5","token_id":"1"}}' --from my-wallet --node https://rpc.constantine.archway.tech:443

Una vez confirmada la transacción, la propiedad del token cambiará de la dirección declarada como propietaria en la acuñación (archway1f395p0gg67mmfd5zcqvpnp9cxnu0hg6r9hfczq en el ejemplo de esta guía), a la nueva dirección receptora (archway1y00hm50lffnxt5m0kuy9afk83gyuye684zwcr5 en el ejemplo de esta guía). Para verificar que ese es el caso, podemos consultar el contrato de nuevo para ver a quién pertenece el token_id con el valor 1.

archway query contract-state smart --args '{"nft_info":{"token_id":"1"}}'
# Show output here

Ahora que el contrato está en marcha, sigue leyendo para aprender a construir una dapp en torno a la funcionalidad de acuñación y transferencia que acabamos de probar.

Last updated