TopGit tracks smartcontractkit/hardhat-starter-kit on GitHub as part of the Frontend family. The project has 1.3k stars. A repo for boilerplate code for testing, deploying, and shipping chainlink solidity code.
Snapshot summary built from the project's own GitHub metadata — there's no written TopGit review yet. The page will update automatically when a full review is published.
WHY NO REVIEW YET
TopGit writes full reviews for the most-starred, most-requested repositories. This page is a snapshot until then — see the READ ME tab for the original README in full.
[!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
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.
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:
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:
An rpc URL
A Private Key
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.
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.
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!
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.
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.
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
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:
Set a MAINNET_RPC_URL environment variable that connects to the mainnet.
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.
Set enabled flag to true/false to enable/disable forking feature
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
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
Read the docs first to understand which method is the most suitable for your use case.
VRF Subscription method
To start, go to VRF Subscription Page and create the new subscription. Save your subscription ID and put it in helper-hardhat-config.js file as subscriptionId:
5: {
// rest of the config
subscriptionId: "777"
}
Then, deploy your VRF V2 contract consumer to the network of your recent subscription using subscription id as constructor argument.
npm run deploy --network network
Finally, you need to go to your subscription page one more time and add the address of deployed contract as a new consumer. Once that's done, you can perform a VRF request with the request-random-number task:
The AutomationCounter contract is a simple Chainlink Automation enabled contract that simply maintains a counter variable that gets incremented each time the performUpkeep task is performed by a Chainlink Automation. Once the contract is deployed, you should head to https://automation.chain.link/ to register it for upkeeps, then you can use the task below to view the counter variable that gets incremented by Chainlink Automation
You'll need an ETHERSCAN_API_KEY environment variable. You can get one from the Etherscan API site.. If you have it set, your deploy script will try to verify them by default, but if you want to verify any manually, you can run:
This will format both your javascript and solidity to look nicer.
npm run format
Estimating Gas
To estimate gas, just set a REPORT_GAS environment variable to true, and then run:
npx hardhat test
If you'd like to see the gas prices in USD or other currency, add a COINMARKETCAP_API_KEY from Coinmarketcap.
Code coverage
To see a measure in percent of the degree to which the smart contract source code is executed when a particular test suite is run, type
npm run coverage
Fuzzing
We are going to use Echidna as a Fuzz testing tool. You need to have Docker installed with at least 8GB virtual memory allocated (To update this parameter go to Settings->Resources->Advanced->Memory).
To start Echidna instance run
npm run fuzzing
If you are using it for the first time, you will need to wait for Docker to download eth-security-toolbox image for us.
In Solidity, remapping is a way to define shorthand import paths so that developers can avoid writing long relative paths when importing contracts. For example, instead of writing import "../../node_modules/@openzeppelin/contracts/token/ERC20/ERC20.sol";, you could define a remapping such as @openzeppelin/=node_modules/@openzeppelin/ and simply use import "@openzeppelin/contracts/token/ERC20/ERC20.sol";. This makes contract imports cleaner, easier to maintain, and more consistent across different projects. Remappings are commonly used in development environments like Foundry or Hardhat 3, but Hardhat 2 does not support them natively.
To work around this limitation, you can use the hardhat-preprocessor plugin, which preprocesses Solidity files before compilation and rewrites the imports according to your remapping rules. This plugin works by extending the available configuration options of the expected HardhatUserConfig object to include a preprocess property.
This starter kit contains example code of this workaround in action within the remappings-helper.js file, and uses the remappings located within remappings.txt.
[!WARNING]
The hardhat-preprocessor plugin is a third-party plugin.
Use it at your own discretion and review its source before adopting it in any production environments.
Adding your own remappings
As your project expands, you may find the need for more dependencies. This may result in the requirement of additional remappings. To include more remappings, simply add your remapping to the remappings.txt file.
The expected syntax is: <prefix>=<resolved-path>
Contributing
Contributions are always welcome! Open a PR or an issue!
How active is development on smartcontractkit/hardhat-starter-kit?
The most recent commit recorded on smartcontractkit/hardhat-starter-kit was 7 months ago, based on the GitHub push timestamp. The repository has 511 forks — one of the better signals of community interest.
How many stars does smartcontractkit/hardhat-starter-kit have?
smartcontractkit/hardhat-starter-kit has 1.3k GitHub stars — refresh the page for the live number, or check github.com/smartcontractkit/hardhat-starter-kit. TopGit mirrors GitHub's count but does not claim minute-by-minute accuracy.
Is smartcontractkit/hardhat-starter-kit open source?
Yes — smartcontractkit/hardhat-starter-kit ships under the MIT license, which makes its source code freely readable (and, depending on license terms, forkable and reusable). Source: github.com/smartcontractkit/hardhat-starter-kit.
What else is in the Frontend space?
smartcontractkit/hardhat-starter-kit is tracked by TopGit under the Frontend category, alongside 3 GitHub-tagged topics. Trending and Topics pages list peer repositories of comparable stars and language.
What is smartcontractkit/hardhat-starter-kit?
smartcontractkit/hardhat-starter-kit (smartcontractkit/hardhat-starter-kit) is a JavaScript project on GitHub. From the project's own README: A repo for boilerplate code for testing, deploying, and shipping chainlink solidity code.
What language is smartcontractkit/hardhat-starter-kit written in?
smartcontractkit/hardhat-starter-kit is written primarily in JavaScript. GitHub's language field is based on the largest share of bytes in the default branch.
What license does smartcontractkit/hardhat-starter-kit use?
smartcontractkit/hardhat-starter-kit is released under the MIT license. Always verify the LICENSE file directly on GitHub for the authoritative terms — license strings can be edited out of sync with a project's actual stance.
Where do I read more about smartcontractkit/hardhat-starter-kit?
This TopGit page is a snapshot — the READ ME tab shows the project's own README content (links stripped, images preserved). The GitHub repository at github.com/smartcontractkit/hardhat-starter-kit is the definitive source.
Read full README in the tab above.
Is hardhat-starter-kit worth your time?
ChatGPT, Claude and Perplexity can all read this page. Ask one of them what it makes of hardhat-starter-kit.