NFTs PARA DEVELOPERS

6
Tips y conceptos para desarrolladores que están arrancando en el universo blockchain, NFTs y ethereum.
Ernesto Ponce, Developer en Pigmalion Software.

Hacia finales de 2021, surgió la posibilidad de empezar un nuevo proyecto que estaba relacionado con el mundo de los NFT/blockchain. En ese momento, tenía una idea muy básica sobre el funcionamiento de blockchain y solo había leído algunas noticias sobre el hype que habían provocado los NFTs, durante los últimos años. Había opiniones muy fervientes acerca de su objetivo y lugar en el mundo de la tecnología como: “Esto va a revolucionar el mundo y las aplicaciones distribuidas (DApps) van a ser el futuro”. Pero también había comentarios en contra: “La blockchain no tiene ningún sentido práctico, consume mucha energía, es complejo de entender y se implementa en lugares en los cuales no es necesario”.

Si bien el concepto de Web 3.0 está en una etapa de evolución y desarrollo y aún no existe en el mercado una killer app (como pueden ser Facebook o Twitter para la web2.0), en lo personal, creo que esta tecnología va a seguir dando vueltas entre nosotros por mucho tiempo y, nos guste o no, va a ser difícil ignorarla.


Interacción con blockchain

¿Cómo podemos conectarnos a la blockchain? ¿Necesitamos conocer los protocolos necesarios y desarrollar un servicio para cada tipo de blockchain? 

No, necesariamente. Afortunadamente, tenemos una opción para conectarnos con la blockchain sin necesidad de ser expertos mediante un servicio llamado Tatum (https://tatum.io/). Este servicio nos permite desarrollar aplicaciones que se conectan a diferentes tipos de  blockchain  (hay muchas con diferentes características ) mediante una API REST, aunque no conozcamos a bajo nivel cómo funciona cada uno de los protocolos.

En este sentido, el proyecto en el que estamos trabajando requiere de ciertas acciones que se tienen que llevar a cabo en la blockchain:
  • Crear wallets y address para los usuarios que se registran en la app
  • Crear Smart contracts
  •  Crear NFTs y asignarlos a un address/usuario
  • Transferir NFTs entre wallets

Aunque todo esto se puede realizar mediante el uso de Tatum, también hay algunas inconsistencias en los diferentes payloads (datos que se envían a la API) que no siguen el mismo formato, lo cual requiere de cierta verificación a la hora de implementar nuestro back-end. Por otro lado, también es necesario configurar un servicio llamado Tatum-KMS en producción, que se encarga de firmar las transacciones de manera segura.


¿Qué es un Smart Contract?

Los smart contracts se pueden definir como programas que viven en una máquina virtual de la red Ethereum u alguna otra blockchain similar. Estos programas ejecutan cierto código cuando se cumple determinada condición y son el estándar necesario para el funcionamiento de los NFTs.

Para el desarrollo de smart contracts se utiliza un lenguaje de programación llamado solidity. Otra opción para la creación de smart contracts es utilizar el servicio Tatum, que nos permite crear un smart contract estándar con el cual se pueden mintear, quemar y hacer transferencias de NFT sin necesidad de desarrollar un smart contract desde cero. Para los requerimientos actuales del proyecto esto es más que suficiente.

El smart contract siempre debe estar asociado a alguna de las siguientes blockchain específicas disponibles:

  • Ethereum
  • Polygon
  • Celo
  • Flow 

Entonces, la herencia y relación sería la siguiente:

BLOCKCHAIN -> SMART CONTRACT -> NFT


¿Qué es un NFT?

Los NFT se definen como activos digitales únicos que no pueden reemplazarse y que tienen que estar asociados a un smart contract específico. Pueden leer más al respecto en una nota anterior de Galatea.

Dado que yo sabía que, en general, los datos que tienen los NFTs son imágenes, la primera pregunta que me hice fue: ¿De qué manera se guardan esas imágenes?  ¿Se almacenan los bytes de cada NFT en la blockchain?

Para mi sorpresa, pude entender que los datos, o mejor dicho la metadata que contienen los NFTs, no se guardan directamente en la blockchain sino que se trata de una URL que contiene el JSON que define varios atributos entre los cuales se encuentra la URL de una imagen, la que se guarda en el atributo metadata de los NFT como valor. Una de las opciones es tener un servidor propio para guardar la metadata pero esto puede generar algunos problemas.

Por ejemplo:

  • El servidor que hospeda la URL con la metadata puede dejar de funcionar, lo cual hace inservible al NFT.
  • El dueño del servidor podría modificar el contenido de la metadata o imagen cuando quisiera, lo cual podría ser un problema o no dependiendo del tipo de app que se esté desarrollando.

Entonces, ¿de qué manera se podría solucionar esto? Veamos otras opciones como, por ejemplo, IPFS.

¿Qué es IPFS?

Una alternativa que se puede utilizar para evitar el problema de tener la metadata y las imágenes en un servidor es usar una tecnología llamada IPFS (InterPlanetary File System). Se trata de un sistema descentralizado y distribuido de archivos, que nos permite subir archivos de diferentes tipos (texto, imágenes, videos, etc.) a su red, y que va a estar distribuido y disponible en los diferentes nodos que formen parte de la red IPFS,  el archivo va a estar representado por un hash y tiene este formato: ipfs://juolkavfrey

El punto negativo que tiene subir los archivos a IPFS en contraposición a un servidor o bucket tradicional es que, en este caso, no se puede acceder directamente a la imagen vía HTTP , si no que tenemos que utilizar un servicio gateway o algo similar. Afortunadamente, tenemos varias opciones para esto y que las apps del lado del cliente puedan visualizar las imágenes de los NFTs.


Para subir los archivos a IPFS podemos usar el servicio tatum mediante su API.

Para poder acceder a un archivo que esté en IPFS se puede usar un gateway, el que estamos usando actualmente en el proyecto es el que proporciona Cloudfare:


En definitiva, la mejor opción que va más en concordancia con la idea de la descentralización es usar IPFS en lugar de un servidor propio.

Ejemplo metadata json NFT

{

  «name»: «Name NFT»,

  «description»: «Description NFT»,

  «image»: «ipfs://ipfshash»,

}


CONCLUSIONES

Aun cuando esta fue una primera introducción al mundo de los NFTs, quedan muchos temas por revisar que se podrían profundizar en próximos artículos.

. Diferencias entre distintas blockchains

. Diferentes estándares para la creación de smart contracts

. Manejo de custodial address,  loyalties, etc.

. Implementación en backend

. etc

REFERENCIAS

Api docs tatum  https://apidoc.tatum.io/

Guia blockchain NFT   https://launchpad.ripio.com/guias

IPFS  https://ipfs.io/

Cloudfare gateway  https://developers.cloudflare.com/web3/ipfs-gateway/

Related Posts

Deja un comentario

A %d blogueros les gusta esto: