ERC721 vs. ERC721A: batch minting de NFTs
Escrito por Albert Hu
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:

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:
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:
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:
- 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.
- 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:
- Reduzir o armazenamento desperdiçado de metadados de token.
- 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 é?
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:
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):
- Sempre minte o número máximo permitido de NFTs durante o batch mint.
- Ao transferir, comece pelos tokens de número ÍMPAR primeiro, em ordem CRESCENTE.
- Depois disso, transfira os tokens de número PAR.

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:

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!
Visões gerais relacionadas
Web329 de maio de 2024
Conheça a Key3: a DAO líder em educação Web3 no Japão
A Japan Airlines e a Calbee, empresa japonesa de snacks, estão usando NFTs para promover o turismo e a fidelidade à marca.
Web329 de maio de 2024
Wavehack: o principal hackathon de Web3 do Japão
WaveHack é o maior hackathon de Web3 do Japão, sendo realizado de meados de abril ao final de agosto de 2024.
Web329 de maio de 2024
Web3 no Japão: uma visão geral completa
Saiba como o governo do Japão está acelerando a inovação e como empresas estão usando a tecnologia blockchain.

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