Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save netzulo/de7f63fe9fb5a35cc443ce819036cfed to your computer and use it in GitHub Desktop.
Save netzulo/de7f63fe9fb5a35cc443ce819036cfed to your computer and use it in GitHub Desktop.
Custom Verify and Block Explorer with hardhat (blockscout)

Hardhat and BlockScout (verify own contracts)

Espero que este tutorial sea de ayuda para mucha gente, ya que ni la IA consiguió en su momento ayudarme, espero que le ayude a mas personas aunque sea a través de un prompt La ley es el código!

Verificar Contratos con explorador de bloques personalizado

Se describe el proceso de configurar y verificar contratos utilizando Hardhat. Se destaca el uso de un explorador de bloques personalizado para realizar la verificación de los contratos.

Prerequisitos

  • Node.js: Asegúrate de tener Node.js instalado en tu sistema. Puedes descargarlo desde el sitio web oficial: https://nodejs.org
  • Hardhat: Instala Hardhat globalmente ejecutando el siguiente comando en tu terminal:
  • Existe el fichero .env.hardhat, debe contener la CLAVE PRIVADA de una de las cuentas de la red a la que te vas a conectar
  • Instalamos las dependencias
npm install -g hardhat
npm install --save-dev @openzeppelin/hardhat-upgrades @nomiclabs/hardhat-etherscan
  • Levantamos hardhat en el puerto 8545 con el comando
npx hardhat node --hostname 0.0.0.0 --port 8545

IMPORTANTE: Asegúrate de tener instalados todos los paquetes y dependencias mencionados antes de continuar con la configuración y verificación de los contratos en Hardhat.

IMPORTANTE: Blockscout no necesita API_KEY VALIDA si no quieres, pero no se puede obviar un texto minimo

Hardhat (hardhat.config.js):

require('@openzeppelin/hardhat-upgrades');
require("@nomiclabs/hardhat-etherscan");

const fs = require("fs");
const secret = fs.readFileSync(".env.hardhat").toString().trim();

module.exports = {
  solidity: "0.8.17",
  paths: {
    sources: "./contracts",
    tests: "./test",
    cache: "./cache",
    artifacts: "./artifacts",
  },
  networks: {
    localhost: {
      url: "http://localhost:8545",
      accounts: [secret],
      chainId: 31337
    },
  },
  etherscan: {
    apiKey: {
      localhost: "YourApiKey",
    },
    customChains: [
      {
        network: "localhost",
        chainId: 31337,
        urls: {
          apiURL: "http://localhost:4000/api",
          browserURL: "http://localhost:4000/"
        }
      }
    ]
  }
};

Archivo del Verificador (verify.js):

const hre = require("hardhat");
const fs = require("fs")
// example of deployed.json file --> {contractOne:{address:'0x', abi:[], args: []}}

async function main() {
  const startAt = Number(new Date());

  // change for your own 'read pattern'  
  const contracts = JSON.parse(fs.readFileSync(`${__dirname}/deployed.json`).toString().trim())

  for (const [name, {verify, address, abi, args}] of Object.entries(contracts)) {
    console.debug("[verifier]: ", name, address)
    try {
      await hre.run("verify:verify", {
        network: hre.network.name,
        address: address,
        contract: verify,
        contractAbi: abi,
        constructorArguments: args || [],
      });
    } catch (err) {
      console.debug("[verifier] ERROR: ", err.message)
    }
  }
  console.log("Duration: ", (Number(new Date()) - startAt) / 1000)
}

main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

Adicional:

  • El archivo de configuración (hardhat.config.js) define cómo se compilan, prueban y despliegan los contratos, así como la configuración de la red en la que se despliegan y verifican.
  • El archivo del verificador (verify.js) se utiliza para verificar los contratos desplegados en la red utilizando el entorno de ejecución de Hardhat.
  • La URL http://localhost:4000 corresponde a Blockscout, un explorador de bloques utilizado para visualizar información de la red y los contratos.
  • La URL http://localhost:4000/api corresponde a la API publica de Blockscout, es importante decir que si intentamos modificar esta dirección en la configuración, fallará el script verifier
  • La configuración proporcionada permite desplegar y verificar contratos en la red "localhost" utilizando Hardhat y Etherscan.

Thank you!

A StaminaBlock por aportar este granito de arena.

Donate

Si te ha gustado la información, puedes donar en ETH/MATIC a: 0xc8B54eC37c35F622C7a23a54d21d8a8c8b2C72f5

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment