Ethereum - erigon client 설치 및 sepolia testnet snapshot

최현석·2023년 5월 8일
0

개요

이더리움 생태계에서 사용하는 클라이언트가 Geth로 집중되어 있습니다. 이에 대해서 이더리움 재단도 심각성을 느끼고 있어서 (2023/05/17 링크 추가) https://ethereum.org/en/developers/docs/nodes-and-clients/client-diversity/, https://clientdiversity.org/ 에 관련 아티클을 작성해 주었습니다.

이를 위해 erigon 클라이언트를 사용해보려고 합니다. 문서가 github와 issues에 밖에 없는 것 같습니다..

관련 자료가 많이 없어서 저도 헤매고 있습니다. 틀린점도 있을 수 있고, 잘못된 점이 있을 수 있다는 점 알아주시면 감사하겠습니다. 최대한 보완하겠습니다.

erigon client 설치

https://github.com/ledgerwatch/erigon

해당 링크에서 Getting Started 부터 시작해보겠습니다.

git clone --branch stable --single-branch https://github.com/ledgerwatch/erigon.git
cd erigon
make erigon
./build/bin/erigon

이렇게 따라하면 erigon 클라이언트가 실행될 겁니다!

  • golagn 버전이 최소 1.19 이상이여야 한다고 합니다!
    • 설치 중간 각종 에러는 알아서 해결…

ergion을 전역에서 사용하기 위해서 환경 설정을 변경해 줍니다.

  • mac : .zshrc
  • linux : bash_profile

에 PATH를 넣어줍시다.

ERIGON_PATH="<YOUR>/<ERIGON>/<BIN>/<DIRECTORY>/<PATH>"
export PATH="$ERIGON_PATH:$PATH"

이렇게 하면 아무곳에서 erigon 명령어를 쉽게 사용 가능합니다!

sepolia testnet snapshot 다운로드

  1. 저희는 sepolia 체인을 사용할 것이기 때문에 --chain=sepolia 를 사용하겠습니다.

  2. github docs를 보면 mainnet, goerli, gnosis, chiado 네트워크는 default로 --snapshots이 true로 되어있고 나머지 네트워크는 --snapshots=false 라고 적혀있습니다.

    그렇다면 우리는 sepolia 테스트넷 네트워크를 사용할 것이기 때문에, --snapshots=true 옵션을 넣어주면 될 것 같습니다.

  3. 다운로드 속도를 높이려면 --torrent.download.rate=20mb 플래그를 사용하라고 합니다.

    다운로드 시 비트토렌트 프로토콜을 사용하게 되는데 해당 프로토콜의 속도를 높이는 플래그를 사용하는 것이라 생각하시면 되겠습니다.

  4. --datadir 플래그를 통해 어디에 저장할지 정할 수 있습니다. ex) --datadir=./ ⇒ 현재폴더에 저장

  5. http 통신을 위해서 --port=30304 --http.port=8546 --authrpc.port=8552 --http 를 추가해주자!

1,2,3,4,5 를 합쳐서

erigon --chain=sepolia --snapshots=true --datadir=./ --torrent.download.rate=20mb --port=30304 --http.port=8546 --authrpc.port=8552 --http

실행해서 snapshot을 다운로드 받아보자!

에러

  • [1/15 Snapshots] Waiting for torrents metadata: 0/15 여기서 넘어가지 않는다.. 어떻게 해결할까?

    1. torrent로 받는 포트는 default로 42068 포트로 udp를 사용한다. 열려 있는 줄 알았지만, 열려있지 않아서 해당 포트를 한번 열어봤다.

    2. downloader를 사용해봤다.

      • downloader

      erigon/readme.md at devel · ledgerwatch/erigon

      • downloader --downloader.api.addr=127.0.0.1:9093 --torrent.port=42068 --datadir=<your data directory> --torrent.download.rate=512mb --torrent.upload.rate=512mb
        • 계속 안되다가 갑자가 됐다.. 뭐지
          • 아마도 peer가 안잡혔던 것 같다.
  • [2/15 Headers] Waiting for Consensus Layer... 여기서 또 안넘어 간다… 어떻게 해결할까?

(23/05/17 자료 추가)

Consensus layer

  • 이더리움은 The Merge 업데이트 이후 Execution Client와 Consensus Layer(CL)가 나뉘었다.
  • Execution Client로서 Geth, Besu, Erigon 등등이 있다.
  • Erigon 클라이언트를 실행하면 externalcl 옵션이 default로 내장된다.
    • 즉, Consensus Layer를 따로 실행하거나 외부에 있는 Consensus Layer를 연결해야 한다. (외부에 있는 것을 연결하는 것은 잘 모르겠다.
  • Consensus Layer를 실행하는 클라이언트는 아래와 같이 있다.
    • Prysm - Golang
    • Teku - Java
    • Lighthouse - Rust
    • Nimbus - Rust
    • Lodestar - TypeScript
  • 처음 사용해 보는 것이기 때문에 많은 이용자가 있는 Prysm을 통해 사용해 보기로 했다.

Prysm

Prysm 설치

mkdir prysm && cd prysm
curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh && chmod +x prysm.sh

JWT Secret 생성

  • 4가지의 방법이 설명되어 있는데 저는 Prysm을 통해서 생성 했습니다.
## Optional. This command is necessary only if you've previously configured USE_PRYSM_VERSION
USE_PRYSM_VERSION=v4.0.0

## Required.
./prysm.sh beacon-chain generate-auth-secret

Execution Client 실행

  • Execution Client를 실행할 때 Prysm과 통신하기 위하여 몇몇 flag들을 추가해줘야 합니다.
    • --authrpc.jwtsecret
    • --authrpc.addr
    • --authrpc.vhosts
erigon \
--datadir=./execution \
--chain=sepolia \
--snapshots=true \
--log.console.verbosity=4 \
--nat extip:111.111.111.111 \
--port=30303 \
--http.port=8546 \
--private.api.addr=127.0.0.1:9091 \
--http --ws --http.api=eth,debug,net,trace,web3,erigon \
--authrpc.jwtsecret ./consensus/jwt.hex \
--authrpc.addr=0.0.0.0 \
--authrpc.vhosts=*

(nat extip는 사용자 본인 ip를 적어주시면 됩니다)

beacon node 실행 (Prysm)

./prysm.sh beacon-chain --execution-endpoint=http://localhost:8551 --sepolia --jwt-secret=jwt.hex --genesis-state=genesis.ssz

과연..?

  • 결론적으로 말하자면 저는 해당방법으로 못했습니다 하하..
  • 어쨌든 여러분들은 Prysm을 통해 Consensus Layer Client를 실행하는 방법을 알게되었습니다!

다른 방법 : --internalcl flag 사용하기

  • 이전에 Consensus Layer 에러가 떴을 시 erigon github를 꼼꼼히 읽어보고, 내부 embaded 되어있는 consensus를 사용하려면 --internalcl flag를 사용하라 해서 사용했었는데, 안됐었습니다!!!
  • 그래서 Prysm 사용방법도 알아봤었는데..
  • 결론적으로는 일단 snapshot을 다운받는 것은 --internalcl flag를 통해 다운을 받게 되었습니다.
erigon \
--datadir=~/erigon-sepolia \
--chain=sepolia \
--snapshots=true \
--log.console.verbosity=4 \
--nat extip:111.111.111.111 \
--http --ws --http.api=eth,debug,net,trace,web3,erigon \
--internalcl
  • 좀 많이 돌아왔는데 해당 명령어로 snapshot을 다운받았습니다. (—log.console.verbosity=4 는 로그보기위함이니 빼셔도 됩니다.)
  • 이제 chaindata를 확인할 수 있게 됐습니다.
profile
개발자 꿈나무 https://github.com/Tozinoo

0개의 댓글