Contract Verification
Hardhat is a full-featured development environment for contract compilation, deployment and verification. The Hardhat Etherscan plugin supports contract verification on BlockScout.
Get Started
1) Install Hardhat
If you are starting from scratch, create an npm project by going to an empty folder, running npm init, and following the instructions. Recommend npm 7 or higher.
Once your project is ready:
npm instructions
npm install --save-dev hardhatyarn instructions
yarn add --dev hardhat2) Create a project
Run npx hardhat in your project folder and follow the instructions to create (more info here).
3) Install plugin
Install the hardhat-etherscan plugin (requires v3.0.0+).
npm
npm install --save-dev @nomiclabs/hardhat-etherscanyarn
yarn add --dev @nomiclabs/hardhat-etherscan4) Add plugin reference to config file
Add the following statement to your hardhat.config.js.
require("@nomiclabs/hardhat-etherscan");If using TypeScript, add this to your hardhat.config.ts. More info on using typescript with hardhat available here.
import "@nomiclabs/hardhat-etherscan";Config File
Your basic Hardhat config file (hardhat.config.js or hardhat.config.ts) will be setup to support the network you are working on. In this example we use the planq test network and a .js file.
Here we add an RPC url without an API key, however some value is still required. You can use any arbitrary string. More info.
If you prefer, you can migrate to hardhat-toolbox to use a plugin bundle.
require("@nomiclabs/hardhat-waffle");
require("@nomiclabs/hardhat-etherscan");
require('hardhat-deploy');
let secret = require("./secret");
module.exports = {
solidity: "0.8.9",
networks: {
planq: {
url: 'https://evm.planq.network/',
accounts: [secret.key],
}
},
etherscan: {
// Your API key for Etherscan
// Obtain one at https://etherscan.io/
apiKey: "abc"
}
};Add an Unsupported Network
Some chains are not supported by the plugin (to check run npx hardhat verify --list-networks)
If your chain is not in the list, you can add a customChains object to the config file. It includes:
chainID- Network chain IDapiURL- Block explorer API URLbrowserURL- Block explorer URL
For example, if planq were not in the default list, this is how it would be added to the config file. Note the network name in customChains must match the network name in the apiKey object.
etherscan: {
apiKey: {
planq: "abc"
},
customChains: [
{
network: "planq",
chainId: 7070,
urls: {
apiURL: "https://evm.planq.network/api",
browserURL: "https://evm.planq.network"
}
}
]
}Deploy and Verify
Deploy
D:\hard_hat>npx hardhat run scripts\deploy.js --network planq
Contract deployed to: 0x8595e22825Ba499dB8C77C5c830c235D80f9C0faVerify
You can include constructor arguments with the verify task.
npx hardhat verify --network <network> DEPLOYED_CONTRACT_ADDRESS "Constructor argument 1"planq example (no constructors).
D:\hard_hat>npx hardhat verify --network planq 0x8595e22825Ba499dB8C77C5c830c235D80f9C0fa
Nothing to compile
Compiling 1 file with 0.8.0
Successfully submitted source code for contract
contracts/test.sol:Foo at 0x8595e22825Ba499dB8C77C5c830c235D80f9C0fa
for verification on Etherscan. Waiting for verification result...
Successfully verified contract Foo on Etherscan.
https://evm.planq.network/address/0x8595e22825Ba499dB8C77C5c830c235D80f9C0fa#codeResources
Last updated