Skip to main content

Deploying a Smart Contract with Hardhat

This guide explains how to deploy a smart contract using Hardhat, a flexible and extensible development environment for Ethereum. Follow these steps to set up your environment, write a smart contract, and deploy it.

Prerequisites

  • Node.js installed on your machine (Download Node.js)
  • An Ethereum wallet with test Ether (e.g., MetaMask)
  • Basic knowledge of Solidity and JavaScript

Step 1: Set Up the Project

  1. Initialize a Node.js Project

    mkdir my-smart-contract
    cd my-smart-contract
    npm init -y
  2. Install Hardhat

    npm install --save-dev hardhat
  3. Create a Hardhat Project

    Run the Hardhat wizard:

    npx hardhat

    Follow the prompts to create a basic sample project.

Step 2: Write Your Smart Contract

Replace the contents of contracts/Lock.sol with your contract code:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract MyContract {
string public message;

constructor(string memory _message) {
message = _message;
}

function setMessage(string memory _message) public {
message = _message;
}
}

Step 3: Compile Your Smart Contract

Run the following command to compile your contract:

npx hardhat compile

Ensure there are no errors. The compiled contract artifacts will be stored in the artifacts/ directory.

Step 4: Deploy Your Smart Contract

Create a new deployment script in scripts/deploy.js:

const hre = require("hardhat");

async function main() {
const MyContract = await hre.ethers.getContractFactory("MyContract");
const myContract = await MyContract.deploy("Hello, World!");

await myContract.deployed();

console.log("Contract deployed to:", myContract.address);
}

main()
.then(() => process.exit(0))
.catch((error) => {
console.error(error);
process.exit(1);
});

Step 5: Configure Hardhat for Deployment

Ensure you have a .env file in the root directory with your private key and Infura project ID:

PRIVATE_KEY=your_private_key_here
INFURA_PROJECT_ID=your_infura_project_id_here

Update hardhat.config.js to include your network configuration:

require("@nomiclabs/hardhat-waffle");
require("dotenv").config();

module.exports = {
solidity: "0.8.4",
networks: {
rinkeby: {
url: `https://rinkeby.infura.io/v3/${process.env.INFURA_PROJECT_ID}`,
accounts: [`0x${process.env.PRIVATE_KEY}`]
}
}
};

Step 6: Deploy the Contract

Run the deployment script:

npx hardhat run scripts/deploy.js --network rinkeby

You should see the contract address in the console output.

Conclusion

You've successfully deployed a smart contract using Hardhat. For more information and advanced usage, refer to the Hardhat Documentation.


This documentation should help you get started with deploying smart contracts using Hardhat. If you encounter any issues, refer to the official documentation or community forums for assistance.