Quaiscan
  • Quaiscan Open-Source Explorer
  • 🙎Using Quaiscan
    • Getting Started
      • Glossary of Terms
      • Main Menu
      • Blocks
      • Transaction Types
    • Token Support
      • ERC-1155 Support
  • 👩‍💻Developer Support
    • Quaiscan API
      • REST API Endpoints
      • GraphQL
      • JSON RPC & Quai Compatible RPC Endpoints
        • Account
        • Block
        • Contract
        • Logs
        • Stats
        • Token
        • Transaction
        • Quai RPC API
    • Smart Contract Verification
      • Quaiscan UI
      • Quaiscan smart-contract verification API
      • Hardhat Verification Plugin
    • Local Deployment
  • FAQs
    • User FAQs
    • Developer FAQs
  • 🧩Resources
    • Media kit
    • Release Notes
      • v1.0.0
    • Discussion
    • GitHub Repo
Powered by GitBook
On this page
  • Get Started
  • 1) Install Hardhat
  • 2) Create a project
  • 3) Install plugin
  • 4) Add plugin reference to config file
  • Config File
  • Deploy and Verify
  • Deploy
  • Verify
  • Confirm Verification on Quaiscan
  • Resources
Export as PDF
  1. Developer Support
  2. Smart Contract Verification

Hardhat Verification Plugin

PreviousQuaiscan smart-contract verification APINextLocal Deployment

Last updated 7 months ago

is a full-featured development environment for contract compilation, deployment and verification. The supports contract verification on Quaiscan.

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 ().

3) Install plugin

Install the

npm

npm install --save-dev @nomicfoundation/hardhat-verify

yarn

yarn add --dev @nomicfoundation/hardhat-verify

4) Add plugin reference to config file

Add the following statement to your hardhat.config.js.

require("@nomicfoundation/hardhat-verify");
import "@nomicfoundation/hardhat-verify";

Config File

In order to use Quaiscan explorer for the verification, you have to specify the explorer details under a customChains object. It includes:

  • chainID - Quai Network ChainID

  • apiURL - Quaiscan API URL

  • browserURL - Quaiscan Web URL

For example, here we added Quaiscan api endpoints for Quai Network to the config file. Note the network name in customChains must match the network name in the apiKey object.

import { HardhatUserConfig } from 'hardhat/config'
import '@nomicfoundation/hardhat-toolbox'
import '@nomicfoundation/hardhat-verify'

const PRIVATE_KEY = vars.get('PRIVATE_KEY')

const config: HardhatUserConfig = {
	solidity: '0.8.24',
	networks: {
		'quai': {
			url: 'https://rpc.dev.quai.network',
			accounts: [PRIVATE_KEY],
		},
	},
	etherscan: {
		apiKey: {
			// Is not required by quaiscan. Can be any non-empty string
			'quai': 'abc',
		},
		customChains: [
			{
				network: 'quai',
				chainId: 9000,
				urls: {
					apiURL: 'https://quaiscan.io/api/v2',
					browserURL: 'https://quaiscan.io/',
				},
			},
		],
	},
	sourcify: {
		enabled: false,
	},
}

export default config

Deploy and Verify

Deploy

> npx hardhat ignition deploy ./ignition/modules/Lock.ts --network quai
✔ Confirm deploy to network quai (9000)? … yes
Compiled 1 Solidity file successfully (evm target: istanbul).
Hardhat Ignition 🚀

Deploying [ LockModule ]

Batch #1
  Executed LockModule#Lock

[ LockModule ] successfully deployed 🚀

Deployed Addresses

LockModule#Lock - 0x00126b33e425f99ce962ACB91752DB41F302EFEA

Verify

The plugin requires you to include constructor arguments with the verify task and ensures that they correspond to expected ABI signature. However, Quaiscan ignores those arguments, so you may specify any values that correspond to the ABI.

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

Optimism Sepolia example.

> npx hardhat verify --network quai 0x00126b33e425f99ce962ACB91752DB41F302EFEA 1234
Successfully submitted source code for contract
contracts/Lock.sol:Lock at 0x00126b33e425f99ce962ACB91752DB41F302EFEA
for verification on the block explorer. Waiting for verification result...

Successfully verified contract Lock on the block explorer.
https://quaiscan.io/address/0x00126b33e425f99ce962ACB91752DB41F302EFEA#code

Confirm Verification on Quaiscan

Go to your Quaiscan instance and paste the contract address into the search bar.

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

Scroll down to see and interact with the contract code.

Resources

If using TypeScript, add this to your hardhat.config.ts. .

Your basic (hardhat.config.js or hardhat.config.ts) will be setup to support the network you are working on. In this example we use the Optimism Sepolia 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. .

If you prefer, you can migrate to to use a plugin bundle.

For deployment we will use - built-in Hardhat deployment system.

Learn more about plugin configs, troubleshooting etc. at

👩‍💻
Hardhat
hardhat-verify plugin
more info here
hardhat-verify plugin
More info on using typescript with hardhat available here
Hardhat config file
More info
hardhat-toolbox
Hardhat Ignition
https://hardhat.org/hardhat-runner/plugins/nomicfoundation-hardhat-verify