Hardhat Verification Plugin
Hardhat is a full-featured development environment for contract compilation, deployment and verification. The Hardhat Etherscan plugin supports contract verification on BlockScout.
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 hardhat
yarn instructions
yarn add --dev hardhat
npm
npm install --save-dev @nomiclabs/hardhat-etherscan
yarn
yarn add --dev @nomiclabs/hardhat-etherscan
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";
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 Sokol 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.
require("@nomiclabs/hardhat-waffle");
require("@nomiclabs/hardhat-etherscan");
require('hardhat-deploy');
let secret = require("./secret");
module.exports = {
solidity: "0.8.9",
networks: {
sokol: {
url: 'https://sokol.poa.network/',
accounts: [secret.key],
}
},
etherscan: {
// Your API key for Etherscan
// Obtain one at https://etherscan.io/
apiKey: "abc"
}
};
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 Sokol 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: {
sokol: "abc"
},
customChains: [
{
network: "sokol",
chainId: 77,
urls: {
apiURL: "https://blockscout.com/poa/sokol/api",
browserURL: "https://blockscout.com/poa/sokol"
}
}
]
}
D:\hard_hat>npx hardhat run scripts\deploy.js --network sokol
Contract deployed to: 0x8595e22825Ba499dB8C77C5c830c235D80f9C0fa
You can include constructor arguments with the verify task.
npx hardhat verify --network <network> DEPLOYED_CONTRACT_ADDRESS "Constructor argument 1"
Sokol example (no constructors).
D:\hard_hat>npx hardhat verify --network sokol 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://blockscout.com/poa/sokol/address/0x8595e22825Ba499dB8C77C5c830c235D80f9C0fa#code
Note the verify task will not be listed in the available tasks lists at
npx hardhat --config
but should work as expected.If not, check you have the minimum required version of the nomiclabs-hardhat-etherscan plugin (v3.0.0+) installed
Go to your BlockScout instance and paste the contract address into the search bar. If verified, the code tab will display a green checkmark.

Selecting the Code tab will provide additional information about your contract.

Learn more about plugin configs, troubleshooting etc. at https://hardhat.org/plugins/nomiclabs-hardhat-etherscan.html
Last modified 5mo ago