Verifique automáticamente el código del contrato en Etherscan con el complemento Truffle

Traducción de : Proyecto de traducción de Dengchain _


Etherscan es el navegador más popular en Ethereum. Una de sus funciones es verificar el código fuente de los contratos inteligentes . Permite a los usuarios comprender las funciones del contrato a través del código fuente antes de utilizar el contrato. Esto aumenta la confianza del usuario en el contrato y, por lo tanto, beneficia al desarrollador.

Enviar códigos a través del formulario del sitio web de Etherscan es el método principal para validar códigos, pero requiere mucho trabajo manual . Debe ingresar elementos como la versión del compilador y los parámetros del constructor, y debe enviar el código fuente del contrato ampliado. El código debe coincidir exactamente con el código implementado.

Algunas personas usan herramientas de línea de comandos para deshacer contratos de Truffle y usan el IDE de Remix basado en navegador para implementar el código fuente desenrollado. Luego, copie el mismo código fuente expandido a Etherscan para validar el envío del formulario. Este es un proceso muy tedioso y debe ser automatizado.

Es por eso que creé el  complemento truffle -plugin-  verify, que verifica automáticamente los contratos de Truffle a través de la API de Etherscan. Este complemento es un proyecto de código abierto con muchos participantes diferentes, incluidos algunos de los desarrolladores de Ren . Use este complemento para verificar contratos con un comando simple:

truffle run verify ContractName

Dependencia

En este artículo, asumimos que ya tiene un proyecto Truffle desplegable. De lo contrario, puede consultar este tutorial de Truffle , que también explica cómo usar Infura para configurar la implementación de un proyecto de Truffle.

También puede consultar el código fuente de este artículo en GitHub .

contrato

Tomemos como ejemplo el contrato de Casino. En el contrato, los jugadores pueden apostar 1-10 ETH. Para asegurarse de que el contrato no se quede sin dinero, los jugadores solo pueden apostar una fracción del monto total del contrato.

El número ganador es el resultado de la operación de módulo en el número de bloque actual. Esta operación está bien en las pruebas, pero tenga en cuenta que se puede abusar de ella en la producción.

En este artículo, dividiremos específicamente el contrato aún más para que se distribuya en varios archivos. Es conveniente mostrar la funcionalidad completa del complemento.

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);
    }
}

Verificar el contrato

Ahora que tenemos el contrato listo, podemos mostrar lo simple que es verificar el contrato usando truffle-plugin-verify.

1. Instalar y habilitar truffle-plugin-verify

El complemento Truffle se puede instalar usando npm o yarn:

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

Después de la instalación, agregue lo siguiente al archivo truffle-config.jso truffle.jsde Truffle para habilitar el complemento:

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

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

2. Cree una clave API de Etherscan y agréguela a Truffle

Para crear una clave API de Etherscan, primero debe crear una cuenta en el sitio web de Etherscan . Después de crear una cuenta, se puede agregar una nueva clave API en la página de perfil como se muestra en la imagen de arriba. Después de crear la nueva clave, agréguela al archivo truffle-config.js o  en:truffle.jsapi_keys

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

  api_keys: {
    etherscan: 'MY_API_KEY'
  }
}

Actualmente, no puede enviar la clave de API a la base de código. Se recomienda usar  dotenv.env para guardar la clave de API, luego ignorar el archivo  en el repositorio de git  y luego leerlo en el archivo de configuración truffle-config.js o  truffle.js. El método de lectura es el siguiente sigue:

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
  }
};

Su archivo de configuración puede diferir del anterior, pero siempre que la implementación de la red pública esté configurada y ambos estén configurados correctamente plugins, api_keysdebería estar bien.

3. Implementar y verificar el contrato

Se establece el uso de truffle-plugin-verify, y el siguiente paso es implementar y verificar el contrato inteligente.

desplegar:

truffle migrate --network rinkeby

Esto llevará algún tiempo y, una vez implementado, aparecerá algo similar a lo siguiente:

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

Una vez que se implementa el contrato, podemos usar truffle-plugin-verify para Etherscan nuestro contrato de Casino:

truffle run verify Casino --network rinkeby

Todavía toma algún tiempo, y eventualmente regresa:

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

Visite la dirección anterior para ver el contrato

 

En conclusión

En este artículo, discutimos lo engorroso que puede ser validar el código a través del formulario en línea de Etherscan, ya que hay varios pasos manuales para realizar cada vez que se implementa un contrato. En este artículo, usamos truffle-plugin-verify para permitir que los desarrolladores verifiquen cualquier contrato inteligente con solo un comando simple, lo que proporciona una alternativa fácil y automatizada a la verificación manual.

Esta traducción cuenta con el apoyo de la comunidad Chainlink y  CellNetwork  .

Dirección original: Verificar automáticamente los contratos inteligentes de Truffle en Etherscan
Autor: Rosco Kalis

[Traducción] Verificar automáticamente el código del contrato en Etherscan con el complemento Truffle

Supongo que te gusta

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