WEB3DEV

Cover image for Metadados Metaplex Padrão ( DEV )
Rafael Ojeda
Rafael Ojeda

Posted on

Metadados Metaplex Padrão ( DEV )

Metadados Metaplex Padrão

Token Metadata SPL (Solana NFTs)

Um grande agradecimento à SolFlare por reunir tudo isso!

As carteiras SPL devem suportar a exibição de metadados associados aos tokens SPL, de acordo com as normas descritas pelo contrato Metaplex Token Metadata. As carteiras devem extrair tanto os dados na chain quanto o JSON externo fornecido pelo campo uri dos metadados e usá-los para exibir todos os dados relevantes.

Recomendamos seguir os padrões Metaplex e os padrões definidos neste documento para garantir que seu NFT será exibido corretamente em suas carteiras e permitir o uso de todas as funcionalidades relacionadas aos NFTs.

Programa Token Metadata

O conceito do programa Token Metadata é fornecer estruturas decorativas a uma cunhagem de tokens. Informações básicas sobre o token SPL são fornecidas com a estrutura Metadata, cujo endereço de conta é um PDA com uma chave derivada de ['metadados', metadata_program_id, mint_id].

Sua carteira deve estar usando as seguintes informações dos metadados on-chain:

nome (string) Nome do ativo. Exibido na grade e única visualização NFT.

símbolo (string) Símbolo do ativo.

uri (string) URI para o JSON externo representando o ativo. Ligado na visualização única do NFT .

criadores (array) Chave pública de cada criador. Mostrado na visualização única do NFT, voltado para os identificadores do twitter se estiverem conectados através do serviço de nome Solana.

atualização_autoridade (string) Chave pública do proprietário dos metadados. Exibida na visualização única do NFT, pode ser atualizada no modal de envio do NFT.

ocorrência_de_venda_primária (booleana) que descreve se a venda primária do token aconteceu. Visível no modal de envio do NFT e pode ser atualizado.

pontos_base_de_venda (number) Percentual de royalties concedidos aos criadores. Mostrado como um percentual recebido por cada co-criador.

O programa também especifica as estruturas opcionais utilizadas para a criação das Master Editions e Editions. Se estas contas existirem, sua carteira deverá exibir o número da edição (no caso de um token de edição único) e se um token é uma Master Edition.

Você pode explorar o padrão de metadados com mais detalhes na página do projeto Metaplex e em seu guia do desenvolvedor.

Esquema URI JSON

Para exibir metadados dos tokens SPL off-chain, a estrutura na on-chain precisa conter um URI como descrito acima, o que permitirá que sua carteira o encontre.

Sua carteira deve utilizar o padrão JSON, conforme descrito no Metaplex Developer Guide. Você também deve suportar campos opcionais adicionais, tais como o campo de atributos, conforme descrito no padrão OpenSea NFT.

O arquivo abaixo deve ser usado como referência.

Estrutura do JSON

{
 "name": "Solflare X NFT",
 "symbol": "",
 "description": "Celebratory Solflare NFT for the Solflare X launch",
 "seller_fee_basis_points": 0,
 "image": "https://www.arweave.net/abcd5678?ext=png",
 "animation_url": "https://www.arweave.net/efgh1234?ext=mp4",
 "external_url": "https://solflare.com",
 "attributes": [
   {
     "trait_type": "web",
     "value": "yes"
   },
   {
     "trait_type": "mobile",
     "value": "yes"
  },
  {
     "trait_type": "extension",
     "value": "yes"
   }
 ],
 "collection": {
    "name": "Solflare X NFT",
    "family": "Solflare"
 },
 "properties": {
   "files": [
     {
       "uri": "https://www.arweave.net/abcd5678?ext=png",
       "type": "image/png"
     },
     {
       "uri": "https://watch.videodelivery.net/9876jkl",
       "type": "unknown",
       "cdn": true
     },
     {
       "uri": "https://www.arweave.net/efgh1234?ext=mp4",
       "type": "video/mp4"
     }
   ],
   "category": "video",
   "creators": [
     {
       "address": "SOLFLR15asd9d21325bsadythp547912501b",
       "share": 100
     }
   ]
 }
}
Enter fullscreen mode Exit fullscreen mode

Para os campos que correspondem aos metadados on-chain, as informações on-chain têm prioridade.

  • description - Descrição humanamente legível do ativo.

  • image - URL para a imagem do ativo. Os formatos de arquivo PNG, GIF e JPG são suportados. Você pode usar a consulta ?ext={file_extension} para fornecer informações sobre o tipo de arquivo.

  • animation_url - URL para um anexo multimídia do ativo. Os formatos de arquivo suportados são MP4 e MOV para vídeo, MP3, FLAC e WAV para áudio e GLB para ativos AR/3D. Você pode usar a consulta ?ext={file_extension} para fornecer informações sobre o tipo de arquivo.

  • external_url - URL para um aplicativo ou website externo onde os usuários também podem visualizar o ativo.

  • properties.category - Categorias suportadas: imagem (png, gif, svg, jpg), vídeo (mp4, mov), áudio (mp3, flac, wav), vr (glb, gltf)

  • properties.files - Matriz de objetos, onde um objeto deve conter o uri e o tipe do arquivo que faz parte do ativo. O tipo deve corresponder à extensão do arquivo. A matriz também incluirá arquivos especificados nos campos image e animation_url, e quaisquer outros que estejam associados com o ativo. Você pode usar a consulta ?ext={file_extension} para fornecer informações sobre o tipo de arquivo.

  • attributes - Matriz de objetos, onde um objeto deve conter campos trait_type e value. value pode ser uma string ou um número.

Arquivos hospedados em CDN

Se você desejar fornecer hospedagem adicional para seus arquivos para proporcionar aos usuários uma melhor experiência (por exemplo, hospedando seu anexo multimídia em um CDN para proporcionar tempos de carregamento mais rápidos, além de hospedá-lo em um serviço permanente), você pode usar a bandeira cdn boolean dentro dos objetos dentro da matriz properties.files.

"properties": {
   "files": [
       ...
       {
         "uri": "https://watch.videodelivery.net/52a52c4a261c88f19d267931426c9be6",
         "type": "unknown",
         "cdn": true
       },
       ...
   ]
}
Enter fullscreen mode Exit fullscreen mode

Se essa bandeira aparecer, esse arquivo é a principal opção ao selecionar o acessório multimídia (vídeo, áudio ou 3D) que será exibido aos proprietários. Se esse arquivo não estiver mais disponível, sua carteira deve ser exibida por padrão usando a URL no campo animation_url.

Coleções

Se o NFT pertence a um grupo de outros NFTs exclusivos, você pode marcá-los com um campo adicional de collection que contém o nome da coleção.

"collection": {  
   "name": "Pigs on Solana Season #1",
   "family": "Pigs on Solana"
}
Enter fullscreen mode Exit fullscreen mode

collection.family representa o conjunto maior de NFTs a que seu patrimônio pode pertencer, no caso de você estar fazendo múltiplas variações sobre um tema. Deve ser sempre um identificador único de todo o seu projeto e nunca um termo geral como "carros", "arte" ou similar.

Sua carteira deve ser capaz de agrupar os NFTs pertencentes à mesma família e exibir o nome da coleção em uma visualização única do NFT.

Especificação de atributos adicionais

Além dos campos atuais disponíveis para especificar atributos, sua carteira deve integrar campos adicionais para descrever atributos. Alguns deles são:

  • display_type: "Date" - exibirá o value como uma data, use um carimbo de tempo unix para especificá-lo

  • max_value: Number - se o value também for um número, será exibido como um gráfico de barras com um valor máximo

  • trait_count: Number - se o ativo fizer parte de uma coleção, este número representa a contagem total de outros ativos com o mesmo tipo e valor de mercado.

Os únicos campos obrigatórios para descrever um atributo são: trait_type e trait_value.

Ordem dos campos JSON

Como sua carteira dará aos usuários um link direto ao arquivo JSON, recomenda-se manter a ordem dos campos como na referência, de modo a manter a boa legibilidade humana de seu conteúdo.

Outros dados arbitrários

Sugerimos o uso do campo de propriedades para armazenar outros dados arbitrários que serão utilizados por aplicações especializadas.

Este artigo foi escrito por Adam Jeffries e traduzido para o português por Rafael Ojeda

Você pode ler o artigo original aqui

Top comments (0)