Construir un sistema de identidad único para cada NFT requiere mucho más que asignar una imagen al azar. En el caso de los PlatziPunks, cada token posee un ADN numérico que determina sus trece propiedades visuales, desde el color de piel hasta los accesorios. Comprender este mecanismo es clave para programar smart contracts que generen coleccionables verdaderamente únicos.
¿Cómo se genera la imagen de un PlatziPunk a partir de su metadata?
El atributo image dentro del JSON de metadata debe apuntar a una representación visual del NFT. Existen dos caminos principales para lograrlo:
- SVGs on-chain: algunos desarrolladores construyen gráficos SVG directamente dentro del blockchain y los codifican en base64. Es válido, pero considerablemente más complejo.
- API externa: en este proyecto se utiliza una URL pública del dominio
avatars.io que recibe parámetros y retorna un SVG combinando las facciones del avatar [1:30].
La API ya retorna un SVG listo para usarse. Esto significa que plataformas como OpenSea o cualquier aplicación web pueden insertar esa URL en una etiqueta <image> y mostrar el PlatziPunk sin procesamiento adicional.
¿Qué propiedades componen un PlatziPunk?
Cada PlatziPunk cuenta con trece propiedades combinables [3:08]. Algunas de ellas pueden tener hasta veinte variaciones, mientras que otras solo cuatro o cinco. La combinación de todas estas propiedades es lo que genera la rareza de cada NFT, un concepto fundamental en cualquier colección de coleccionables digitales.
Dependiendo de ciertas condiciones, un atributo puede mostrarse o no aunque esté especificado. Esto añade una capa de aleatoriedad que hace que cada PlatziPunk sea potencialmente irrepetible.
¿Qué es el ADN y cómo se estructura en Solidity?
El ADN es un número secuencial calculado internamente en Solidity, almacenado como un uint256 (unsigned integer de 256 bits) [3:42]. Aunque este tipo de dato soporta números enormes, solo se utilizan los últimos veintiséis dígitos, organizados en trece pares.
Cada par de dígitos corresponde a una de las trece propiedades del PlatziPunk. Con dos dígitos se cubren valores del 0 al 99, suficiente para mapear incluso las propiedades con veinte variaciones.
¿Cómo se extraen los pares de dígitos con operaciones matemáticas?
El procedimiento para separar cada par del número completo se basa en dos operaciones aritméticas: módulo y división entera [4:48].
- Primer par (últimos dos dígitos): se calcula
ADN % 100. El módulo entre cien elimina todo excepto los dos dígitos finales.
- Segundo par (penúltimos dos dígitos): se calcula
(ADN % 10000) / 100. El módulo entre diez mil conserva los últimos cuatro dígitos y la división entre cien descarta los dos de la derecha.
En Solidity no existen los números de punto flotante (floating point), por lo que la división entera trunca automáticamente los decimales. Si el resultado intermedio fuera 23.45, Solidity devuelve directamente 23 [5:32].
La regla general es:
- El módulo define cuántos dígitos conservar desde la derecha.
- La división define cuántos dígitos eliminar desde la derecha.
Practicar este procedimiento en papel antes de codificarlo es una recomendación directa, ya que constituye la pieza fundamental del sistema de ADN.
¿Cómo se convierte un número de ADN en un atributo visual?
Una vez extraído el par de dígitos correspondiente, hay que traducirlo a un atributo concreto como un color de piel o un tipo de accesorio [6:25]. Las propiedades están definidas como arreglos dentro del blockchain, y cada arreglo tiene una propiedad length.
El mapeo funciona así:
- Se toma el valor del par de dígitos, por ejemplo
89.
- Se aplica
89 % length del arreglo de atributos.
- Si el arreglo de colores de piel tiene cierta cantidad de elementos, el resultado será un índice válido dentro del rango.
Por ejemplo, 89 % cantidadDeColores podría dar 5, y el índice cinco correspondería a dark brown [6:58]. Este mecanismo permite que cadenas de ADN diferentes generen atributos similares, lo cual es parte del diseño de rareza de la colección.
Esta arquitectura es completamente personalizable. Si quieres agregar más atributos, basta con extender el ADN utilizando más pares de dígitos del uint256 e incorporarlos en la metadata, un ejercicio excelente para profundizar en Solidity.
¿Has experimentado con sistemas de generación procedural para NFTs? Comparte tu enfoque y las variaciones que has probado.