Verifique automaticamente o código do contrato no Etherscan com o plug-in Truffle

Tradução de : Projeto de Tradução Dengchain _


Etherscan é o navegador mais popular no Ethereum. Uma de suas funções é verificar o código fonte dos contratos inteligentes . Ele permite que os usuários entendam as funções do contrato por meio do código-fonte antes de usar o contrato. Isso aumenta a confiança do usuário no contrato e, portanto, beneficia o desenvolvedor.

O envio de códigos pelo formulário do site Etherscan é o principal método de validação de códigos, mas requer muito trabalho manual . Você precisa inserir itens como a versão do compilador e os parâmetros do construtor e enviar o código-fonte do contrato expandido. O código precisa corresponder exatamente ao código implantado.

Algumas pessoas usam ferramentas de linha de comando para desfazer contratos do Truffle e usam o Remix IDE baseado em navegador para implantar o código-fonte desenrolado. Em seguida, copie o mesmo código-fonte expandido para o Etherscan para validar o envio do formulário. Este é um processo muito tedioso e deve ser automatizado.

É por isso que criei o  plugin trufa-plugin-verify  , que verifica automaticamente os contratos do Truffle por meio da API Etherscan. Este plugin é um projeto de código aberto com muitos participantes diferentes, incluindo alguns dos desenvolvedores de Ren . Use este plugin para verificar contratos com um simples comando:

truffle run verify ContractName

Dependência

Neste artigo, presumimos que você já tenha um projeto Truffle implantável. Caso contrário, você pode consultar este tutorial do Truffle , que também explica como usar o Infura para configurar a implantação de um projeto Truffle.

Você também pode conferir o código-fonte deste artigo no GitHub .

contrato

Tomemos o contrato do Casino como exemplo. No contrato, os jogadores podem apostar 1-10 ETH. Para garantir que o contrato não fique sem dinheiro, os jogadores podem apostar apenas uma fração do valor total do contrato.

O número vencedor é o resultado da operação do módulo no número do bloco atual. Esta operação é boa em testes, mas esteja ciente de que pode ser abusada na produção.

Neste artigo, dividiremos especificamente o contrato ainda mais para que ele seja distribuído por vários arquivos. É conveniente mostrar a funcionalidade completa do plugin.

contratos/Kilable.sol

pragma solidity ^0.5.8;

contract Killable {
    address payable public owner;

    constructor() public {
        owner = msg.sender;
    }

    function kill() external {
        require(msg.sender == owner, "Only the owner can kill this contract");
        selfdestruct(owner);
    }
}

contratos/Casino.sol

pragma solidity ^0.5.8;

import "./Killable.sol"

contract Casino is Killable {
    event Play(address payable indexed player, uint256 betSize, uint8 betNumber, uint8 winningNumber);
    event Payout(address payable winner, uint256 payout);

    function fund() external payable {}

    function bet(uint8 number) external payable {
        require(msg.value <= getMaxBet(), "Bet amount can not exceed max bet size");
        require(msg.value >0, "A bet should be placed");

        uint8 winningNumber = generateWinningNumber();
        emit Play(msg.sender, msg.value, number, winningNumber);

        if (number == winningNumber) {
            payout(msg.sender, msg.value * 10);
        }
    }

    function getMaxBet() public view returns (uint256) {
        return address(this).balance / 100;
    }

    function generateWinningNumber() internal view returns (uint8) {
        return uint8(block.number % 10 + 1); // Don't do this in production
    }

    function payout(address payable winner, uint256 amount) internal {
        assert(amount > 0);
        assert(amount <= address(this).balance);

        winner.transfer(amount);
        emit Payout(winner, amount);
    }
}

Verifique o contrato

Agora que temos o contrato pronto, podemos mostrar como é simples verificar o contrato usando trufa-plugin-verify.

1. Instale e ative a verificação de plug-in de trufas

O plugin Truffle pode ser instalado usando npm ou yarn:

npm install -D truffle-plugin-verify
yarn add -D truffle-plugin-verify

Após a instalação, adicione o seguinte ao arquivo truffle-config.jsou truffle.jspara Truffle para ativar o plug-in:

module.exports = {
  /* ... rest of truffle-config */

  plugins: [
    'truffle-plugin-verify'
  ]
}

2. Crie uma chave de API Etherscan e adicione-a ao Truffle

Para criar uma chave de API Etherscan, primeiro você precisa criar uma conta no site da Etherscan . Depois de criar uma conta, uma nova chave de API pode ser adicionada na página de perfil, conforme mostrado na imagem acima. Depois de criar a nova chave, adicione-a ao arquivo truffle-config.js ou  em:truffle.jsapi_keys

module.exports = {
  /* ... rest of truffle-config */

  api_keys: {
    etherscan: 'MY_API_KEY'
  }
}

Atualmente, você não pode enviar a chave de API para a base de código. Recomenda-se usar  dotenv.env para salvar a chave de API, ignorar o arquivo  no repositório git  e lê-lo no arquivo de configuração truffle-config.js ou  . O método de leitura é como truffle.jssegue:

var HDWalletProvider = require("truffle-hdwallet-provider");
require('dotenv').config();

module.exports = {
  networks: {
    rinkeby: {
      provider: function() {
        return new HDWalletProvider(`${process.env.MNEMONIC}`, `https://rinkeby.infura.io/v3/${process.env.INFURA_ID}`)
      },
      network_id: 4
    }
  },
  plugins: [
   'truffle-plugin-verify'
  ],
  api_keys: {
    etherscan: process.env.ETHERSCAN_API_KEY
  }
};

Seu arquivo de configuração pode ser diferente do acima, mas contanto que a implantação da rede pública esteja configurada e ambas estejam configuradas corretamente plugins, api_keysvocê deve estar bem.

3. Implantar e verificar o contrato

O uso de trufa-plugin-verify está definido e a próxima etapa é realmente implantar e verificar o contrato inteligente.

implantar:

truffle migrate --network rinkeby

Isso levará algum tempo e, uma vez implantado, algo semelhante ao seguinte aparecerá:

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

Depois que o contrato for implantado, podemos usar o trufa-plugin-verify para Etherscan nosso contrato de cassino:

truffle run verify Casino --network rinkeby

Ainda leva algum tempo e, eventualmente, retorna:

Pass - Verified: https://rinkeby.etherscan.io/address/0xAf6e21d371f1F3D2459D352242564451af9AA23F#contracts

Acesse o endereço acima para visualizar o contrato

 

para concluir

Neste artigo, discutimos como pode ser complicado validar o código por meio do formulário online Etherscan, pois há várias etapas manuais a serem executadas sempre que um contrato é implantado. Neste artigo, usamos trufa-plugin-verify para permitir que os desenvolvedores verifiquem qualquer contrato inteligente com apenas um comando simples, que fornece uma alternativa fácil e automatizada à verificação manual.

Esta tradução é suportada pela comunidade Chainlink e  CellNetwork  .

Endereço original: Verifique automaticamente os contratos inteligentes do Truffle no Etherscan
Autor: Rosco Kalis

[Tradução] Verifique automaticamente o código do contrato no Etherscan com o plugin Truffle

Acho que você gosta

Origin blog.csdn.net/u013288190/article/details/123865542
Recomendado
Clasificación