devops

OP stack으로 Wemix3.0 Layer 2 구축하기 본문

Layer2

OP stack으로 Wemix3.0 Layer 2 구축하기

vata500 2023. 5. 9. 18:33
반응형

지난 OP stack에 대한 간단한 정리글에 이어, 이번에는 OP stack으로 Wemix3.0의 Layer 2를 구축하는 테스트를 진행하려고 한다.

Wemix 3.0 Testnet 정보 : https://metaschool.so/rpc/wEMIX3.0Testnet

공식문서에는 Goerli Testnet으로 설정되어 있지만, Goerli는 ETH를 받기가 굉장히 까다롭고 번거로워서 Wemix 테스트넷으로 변경했다. 그 과정에서 약간의 수정 작업이 요구된다.

Prerequisites

- Ubuntu 20.04 LTS

$ sudo apt install -y git curl make jq

$ sudo apt update
$ wget https://go.dev/dl/go1.20.linux-amd64.tar.gz
$ tar xvzf go1.20.linux-amd64.tar.gz
$ sudo cp go/bin/go /usr/bin/go
$ sudo mv go /usr/lib
$ echo export GOROOT=/usr/lib/go >> ~/.bashrc

$ curl -fsSL https://deb.nodesource.com/setup_16.x | sudo -E bash -
$ sudo apt-get install -y nodejs npm

$ sudo npm install -g yarn

$ curl -L https://foundry.paradigm.xyz | bash
$ . ~/.bashrc
$ foundryup

기본적으로 요구되는 Ubuntu 패키지와 Go, Nodejs, yarn 마지막으로, 이더리움 개발환경인 foundryup을 위 커맨드로 설치한다.

Optimism Monorepo Build

$ git clone https://github.com/ethereum-optimism/optimism.git
$ cd optimism
$ yarn install
$ make op-node op-batcher op-proposer
$ yarn build

optimism repo에는 superchain을 위한 bedrock 버전과 함께 layer2의 consensus layer의 주요 노드들과 tool 그리고 contract와 monitoring 관련 소스코드 등이 있다. 

op-geth Build

$ git clone https://github.com/ethereum-optimism/op-geth.git
$ cd op-geth
$ make geth

op-geth는 레이어의 Execution layer에 사용되는 것으로 이더리움의 geth와 같은 CLI client다. 이 geth를 통해서 이더리움 네트워크의 entry point, node 역할을 하게 된다.

Generate Keys

$ cd optimism
$ cd packages/contracts-bedrock
$ npx hardhat rekey

위 명령어를 통해서 총 4개의 key가 생성된다.

  • Admin : contract를 업그레이드할 수 있는 권한을 보유한 admin 계정
  • Batcher : Sequencer Tx data를 L1으로 발행하는 계정
  • Proposer : L2 Tx 결과를 L1으로 발행하는 계정
  • Sequencer : P2P 네트워크에 블록 서명을 담당하는 계정

Batcher와 Proposer가 헷갈릴 수 있는 데, Batcher는 Sequencer로 부터 받은 Tx Batch를 L1으로 Post하고 Proposer는 변경된 state 결과를 Post한다고 구분하면 된다. 

생성된 key

Admin, Proposer, Batcher는 최소 20 WEMIX 이상은 보유해야 다음 진행에 문제가 없다. Wemix3,0 faucet을 통해서 미리 받아주자.

https://wallet.test.wemix.com/faucet

 

WEMIX3.0 Testnet Wallet

 

wallet.test.wemix.com

Admin의 Private Key는 contract-bedrock/.env.example 을 카피하고 .env를 생성한다음 .env에 해당하는 값들을 지정해 준다.

# RPC for the L1 network to deploy to
L1_RPC=https://api.test.wemix.com

# Private key for the deployer account
PRIVATE_KEY_DEPLOYER={{ Admin Private Key }}

또한, contract 배포를 위해서 deploy-conifg/getting-started.json에서 해당하는 address값들을 입력한다.

추가적으로 blockhash, timestamp, blocknumber는 가장 최신 block의 hash값과 timestamp, blocknumber를 기입한다. 이는 cast를 이용해서 얻을 수 없기 때문에 Wemix3.0 explorer를 통해서 직접 확인해야 한다.

https://explorer.test.wemix.com/ 

 

WEMIX3.0 Explorer (Testnet)

 

explorer.test.wemix.com

 

hardhat contract 배포에 있어서 네트워크를 변경했기 때문에 다음 두 파일의 코드를 수정할 필요가 있다.

  • contract-bedrock/hardhat.config.ts
  • contract-bedrock/deploy-config/getting-started.json
# contract-bedrock/hardhat.config.ts
...
	'getting-started': {
      chainId: 1112,
      url: process.env.L1_RPC || '',
      gasPrice: 1000000000000,
      accounts: [process.env.PRIVATE_KEY_DEPLOYER || ethers.constants.HashZero],
      live: true,
    },
# contract-bedrock/deploy-config/getting-started.json

  "l1ChainID": 1112,
  "l2ChainID": 42069,
  "l2BlockTime": 2,

chainId는 현재 wemix3.0의 테스트넷이 1112기 때문에 미리 수정해 준다. 특히, 배포할 때 TrasacntionUnderprice 에러가 발생하기 때문에 contract 배포가 되기 때문에 위처럼 gasPrice를 추가해줘야 한다.

의외로 가스비가 많이 요구되기 때문에 faucet을 통해서 받는 10 WEMIX가 부족할 수 있다. 그럴 땐 다른 account를 통해서 받아내면 된다.

다음 포스팅에 계속..

반응형
Comments