Sequence ofrece un servicio de metadata para obtener metadata de tokens de cualquier contrato ERC721 o ERC1155, en cualquier cadena EVM.

[CONSEJO PRO: Sequence Indexer también soporta metadata de tokens]

Al usar el Sequence Indexer, agregue "includeMetadata": true a su solicitud para consultar metadatos de tokens de cualquier contrato ERC721 o ERC1155. Vea abajo cómo obtener metadatos de tokens directamente.

Obtener metadatos de tokens para cualquier contrato ERC721 o ERC1155

Método GetTokenMetadata de Sequence Metadata:

  • Solicitud: POST /rpc/Metadata/GetTokenMetadata
  • Content-Type: application/json
  • Cuerpo (en JSON):
    • chainID (string) — el id de la cadena, como nombre o número (ej. “1” o “mainnet”, “137” o “polygon”, etc.)
    • contractAddress (cadena) — la dirección del contrato
    • tokenIDs (arreglo de cadenas) — arreglo de cadenas que contiene los IDs de token a obtener metadatos

Ejemplo: GetTokenMetadata de algunos tokens usando un AQAAAAAAAF_JvPALhBthL7VGn6jV0YDqaFY

Este código requiere una clave de acceso API de Sequence Builder.

curl -X POST -H "Content-Type: application/json" -H "X-Access-Key: AQAAAAAAAF_JvPALhBthL7VGn6jV0YDqaFY" https://metadata.sequence.app/rpc/Metadata/GetTokenMetadata -d '{"chainID":"polygon", "contractAddress": "0x631998e91476DA5B870D741192fc5Cbc55F5a52E", "tokenIDs": ["65537", "65538", "65539"] }'

Actualización de metadatos de tokens

Al desplegar nuevos contratos o actualizar metadatos, se debe llamar a la URL de actualización de metadatos de tokens con una clave de acceso (del Sequence Builder) mediante una solicitud HTTPS POST por línea de comandos o usando el SDK de metadatos en un programa, para que los datos sean indexables en el servicio de metadatos del Sequence Indexer.

Método enqueueTokensForRefresh de Sequence Metadata:

  • Solicitud: POST /rpc/Metadata/EnqueueTokensForRefresh
  • Content-Type: application/json
  • Cuerpo (en JSON):
    • chainID (string) — el id de la cadena, como nombre o número (ej. “1” o “mainnet”, “137” o “polygon”, etc.)
    • contractAddress (cadena) — la dirección del contrato
    • tokenIDs (arreglo de cadenas) — arreglo de cadenas que contiene los IDs de token a obtener metadatos
curl -v -X POST -H "Content-type: application/json" -H "X-Access-Key: wuELppeX0pttvJABl8bIuxPAAAAAAAAAA" https://metadata.sequence.app/rpc/Metadata/EnqueueTokensForRefresh -d '{"chainID":"polygon", "contractAddress":"0x631998e91476DA5B870D741192fc5Cbc55F5a52E", "tokenIDs": ["1","2"]}'

Método getTokenRefreshStatus de Sequence Metadata:

  • Solicitud: POST /rpc/Metadata/GetTokenRefreshStatus
  • Content-Type: application/json
  • Cuerpo (en JSON):
    • taskId (uint) — el id de tarea devuelto por enqueueTokensForRefresh
curl -v -X POST -H "Content-type: application/json" -H "X-Access-Key: wuELppeX0pttvJABl8bIuxPAAAAAAAAAA" https://metadata.sequence.app/rpc/Metadata/GetTokenRefreshStatus -d '{"taskId": 1234}'

Instrucciones de prueba:

  1. Verifique la metadatos actual del token usando obtener metadatos de token
  2. Modifique el contenido de los metadatos del token ya sea onchain o mediante el baseURI del token
  3. Llame a los endpoints de actualización de token ID usando actualizar metadatos
  4. Verifique los cambios en los metadatos del token usando obtener metadatos de token

Estándares de Metadatos de Tokens

Estándares populares de tokens como EIP721 y EIP1155 tienen formatos de metadata similares con algunas diferencias sutiles. Además de los estándares, hemos visto en la práctica que los proyectos a menudo se desvían ligeramente de los estándares, pero de manera lógica, fácil de analizar y bien soportada en el ecosistema, incluyendo el servicio Sequence Metadata. A continuación describimos los estándares y prácticas comunes entre proyectos para ayudarle a entender cómo formatear la metadata de sus tokens para sus proyectos.

Estándares de metadatos

ERC721

Los contratos de tokens ERC721 contienen un método en el contrato llamado tokenURI(uint256) string. Al consultar el método tokenURI en el contrato, este devolverá un URI que contiene metadatos adicionales para ese activo.

Consulte la EIP para detalles específicos: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md

Aquí hay un ejemplo de Bored Ape (token id 9)

respuesta:

{

  "tokenId": "9",

  "contractAddress": "0xbc4ca0eda7647a8ab7c2061c2e118a18a936f13d",

  "name": "",

  "description": "",

  "image": "https://ipfs.sequence.info/ipfs/QmUQgKka8EW7exiUHnMwZ4UoXA11wV7NFjHAogVAbasSYy",

  "decimals": 0,

  "properties": null,

  "attributes": [

    {

      "trait_type": "Earring",

      "value": "Silver Stud"

    },

    {

      "trait_type": "Eyes",

      "value": "Sleepy"

    },

    {

      "trait_type": "Mouth",

      "value": "Small Grin"

    },

    {

      "trait_type": "Fur",

      "value": "Brown"

    },

    {

      "trait_type": "Hat",

      "value": "Seaman's Hat"

    },

    {

      "trait_type": "Clothes",

      "value": "Stunt Jacket"

    },

    {

      "trait_type": "Background",

      "value": "Purple"

    }

  ]

}

En el caso de este Bored Ape, parece que no hay nombre ni descripción definidos, pero sí tienen “attributes” como un arreglo de { "trait_type": string, "value: string }.

Además, consulte OpenSea para más información: https://docs.opensea.io/docs/metadata-standards

Tenga en cuenta que técnicamente OpenSea rompe el estándar ERC1155 al sugerir el uso de “attributes”, cuando en realidad, ERC1155 utiliza el nombre de campo “properties” en lugar de “attributes”. Vea https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1155.md#erc-1155-metadata-uri-json-schema (lea la sección a continuación). Sin embargo, esto está perfectamente bien y el uso combinado de properties / attributes es compatible en la práctica. En Sequence Metadata, soportamos ambas estructuras para contratos de tokens que usan cualquiera de los dos formatos para sus properties/attributes.

Otro ejemplo es de Neon District

ERC1155

Los contratos de tokens ERC1155 contienen un método en el contrato llamado uri(uint256) string. Al consultar el método uri en el contrato, este devolverá un URI que contiene metadatos adicionales para ese activo.

Consulte la EIP para detalles específicos: https://github.com/ethereum/EIPs/blob/master/EIPS/eip-1155.md#erc-1155-metadata-uri-json-schema

Aquí hay un ejemplo de carta de Skyweaver (token id 65548)

{

  "tokenId": "65548",

  "contractAddress": "0x27a11c1563a5dda238379b95c91b3abbad9c0cf6",

  "name": "Weighted Die (Silver)",

  "description": "Give +1/+1, armor, and guard to a random ally unit, six times.\n\n\"I will not bow to fate. If the dice fall against me, I'll cut off the hand that cast them.\"\n -Horik",

  "image": "https://assets.skyweaver.net/LV7xNcQh/webapp/cards/full-cards/6x/12-silver.png",

  "decimals": 2,

  "properties": {

    "artists": {

      "name": "Artist",

      "value": [

        {

          "id": "xavi",

          "name": "Henrique Xavier",

          "url": "https://www.artstation.com/kitexavier"

        }

      ]

    },

    "baseCardId": 12,

    "cardType": "Spell",

    "element": "Metal",

    "mana": 8,

    "prism": "Strength",

    "type": "Silver"

  },

  "attributes": null

}

Como puede ver, los metadatos del token ERC1155 de Skyweaver utilizan el objeto properties, que es un objeto/diccionario de datos arbitrarios.

Attributes vs Properties

Como puede ver, el formato estándar de los metadatos de tokens contiene tanto attributes como properties. El campo attributes es un arreglo de objetos. El campo properties es un objeto/diccionario de datos arbitrarios. En términos técnicos, el tipo attributes se define como []map<string,any> y el tipo properties se define como map<string,any>.

En la práctica, hemos visto que muchos proyectos usan tanto attributes como properties para almacenar los mismos datos, y en algunos casos, usan attributes para guardar datos que deberían estar en properties y viceversa. A veces los proyectos usan ambos campos, y esto es completamente válido en la práctica, ya que los marketplaces y servicios analizarán ambas áreas.

Finalmente, si busca extender el formato de metadatos para adaptarlo a su proyecto, recomendamos utilizar uno o ambos campos attributes y properties tanto para ERC721 como para ERC1155.

ERC20

Por último, una nota sobre los tokens ERC20. Los tokens ERC20 son solo un token único, por lo que no tienen un token ID, sino que se representan completamente por su dirección de contrato. Podemos inferir cierta información sobre el token consultando los métodos del contrato como name y decimals. Además, los tokens ERC20 pueden aprovechar la extensión contractURI utilizada por OpenSea y descrita en más detalle en nuestra sección de Metadatos de contrato.