Hardhat 개발 환경 설정하기
마루 네트워크에서 스마트 컨트랙트를 컴파일, 테스트, 배포하기 위해 Hardhat 프로젝트를 구성하는 단계별 가이드입니다.
마루는 EVM 호환이라 표준 Hardhat 프로젝트가 마루 전용 패치 없이 그대로 동작합니다. 이 가이드는 마루 테스트넷을 가리키는 새 Hardhat 프로젝트를 만드는 과정을 다룹니다.
사전 요구사항
- Node.js 20.19 이상 — Hardhat 3는
engines를 선언하지 않지만 의존성 트리가 이 버전을 요구합니다 - 잔액이 있는 테스트넷 계정 — 테스트넷 접속 페이지의 파우셋 참고
1. Hardhat 프로젝트 초기화
프로젝트 디렉터리를 만들고 Hardhat을 설치합니다. 인터넷에 있는 대부분의 Hardhat 가이드와 세 가지가 다릅니다. 마루는 Hardhat 3 기준이기 때문입니다. 프로젝트가 ESM이어야 하고,
hardhat-toolbox를 설치하면 안 되며, 프로젝트 생성 명령이 npx hardhat --init입니다.mkdir maroo-project && cd maroo-project
npm init -y
# Hardhat 3는 ESM 전용입니다. 이 줄이 없으면 첫 컴파일이
# "Hardhat only supports ESM projects."로 실패합니다.
npm pkg set type="module"
# 메이저 버전을 고정합니다. @nomicfoundation/hardhat-toolbox는 넣지 마십시오.
# 현재 릴리스는 Hardhat 2도 3도 지원하지 않으며, 마루의 컨트랙트도 쓰지 않습니다.
npm install --save-dev hardhat@^3.1.10
# 프로젝트를 만듭니다. Hardhat 3에서는 `npx hardhat`만 치면 오류가 나므로 --init을 씁니다.
npx hardhat --init 참고:
npx hardhat 프롬프트가 나타나면 최상의 개발 경험을 위해 'Create a TypeScript project'를 선택합니다. 2. `hardhat.config.ts` 설정
hardhat.config.ts를 열고 네트워크 항목을 추가합니다. Hardhat 3에서 걸리는 지점이 둘 있습니다. 설정 타입은 type-only import이고, 모든 네트워크에 type을 명시해야 합니다. 개인 키는 .env에서 가져오며 절대 커밋하지 마십시오.import type { HardhatUserConfig } from "hardhat/config";
import * as dotenv from "dotenv";
dotenv.config();
const PRIVATE_KEY = process.env.PRIVATE_KEY || "";
const config: HardhatUserConfig = {
// Maroo's own contracts compile with 0.8.28 — match it so bytecode and
// behaviour line up with the deployed precompiles.
solidity: "0.8.28",
networks: {
maroo_testnet: {
type: "http", // required by Hardhat 3; omitting it fails config validation
url: "https://rpc-testnet.maroo.io",
chainId: 450815, // Mainnet: 815
accounts: PRIVATE_KEY ? [PRIVATE_KEY] : [],
},
},
};
export default config; 주의: 개인 키를 절대 Git에 커밋하지 마십시오. 환경 변수(
.env 파일)를 사용해 안전하게 관리합니다. 테스트넷 자금은 파우셋에서 요청합니다. 3. 컴파일 및 배포
설정이 완료되었으므로 컴파일하고 배포합니다. Hardhat의 샘플 프로젝트에는
Lock.sol 컨트랙트와 배포 스크립트가 함께 제공됩니다.# 계약 컴파일
npx hardhat compile
# 마루 테스트넷에 배포
npx hardhat run scripts/deploy.ts --network maroo_testnet 마무리
Hardhat 프로젝트가 마루 테스트넷에 연결됐습니다. 이더리움 메인넷에서 쓰던 동일한 프로젝트 구조, 플러그인, 테스트가 그대로 적용됩니다.