Exercício – Implantar na rede de teste Ropsten

Concluído

Agora, temos um contrato inteligente. Nós o implantamos com êxito em nossa rede de desenvolvimento. Em seguida, nos concentraremos na implantação na rede de teste Ropsten.

Visão geral do exercício

Para este tutorial, vamos implantar no Ropsten usando o MetaMask com ether de teste. O processo de implantação requer a configuração de uma conta do Infura para se conectar e implantar na testnet Ropsten. Depois de implantarmos, podemos usar o Ropsten Testnet Explorer para inspecionar os blocos que foram implantados na testnet.

Configuração do exercício

Para configurar o exercício, você vai:

  1. Instalar e configurar o MetaMask.
  2. Obter ether de teste.
  3. Instalar o HDWallet-Provider e o fs.
  4. Instalar o Infura e vincular os pontos de extremidade à rede de teste Ropsten.

Configurar o MetaMask

Se ainda não tiver feito isso, instale e configure o MetaMask. Em seguida, entre em sua conta no navegador.

Adicionar ether à rede de teste Ropsten do MetaMask

Use sua conta do MetaMask para se conectar à rede de teste Ropsten. Comece obtendo ether de teste da Torneira de teste do Ropsten:

  1. Abra o MetaMask.

  2. Conecte-se ao Ropsten.

  3. Copie o endereço de sua conta.

    Captura de tela mostrando a extensão do navegador do MetaMask em que você pode copiar o endereço da conta.

  4. Abra uma janela ou guia do navegador e vá para a torneira do Ropsten.

  5. Para solicitar ether, insira o endereço de sua conta da testnet e selecione Send me test Ether.

    Captura de tela mostrando como solicitar ether de teste na torneira do Ropsten.

  6. No MetaMask, verifique se você tem ether em sua conta.

    Captura de tela mostrando a extensão do navegador do MetaMask. A conta lista a quantidade de ether.

Instalar o HDWallet-Provider e o fs

Em seguida, você precisará do HDWallet-Provider. Esse provedor Web3 habilitado para carteiras cria seu endereço de rede de conexão e mnemônico secreto. Você também precisará do fs para ler do sistema de arquivos.

Para instalar as duas ferramentas, retorne ao projeto todolist no Visual Studio Code. Abra o painel do terminal e execute os seguintes comandos:

  1. npm init
  2. npm install fs
  3. npm install @truffle/hdwallet-provider

Aguarde a conclusão das instalações do fs e do HDWallet-Provider. Você pode ver vários avisos. Desde que não sejam erros, você pode ignorá-los.

O conjunto de desenvolvimento do Infura fornece acesso à API escalonável e instantâneo às redes Ethereum. O Infura é um cluster de nó do Ethereum hospedado que oferece aos usuários a capacidade de executar um aplicativo em uma rede pública. Use o Infura para implantar em redes públicas e interagir com elas.

Para definir uma conta, acesse o site do Infura e siga estas etapas:

  1. Configure uma conta e confirme seu endereço de email.
  2. Selecione Ethereum>Criar projeto. Nomeie o projeto TodoList.
  3. Em Chaves, altere o ponto de extremidade para Ropsten.

Sua exibição deverá ser semelhante ao seguinte projeto de teste:

Captura de tela mostrando o processo de criação de um projeto Infura.

Conectar-se ao Ropsten

Retorne à pasta do projeto todolist no Visual Studio Code.

  1. No arquivo de configuração do Truffle, ./truffle-config.js, remova a marca de comentário das linhas hdwallet-provider, infuraKey, fs e mnemonic:

     const HDWalletProvider = require('@truffle/hdwallet-provider');
     const infuraKey = "fj4jll3k.....";
    
     const fs = require('fs');
     const mnemonic = fs.readFileSync(".secret").toString().trim();
    
  2. Vá para sua conta do Infura para obter o valor de infuraKey. No Infura, ele é chamado de ID do Projeto. Ele fica visível no ponto de extremidade do Ropsten:

    Captura de tela mostrando o ponto de extremidade do Ropsten a ser copiado.

  3. Ao lado da ID do Projeto, selecione o ícone da área de transferência para copiar a ID. Volte para ./truffle-config.js para colar o valor de infuraKey.

    A imagem a seguir mostra um exemplo de chave para colar. Embora o exemplo de chave possa ser usado como um espaço reservado, sua chave será diferente da que você vê aqui e você deverá usar seu infuraKey.

    const infuraKey = "f6bfe21890a84b9fa27def74bafb0b1b";
    
  4. Crie um arquivo chamado .secret. Copie o mnemônico para o novo arquivo.

    Para obter seu mnemônico, no MetaMask, acesse Configurações>Segurança & Privacidade. Selecione Revelar Frase Semente. Insira sua senha do MetaMask para verificar sua identidade. Em seguida, selecione Copiar para a área de transferência.

    Importante

    Não compartilhe seu mnemônico com ninguém, ou a pessoa poderá acessar sua conta. Se você usar o Git, inclua .secret no arquivo .gitignore.

    Captura de tela mostrando como revelar uma frase semente no MetaMask.

  5. Use o seguinte código para ler a frase semente do arquivo .secret e para cortar todos os espaços em branco:

    const mnemonic = fs.readFileSync(".secret").toString().trim();
    
  6. Defina a rede removendo os das marcas de comentário das configurações de rede do Ropsten em truffle-config.js. Verifique se sua configuração é semelhante a este código:

    ropsten: {
       provider: () => new HDWalletProvider(mnemonic, `https://ropsten.infura.io/v3/${infuraKey}`),
       network_id: 3,       // Ropsten's id
       gas: 5500000,        // Ropsten has a lower block limit than mainnet
       confirmations: 2,    // # of confs to wait between deployments. (default: 0)
       timeoutBlocks: 200,  // # of blocks before a deployment times out (minimum/default: 50)
       skipDryRun: true     // Skip dry run before migrations? (default: false for public nets )
     },
    

Implantar no Ropsten

Para implantar no Ropsten, execute o seguinte comando do terminal do Visual Studio Code:

truffle migrate --network ropsten

Se a conexão for bem-sucedida, você verá a seguinte saída:

Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.

Warning: Both truffle-config.js and truffle.js were found. Using truffle-config.js.

Compiling your contracts...
===========================
> Everything is up to date, there is nothing to compile.


Starting migrations...
======================
> Network name:    'ropsten'
> Network id:      3
> Block gas limit: 8000029 (0x7a121d)


1_initial_migration.js
======================

   Deploying 'Migrations'
   ----------------------
   > transaction hash:    0x2f456acc5f842ddf0eb151742e47dd6e8ec5e48d73b1f150e2908cb56e0bf174
   > Blocks: 1            Seconds: 29
   > contract address:    0x789101d0B0Ffa4f8f87E67AF8ff8F84bD519752D
   > block number:        9398701
   > block timestamp:     1609784599
   > account:             0x896587D82C895F30433cade401068C2791A6936F
   > balance:             0.99616138
   > gas used:            191931 (0x2edbb)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.00383862 ETH

   Pausing for 2 confirmations...
   ------------------------------
   > confirmation number: 1 (block: 9398702)
   > confirmation number: 2 (block: 9398703)

   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.00383862 ETH


2_deploy_contracts.js
=====================

   Deploying 'TodoList'
   --------------------
   > transaction hash:    0xad8066308e9cc8503400c86a43674d856a71e02696e2c21b3e55f566df5afc36
   > Blocks: 0            Seconds: 8
   > contract address:    0x48112BE8d0E6e7bA892aFa2d4Ab58e9c43dd37De
   > block number:        9398706
   > block timestamp:     1609784870
   > account:             0x896587D82C895F30433cade401068C2791A6936F
   > balance:             0.98513544
   > gas used:            508959 (0x7c41f)
   > gas price:           20 gwei
   > value sent:          0 ETH
   > total cost:          0.01017918 ETH

   Pausing for 2 confirmations...
   ------------------------------
   > confirmation number: 1 (block: 9398707)
   > confirmation number: 2 (block: 9398708)

   > Saving migration to chain.
   > Saving artifacts
   -------------------------------------
   > Total cost:          0.01017918 ETH


Summary
=======
> Total deployments:   2
> Final cost:          0.0140178 ETH

Verificar a implantação do contrato

Siga as etapas nas próximas seções para verificar se o contrato foi implantado.

Verificar no MetaMask

Verifique o MetaMask para verificar se o ether foi usado para implantar o contrato.

Captura de tela mostrando o saldo do MetaMask após a implantação no Ropsten.

Verificar no Ropsten Etherscan

No Ropsten Etherscan, insira o endereço do contrato. Em seguida, inspecione o contrato.

Captura de tela mostrando o contrato implantado no Etherscan.

Você também pode verificar sua implantação abrindo uma janela do terminal dentro do Visual Studio Code. Você interage com o contrato usando o console do Truffle, como faria no blockchain de desenvolvimento do Ganache.