Pular para o conteúdo
0%

ERC721 vs. ERC721A: batch minting de NFTs

Albert Hu @thatguyintech headshot

Escrito por Albert Hu

Publicado em 16 de março de 20228 min de leitura

Como muitos criadores de NFT sabem, fazer o deploy de um smart contract na Ethereum mainnet pode ser extremamente caro.

Porém, os custos de deployment do smart contract não são o único custo que engenheiros blockchain e times de NFT precisam considerar. Criar uma coleção de NFT bem-sucedida ou um projeto de avatares colecionáveis envolve construir uma comunidade e facilitar para os usuários mintar, negociar e usar seus NFTs.

Vamos conhecer uma otimização poderosa de smart contract de NFT que pode ajudar sua comunidade a economizar taxas de gas nos custos de minting de NFT:

Implementar batch minting com o contrato ERC721A!

O que é ERC721A?

Em 6 de janeiro, o time de desenvolvimento da Azuki NFT anunciou publicamente o ERC721A, uma nova implementação do padrão NFT ERC721 que explora batch minting:

Equipe da Azuki apresentando a implementação do ERC721A
Equipe da Azuki apresentando a implementação do ERC721A

No post do blog explicando a implementação do smart contract ERC721A, @locationtba e @2pmflow mostram estimativas de quanto gas pode ser economizado ao fazer batch minting via o código inicial de smart contract de NFT mais comumente usado, o contrato ERC721Enumerable da OpenZeppelin, versus fazer batch minting de NFTs usando o novo contrato ERC721A da Azuki:

NUMBER MINTED
GAS USED (ENUMERABLE)
GAS USED (ERC721A)
GAS SAVED

Mint 1

154,814

76,690

78,124

Mint 2

270,339

78,819

191,520

Mint 3

384,864

80,948

303,916

Mint 4

501,389

83,077

418,312

Mint 5

616,914

85,206

531,708

Essa tabela mostra como o gas usado no ERC721A, para um número crescente de mints, escala com um fator constante muito menor.

O custo de gas para mintar NFTs aumenta em:

  • ~2k de gas por mint extra usando o contrato ERC721A da Azuki
  • ~115k de gas por mint extra usando o contrato ERC721Enumerable da OpenZeppelin

Esse resultado é realmente INCRÍVEL!

Pelo preço de mintar um único token via o contrato ERC721Enumerable, um usuário pode em vez disso mintar até 5 tokens (ou mais, potencialmente) via o contrato ERC721A.

Quem não gostaria que os usuários economizassem até 80% em seus mints?

Aqui está a melhor parte:

Não só os preços de mint de NFT ficam mais baratos para transações individuais, como também haveria menos congestionamento de rede e picos menores no preço do gas afetando a rede Ethereum durante drops de coleções populares.

Bem interessante.

Verificando a economia de gas ao mintar múltiplos NFTs

Eu quis conferir o trabalho por conta própria, então implementei dois contratos básicos de NFT que criam NFTs:

  1. Um smart contract que minta usando ERC721Enumerable, e
  2. Um smart contract que minta usando ERC721A

Em seguida, chamei a função de mint em cada um e registrei os custos de gas de cada transação.

Aqui estão meus resultados:

Você pode encontrar o código desses testes neste repositório do GitHub: demo-erc721a

Os custos de gas para criar múltiplos NFTs aqui são um pouco diferentes dos mostrados no post do blog da Azuki, mas estão próximos, e o aumento nas taxas de gas de um mint, dois mints e múltiplos mints confere.

Validamos a economia de gas para batch minting de NFTs! ✅

Como o smart contract ERC721A economiza taxas de gas com batch minting?

O ERC721A faz algumas suposições que influenciam seu design de smart contract:

  1. Os token IDs devem sempre incrementar consecutivamente a partir de 0. A maioria dos projetos de NFT já faz isso, e a Azuki é explícita sobre isso em suas suposições.
  2. Reduzir os custos de gas de mintar NFTs é mais importante do que otimizar qualquer outra chamada do ERC721. Os mints são quando ocorre o congestionamento da rede Ethereum, e também são a primeira impressão dos usuários sobre uma coleção de NFT. Quanto mais fácil o mint, melhor a reputação.

Com essas suposições em vigor, o ERC721A faz as seguintes otimizações de contrato:

  1. Reduzir o armazenamento desperdiçado de metadados de token.
  2. Limitar as atualizações de estado de propriedade a apenas uma vez por batch mint, em vez de uma vez por NFT mintado.

Vamos ver como essas otimizações são feitas, mas antes disso devemos entender que tipos de transações custam mais taxas de gas.

Reduzir o trabalho necessário para enviar transações de escrita economiza gas para os usuários

Geralmente existem dois tipos de transações na blockchain: escritas e leituras.

Escritas acontecem quando modificamos ou atualizamos o estado da blockchain (por exemplo, enviar dinheiro, escrever uma mensagem, negociar um NFT).

Leituras acontecem quando solicitamos dados existentes para consultá-los.

Os usuários sempre pagam mais taxas de gas por funções de escrita do que pagam por funções de leitura.

Portanto, ao reduzir o número de transações de escrita, OU ao reduzir o trabalho necessário para enviar transações de escrita, mesmo que isso demande mais trabalho para enviar transações de leitura posteriormente, isso reduzirá os custos de minting de NFT que os usuários pagam!

E é exatamente isso que o ERC721A realiza.

Quando se trata de mints de NFT: mais armazenamento, mais problemas. Menos armazenamento, menos problemas.

Genial, não é?

Unit ID
Owner

#100

Alice

#101

<not set>

#102

<not set>

#103

Bob

#104

<not set>

O contrato ERC721A só precisa definir os metadados de propriedade duas vezes: uma vez para o batch da Alice e uma vez para o batch do Bob.

Porém, isso significa que, ao transferir um tokenID que não tem um endereço de proprietário explicitamente definido, o contrato precisa rodar um loop por todos os tokenIDs até chegar ao primeiro NFT com um endereço de proprietário explícito para encontrar o proprietário que tem o direito de transferi-lo, e então definir um novo proprietário, modificando assim o estado de propriedade mais de uma vez para manter os agrupamentos corretos.

Aqui está um teste para simular cenários de transferência e registrar custos de gas:

Mint 1
Mint 2
Mint 3
Mint 4
Mint 5

t0

71355

92043

92043

92043

92043

t1

91197

111885

111885

117345

t2

93927

114615

114615

t3

96657

111885

t4

99387

A forma de ler esse gráfico é primeiro pelo eixo x, e depois pelo eixo y, como:

  • "Mintar um batch de 1 NFT, depois transferir o tokenID 0", ou
  • "Mintar um batch de 3 NFTs, depois transferir o tokenID 1", ou
  • "Mintar um batch de 5 NFTs, depois transferir o tokenID 4"

A partir desses resultados, podemos ver que transferir tokenIDs no meio de um batch de mint maior (ou seja, t1, t2) custa mais do que transferir tokenIDs nas extremidades do batch (ou seja, t0, t4).

Note que esse experimento rápido só rastreia o custo de uma única transferência após o mint.

Uma solução alternativa para diminuir os custos de transferência após o batch minting de NFTs

Aqui está uma solução interessante para minimizar o custo total de transferir todo o seu batch de NFTs (fonte original de William Entriken @fulldecent):

  1. Sempre minte o número máximo permitido de NFTs durante o batch mint.
  2. Ao transferir, comece pelos tokens de número ÍMPAR primeiro, em ordem CRESCENTE.
  3. Depois disso, transfira os tokens de número PAR.
Tornando transferências subsequentes mais baratas de executar
Tornando transferências subsequentes mais baratas de executar

Essa estratégia funciona porque força o preenchimento do mapping \_addressData, tornando as transferências subsequentes mais baratas de executar.

Exemplos de projetos de NFT usando contratos ERC721A

Aqui está um conjunto de projetos que atualmente usam o contrato ERC721A:

  • @AzukiZen
  • @cerealclubnft
  • @TheLostGlitches
  • @standardweb3
  • @KittyCryptoGang
  • @XRabbitsClub
  • @WhaleTogether
  • @pixelpiracynft
  • @dastardlyducks
  • @MissMetaNFT
  • @StarcatchersNFT
  • @LivesOfAsuna
  • @richsadcatnft
  • @themonkeypoly
  • @womenofcrypto_
  • @TravelToucans
  • @HuhuNFT

Alternativas ao ERC721A para batch minting de NFTs

E para os mais aventureiros, reserve um tempo para conferir uma otimização ainda mais nova do padrão ERC721 chamada ERC721Psi:

Nova otimização do padrão ERC721 chamada ERC721Psi
Nova otimização do padrão ERC721 chamada ERC721Psi

Não vamos entrar em detalhes sobre o ERC721Psi neste artigo, mas se você tiver curiosidade e quiser aprender mais sobre como ele funciona, me avise mandando um tweet para @thatguyintech, e farei questão de fazer outro deep dive sobre isso!

Podemos até explorar o deploy de alguns projetos de exemplo usando a Alchemy.

Contratos ERC721A ainda são considerados NFTs?

A resposta curta é sim, contratos ERC721A são definitivamente NFTs.

Qualquer contrato que implemente as interfaces do padrão de token ERC721 ou ERC1155 é considerado um token não fungível ou semifungível.

O ERC721A é uma extensão e otimização do padrão ERC721.

O mesmo vale para o ERC721Enumerable e o ERC721Psi.

Todos fazem parte da família ERC721!

Como queimar tokens ERC721A

Quando você quer se livrar de um NFT ou de um token que tem em sua carteira, mas não quer dá-lo a outra pessoa, e não quer vendê-lo, você pode queimá-lo enviando-o para um endereço de carteira específico que ninguém usa.

Muitas pessoas gostam de usar os mesmos endereços de burn porque são fáceis de lembrar.

Por exemplo, o endereço 0:

0x0000000000000000000000000000000000000000

Porém, quando se trata de NFTs ERC721A, você não pode transferir tokens para o endereço 0 para queimar NFTs, porque a maioria dos tokens mintados em um batch é mapeada para o endereço 0 por padrão.

Escolha outro endereço para queimar seus NFTs ERC721A e estará tudo certo!

Por exemplo, outro endereço de burn comum é o endereço "0xdead": 0x000000000000000000000000000000000000dEaD

Você vai usar o contrato ERC721A para fazer batch mint dos seus NFTs?

O contrato ERC721A é uma forma poderosa de economizar custos de gas para sua comunidade e poupar a rede Ethereum de congestionamento desnecessário ao fazer batch minting de NFTs.

Conte para nós que tipo de projeto de NFT você está construindo e como podemos ajudar! Temos ferramentas para ajudar você a fazer deploy, monitorar, notificar e divulgar sua próxima coleção de NFT.

Não espere, mande um tweet para @Alchemy ou envie um DM e vamos conversar!

Background gradient

Construa magia blockchain

A Alchemy combina os produtos e ferramentas de desenvolvimento Web3 mais poderosos com recursos, comunidade e suporte lendário.