Metis Hyperion supports Ethereum Pectra fork

Hardhat

Deploy a Counter Contract using Hardhat

Deploying a Counter Contract with Hardhat

This guide will walk you through deploying a counter contract using Hardhat, a popular JavaScript-based development environment for Ethereum.

1. Prerequisites

Before you begin, ensure you have:

  • Node.js installed (v12 or later)
  • npm (comes with Node.js)
  • A code editor (e.g., VS Code)
  • (Optional) MetaMask wallet and testnet tokens for deployment

2. Install Hardhat

Open your terminal and create a new project directory:

mkdir counter-project
cd counter-project

Initialize a new npm project:

npm init -y

Install Hardhat and required dependencies:

npm install --save-dev hardhat @nomicfoundation/hardhat-toolbox dotenv
npm install --save-dev @nomicfoundation/hardhat-ignition

3. Create a New Hardhat Project

Run the Hardhat setup wizard:

npx hardhat

Choose "Create a JavaScript project" when prompted.

This will create a project structure like:

  • contracts/ - for Solidity contracts
  • igntion/ - for deployment scripts
  • test/ - for tests
  • hardhat.config.js - configuration file

4. Write Your Smart Contract

Create a new file in the contracts directory, Counter.sol:

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

contract Counter {
    uint256 private count;

    function increment() public {
        count += 1;
    }

    function decrement() public {
        count -= 1;
    }

    function getCount() public view returns (uint256) {
        return count;
    }
}

5. Compile the Smart Contract

Compile your contracts with:

npx hardhat compile

You should see a success message if there are no errors.

6. Write a Deployment Script

Create a new file in the ignition directory, Counter.js:

const { buildModule } = require("@nomicfoundation/hardhat-ignition/modules");

module.exports = buildModule("CounterModule", (m) => {
  const counter = m.contract("Counter");

  return { counter };
});

7. Configure Network Settings

Create a .env file in your project root:

PRIVATE_KEY=your_private_key_here

Edit hardhat.config.js:

require("@nomicfoundation/hardhat-toolbox");
require("dotenv").config();

module.exports = {
  solidity: "0.8.28",
  networks: {
    hardhat: {
      chainId: 31337,
    },
    hyperion: {
      url: "https://hyperion-testnet.metisdevops.link",
      chainId: 133717,
      accounts: [process.env.PRIVATE_KEY],
    },
  },
};

For Hyperion testnet, use these details:

ParameterValue
Chain ID133717
Currency SymboltMETIS
RPC URLhttps://hyperion-testnet.metisdevops.link
Block Explorerhttps://hyperion-testnet-explorer.metisdevops.link
FaucetTelegram Bot, Website

8. Deploy Your Contract

Local Deployment (Optional)

Start the Hardhat local node in a separate terminal:

npx hardhat node

Deploy to local network:

npx hardhat ignition deploy ignition/modules/Counter.js --network  localhost

Deploy to Hyperion Testnet

Make sure to:

  1. Get testnet tokens from the faucet
  2. Add your private key to the .env file
  3. Never share your private key

Deploy to Hyperion:

npx hardhat ignition deploy ignition/modules/Counter.js --network hyperion```

## Testing

### Test Setup

Create `test/Counter.js`:

```javascript
const { expect } = require("chai");

describe("Counter", function () {
  it("Should increment the counter", async function () {
    const Counter = await ethers.getContractFactory("Counter");
    const counter = await Counter.deploy();
    await counter.deployed();

    await counter.increment();
    expect(await counter.getCount()).to.equal(1);
  });
});

Running Tests

npx hardhat test

Next Steps

  • Add more complex functionality to your counter contract
  • Implement events for better tracking
  • Add access control mechanisms
  • Set up continuous integration
  • Add more comprehensive tests