설치 → 프로젝트 생성 → 개발 → 배포 (로컬 / testnet) → 배포확인
1. 설치 (cmd 관리자 권한으로 실행)
//기본 환경 세팅 (Node.js) npm init //Hardhat 설치 npm install --save -dev hardhat npm install --save -dev @nomicfoundation/hardhat-toolbox //추후오류방지
2. 프로젝트 생성
npx hardhat
=> 계속 enter
3. 개발
- contracts/Lock.sol파일 수정
// sample 코드 // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.9; // Uncomment this line to use console.log // import "hardhat/console.sol"; contract Lock { uint public a; function getA() public view returns(uint) { return a; } function setA(uint _a) public { a = _a; } function setA2(uint _a) public { a = _a*2; } }
4. compile
npx hardhat compile
5,6. 배포 및 배포확인
local과 testnet에서 배포하는 방법 아래 작성
5. 배포
- scripts/deploy.js파일 수정
//샘플코드 const hre = require("hardhat"); async function main() { const LOCK = await hre.ethers.getContractFactory("Lock"/*contract명*/); const lock = await LOCK.deploy(); console.log("LOCK Info : ", lock); console.log("LOCK deployed to : ", lock.target); } main().catch((error) => { console.error(error); process.exitCode = 1; });
- 터미널을 2개 생성
- (오)
npx hardhat node
; 로컬 테스트넷 (가나슈와 동일한 역할)
(왼)npx hardhat run --network localhost .\scripts\deploy.js
6. 배포 확인 (왼쪽 터미널에서 실행)
npx hardhat console --network localhost //사용할 컨트랙트 설정 const C_lock = await ethers.getContractFactory("Lock"/*컨트랙트명*/) const ss = await C_lock.attach('Lock의 contract address') //methods조회 ss.interface.fragments //컨트랙트 함수 사용 await ss.a() await ss.getA() await ss.setA(123)
5. 배포
- hardhat.config.js파일 수정 (.env에 작성해도 됨)
//샘플코드 require("@nomicfoundation/hardhat-toolbox"); const PVK = "개인키"; module.exports = { solidity: "0.8.17", networks: { goerli: { url: `https://goerli.infura.io/v3/Infura에서 받은 api키`, accounts: [PVK], }, }, };
npx hardhat run --network goerli ./scripts/deploy.js
6. 배포 확인
- etherscan (goerli)에서 컨트랙트 주소로 배포 확인
- 컨트랙트 사용
npx hardhat console --network goerli //사용할 컨트랙트 설정 const C_lock = await ethers.getContractFactory("Lock"/*컨트랙트명*/) const ss = await C_lock.attach('Lock의 contract address') //methods조회 ss.interface.fragments //컨트랙트 함수 사용 await ss.a() await ss.getA() await ss.setA(123)
➕ .env파일에 api키 저장하고 싶은 경우
//hardhat 코드
require("dotenv").config();
require("@nomicfoundation/hardhat-toolbox");
module.exports = {
solidity: "0.8.17",
etherscan: {
apiKey: process.env.ETHERSCAN_API,
},
networks: {
goerli: {
url: `https://goerli.infura.io/v3/${process.env.INFURA_API}`,
accounts: [process.env.PVK],
},
},
};
netstat -ano | findstr :8545
stop-process PID(LISTENING에 뜨는 번호)