Baike.dev
All toolsAI codingTrendingOpen sourceNewsSubmit
Log in
< Back to tools
H

hardhat-starter-kit

> 编程语言
Open source

A repo for boilerplate code for testing, deploying, and shipping chainlink solidity code.

1.3K stars0 likes1 views
WebsiteGitHub

About

A repo for boilerplate code for testing, deploying, and shipping chainlink solidity code.

[!IMPORTANT] This branch contains the Hardhat 2 starter kit. For Hardhat 3, see the hardhat-3 branch. This branch uses Solidity Remapping and the hardhat-preprocessor plugin to resolve imports correctly. If you have errors when compiling dependencies please consult the Remapping section of this README.

Tip

Please be attention that Chainlink Any API is removed from this starter kit because Chainlink Any API is currently replaced by Chainlink Functions. Please find the starter kit for Chainlink Functions here

  • Chainlink Hardhat Starter Kit
  • Getting Started
    • Requirements
    • Quickstart
      • Typescript
  • Usage
    • Deploying Contracts
    • Run a Local Network
    • Using a Testnet or Live Network (like Mainnet or Polygon)
      • Sepolia Ethereum Testnet Setup
    • Forking
  • Test
  • Interacting with Deployed Contracts
    • Chainlink Price Feeds
    • VRF Get a random number
    • Automation
    • Verify on Etherscan
  • Linting
  • Code Formatting
  • Estimating Gas
  • Code Coverage
  • Fuzzing
  • Import Remapping
  • Contributing
  • Thank You!
    • Resources

Chainlink Hardhat Starter Kit

Implementation of the following 3 Chainlink features using the Hardhat development environment:

  • Chainlink Price Feeds
  • Chainlink VRF
  • Chainlink Automation

For Chainlink Functions please go to these starter kits: Hardhat | Foundry (coming soon)

For Chainlink CCIP (Cross Chain Interoperability Prototocol) please go to these starter kits: Hardhat | Foundry

Getting Started

It's recommended that you've gone through the hardhat getting started documentation before proceeding here.

Requirements

  • git
    • You'll know you did it right if you can run git --version and see a response like git version x.x.x
  • Nodejs
    • You'll know you've installed nodejs right if you can run:
      • node --version and get an output like: vx.x.x
  • Yarn instead of npm
    • You'll know you've installed yarn right if you can run:
      • yarn --version And get an output like: x.x.x
      • You might need to install it with npm

If you're familiar with npx and npm instead of yarn, you can use npx for execution and npm for installing dependencies.

Quickstart

  1. Clone and install dependencies

After installing all the requirements, run the following:

git clone https://github.com/smartcontractkit/hardhat-starter-kit/
cd hardhat-starter-kit

Then:

npm install

The recommendation is to use npm 7 or later. If you are using an older version of npm, you'll also need to install all the packages used by the toolbox.

npm install --save-dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomiclabs/hardhat-ethers @nomiclabs/hardhat-etherscan chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v5 @ethersproject/abi @ethersproject/providers

That's also the case if you are using yarn.

yarn add --dev @nomicfoundation/hardhat-toolbox @nomicfoundation/hardhat-network-helpers @nomicfoundation/hardhat-chai-matchers @nomiclabs/hardhat-ethers @nomiclabs/hardhat-etherscan chai ethers hardhat-gas-reporter solidity-coverage @typechain/hardhat typechain @typechain/ethers-v5 @ethersproject/abi @ethersproject/providers
  1. You can now do stuff!
npx hardhat test

or

npm run test

or

yarn test

Typescript

To use typescript, run:

git checkout typescript
npm install

Usage

If you run npx hardhat --help you'll get an output of all the tasks you can run.

Deploying Contracts

npm run deploy

This will deploy your contracts to a local network. Additionally, if on a local network, it will deploy mock Chainlink contracts for you to interact with. If you'd like to interact with your deployed contracts, skip down to Interacting with Deployed Contracts.

Run a Local Network

One of the best ways to test and interact with smart contracts is by using a local network. To run a local network with all your contracts in it, execute the following command:

npx hardhat node

You'll get a local blockchain, private keys, contracts deployed (from the deployment folder scripts), and an endpoint to potentially add to an EVM wallet.

Using a Testnet or Live Network (like Mainnet or Polygon)

In your hardhat.config.js you'll see section like:

module.exports = {
  defaultNetwork: "hardhat",
  networks: {

This section of the file is where you define which networks you want to interact with. You can read more about that whole file in the hardhat documentation.

To interact with a live or test network, you'll need:

  1. An rpc URL
  2. A Private Key
  3. ETH & LINK token (either testnet or real)

Let's look at an example of setting these up using the Sepolia testnet.

Sepolia Ethereum Testnet Setup

First, we will need to set environment variables. We can do so by setting them in our .env file (create it if it's not there). You can also read more about environment variables from the linked twilio blog. You'll find a sample of what this file will look like in .env.example

IMPORTANT: MAKE SURE YOU'D DON'T EXPOSE THE KEYS YOU PUT IN THIS .env FILE. By that, I mean don't push them to a public repo, and please try to keep them keys you use in development not associated with any real funds.

  1. Set your SEPOLIA_RPC_URL environment variable.

You can get one for free from Alchemy, Infura, or Moralis. This is your connection to the blockchain.

  1. Set your PRIVATE_KEY environment variable.

This is your private key from your wallet, ie MetaMask. This is needed for deploying contracts to public networks. You can optionally set your MNEMONIC environment variable instead with some changes to the hardhat.config.js.

⚠️ WARNING ⚠️

When developing, it's best practice to use a Metamask that isn't associated with any real money. A good way to do this is to make a new browser profile (on Chrome, Brave, Firefox, etc) and install Metamask on that browser, and never send this wallet money.

Don't commit and push any changes to .env files that may contain sensitive information, such as a private key! If this information reaches a public GitHub repository, someone can use it to check if you have any Mainnet funds in that wallet address, and steal them!

.env example:

SEPOLIA_RPC_URL='https://sepolia.infura.io/v3/asdfadsfafdadf'
PRIVATE_KEY='abcdef'

bash example:

export SEPOLIA_RPC_URL='https://sepolia.infura.io/v3/asdfadsfafdadf'
export PRIVATE_KEY='abcdef'

You can also use a MNEMONIC instead of a PRIVATE_KEY environment variable by uncommenting the section in the hardhat.config.js, and commenting out the PRIVATE_KEY line. However this is not recommended.

For other networks like mainnet and polygon, you can use different environment variables for your RPC URL and your private key. See the hardhat.config.js to learn more.

  1. Get some Sepolia Testnet ETH and LINK

Head over to the Chainlink faucets and get some ETH and LINK. Please follow the chainlink documentation if unfamiliar.

  1. Create VRF V2 subscription

Head over to VRF Subscription Page and create the new subscription. Save your subscription ID and put it in helper-hardhat-config.js file as subscriptionId

  1. Running commands

You should now be all setup! You can run any command and just pass the --network sepolia now!

To deploy contracts:

npm run deploy --network sepolia

To run staging testnet tests

npm run test-staging

Forking

If you would like to run tests on a forked network, follow these steps:

  1. Set a MAINNET_RPC_URL environment variable that connects to the mainnet.
  2. Choose a block number to select a state of the network you are forking and set it as FORKING_BLOCK_NUMBER environment variable. If ignored, it will use the latest block each time which can lead to test inconsistency.
  3. Set enabled flag to true/false to enable/disable forking feature
      forking: {
        url: MAINNET_RPC_URL,
        blockNumber: FORKING_BLOCK_NUMBER,
        enabled: false,
      }

Test

Tests are located in the test directory, and are split between unit tests and staging/testnet tests. Unit tests should only be run on local environments, and staging tests should only run on live environments.

To run unit tests:

npx hardhat test

or

npm run test

or

yarn test

To run staging tests on Sepolia network:

npx hardhat test --network sepolia

or

npm run test-staging

Performance optimizations

Since all tests are written in a way to be independent from each other, you can save time by running them in parallel. Make sure that AUTO_FUND=false inside .env file. There are some limitations with parallel testing, read more about them here

To run tests in parallel:

npx hardhat test --parallel

or

npm run test --parallel

Interacting with Deployed Contracts

After deploying your contracts, the deployment output will give you the contract addresses as they are deployed. You can then use these contract addresses in conjunction with Hardhat tasks to perform operations on each contract.

Chainlink Price Feeds

The Price Feeds consumer contract has one task, to read the latest price of a specified price feed contract

npx hardhat read-price-feed --contract insert-contract-address-here --network network

VRF Get a random number

The VRFConsumer contract has two tasks, one to request a random number, and one to read the result of the random number request. As explained in the developer documentation, there are two methods:

  • The Subscription method
  • The [Direct Funding method](https://docs.chain

GitHub Issues· 0 open

View all on GitHub

No open issues yet, or sync has not completed.

> Tags

JavaScriptchainlinkhardhatjavascript

No comments yet. Be the first to share.

> Details

PublishedAug 1, 2026
UpdatedSep 17, 2026
Category编程语言
PricingOpen source

> Related tools

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言