Files

167 lines
4.3 KiB
Markdown

---
title: Using Hardhat with Status Network
description: Step-by-step tutorial for deploying smart contracts on Status Network using Hardhat and TypeScript. Learn about project setup, configuration, and contract deployment.
keywords: [Hardhat tutorial, smart contract deployment, Status Network development, TypeScript, blockchain development, web3 development]
---
# Using Hardhat to Deploy Smart Contracts
This tutorial will guide you through the process of deploying a smart contract on Status Network testnet using Hardhat, Hardhat Ignition, and TypeScript.
## Prerequisites
Before you begin, ensure you have the following:
- **Node.js and npm**: Download and install from the [official Node.js website](https://nodejs.org/)
- **Ethereum Wallet**: MetaMask or another wallet with a private key for Status Network testnet
- **Testnet ETH**: You'll need Status Network testnet ETH
- Get Status Network testnet ETH from our [Faucet](/tools/testnet-faucets)
- **Basic Knowledge**: Familiarity with Solidity, Hardhat, and command line
## What You'll Accomplish
- Initialize a TypeScript-based Hardhat project
- Write a basic Ethereum smart contract
- Configure Hardhat for Status Network testnet deployment
- Deploy your smart contract using Hardhat Ignition
## Steps
### 1. Initialize a Hardhat TypeScript Project
First, create and set up your project:
```bash
mkdir my-hardhat-project && cd my-hardhat-project
npm init -y
npm install --save-dev hardhat @nomicfoundation/hardhat-toolbox dotenv
npx hardhat init
```
When prompted, select "Create a TypeScript project" to set up a TypeScript-based Hardhat project.
Set up your environment variables:
```bash
# Create a .env file
touch .env
# Add your private key (never commit this file!)
echo "PRIVATE_KEY=your_private_key_here" >> .env
```
### 2. Writing the Smart Contract
Create `contracts/HelloWorld.sol`:
```solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
contract HelloWorld {
string public greet = "Hello, Status Network!";
function setGreet(string memory _greet) public {
greet = _greet;
}
function getGreet() public view returns (string memory) {
return greet;
}
}
```
### 3. Configuring Hardhat for Status Network
Update `hardhat.config.ts`:
```typescript
import { HardhatUserConfig } from "hardhat/config";
import "@nomicfoundation/hardhat-toolbox";
import * as dotenv from "dotenv";
dotenv.config();
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
const config: HardhatUserConfig = {
solidity: "0.8.24",
networks: {
statusTestnet: {
url: "https://public.sepolia.rpc.status.network",
chainId: 1660990954,
accounts: [PRIVATE_KEY],
},
},
};
export default config;
```
### 4. Create Ignition Deployment Module
Create `ignition/modules/HelloWorld.ts`:
```typescript
import { buildModule } from "@nomicfoundation/hardhat-ignition/modules";
export default buildModule("HelloWorld", (m) => {
const helloWorld = m.contract("HelloWorld");
return { helloWorld };
});
```
### 5. Deploy the Contract
```bash
npx hardhat compile
npx hardhat ignition deploy ignition/modules/HelloWorld.ts --network statusTestnet
```
The deployment will create a new directory `ignition/deployments` containing your deployment artifacts and history.
### 7. Interact with Your Contract
Create `scripts/interact.ts`:
```typescript
import { ethers } from "hardhat";
import { HelloWorld } from "../typechain-types";
async function main() {
const contractAddress = "0x0d8a93870494Fa21ec39602f31Aa67C9Fed5604f";
const HelloWorld = await ethers.getContractFactory("HelloWorld");
const contract = HelloWorld.attach(contractAddress) as HelloWorld;
// Read current greeting
const greeting = await contract.getGreet();
console.log("Current greeting:", greeting);
// Update greeting
const tx = await contract.setGreet("Hello from Status Network!");
await tx.wait();
console.log("Greeting updated!");
// Read updated greeting
const newGreeting = await contract.getGreet();
console.log("New greeting:", newGreeting);
}
main().catch((error) => {
console.error(error);
process.exitCode = 1;
});
```
Run the interaction script:
```bash
npx hardhat run scripts/interact.ts --network statusTestnet
```
## Support
If you encounter any issues:
- Join our [Telegram Community](https://t.me/statusl2)
- View our [Network Details](/general-info/network-details)