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.js
ou truffle.js
para 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
![](https://img-blog.csdnimg.cn/img_convert/d0cdc86993e25e6d40bf73fe68566a07.png)
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.js
api_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.js
segue:
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_keys
você 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