DEV Community

Linus
Linus

Posted on

Compiling, Deploying, Verifying, Testing Smart Contract Through Hardhat.

Hello, everybody.
If you’re a developer looking to deploy your first smart contract using Hardhat, this guide is for you. I’ll walk you through the process step-by-step, from setting up your project to deploying your contract on the Ethereum network.

Step 1: Project Setup
Create a new project directory:
mkdir smart-contract-guide

cd smart-contract-guide

  1. Initialize a Node.js project and install Hardhat:
npm init -y 
npm install --save-dev hardhat
Enter fullscreen mode Exit fullscreen mode

Step 2: Write the Smart Contract

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

import "@openzeppelin/contracts/token/ERC721/ERC721.sol";

contract BasicNft is ERC721 {
    string public constant TOKEN_URI =
        "ipfs://bafybeig37ioir76s7mg5oobetncojcm3c3hxasyd4rvid4jqhy4gkaheg4/?filename=0-PUG.json";
    uint256 private s_tokenCounter;

    constructor() ERC721("Dogie", "DOG") {
        s_tokenCounter = 0;
    }

    function mintNft() public returns (uint256) {
        _safeMint(msg.sender, s_tokenCounter);
        s_tokenCounter = s_tokenCounter + 1;
        return s_tokenCounter;
    }

    function tokenURI(uint256 tokenId) public view override returns (string memory) {
        // require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
        return TOKEN_URI;
    }

    function getTokenCounter() public view returns (uint256) {
        return s_tokenCounter;
    }
}

Enter fullscreen mode Exit fullscreen mode

Step 3: Deployment using ignition module.
Inside the ignition/module directory, create a file named BasicNft.ts:

import { buildModule } from "@nomicfoundation/hardhat-ignition/modules";


const DeployMyTokenModule = buildModule("DeployMyTokenModule", (m) => {
  const myToken = m.contract("BasicNft");

  return { myToken };
});

export default DeployMyTokenModule;
Enter fullscreen mode Exit fullscreen mode

Step 4: Configure Hardhat
Create a file named hardhat.config.js:

module.exports = {
  solidity: "0.8.0",
  networks: {
    // Define your networks here, such as "sepolia", "goerli", "mainnet", etc.
    // Example:
    // sepolia: {
    //   url: "<SEPOLIA_RPC_URL>",
    //   accounts: ["0xYOUR_PRIVATE_KEY"],
    // },
  },
};
Enter fullscreen mode Exit fullscreen mode

Step 5: Test Your Contract
Step 6: Deploy Your Contract

npx hardhat ignition deploy ./ignition/modules/BasicNft.ts --network <networkname>

Enter fullscreen mode Exit fullscreen mode

Congratulations! 🎉 You’ve completed the guide on deploying and interacting with a simple smart contract using Hardhat. This hands-on experience sets you on the path to exploring more complex contract functionality and advanced features.

Keep exploring the exciting world of Ethereum smart contracts and enjoy your coding journey! 💡🚀

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read more →

Top comments (2)

Collapse
 
cda_dev_b2c030f2c2aa86781 profile image
Demi

Thank you so much for the post!

I really found it quite interesting and well-written. You explained them very well, which really helped in clarifying concepts.

I'm looking forward to reading your future posts!

Collapse
 
devgod1994 profile image
Linus

Oh, Thanks.

Billboard image

Create up to 10 Postgres Databases on Neon's free plan.

If you're starting a new project, Neon has got your databases covered. No credit cards. No trials. No getting in your way.

Try Neon for Free →