Using Hardhat

Hardhat is a development environment to compile, deploy, test, and debug your Ethereum software.

A sample project is available at https://github.com/thundercore/hardhat-thunder-project

Setting up Hardhat

Please follow Hardhat offcial guide to prepare your environment.

Once your environment is ready, we can create an empty folder and init a Hardhat project in it.

$ mkdir my-thundercore-project && cd $_

# We choose a basic sample project and install its dependences here:
$ npx hardhat init

 What do you want to do? · Create a basic sample project

✔ Do you want to install this sample project's dependencies with npm (hardhat @nomiclabs/hardhat-waffle ethereum-waffle chai @nomiclabs/hardhat-ethers ethers)? (Y/n) · y

After initialization, we can test the project with the hardhat compile command:

$ npm exec -- hardhat compile
Downloading compiler 0.8.25
Compiling 2 files with 0.8.25
Compilation finished successfully

Hardhat Config

To start developing on ThunderCore, we'll make some changes to the Hardhat config file. A great option is to use the tt-hardhat plugin.

yarn add -D tt-hardhat

Then, in hardhat.config, simply paste import "tt-hardhat"; at the top. We'll now be able to use networks thunder-testnet and thunder-mainnet.

Alternatively, we can configure the network manually. Open and edit hardhat.config.js in the root directory of your project.

// hardhat.config.ts

import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";

// Add this
import "tt-hardhat";

const config: HardhatUserConfig = {
   solidity: "0.8.25",
   networks: {
    hardhat: {
      allowUnlimitedContractSize: true,
      blockGasLimit: 141438723,
    },
  }
};

export default config;

Never store your private key directly in hardhat.config.js

Here we pass the its value on the command line or store it in `.env`.

Deploy to ThunderCore Network

Let's deploy the first contract.

You'll need some gas tokens to deploy contracts. To test on ThunderCore testnet, you can get some testnet tokens from ThunderCore testnet Faucet

# Using NPM
KEY=0xPrivateKey npm exec -- hardhat run scripts/sample-script.js --network thunder-testnet
# or using Yarn
KEY=0xPrivateKey yarn hardhat run scripts/sample-script.js --network thunder-testnet

By using the tt-hardhat plugin, you can import logDeployContracts from hardhat to log your deployed contracts. More info

Congratulations! You have successfully deployed a smart contract onto the ThunderCore network, you will find the deployed messages look like:

Greeter deployed to: 0xGreeterContractAddress

Verify contract by plugin

Once you deployed your contract, you might want to verify your contract code.

On ThunderCore testnet, we provide Blockscout as our block explorer. You can use hardhat-etherscan plugin to verify your contract.

yarn add -D @nomiclabs/hardhat-etherscan

after installed the package, modify your hardhat.config.js

hardhat.config.js
module.exports = {
  etherscan: {
    apiKey: {
      "thunder-testnet": "unused",
    },
    customChains: [
      {
        network: "thunder-testnet",
        chainId: 18,
        urls: {
          apiURL: "https://explorer-testnet.thundercore.com/api",
          browserURL: "https://explorer-testnet.thundercore.com",
        },
      },
    ],
  },
}

Now, you can verify your contract by command:

yarn hardhat verify --network thunder-testnet ADDRESS "CONSTRUCTOR_ARGUMENT"

For more details, you can check hardhat-etherscan document.

Remember that a sample Hardhat project is available at https://github.com/thundercore/hardhat-thunder-project!

Last updated