WEB3DEV

Cover image for Como Criar Uma Coleção NFT ERC-1155 Personalizada Usando a Thirdweb
Panegali
Panegali

Posted on • Atualizado em

Como Criar Uma Coleção NFT ERC-1155 Personalizada Usando a Thirdweb

Sumário

1 . Introdução

2 . Visão geral

3 . Configurando o ambiente

4 . Implantando o contratato usando a ThirdWeb

5 . Verificar erros personalizados

6 . Função Getter

7 . Conclusão


Introdução

Neste tutorial, criaremos uma coleção de pacotes NFT ERC-1155 personalizada usando a ferramenta ContractKit da Thirdweb e Deploy. Em vez de cunhar todos os NFTs de uma só vez, permitimos que os usuários criem NFT de qualquer coleção de pacotes NFT, um por um. Também definimos um fornecimento máximo de NFTs; um usuário pode cunhar apenas um NFT.

Visão geral

O ERC-1155 emergiu como um padrão ouro para a criação de NFTs; todos os principais mercados listam novos tokens como um padrão ERC-1155. Usaremos A Thirdweb ContractKit para criar nosso contrato inteligente junto com alguma lógica personalizada. Permitimos que os usuários criem apenas um NFT por coleção de pacotes NFT.

Por que usar a ContractKit?

Cada recurso que você implementa em seus contratos inteligentes desbloqueia a funcionalidade no painel da Thirdweb e no SDK para ajudá-lo a criar aplicativos com base neles.

Por exemplo, se você implementar o contrato ERC721 base, desbloqueará o botão cunhar (mint) no painel e poderá usar a função cunhar no SDK; que carrega e fixa automaticamente seus metadados no IPFS!

O que é ERC-1155?

O ERC1155 é um padrão multi-token que permite a criação de tokens fungíveis, não fungíveis e semi-fungíveis em um único contrato. Antes do ERC-1155, se um caso de uso precisasse de tokens ERC-20 (fungíveis) e ERC-721 (não fungíveis), você precisaria criar contratos separados para conseguir isso. O ERC1155 também permite que várias coleções NFT sejam lançadas em apenas um contrato inteligente, em vez de criar um contrato diferente para cada coleção; isso aumenta a eficiência na construção de contratos inteligentes e minimiza a contagem de transações, o que é muito importante, pois consome menos espaço da blockchain. Com o ERC-1155, é possível a transferência em lote de tokens em vez de transferir um token para um único endereço nos padrões anteriores.

Um exemplo predominante do aplicativo ERC-1155 são os jogos descentralizados baseados em blockchain, que precisam de moedas e itens colecionáveis, então o ERC-1155 se tornou um padrão lá. O ERC1155 também se tornou um padrão no espaço NFT.

O ERC-721 anterior tinha um mapeamento um para um do ID do token com o endereço. O ERC-1155 possui um mapeamento bastante complexo onde o endereço em uma combinação de token ID é mapeado para o saldo do token.

Configurando o ambiente.

Em primeiro lugar, vamos configurar nosso ambiente e instalar as dependências. Para começar, execute o comando abaixo para criar um novo projeto abrindo o terminal do seu IDE preferido.

npx thirdweb create --contract

Você obterá algo assim:

Terminal do visual studio code

Agora insira seus detalhes preferidos. Para este tutorial, selecionei a configuração abaixo

Baixando dependências do thirdweb

Após a conclusão, navegue e abra o novo diretório executando o seguinte comando.

cd dapp-name

code .
Enter fullscreen mode Exit fullscreen mode

Você verá esse tipo de estrutura de arquivo.

Arquivos do projeto no visual studio code

Agora abra o diretório contracts e selecione o arquivo contract.sol. Você verá o código de demonstração. Agora copie o código do contrato inteligente abaixo e substitua-o pelo código de demonstração.

// SPDX-License-Identifier: MIT

/** @author Aayush gupta
 * `TravelQuest` é um dapp POV (Proof-of-visit) que permite ao usuário cunhar 1 NFT por coleção
 * utilizando a biblioteca 'ERC1155LazyMint' da 'ThirdWeb.
 */
pragma solidity ^0.8.0;


/**
 * Importando a biblioteca 'ERC1155LazyMint' da 'ThirdWeb.
 */
import "@thirdweb-dev/contracts/base/ERC1155LazyMint.sol";

/**
 * @title TravelQuest
 * @dev herda e utiliza o `ERC1155LazyMint` no nosso contrato inteligente
 *  
 */
contract TravelQuest is ERC1155LazyMint{ 
    // Número total de NFTs por coleção de pacotes
    uint256[] private supplies = [50,50];
    // Número total de NFTs cunhados
    uint256[] private minted = [0,0];

    // mapeamento aninhado para verificar se o usuário pode criar apenas um NFT por coleção de NFT
    mapping(uint256 => mapping(address => bool)) public member;

    /**
     * @dev O construtor da biblioteca ERC1155LazyMint leva quatro Parâmetros
     * _name of the NFT, _symbol do NFT,
     *  _royaltyRecipient (endereço) quem receberá royalties na venda secundária, _royaltyBps (porcentagem de royality)
     * não precisamos definir Royality para o propósito de nosso contrato inteligente. definir _royaltyBps como Zero
     * @param _name: nome de toda a coleção de pacotes NFT
     * @param _symbol: símbolo de toda a coleção de pacotes NFT
     */
    constructor(
        string memory _name,
        string memory _symbol
    ) ERC1155LazyMint (_name, _symbol, msg.sender, 0){}


    /**
     * @dev Cunha NFT e também verifica várias condições
     * 1. Um usuário pode cunhar apenas um NFT por coleção de pacotes
     * 2. Dá erro se _tokenId estiver errado
     * 3. Verifica e dá erro se todos os NFTs forem cunhados
     * 
     * @param _tokenId da coleção do pacote NFT 
     */
    function mintNFT(uint256 _tokenId) 
        external
        {
         require(
            !member[_tokenId][msg.sender],
            "Você já reivindicou este NFT."
        );    
        require(_tokenId <= supplies.length-1,"O NFT não existe");
        uint256 index = _tokenId;

        require (minted[index] + 1 <= supplies[index], "Todos os NFT foram cunhados");
        _mint(msg.sender, _tokenId, 1, "");
        // "" são dados que são colocados vazios
        minted[index] += 1;
        member[_tokenId][msg.sender] = true;
    }

    /**
     * @dev Dá o número total de NFTs cunhados por coleção de pacotes NFT
     * @param _tokenId da coleção do pacote NFT 
     */
    function totalNftMinted(uint256 _tokenId) public view returns(uint256){
        return minted[_tokenId];
    }
}
Enter fullscreen mode Exit fullscreen mode

Abaixo, vou explicar o código, mas antes de ver a explicação, peço que você tente entender os contratos inteligentes por conta própria, lendo o código e os comentários.

Explicação do contrato

Linha 1: Especificando o tipo de licença SPDX, que é adicionada após a versão ^0.6.8 do Solidity. Sempre que o código-fonte de um contrato inteligente é disponibilizado ao público, essas licenças podem ajudar a resolver/evitar problemas de direitos autorais. Se você não deseja especificar nenhum tipo de licença, pode usar um valor especial UNLICENSED ou pular todo o comentário (não resultará em erro, apenas em um aviso).

Linha 7: Declarando a versão do Solidity.

Linha 13: Importando o contrato thirdweb ERC1155LazyMint.

Linha 20: Herdando o contrato ERC1155LazyMint em nosso contrato inteligente TravelQuest. Para usar todas as funcionalidades do contrato ERC1155LazyMint.

Linha 22: supplies é uma matriz que rastreia o número Máximo de NFT disponível para cunhagem.

Linha 24: minted é uma matriz que rastreia quantos NFTs já foram cunhados.

Linha 27: member é um mapeamento aninhado para verificar se o usuário pode cunhar apenas um NFT por coleção de NFT

Linha 37: constructor: O construtor da biblioteca ERC1155LazyMint leva quatro parâmetros

_name: nome do NFT

_symbol: símbolo do NFT

_royaltyRecipient (endereço) que receberá royalties em uma venda secundária

_royaltyBps (porcentagem de royalties).

não precisamos definir royalties para fins de nosso contrato inteligente. definindo _royaltyBps como Zero.

Linha 38: string memory _name: nome de toda a coleção de pacotes NFT

Linha 39: string memory _symbol: símbolo de toda a coleção de pacotes NFT

Linha 51: function mintNFT: para permitir que os usuários criem NFT de nossa coleção de pacotes NFT. Um usuário pode cunhar apenas 1 NFT de cada coleção de NFT. Além disso, verifica várias condições

  • Um usuário pode cunhar apenas um NFT por coleção de pacotes
  • Dá erro se _tokenId estiver errado
  • Verifica e dá um erro se todos os NFTs _tokenIdsão cunhados: tokenId da coleção do pacote NFT

  • Linha 72: function totalNftMinted: é uma função getter. Fornece o número total de NFTs cunhados por coleção de pacote NFT. _tokenIdé o tokenId da coleção de pacote NFT

BOOM: Você criou nosso contrato inteligente com lógica personalizada e Thirdweb ContractKit.

Implantando o contratato usando a ThirdWeb

Use a CLI para enviar nosso contrato diretamente para qualquer uma das redes suportadas pela Thirdweb usando seu painel.

npx thirdweb deploy
Enter fullscreen mode Exit fullscreen mode

Executar este comando irá:

  • Compilar todos os contratos no diretório atual.
  • Permitir selecionar quais contratos você deseja implantar.
  • Carregar o código-fonte do seu contrato (ABI) para o IPFS.
  • Abrir o fluxo de implantação no painel para selecionar uma das redes com suporte da ThirdWeb para ser implantada.
  • Você não precisa escrever seu script de implantação. Isso significa que você não precisa de sua Private Key para implantar seu contrato inteligente, o que economiza e elimina qualquer chance de expor sua chave privada.

Depois de executar o comando acima, você obterá algo assim:

Dependências do projeto

Agora clique no link. Você abrirá o painel de implantação. Digite os detalhes (Nome do NFT, símbolo do NFT e rede que deseja implantar seu contrato inteligente) e clique no botão Deploy Now.

Interface da thirdweb

Após a implantação do seu contrato inteligente, você será direcionado para o Painel da Coleção NFT.

Painel da Coleção NFT

Clique em Single Upload para carregar os metadados do nosso NFT. Você também pode usarBatch Upload. Mas para este tutorial, vamos nos ater ao Single Upload.

Uploado do NFT

Adicione os detalhes conforme mostrado acima e clique no botão Lazy Mint NFT.

Da mesma forma, vamos adicionar metadados para outro NFT.

Adicionando metadados do NFT

Após a adição de metadados, sua seção de NFTs no painel ficará assim.

Seção de NFTs no Painel

Agora que temos nossa coleção NFT junto com os metadados no pedido, vamos cunhar alguns NFTs.

Cunhar o NFT

Vá para a seção Explorer do painel da coleção de NFT. Você verá todas as funções que pode executar. Por enquanto, vamos nos concentrar apenas em nossa função personalizada mintNFT.

Seção explorer

Digite o _tokenId (0 ou 1) e clique no botão Mint. Você cunhará o NFT e o painel mostrará todos os detalhes da transação.

Detalhes da transação

Copie o endereço do seu contrato e cole o endereço na rede de teste Opensea para visualizar seu NFT com metadados.

NFT na OpenSea

Você cunhou com sucesso o NFT e o visualizou no Opensea. Você pode compartilhar o link do Opensea e se gabar dos NFTs como todos os nativos da web3 fazem.

Verificar erros personalizados

Você pode ter cunhado com sucesso o NFT. Agora vamos verificar os erros personalizados que adicionamos em nosso contrato inteligente.

TokenID Errado

Insira qualquer _tokenIderrado na função mintNFT.

TokenID Errado

Você verá esse erro personalizado bem definido com todos os detalhes.

Já Reivindicado

Tente cunhar o mesmo NFT com o mesmo endereço de carteira.

Token reivindicado

Novamente, você verá esse erro personalizado bem definido com todos os detalhes.

Função Getter

Já vimos como podemos acessar e usar a função setter na ThirdWeb. Agora vamos interagir com a função getter. Você pode acessar a função getter rolando a página explorer para baixo e clicando em sua função personalizada totalSupply.

Função Getter

Você vê que está obtendo o resultado certo.

Conclusão

Você concluiu todo o tutorial. Dê a si mesmo um tapinha nas costas.

Você aprendeu sobre:

  • Padrão de token ERC-1155
  • Criar seu próprio contrato inteligente personalizado usando thirdweb contractkit
  • Implantar seu contrato inteligente usando thirdweb deploy
  • Armazenar seus metadados NFTs em IPFS usando thirdweb dashboard
  • Cunhar seu NFT e interagir com seu contrato inteligente usando a seção Explorer do thirdweb dashboard

Simplesmente UAU!

Se você aprender e gostar deste artigo, por favor, compartilhe este artigo com seus amigos. Espero que você tenha aprendido algo novo ou talvez até resolvido um problema. Obrigado por ler e divirta-se!

Você pode me seguir no Twitter e no LinkedIn. Mande suas sugestões/comentários!

WAGMI (“Todos nós vamos conseguir”)


Artigo escrito por Aayush Gupta e traduzido por Marcelo Panegali

Criar uma coleção de NFTs ERC-1155 é apenas o ponto de partida; os projetos incríveis da WEB3DEV representam a chave de entrada para o emocionante cenário web3. 🌐 Não espere mais! Corra para o nosso site agora mesmo e garanta sua inscrição nos próximos builds. A sua empolgante jornada rumo à maestria das aplicações web3 está prestes a começar! 🚀🔗

Top comments (0)