도커 셋업
엔드포인트 노드 (endpoint node)는 바이프로스트 네트워크와 상호 작용하기 위한 JSON-RPC 인터페이스를 제공하는 노드입니다. 제공되는 RPC 메서드를 통해 사용자나 많은 프로젝트는 블록체인 데이터와 쉽게 상호 작용할 수 있습니다. 이더리움 표준 RPC 인터페이스 외에도, Geth의 디버그 (debug) 및 트랜잭션 풀 (txpool) API와 OpenEthereum의 트레이스 (trace) API도 선택적으로 활성화되어 트랜잭션 처리에 대한 더 자세한 정보를 제공하는 비표준 RPC 인터페이스를 제공합니다.
엔드포인트 노드는 두 가지 모드로 구성됩니다. 첫 번째 모드는 제네시스 블록부터 현재까지 모든 블록의 상태 정보를 저장하는 아카이브 모드 (archive mode)입니다. 이 모드는 과거 데이터를 요청해야 할 때 사용할 수 있습니다. 두 번째 모드는 아카이브 모드와 달리 지정된 수의 블록만 체인 정보를 저장하는 "일반" 모드 (non-archive mode)입니다. 따라서 설정된 범위를 벗어나는 체인 정보를 요청할 수 없습니다.
엔드포인트 노드는 합의 알고리즘에 참여하지 않으므로 BFC를 예치하거나 별도의 계정 설정이 필요하지 않으며, 검증자 노드와 달리 특별한 보상을 제공하지 않습니다.
설치 요구 사항
먼저 바이프로스트 네트워크의 체인 데이터를 저장할 로컬 디렉토리를 생성합니다. 이 디렉토리에는 제네시스 블록부터 현재까지 수집된 모든 블록 정보가 저장됩니다.
# Add sudo at the beginning if it doesn't work
mkdir -p /var/lib/bifrost-data
생성한 디렉토리에 대한 소유권 및 권한을 설정해야 합니다. 특정 사용자로 설정하려면 "case 1"에 작성된 명령어를 실행하고 DOCKER_USER
를 나중에 도커를 실행할 실제 사용자 이름으로 변경할 수 있습니다. 현재 연결된 사용자로 설정하려면 "case 2"에 작성된 명령어를 실행할 수 있습니다.
# case 1. chown to a specific user
chown DOCKER_USER /var/lib/bifrost-data
# case 2. chown to current user
sudo chown -R $(id -u):$(id -g) /var/lib/bifrost-data
피어 키 생성
바이프로스트 네트워크에서 실행되는 모든 노드는 P2P 네트워크에 연결하기 위한 피어 키 (peer key)가 필요합니다. 새로운 피어 키를 생성하고 체인 데이터에 자동으로 주입하려면 다음 명령어를 실행합니다.
docker run --rm -it -v "/var/lib/bifrost-data:/data" thebifrost/bifrost-node:latest \
key generate-node-key \
--chain /specs/bifrost-testnet.json \
--base-path /data
노드 컨테이너 실행
아카이브 모드를 활성화하여 엔드포인트 노드를 실행하려면 다음 명령어를 실행합니다.
docker run -d -p 30333:30333 -p 9933:9933 -v "/var/lib/bifrost-data:/data" --name "YOUR_CONTAINER_NAME" thebifrost/bifrost-node:latest \
--base-path /data \
--chain /specs/bifrost-testnet.json \
--port 30333 \
--rpc-port 9933 \
--state-pruning archive \
--rpc-cors all \
--rpc-external \
--ethapi debug,trace,txpool \
--runtime-cache-size 64 \
--name "YOUR_NODE_NAME"
반대로, 일반 모드를 활성화하여 엔드포인트 노드를 실행하려면 다음 명령어를 실행합니다. 이 경우, 인덱싱할 과거 블록의 최대 수를 결정해야 하며, 블록 수는 --state-pruning
옵션 뒤에 지정할 수 있습니다.
docker run -d -p 30333:30333 -p 9933:9933 -v "/var/lib/bifrost-data:/data" --name "YOUR_CONTAINER_NAME" thebifrost/bifrost-node:latest \
--base-path /data \
--chain /specs/bifrost-testnet.json \
--port 30333 \
--rpc-port 9933 \
--state-pruning 256 \
--rpc-cors all \
--rpc-external \
--ethapi debug,trace,txpool \
--runtime-cache-size 64 \
--name "YOUR_NODE_NAME"
로그 확인 방법
아래 명령어를 실행해 bifrost-node
컨테이너의 로그를 확인할 수 있습니다.
docker logs -f <YOUR_CONTAINER_NAME>
도커(docker) 이미지가 성공적으로 풀(pull)되고 검증자 노드가 실행되면, 로그는 다음과 같이 표시됩니다.
2023-07-19 17:02:53 BIFROST Network
2023-07-19 17:02:53 ✌️ version 1.2.3-0d1811a5e80
2023-07-19 17:02:53 ❤️ by bifrost-platform, 2022-2023
2023-07-19 17:02:53 📋 Chain specification: BIFROST Development
2023-07-19 17:02:53 🏷 Node name: jolly-grandfather-7771
2023-07-19 17:02:53 👤 Role: AUTHORITY
2023-07-19 17:02:53 💾 Database: RocksDb at /var/folders/vg/xzyl_nmd77x5kcvbryssc5gm0000gn/T/substrateutNaBp/chains/dev/db/full
2023-07-19 17:02:53 ⛓ Native runtime: thebifrost-dev-301 (bifrost-dev-1.tx1.au1)
2023-07-19 17:02:53 🔨 Initializing Genesis block/state (state: 0x7c59…74e5, header-hash: 0x469c…993b)
2023-07-19 17:02:53 🔨 Running Frontier DB migration from version 1 to version 2. Please wait.
2023-07-19 17:02:53 ✔️ Successful Frontier DB migration from version 1 to version 2 (0 entries).
2023-07-19 17:02:53 👴 Loading GRANDPA authority set from genesis on what appears to be first startup.
2023-07-19 17:02:54 Using default protocol ID "sup" because none is configured in the chain specs
2023-07-19 17:02:54 🏷 Local node identity is: 12D3KooWLvfoahrVYuwGjvNKyyWgkWSvBT9TofHvNGdiexgS3hRL
2023-07-19 17:02:54 💻 Operating system: macos
2023-07-19 17:02:54 💻 CPU architecture: aarch64
2023-07-19 17:02:54 📦 Highest known block at #0
2023-07-19 17:02:54 〽️ Prometheus exporter started at 127.0.0.1:9615
2023-07-19 17:02:54 Running JSON-RPC HTTP server: addr=127.0.0.1:9933, allowed origins=["*"]
2023-07-19 17:02:54 Running JSON-RPC WS server: addr=127.0.0.1:9944, allowed origins=["*"]
체인 데이터는 제네시스 블록부터 동기화되어야 하므로, 현재 동기화 중임을 나타내는 정보가 다음과 같이 출력됩니다. 동기화가 완료된 후에만 다음 단계로 진행할 수 있으며, 최대 며칠이 소요될 수 있습니다.
2023-07-19 17:06:20 ⚙️ Syncing, target=#8037656 (2 peers), best: #4371 (0xd39a…4f76), finalized #4200 (0x79ee…2eec), ⬇ 485.5kiB/s ⬆ 38.0kiB/s
2023-07-19 17:06:25 ⚙️ Syncing 745.8 bps, target=#8037658 (3 peers), best: #8100 (0xac9e…cba6), finalized #7800 (0xb93d…839f), ⬇ 334.1kiB/s ⬆ 24.0kiB/s
2023-07-19 17:06:30 ⚙️ Syncing 676.0 bps, target=#8037660 (3 peers), best: #11480 (0xbdbf…85f2), finalized #11400 (0x612b…7853), ⬇ 409.8kiB/s ⬆ 23.4kiB/s
2023-07-19 17:06:35 ⚙️ Syncing 596.8 bps, target=#8037661 (3 peers), best: #14465 (0xcce8…aadb), finalized #14400 (0x8f77…7e6b), ⬇ 356.1kiB/s ⬆ 24.5kiB/s
2023-07-19 17:06:40 ⚙️ Syncing 646.8 bps, target=#8037663 (3 peers), best: #17700 (0xf0a1…36d6), finalized #17408 (0x467b…63bf), ⬇ 372.7kiB/s ⬆ 9.2kiB/s
2023-07-19 17:06:45 ⚙️ Syncing 596.4 bps, target=#8037665 (3 peers), best: #20682 (0xcc4c…2ca9), finalized #20480 (0x1d99…7288), ⬇ 340.3kiB/s ⬆ 12.3kiB/s
2023-07-19 17:06:50 ⚙️ Syncing 560.2 bps, target=#8037666 (3 peers), best: #23485 (0x83ba…6fae), finalized #23400 (0xa031…a7e0), ⬇ 399.4kiB/s ⬆ 9.9kiB/s
2023-07-19 17:06:55 ⚙️ Syncing 575.0 bps, target=#8037668 (3 peers), best: #26362 (0xb11c…7fc4), finalized #26112 (0xbaa5…6c61), ⬇ 328.7kiB/s ⬆ 12.8kiB/s
2023-07-19 17:07:00 ⚙️ Syncing 579.4 bps, target=#8037670 (3 peers), best: #29259 (0xa287…cf05), finalized #29184 (0x7ac8…55cb), ⬇ 353.6kiB/s ⬆ 7.8kiB/s
2023-07-19 17:07:05 ⚙️ Syncing 595.4 bps, target=#8037671 (3 peers), best: #32237 (0xfc62…6b12), finalized #32100 (0x95cd…0c27), ⬇ 338.3kiB/s ⬆ 14.9kiB/s
2023-07-19 17:07:10 ⚙️ Syncing 590.2 bps, target=#8037673 (3 peers), best: #35191 (0x3b06…9e27), finalized #35100 (0xd461…5ab7), ⬇ 330.9kiB/s ⬆ 8.7kiB/s
체인 데이터 동기화가 모두 완료되면, 새로 생성된 블록들이 다음과 같이 매 블록 시간마다 하나씩 동기화됩니다.
2023-07-19 08:08:09 ✨ Imported #5384451 (0xd7a8…011f)
2023-07-19 08:08:10 💤 Idle (25 peers), best: #5384451 (0xd7a8…011f), finalized #5384449 (0x1ae1…fdf3), ⬇ 47.7kiB/s ⬆ 49.5kiB/s
2023-07-19 08:08:12 ✨ Imported #5384452 (0x9bf4…9710)
2023-07-19 08:08:15 ✨ Imported #5384453 (0x90af…653a)
2023-07-19 08:08:15 💤 Idle (25 peers), best: #5384453 (0x90af…653a), finalized #5384450 (0x8026…f68a), ⬇ 37.3kiB/s ⬆ 36.9kiB/s
2023-07-19 08:08:18 ✨ Imported #5384454 (0x5c80…9b84)
2023-07-19 08:08:20 💤 Idle (25 peers), best: #5384454 (0x5c80…9b84), finalized #5384452 (0x9bf4…9710), ⬇ 38.0kiB/s ⬆ 46.4kiB/s
2023-07-19 08:08:21 ✨ Imported #5384455 (0x91d0…de42)
2023-07-19 08:08:24 ✨ Imported #5384456 (0xb7e0…832e)
2023-07-19 08:08:25 💤 Idle (25 peers), best: #5384456 (0xb7e0…832e), finalized #5384454 (0x5c80…9b84), ⬇ 46.2kiB/s ⬆ 44.2kiB/s
2023-07-19 08:08:27 ✨ Imported #5384457 (0xcc84…0e00)
2023-07-19 08:08:30 ✨ Imported #5384458 (0xc499…2475)
2023-07-19 08:08:30 💤 Idle (25 peers), best: #5384458 (0xc499…2475), finalized #5384455 (0x91d0…de42), ⬇ 28.5kiB/s ⬆ 44.0kiB/s
노드 클라이언트 업데이트
바이프로스트 네트워크는 계속 발전하고 있어, 노드 클라이언트 업그레이드가 요구될 때가 있습니다. 업그레이드 가능 여부와 필수 여부(일부 업그레이드는 선택 사항)는 디스코드 채널이나 개별 연락을 통해 노드 운영자에게 알려드립니다.
노드 클라이언트 업그레이드 전에는 혹시 모를 데이터, 키 또는 자격 증명 손실을 막기 위해 반드시 체인 데이터를 백업해 두셔야 합니다.
# First of all stop bifrost-node
docker stop "YOUR_CONTAINER_NAME"
docker rm "YOUR_CONTAINER_NAME"
# Pull the latest bifrost-node image
docker pull thebifrost/bifrost-node:latest
# Change bifrost-node image version(tag) on run command
# e.g.
docker run -d -p 30333:30333 -p 9933:9933 -v "/var/lib/bifrost-data:/data" --name "YOUR_CONTAINER_NAME" thebifrost/bifrost-node:latest \
--base-path /data \
--chain /specs/bifrost-testnet.json \
--port 30333 \
--rpc-port 9933 \
--state-pruning archive \
--rpc-cors all \
--rpc-external \
--ethapi debug,trace,txpool \
--runtime-cache-size 64 \
--name "YOUR_NODE_NAME"
Last updated