O que é a norma de tokens ERC-721 e como funciona na blockchain?

O que é a norma de tokens ERC-721 e como funciona na blockchain?

O que é a norma de tokens ERC-721?

ERC-721 é uma norma da Ethereum para NFTs: tokens únicos que não podem ser trocados um por um como se fossem todos iguais. Cada NFT tem o seu próprio número, o tokenId. Assim, um contrato pode acompanhar com precisão que endereço possui que NFT.

Pode comparar-se a cartões de acesso numerados. Dois cartões podem ambos dar acesso ao mesmo evento, mas o cartão número 14 não é tecnicamente o mesmo cartão que o número 15. No ERC-721, funciona da mesma forma: cada token fica registado em separado.

Um token ERC-721 é identificado por duas coisas em conjunto: o endereço do smart contract e o tokenId. Essa combinação aponta para um token específico numa cadeia Ethereum.

A norma dá aos smart contracts um conjunto comum de regras. Assim, uma carteira de criptomoedas, um mercado ou outra aplicação podem reconhecer como devem mostrar, consultar e enviar um NFT compatível. O ERC-165 também faz parte disto. Trata-se de uma forma de o software verificar que norma um contrato suporta.

É importante saber: um tokenId único significa apenas que o token é único dentro desse contrato. Não prova automaticamente que a imagem associada, a obra de arte ou um objeto físico também seja realmente único ou autêntico.


Pontos principais

  • O ERC-721 é uma norma da Ethereum para tokens únicos e não intercambiáveis.
  • Cada NFT tem o seu próprio tokenId dentro de um contrato.
  • O endereço do contrato e o tokenId, em conjunto, identificam um token específico.
  • A norma ajuda as carteiras e as aplicações a reconhecer e a processar NFTs da mesma forma.
  • Um tokenId único não prova automaticamente que a obra ou o objeto associado seja autêntico.

Como funciona a norma de tokens ERC-721?

Um smart contract ERC-721 mantém, para cada tokenId, qual o endereço de blockchain que é o proprietário atual. Com ownerOf(tokenId), pode consultar esse proprietário. Com balanceOf(endereço), vê quantos NFTs um endereço possui no total.

Quando alguém envia um NFT, o contrato altera o proprietário registado. Para essa transferência, existem, entre outras, transferFrom e safeTransferFrom.

Esta segunda opção é normalmente especialmente importante quando envia um NFT para outro smart contract. safeTransferFrom verifica então se o contrato recetor consegue receber tokens ERC-721. Se não conseguir, a transação é revertida. Assim, evita que um NFT fique preso por engano num contrato que não consegue fazer nada com ele.

Um proprietário também pode dar autorização a outro endereço:

  • Com approve, esse endereço pode mover um tokenId específico.
  • Com setApprovalForAll, um operador recebe autorização para mover todos os tokens ERC-721 desse proprietário.

Esta última autorização é, portanto, bastante ampla. Dê essa permissão apenas a um contrato em que confie. Uma autorização para um único NFT expira assim que esse NFT é transferido.

O contrato também regista transferências e autorizações em eventos: notificações no registo público da blockchain. As aplicações podem usá-los para acompanhar quando um NFT muda de proprietário ou quando um operador recebe autorização.

O ERC-721 não determina como o minting ou o burning devem funcionar. Minting é a criação e emissão de um novo token, enquanto burning retira permanentemente um token de circulação. O criador do contrato decide quem pode fazer minting, quantos tokens podem existir e se as transferências, por exemplo, podem ser temporariamente suspensas ou ter custos.

Para que são usados os tokens ERC-721?

Os tokens ERC-721 são usados para coisas que se pretende acompanhar individualmente, porque cada token pode ter propriedades próprias ou uma função própria. Pense em arte digital, objetos de coleção, itens de jogos, bilhetes para eventos, certificados, tokens de acesso e identidade online.

Também podem ser usados para associar determinados ativos físicos a um token (pense num imóvel). Mas aqui existe uma diferença importante: o ERC-721 regista sobretudo quem gere o token na blockchain. Se esse token também dá direito, fora da blockchain, a um bilhete, objeto ou outra reivindicação, isso depende do criador, dos metadados, das condições do contrato e de eventuais acordos separados.

Como muitas aplicações compreendem a mesma interface ERC-721, a maioria das aplicações pode, em princípio, reconhecer e transferir um token. Isso torna a norma útil dentro da criptomoeda, sem que cada aplicação tenha de descobrir novamente como o contrato funciona para cada coleção de NFT. Por isso, também é muito fácil para as pessoas iniciarem por si próprias um projeto de NFT.

Que papel desempenham os tokens ERC-721 nos NFTs?

O ERC-721 é uma base técnica muito usada para NFTs na Ethereum. A norma regula o núcleo: identificar um NFT individual, registar o proprietário, enviar o NFT e gerir autorizações.

NFT significa, de forma simples, non-fungible token: um token que não é intercambiável como uma unidade igual. ERC-721 não é o mesmo que NFT. É uma norma específica com a qual pode construir NFTs. Assim, um NFT também pode usar outra norma técnica.

Um contrato ERC-721 pode ainda conter regras adicionais. Por exemplo, regras para minting, acesso a determinadas funções, metadata ou restrições às transferências.

Os royalties não fazem parte do ERC-721 por defeito. O ERC-2981 é uma norma separada com a qual se pode consultar informação sobre royalties. Isso ainda não significa que um mercado pague automaticamente esses royalties: o pagamento depende do mercado ou de outra parte envolvida.

Como são registados os direitos de propriedade digital?

Um contrato ERC-721 regista que endereço é o proprietário de um determinado tokenId. Qualquer pessoa pode verificar esse registo técnico de propriedade através de ownerOf e dos eventos Transfer do contrato. Afinal, tudo isto é visível na blockchain, pelo que o proprietário de um NFT é quase sempre possível de verificar ou consultar. Além disso, os smart contracts usados para a coleção de NFTs podem, na maioria dos casos, ser consultados.

Imagine que o tokenId 42 passa do endereço A para o endereço B. Então, o endereço B torna-se o proprietário registado do tokenId 42. Entretanto, o endereço do contrato e o tokenId 42 continuam a ser a mesma identificação técnica desse token.

O NFT também pode ter metadata: informação adicional sobre o token. Através de tokenURI, o contrato pode remeter, por exemplo, para um ficheiro JSON com um nome, uma descrição e uma ligação para uma imagem.

Essa propriedade on-chain não é automaticamente o mesmo que direitos de autor, propriedade intelectual ou propriedade jurídica da imagem, da obra ou de um objeto físico. Possuir o NFT não significa, portanto, que obtenha automaticamente todos os direitos sobre o conteúdo associado. Para isso, normalmente é necessário um acordo separado e válido.

Qual é a diferença entre ERC-721 e ERC-20?

O ERC-20 foi criado para tokens fungíveis, enquanto o ERC-721 foi criado para tokens não fungíveis. Fungível significa que cada unidade é igual às outras. Um token ERC-20 do mesmo tipo é, portanto, igual a outro token ERC-20 desse tipo.

No ERC-20, envia-se uma quantidade, por exemplo 10 tokens. No ERC-721, envia-se um tokenId específico, por exemplo o token número 42.

As principais diferenças, em resumo:

  • Transferência: o ERC-20 gira em torno de um número de tokens. O ERC-721 gira em torno de um tokenId único.
  • Propriedade: no ERC-20, um endereço tem um saldo. No ERC-721, o contrato acompanha, por tokenId, quem é o proprietário.
  • Autorização: o ERC-20 usa uma allowance para um montante de gasto. O ERC-721 pode dar autorização para um NFT ou para todos os NFTs de um proprietário.
  • Divisibilidade: os tokens ERC-20 podem ser enviados em quantidades. Um token ERC-721 é tecnicamente um tokenId separado e não tem uma função decimals padrão.
  • Quantidade total: o ERC-20 tem totalSupply como função padrão. No ERC-721, totalSupply só está disponível se o contrato usar a extensão opcional ERC721Enumerable.

Também os metadados são opcionais no ERC-721. Assim, um contrato não tem necessariamente de disponibilizar um nome, um símbolo ou tokenURI, embora a maioria dos contratos NFT o faça.

Como criar um token ERC-721?

Cria-se um token ERC-721 construindo um smart contract e adicionando-lhe lógica de minting. O próprio ERC-721 não fornece uma função pública de minting pronta a usar, pelo que o programador decide como surgem os novos tokens.

Na prática, isto costuma acontecer da seguinte forma:

  1. Construir ou usar um contrato ERC-721 Um programador escreve um smart contract em Solidity que suporta ERC-721 e ERC-165. Muitas vezes, uma implementação de base testada, como a OpenZeppelin ERC721, é alargada em vez de se escrever tudo de raiz.

  2. Definir as regras para o minting O contrato tem de determinar quem pode fazer minting, como os tokenIds são emitidos, se existe um número máximo de tokens e se o minting tem custo. O controlo de acesso também pertence aqui: nem toda a gente tem de poder criar novos NFTs automaticamente.

  3. Atribuir um novo tokenId Para cada novo NFT, o contrato tem de usar um tokenId que ainda não exista. Esse tokenId é atribuído a um endereço válido, portanto não a um endereço vazio.

  4. Usar, sempre que possível, minting safe _safeMint verifica, quando o recetor é ele próprio um smart contract, se esse contrato consegue receber tokens ERC-721. Isso reduz a probabilidade de um NFT recém-criado ficar bloqueado no recetor.

  5. Fazer deploy e executar transações Após o deployment numa cadeia EVM, o minting, as transferências e as autorizações são executados como transações de blockchain. Os custos e os riscos dependem da cadeia escolhida e, sobretudo, do código do contrato.

Copiar um contrato não é suficiente para uma utilização segura. Lógica adicional para pagamentos, whitelists, upgrades ou royalties pode introduzir novas vulnerabilidades. Por isso, os testes e, quando adequado, uma auditoria de segurança independente são importantes.

Que componentes inclui um smart contract ERC-721?

Um smart contract ERC-721 tem de disponibilizar um núcleo fixo de funções e eventos. Essa interface fixa garante que outras aplicações sabem como lidar com os NFTs.

Os componentes obrigatórios incluem, entre outros:

  • balanceOf: consulta quantos NFTs um endereço possui.
  • ownerOf: consulta em que endereço o proprietário de um tokenId específico se encontra.
  • transferFrom e safeTransferFrom: enviam um NFT para outro endereço.
  • approve e getApproved: gerem e verificam a autorização para um NFT específico.
  • setApprovalForAll e isApprovedForAll: gerem e verificam a autorização para todos os NFTs de um proprietário.
  • Transfer, Approval e ApprovalForAll: eventos com os quais as aplicações podem acompanhar transferências e permissões.
  • supportsInterface: a função ERC-165 com a qual as aplicações podem verificar que o contrato suporta ERC-721.

Também existem extensões opcionais. O ERC721Metadata adiciona name, symbol e tokenURI. O ERC721Enumerable adiciona, entre outras coisas, totalSupply e funções para enumerar tokenIds.

Além disso, um contrato prático tem muitas vezes funções próprias, como uma função de minting, funções de administração, regras de venda, uma base URI ou uma função de burn. A forma como o contrato armazena dados internamente, por exemplo proprietários e autorizações, não é definida pelo ERC-721. A norma diz respeito ao que o contrato tem de conseguir fazer externamente.

Como é associada metadata a um token ERC-721?

A metadata é normalmente associada através de tokenURI(tokenId), uma função opcional que devolve uma referência para informação sobre um NFT específico. Essa URI pode, por exemplo, apontar para um ficheiro JSON.

Num ficheiro JSON desse tipo, podem existir campos como name, description e image. Um mercado de NFTs ou uma carteira de criptomoedas pode usar esses dados para mostrar o nome, a descrição e a imagem do token. Como cada NFT tem estatísticas próprias, pode vê-lo como uma espécie de cromos de coleção. Alguns cromos são únicos e raros, enquanto outros são comuns. É também assim que o valor dos NFTs é, em geral, determinado.

Um programador pode guardar uma URI separada para cada NFT. Outra opção é usar uma base URI e acrescentar-lhe, por token, um número ou parte própria. A OpenZeppelin tem, para isso, entre outras, a ERC721URIStorage com _setTokenURI.

É importante ter em atenção: o ERC-721 não obriga a que a metadata seja permanente ou imutável. Uma URI é uma referência textual para dados fora da blockchain. Quem pode alterar a URI e onde o conteúdo está alojado varia consoante o contrato e a configuração de armazenamento. Uma imagem ou um ficheiro JSON pode, portanto, possivelmente mudar ou deixar de estar disponível.

Quais são as vantagens e desvantagens do ERC-721?

O ERC-721 é útil porque oferece uma forma clara e partilhada de criar tokens únicos na Ethereum. Mas a norma não resolve todos os problemas relacionados com NFTs.

Vantagens:

  • Interoperabilidade: carteiras, corretoras, leilões e outras aplicações podem reconhecer e processar NFTs ERC-721 de forma previsível.
  • Rastreabilidade: por tokenId, é visível que endereço é o proprietário e que transferências ocorreram.
  • Autorizações flexíveis: pode dar autorização a um endereço para um NFT, ou a um operador para todos os seus NFTs.
  • Extensível: metadata e enumeração são opcionais. Assim, um contrato pode manter-se pequeno ou receber funções adicionais.

Desvantagens e riscos:

  • Muito poder com setApprovalForAll: um operador aprovado pode mover todos os tokens ERC-721 do seu endereço. Verifique essas autorizações regularmente e dê-as apenas a contratos de confiança.
  • Risco com transferFrom: um NFT pode ficar preso se o contrato recetor não conseguir lidar com o NFT. safeTransferFrom verifica isso melhor, mas a chamada externa adicional pode introduzir um risco de reentrancy. Nesse caso, outro contrato tenta chamar novamente uma função durante a execução.
  • Custos mais elevados na enumeração: o ERC721Enumerable muitas vezes não é usado, porque enumerar tokens on-chain pode custar muito gas adicional.
  • Sem garantia fora da blockchain: o ERC-721 não prova automaticamente direitos de autor, autenticidade de reivindicações, metadata permanente ou um pagamento obrigatório de royalties.

Em resumo: o ERC-721 fornece uma base técnica para a propriedade e a transferência de um NFT. Se uma coleção também é segura e que direitos lhe estão exatamente associados depende do código do contrato, dos direitos de gestão, da metadata e dos acordos fora da blockchain.

Conclusão

O ERC-721 é a norma da Ethereum que dá aos NFTs uma identidade própria. Um smart contract regista, por tokenId, quem é o proprietário, como um NFT é transferido e quem tem autorização para isso.

Isso torna o ERC-721 útil, entre outras coisas, para arte digital, itens de jogos, bilhetes e tokens de acesso. Ao mesmo tempo, um NFT não é automaticamente prova de direitos de autor, autenticidade ou propriedade jurídica daquilo a que está associado. Por isso, não olhe apenas para o NFT em si, mas também para as regras do contrato, a metadata e as autorizações que dá a um contrato.

Sobre a Finst

A Finst é uma plataforma de criptomoedas líder nos Países Baixos que oferece taxas de transação bastante reduzidas, segurança de nível institucional e um conjunto abrangente de serviços de criptomoedas, como negociação, custódia, staking e rampas de entrada e saída de moeda fiduciária. Fundada pelo antigo núcleo da equipa da DEGIRO, a Finst está autorizada como prestador de serviços de criptoativos pela Autoridade Holandesa para os Mercados Financeiros (AFM) e serve clientes privados e institucionais em 30 países europeus.

A plataforma de criptomoedas para todos os investidores

Quer seja um investidor ativo ou de longo prazo, a Finst permite-lhe aumentar o seu património de criptomoedas com confiança e tranquilidade.

Criar conta gratuita