에르노트

Sepolia 테스트넷에 스마컨트랙트 배포하기 본문

Dev/Blockchain

Sepolia 테스트넷에 스마컨트랙트 배포하기

두콩 2023. 4. 8. 17:10

이더리움 스마트 컨트랙트를 작성하고 로컬 네트워크(Ganache)에서 기본적인 검증을 마쳤다면 다음은 메인넷으로 가기 전에 테스트 네트워크에 배포할 차례다. 글을 쓰는 시점에서 정상적으로 동작하는 테스트넷은 GoerilSepolia 두 가지가 있다. 그 중에서도 Sepolia는 아직까지 이용자가 비교적 적어서 테스트용 이더리움 확보가 더 쉽다는 장점이 있다.

Sepolia 테스트넷

앱 등록 및 키 발급

먼저 Alchemy 대시보드에 접속한다. 로그인 후 Create App 버튼을 눌러서 배포할 디앱의 정보를 작성해준다.

Create App 상세화면

앱이 생성되었으면 다음으로 VIEW KEY 버튼을 눌러서 https 버전의 api key를 확인하고, 복사해둔다.

VIEW KEY

Hardhat 설치 및 프로젝트 설정

블록체인 개발 프레임워크인 Harhat을 설치해준다.
npm install --save-dev hardhat​

이어서 Hardhat 프로젝트를 생성한다.

npx hardhat​
 
'Create an empty hardhat.config.js' 옵션을 선택한다.
hardhat 프로젝트 생성

다음으로 API KEY와 메타마스트 지갑의 Private Key를 안전하게 보관하기 위한 환경 변수 파일을 설정한다. 먼저 환경 변수를 파일로 관리할 수 있게 해주는 dotenv 라이브러리를 설치한다. 이더리움 네트워크와 상호작용하기 위해 ethers.js 라이브러리도 설치한다.

npm install dotenv -save
npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0"

그리고 컨트랙트 프로젝트 하위에 .env 파일을 생성한 후 아래와 같이 키를 입력해준다. 이때 API_URL은 처음에 Alchemy 대시보드에서 복사해둔 것을 사용한다. 

API_URL = "https://eth-sepolia.g.alchemy.com/v2/xxxxx"
PRIVATE_KEY = "xxxxx"

끝으로 hardhat.config.js 파일을 아래와 같이 수정한다.

require('dotenv').config();
require("@nomiclabs/hardhat-ethers");

const { API_URL, PRIVATE_KEY } = process.env;

module.exports = {
  solidity: "0.8.19",
  defaultNetwork: "sepolia",
  networks: {
    hardhat: {},
    sepolia: {
      url: API_URL,
      accounts: [`0x${PRIVATE_KEY}`]
    }
  },
}

 

컴파일 및 배포

먼저 컨트랙트를 컴파일한다.

npx hardhat compile

컴파일 완료시 문구

프로젝트 하위에 deployments 디렉토리를 생성하고 내부에 deploy.js 파일을 생성하여 아래와 같이 작성한다. hardhat에서 deployments 디렉토리는 truffle에서 migrations 역할이다.

디렉토리 구조

async function main() {
    const [deployer] = await ethers.getSigners();
  
    console.log("Deploying contracts with the account:", deployer.address);
    console.log("Account balance:", (await deployer.getBalance()).toString());
  
    const slotMachine = await ethers.getContractFactory("SlotMachine");
    const token = await slotMachine.deploy();
  
    console.log("Token address:", token.address);
  }
  
  main()
    .then(() => process.exit(0))
    .catch((error) => {
      console.error(error);
      process.exit(1);
    });

마지막으로 네트워크를 sepolia로 명시하여 컨트랙트를 배포한다.

npx hardhat run deployments/deploy.js --network sepolia

배포 완료시 출력

배포 확인

배포된 컨트랙트를 확인하려면 Sepolia 이더스캔 사이트에서 조회할 수 있다. deployer의 주소를 이용해서 조회하면 갓 배포된 따끈따끈한 컨트랙트를 확인할 수 있다!

조회
Contract Creation 확인

 

Comments