👀Contract Verification

This guide will verify using hardhat.

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.

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 hardhat

YARN instructions

yarn add --dev hardhat

2) 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-etherscan

yarn

yarn add --dev @nomiclabs/hardhat-etherscan

4) 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 Asset Chain test network and a .js file.

Asset Chain is not directly supported by the plugin (to check run npx hardhat verify --list-networks)

But we can add it in a customChains object, to the config file. It includes:

  • chainID - 42421

  • apiURL - "http://scan-testnet.assetchain.org/api"

  • browserURL - "http://scan-testnet.assetchain.org"

The network name in customChains must match the network name in the apiKey object.

require("@nomiclabs/hardhat-waffle");
require("@nomiclabs/hardhat-etherscan");
require('hardhat-deploy');

let secret = require("./secret");

module.exports = {
  solidity: "0.8.9",
  networks: {
    localhost: {
      url: "http://127.0.0.1:8545/",
      accounts: [secret.key],
    }
  },
  etherscan: {
    apiKey: {
      assetchain_test: "abc"
    },
    customChains: [
      {
        network: "assetchain_test",
        chainId: 42421,
        urls: {
          apiURL: "https://scan-testnet.assetchain.org/api",
          browserURL: "https://scan-testnet.assetchain.org/"
        }
      }
    ]
  }
};

Deploy and Verify

Deploy

D:\hard_hat> npx hardhat run scripts\deploy.js --network assetchain_test
Contract deployed to: 0x8595e22825Ba499dB8C77C5c830c235D80f9C0fa

Verify

You can include constructor arguments with the verify task.

npx hardhat verify --network <network> DEPLOYED_CONTRACT_ADDRESS "Constructor argument 1"

For info on more complex constructor arguments(arrays, tuples..) please visit here.

Example (no constructors).

D:\hard_hat>npx hardhat verify --network assetchain_test 0x263E6d3E8b98fB0393A108825E2DcE3063F66713  --constructor-args ./scripts/arguments.js 
[INFO] Sourcify Verification Skipped: Sourcify verification is currently disabled. To enable it, add the following entry to your Hardhat configuration:

sourcify: {
  enabled: true
}

Or set 'enabled' to false to hide this message.

For more information, visit https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-verify#verifying-on-sourcify
Successfully submitted source code for contract
contracts/MultiSigWallet.sol:MultiSigWallet at 0x263E6d3E8b98fB0393A108825E2DcE3063F66713
for verification on the block explorer. Waiting for verification result...

Successfully verified contract MultiSigWallet on the block explorer.
http://scan-testnet.assetchain.org/address/0x263E6d3E8b98fB0393A108825E2DcE3063F66713#code

Confirm Verification on BlockScout

Go to our BlockScout Explorer and paste the contract address into the search bar.

Scroll down to see verified status. A green checkmark ✅ means the contract is verified.

You can now scroll down in the explorer to see and interact with the contract code.

Congratulations! Your contract is successfully verified on Asset Chain Explorer.

Last updated