Hardhat을 사용하여 스마트 컨트랙트 배포하기
이 튜토리얼에서는 Hardhat, Hardhat Ignition 및 TypeScript를 사용하여 Status Network 테스트넷에 스마트 컨트랙트를 배포하는 과정을 안내합니다.
사전 요구사항
시작하기 전에 다음이 필요합니다:
- Node.js와 npm: 공식 Node.js 웹사이트에서 다운로드 및 설치
- 이더리움 지갑: Status Network 테스트넷용 개인키가 있는 MetaMask 또는 다른 지갑
- 테스트넷 ETH: Status Network 테스트넷 ETH가 필요합니다
- Status Network 테스트넷 ETH는 수도꼭지에서 받을 수 있습니다
 
- 기본 지식: Solidity, Hardhat, 명령줄 사용 경험
달성 목표
- TypeScript 기반 Hardhat 프로젝트 초기화
- 기본 이더리움 스마트 컨트랙트 작성
- Status Network 테스트넷 배포를 위한 Hardhat 구성
- Hardhat Ignition을 사용하여 스마트 컨트랙트 배포
단계
1. Hardhat TypeScript 프로젝트 초기화
먼저 프로젝트를 생성하고 설정합니다:
mkdir my-hardhat-project && cd my-hardhat-project
npm init -y
npm install --save-dev hardhat @nomicfoundation/hardhat-toolbox dotenv
npx hardhat init
프롬프트가 표시되면 "Create a TypeScript project"를 선택하여 TypeScript 기반 Hardhat 프로젝트를 설정합니다.
환경 변수를 설정합니다:
# .env 파일 생성
touch .env
# 개인키 추가 (이 파일은 절대 커밋하지 마세요!)
echo "PRIVATE_KEY=your_private_key_here" >> .env
2. 스마트 컨트랙트 작성
contracts/HelloWorld.sol을 생성합니다:
// 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. Status Network를 위한 Hardhat 구성
hardhat.config.ts를 업데이트합니다:
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. Ignition 배포 모듈 생성
ignition/modules/HelloWorld.ts를 생성합니다:
import { buildModule } from "@nomicfoundation/hardhat-ignition/modules";
export default buildModule("HelloWorld", (m) => {
  const helloWorld = m.contract("HelloWorld");
  
  return { helloWorld };
});
5. 컨트랙트 배포
npx hardhat compile
npx hardhat ignition deploy ignition/modules/HelloWorld.ts --network statusTestnet
배포는 ignition/deployments 디렉토리에 배포 결과물과 이력을 생성합니다.
7. 컨트랙트와 상호작용
scripts/interact.ts를 생성합니다:
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;
  // 현재 인사말 읽기
  const greeting = await contract.getGreet();
  console.log("Current greeting:", greeting);
  // 인사말 업데이트
  const tx = await contract.setGreet("Hello from Status Network!");
  await tx.wait();
  console.log("Greeting updated!");
  // 업데이트된 인사말 읽기
  const newGreeting = await contract.getGreet();
  console.log("New greeting:", newGreeting);
}
main().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});
상호작용 스크립트를 실행합니다:
npx hardhat run scripts/interact.ts --network statusTestnet
지원
문제가 발생한 경우:
- 텔레그램 커뮤 니티에 참여
- 네트워크 세부정보 참조