Cover photo

베이스(Base) 노드 돌리기

Base 노드 돌리기

이번 튜토리얼에서는 Base 노드를 설정하는 방법을 안내합니다.

목표

이 튜토리얼을 통해 다음을 습득하기:

  • Base 노드 배포 및 동기화

사전 준비 사항

주의* 노드를 운영하는 것은 시간과 자원이 많이 들고 비용이 발생할 수 있습니다. 만약 여러분이 노드를 운영해야 하는 이유를 아직 명확히 알지 못한다면, 뒤로가기 버튼을 눌러도 됩니다.*

무료인 RPC URL를 사용하자

초기 설정용 무료 엔드포인트:

무료 RPC는 사용량 제한이 있어서 프로덕션 앱에는 적합하지 않습니다.

하드웨어 요구 사항

노드를 운영하려면 다음과 같은 하드웨어 구성하세요:

  • 8코어 CPU

  • 최소 16GB RAM

  • 최소 2.5TB의 여유 공간이 있는 SSD

정보 Amazon Elastic Block Store (EBS)를 사용할 경우, 초기 동기화 과정에서 지연 문제를 피하려면 디스크 읽기 속도가 충분히 빠른지 확인해야 합니다.

Docker

이 튜토리얼은 여러분이 Docker에 익숙하고 도커를 설치한 사람이라고 가정합니다.

L1 RPC URL

여러분의 전용 L1 RPC URL이 필요합니다. 이는 직접 운영하거나 서드파티, 파트너를 통해 진행합니다.

노드 운영 방법

  1. 리포지토리(repo)를 클론하기.

  2. Ethereum L1 풀 노드 RPC가 필요합니다.(not Base 네트워크). OP_NODE_L1_ETH_RPC & OP_NODE_L1_BEACON을 설정하세요 (.env.* 파일에서 docker-compose 사용 시). 자체 L1 노드를 실행하는 경우, 동기화해야만 Base가 완전히 동기화될 수 있습니다.

  3. 네트워크에 맞는 라인을 주석 해제하세요 (.env.sepolia 또는 .env.mainnet).

  4. docker compose up을 실행하세요. 다음 명령어로 응답을 확인할 수 있습니다:

curl -d '{"id":0,"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["latest",false]}' \
  -H "Content-Type: application/json" http://localhost:8545

주의 노드 동기화는 며칠동안 시간이 소요될 수 있으며 많은 요청 할당량을 소모합니다. 사용량을 모니터링하고 필요한 경우 플랜을 업그레이드해야 합니다.

스냅샷

초기 동기화 시간을 절약하려면 최신 스냅샷을 복원할 수 있습니다. 스냅샷은 매주 업데이트됩니다.

스냅샷 복원

  1. Base Node 홈 디렉터리에 geth-data 폴더를 만듭니다. 이미 폴더가 있다면 기존 상태를 지우고 다시 생성합니다.

  2. 다음 명령어를 실행합니다.

테스트넷 (full)

wget https://sepolia-full-snapshots.base.org/$(curl https://sepolia-full-snapshots.base.org/latest)

테스트넷 (Archive)

wget https://sepolia-archive-snapshots.base.org/$(curl https://sepolia-archive-snapshots.base.org/latest)

메인넷 (full)

wget https://mainnet-full-snapshots.base.org/$(curl https://mainnet-full-snapshots.base.org/latest)

메인넷 (Archive)

wget https://mainnet-archive-snapshots.base.org/$(curl https://mainnet-archive-snapshots.base.org/latest)

다운로드한 스냅샷의 압축을 풀고 그 안에 생성된 geth 하위 폴더를 geth-data 폴더에 넣어야 합니다.

루트 디렉터리로 돌아가서 노드를 시작합니다:

cd ..
docker compose up --build

이제 노드가 스냅샷의 마지막 블록부터 동기화를 시작합니다.

동기화 상태 확인

다음 명령어를 통해 동기화 진행 상황을 모니터링할 수 있습니다:

echo Latest synced block behind by: $((($(date +%s)-$( \
  curl -d '{"id":0,"jsonrpc":"2.0","method":"optimism_syncStatus"}' \
  -H "Content-Type: application/json" http://localhost:7545 | \
  jq -r .result.unsafe_l2.timestamp))/60)) minutes

동기화가 완료되지 않았을 경우, 노드를 사용하여 배포하려고 할 때 Error: nonce has already been used 오류가 발생할 수 있습니다.