# Using Hardhat

[Hardhat ](https://hardhat.org/)is a full-featured development environment for contract compilation, deployment and verification. The [Hardhat Etherscan plugin](https://hardhat.org/plugins/nomiclabs-hardhat-etherscan.html) supports contract verification on kcc scan.

## 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
```

**pnpm instructions**

```
pnpm add -D hardhat
```

### **2) Create a project**

Run `npx hardhat` in your project folder and follow the instructions to create ([more info here](https://hardhat.org/getting-started/#quick-start)).

### 3) Install plugin

Install the [hardhat-etherscan plugin](https://hardhat.org/plugins/nomiclabs-hardhat-etherscan.html) (requires **v3.0.0+).**

**npm**

```
npm install --save-dev @nomiclabs/hardhat-etherscan
```

**yarn**

```
yarn add --dev @nomiclabs/hardhat-etherscan
```

**pnpm**

```
pnpm add -D @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](https://hardhat.org/guides/typescript.html#typescript-support).

```
import "@nomiclabs/hardhat-etherscan";
```

## Config File

Your basic [Hardhat config file](https://hardhat.org/config/) (`hardhat.config.js` or `hardhat.config.ts`) will be setup to support the network you are working on. In this example we use the kcc test network and a `.js` file. &#x20;

You can add a `customChains` object to the config file. It includes:

* `chainID` - Network chain ID
* `apiURL` - Block explorer API URL
* `browserURL` - Block explorer URL

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

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

module.exports = {
  solidity: "0.8.17",
  networks: {
    kt: {
      url: 'https://rpc-testnet.kcc.network/',
      accounts: [secret.key],
    },
    km: {
      url: 'https://rpc-mainnet.kcc.network/',
      accounts: [secret.key],
    }
  },
  etherscan: {
    apiKey: {
      kt: "abc",
      km: "abc"
    },
    customChains: [
      {
        network: "km",
        chainId: 321,
        urls: {
          apiURL: "https://scan.kcc.io/api",
          browserURL: "https://scan.kcc.io/"
        }
      },
      {
        network: "kt",
        chainId: 322,
        urls: {
          apiURL: "https://scan-testnet.kcc.network/api",
          browserURL: "https://scan-testnet.kcc.network/"
        }
      }
    ]
  }
};
```

## Deploy and Verify

### Deploy

```
npx hardhat run scripts/deploy.js --network kt
Contract deployed to: 0x3F0A49981D3204A8E7bD7871aDEFBC6379A05410
```

### Verify

You can include constructor arguments with the verify task.

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

KCC Testnet example (has constructors).

```sh
D:\hardhat>npx hardhat verify --network kt 0x3F0A49981D3204A8E7bD7871aDEFBC6379A05410 "0x0576a174D229E3cFA37253523E645A78A0C91B57,0xae3DB39196012a7bF6D38737192F260cdFE1E7Ec"
Nothing to compile
Compiling 1 file with 0.8.0
Successfully submitted source code for contract
contracts/KCCPaymaster.sol:KCCPaymaster at 0x3F0A49981D3204A8E7bD7871aDEFBC6379A05410
for verification on the block explorer. Waiting for verification result...

Successfully verified contract KCCPaymaster on Etherscan.
https://scan-testnet.kcc.network/address/0x3F0A49981D3204A8E7bD7871aDEFBC6379A05410#code
```

{% hint style="info" %}
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
{% endhint %}

## Confirm Verification on KCC Scan

Go to KCC Scan instance and paste the contract address into the search bar. If verified, the code tab will display a green checkmark.

<figure><img src="https://2372007595-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0Tecsoe4KNURIiIXeVdO%2Fuploads%2FvvujQsqVzX9DIshfRKSd%2Fimage.png?alt=media&#x26;token=5e8bbf61-e54d-4575-9e98-419838b18457" alt=""><figcaption></figcaption></figure>

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

<figure><img src="https://2372007595-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0Tecsoe4KNURIiIXeVdO%2Fuploads%2FpZA2SbwFmhxJoQAeKgPL%2Fimage.png?alt=media&#x26;token=15d4c4a7-2f4a-4e17-83bc-222be677f99d" alt=""><figcaption></figcaption></figure>

<figure><img src="https://2372007595-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F0Tecsoe4KNURIiIXeVdO%2Fuploads%2FVzNCk0xUutgwA2Dmf3Vs%2Fimage.png?alt=media&#x26;token=31724bbb-3b08-4e5f-915f-425b0841e059" alt=""><figcaption></figcaption></figure>

## Resources

{% hint style="info" %}
Learn more about plugin configs, troubleshooting etc. at <https://hardhat.org/plugins/nomiclabs-hardhat-etherscan.html>
{% endhint %}
