What is Hardhat

Hardhat is a development environment to compile, deploy, test, and debug your smart contract.


Hardhat is used through a local installation in your project.
To install it, you need to create an npm project by going to an empty folder, running npm init, and following its instructions. Once your project is ready, you should run
npm install --save-dev hardhat
To use your local installation of Hardhat, you need to use npx to run it (i.e. npx hardhat).
Hardhat will let you know how, but, in case you missed it, you can install them with npm install --save-dev @nomiclabs/hardhat-waffle ethereum-waffle chai @nomiclabs/hardhat-ethers ethers

Quick Start

To create your Hardhat project run npx hardhat in your project folder:
$ npx hardhat
888 888 888 888 888
888 888 888 888 888
888 888 888 888 888
8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888
888 888 "88b 888P" d88" 888 888 "88b "88b 888
888 888 .d888888 888 888 888 888 888 .d888888 888
888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.
888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888
Welcome to Hardhat v2.0.8
? What do you want to do? …
❯ Create a sample project
Create an advanced sample project
Create an advanced sample project that uses TypeScript
Create an empty hardhat.config.js
If you select Create a sample project a simple project creation wizard will ask you some questions and create a project with the following structure:
  • contracts/ is where the source files for your contracts should be.
  • test/ is where your tests should go.
  • scripts/ is where simple automation scripts go

Create Contract

You can write your own smart contract or download any contract written by Solidity.

Config Hardhat for Mainnet

  • Go to hardhat.config.js
  • Update the config with crendentials.
module.exports = {
defaultNetwork: "mcpnet",
networks: {
hardhat: {
mcpnet: {
url: "",
accounts: [privateKey1, privateKey2, ...]
solidity: {
version: "0.5.15",
settings: {
optimizer: {
enabled: true,
runs: 200
paths: {
sources: "./contracts",
tests: "./test",
cache: "./cache",
artifacts: "./artifacts"
mocha: {
timeout: 40000


To compile your contracts in your Hardhat project, use the built-in compile task:
$ npx hardhat compile
Compiled 1 contract successfully

Deploying your contract

You can deploy the Greeter contract from the sample project with a deploy script scripts/deploy.js like this:
async function main() {
// We get the contract to deploy
const Greeter = await ethers.getContractFactory("Greeter");
const greeter = await Greeter.deploy("Hello, Hardhat!");
await greeter.deployed();
console.log("Greeter deployed to:", greeter.address);
.then(() => process.exit(0))
.catch((error) => {
As general rule, you can target any network configured in the hardhat.config.js
$npx hardhat run --network mcpnet scripts/deploy.js