Estándar de Token de Aptos (Legacy)
Resumen de NFT
Sección titulada «Resumen de NFT»Un NFT es un token no fungible o datos almacenados en una blockchain que define únicamente la propiedad de un activo. Los NFTs fueron definidos por primera vez en EIP-721 y luego expandidos en EIP-1155. Los NFTs típicamente se definen usando las siguientes propiedades:
name
: El nombre del activo. Debe ser único dentro de una colección.description
: La descripción del activo.uri
: Un puntero URL fuera de la cadena para más información sobre el activo. El activo podría ser medios como una imagen o video o más metadatos.supply
: El número total de unidades de este NFT. Muchos NFTs tienen solo un suministro único, mientras que aquellos que tienen más de uno se conocen como ediciones.
Además, la mayoría de los NFTs son parte de una colección o un conjunto de NFTs con un atributo común, por ejemplo, un tema, creador, o mínimo contrato. Cada colección tiene un conjunto similar de atributos:
name
: El nombre de la colección. El nombre debe ser único dentro de la cuenta del creador.description
: La descripción de la colección.uri
: Un puntero URL fuera de la cadena para más información sobre el activo. El activo podría ser medios como una imagen o video o más metadatos.supply
: El número total de NFTs en esta colección.maximum
: El número máximo de NFTs que esta colección puede tener. Simaximum
se establece en 0, entonces el suministro no se rastrea.
Principios de diseño
Sección titulada «Principios de diseño»El estándar de token de Aptos se desarrolla con los siguientes principios:
- Interoperabilidad: Proporcionar una implementación estándar para mejorar la interoperabilidad entre los proyectos del ecosistema. Además, Move siendo un lenguaje estático sin despacho dinámico hace que este principio sea aún más imperativo.
- Liquidez: Lograr liquidez máxima definiendo el NFT, tokens fungibles (no decimales) y semi-fungibles en un contrato. Estos diferentes tipos de tokens pueden almacenarse, transferirse y transarse fácilmente de la misma manera. Como consecuencia, se vuelve más fácil lograr interoperabilidad máxima entre marketplaces, exchanges y otros métodos de intercambio.
- Propiedades de token ricas en cadena: Habilitar la personalización de propiedades de token en cadena. Los usuarios pueden definir sus propias propiedades y almacenarlas en cadena. Esto puede potencialmente eliminar la necesidad de metadatos fuera de la cadena.
- Reducción de sobrecarga: Reducir el costo de crear grandes cantidades de NFTs desde tokens fungibles. Esto puede llevar a, por ejemplo, reducción de sobrecarga para tokens similares mediante la reutilización de metadatos en cadena para ciertos tokens fungibles.
Almacenar propiedades de token personalizadas en cadena
Sección titulada «Almacenar propiedades de token personalizadas en cadena»El estándar de token de Aptos usa el módulo PropertyMap
para almacenar propiedades
de tokens en cadena. PropertyMap
mapea una clave de cadena a un valor de propiedad
en cadena, que almacena el valor en formato de Serialización Canónica Binaria (BCS)
y su tipo. Actualmente, solo los tipos primitivos (bool, u8, u64, u128, address y
String) son soportados en PropertyMap
. Aplicaciones, como Aptos Names,
definen propiedades específicas de la aplicación que son leídas y escritas por el
contrato inteligente de las aplicaciones.
Propiedades por defecto
Sección titulada «Propiedades por defecto»Puedes agregar tus propiedades a default_properties
en TokenData. Las
propiedades definidas aquí son compartidas por todos los tokens por defecto.
El campo default_properties
es un almacén de clave-valor con información de tipo. Aprovecha
el módulo PropertyMap que contiene funciones para serializar y
deserializar diferentes tipos primitivos al valor de propiedad.
Propiedades de token
Sección titulada «Propiedades de token»También puedes usar las token_properties
definidas en el token mismo para
personalización en cadena. Puedes crear valores personalizados para una propiedad de este
token específico, permitiendo así que un token tenga un valor de propiedad diferente de
su valor por defecto.
Ten en cuenta que existen límites para almacenar propiedades de token personalizadas en cadena, específicamente 1000 propiedades por token con nombres de campo limitados a 128 caracteres.
Evolucionando desde token fungible a NFT
Sección titulada «Evolucionando desde token fungible a NFT»Los tokens fungibles comparten los mismos valores de propiedad por defecto. Sin embargo, estos valores de propiedad
pueden evolucionar con el tiempo y volverse diferentes entre sí. Para soportar
tal evolución de propiedades de token, el estándar de token de Aptos proporciona el
campo property_version
. Aquí está cómo funciona:
- Durante la creación del token (acuñación), todos los tokens inicialmente tienen
property_version
establecido en0
y estos tokens pueden apilarse juntos como token fungible. - Cuando los creadores mutan las propiedades por defecto de un token, el token mutado
será asignado un
property_version
único para crear un nuevotoken_id
para diferenciarlo de otros tokens fungibles. Estetoken_id
único permite que el token tenga sus propios valores de propiedad, y toda mutación posterior de este token no cambia elproperty_version
nuevamente. Este token esencialmente se convierte en un NFT ahora.
Configurar mutabilidad
Sección titulada «Configurar mutabilidad»Para hacer la mutabilidad explícita tanto para el creador como para el propietario, el estándar de token de Aptos
proporciona mutability_config
tanto a nivel de colección como a nivel de token para controlar qué campos son
mutables. Configurable aquí significa que el creador puede configurar este campo para ser
mutable o inmutable durante la creación.
Almacenar metadatos fuera de la cadena
Sección titulada «Almacenar metadatos fuera de la cadena»Sigue el estándar a continuación para asegurar que tu NFT pueda ser mostrado correctamente por varias wallets.
Debes almacenar los metadatos en un archivo JSON ubicado en una solución de datos en cadena como Irys, y proporcionar la URL al
archivo JSON en el campo uri
del token o la colección. Recomendamos que los
desarrolladores sigan el esquema de datos fuera de la cadena ERC-1155
para formatear sus archivos JSON.
{ "image": "https://gateway.irys.xyz/QH3rksVhbFg5L9vvjGzb4POUibCEG-TGPInmofp-O-o", "animation_url": "https://gateway.irys.xyz/QH3rksVhbFg5L9vvjHzb4POUibCEG-TGPInmofp-O-o", "external_url": "https://petra.app/", "attributes": [ { "trait_type": "web", "value": "yes" }, { "trait_type": "mobile", "value": "yes" }, { "trait_type": "extension", "value": "yes" } ], "properties": { "files": [ { "uri": "https://gateway.irys.xyz/QH3rksVhbFg5L9vvjGzb4POUibCEG-ENXUnmofp-O-o", "type": "image/png" }, { "uri": "https://gateway.irys.xyz/QH3rksVhbFg5L9vvjGzb4POUibCEG-UENCnmofp-O-o", "type": "unknown", "cdn": true }, { "uri": "https://gateway.irys.xyz/QH3rksVhbFg5L9vvjGzb4POUibCEG-DJHUUnmofp-O-o", "type": "video/mp4" } ], "category": "video" }}
image
: URL al activo de imagen. Puedes usar la consulta?ext={file_extension}
para proporcionar información sobre el tipo de archivo.animation_url
: URL al adjunto multimedia del activo. Puedes usar la misma consultafile_extension
para proporcionar el tipo de archivo.external_url
: URL a un sitio web externo donde el usuario también puede ver la imagen.attributes
- Array de objetos, donde un objeto debe contener campostrait_type
yvalue
.value
puede ser una cadena o un número.properties.files
: Array de objetos, donde un objeto debe contener la URI y tipo del archivo que es parte del activo. El tipo debe coincidir con la extensión del archivo. El array también debe incluir archivos especificados en los camposimage
yanimation_url
, así como cualquier otro archivo asociado con el activo. Puedes usar la consulta?ext={file_extension}
para proporcionar información sobre el tipo de archivo.properties.category
: Tiene categorías soportadas:image
- PNG, GIF, JPGvideo
- MP4, MOVaudio
- MP3, FLAC, WAVvr
- Modelos 3D; GLB, GLTFhtml
- Páginas HTML; scripts y rutas relativas dentro de la página HTML también son soportados
También puedes hospedar tus archivos en CDN para proporcionar tiempo de carga más rápido usando la
bandera cdn
en el objeto de archivo. Cuando el archivo existe, esta debería ser la ubicación
primaria para leer el archivo multimedia (video
, audio
, vr
) por la wallet. Si el archivo
ya no está disponible, la wallet puede recurrir a usar animation_url
para
cargar el archivo.