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!
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.
- 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
- Levantamos con docker blockscout, nuestro explorador de bloques agnóstico https://github.com/blockscout/blockscout/tree/master/docker-compose
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
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/"
}
}
]
}
};
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;
});
- 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.
A StaminaBlock por aportar este granito de arena.
Si te ha gustado la información, puedes donar en ETH/MATIC a: 0xc8B54eC37c35F622C7a23a54d21d8a8c8b2C72f5