도커 셋업
설치 요구 사항
모든 유형의 바이프로스트 네트워크 노드는 도커 (Docker)를 통해 쉽게 실행할 수 있습니다. 노드를 실행하려는 환경에 도커가 미리 설치되어 있어야 합니다. 설치가 완료되면 다음 프로세스를 진행할 수 있습니다.
먼저 바이프로스트 네트워크의 체인 데이터를 저장할 로컬 디렉토리를 생성합니다. 이 디렉토리에는 제네시스 블록부터 현재까지 수집된 모든 블록 정보와 해당 검증자 노드의 세션 키가 저장됩니다.
# Add sudo at the beginning if it doesn't work
mkdir -p /var/lib/bifrost-data
생성한 디렉토리에 대한 소유권 및 권한을 설정해야 합니다. 특정 사용자로 설정하려면 "case 1"에 작성된 명령어를 실행하고 DOCKER_USER
를 나중에 Docker를 실행할 실제 사용자 이름으로 변경할 수 있습니다. 현재 연결된 사용자로 설정하려면 "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
노드 컨테이너 실행
검증자 노드를 실행하려면 다음 명령어를 통해 실행합니다. 이 경우 YOUR_NODE_NAME
은 실행할 노드의 이름을 나타내는 파라미터이므로 원하는 이름으로 수정하여 실행바랍니다.
docker run -d --network host -v "/var/lib/bifrost-data:/data" --name "YOUR_CONTAINER_NAME" thebifrost/bifrost-node:latest \
--base-path /data \
--chain /specs/bifrost-testnet.json \
--port 30333 \
--validator \
--state-pruning archive \
--trie-cache-size 0 \
--runtime-cache-size 64 \
--name "YOUR_NODE_NAME"
로그 확인
실행 중인 bifrost-node
컨테이너 로그를 확인하려면 아래 명령어를 실행합니다.
docker logs -f <YOUR_CONTAINER_NAME>
도커 이미지가 성공적으로 풀 (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
키 설정 및 본딩
이제 검증자 노드가 블록 생성 및 최종화 프로세스를 수행할 수 있도록 필요한 키 설정을 진행합니다. 이 단계부터는 실행 중인 노드의 체인 데이터 동기화가 완료되어야 합니다.
먼저 검증자 노드는 기본적으로 두 개의 이더리움 호환 계정 (컨트롤러 계정과 스태시 계정)을 필요로 하며, 풀 노드의 경우에는 추가적으로 릴레이어 계정이 필요합니다.
스태시 계정은 위임된 계정이 검증자로 활동할 수 있도록 시스템에 예치해야 하는 일정량의 자체 본딩 (self-bond)을 보유하는 계정입니다. 스태시 계정의 역할은 자체 본딩을 예치하고, 자신을 대신하여 공개적으로 검증자 활동을 수행할 하나의 계정 (컨트롤러)을 위임하는 것입니다.
컨트롤러 계정은 스태시 계정으로부터 위임받은 대상이며, 검증자로서 활동하는 주 계정입니다. 컨트롤러의 역할은 세션 키 등록, 블록 생성, 최종화 등 모든 활동에 전념하는 계정이며, 트랜잭션 수수료를 지불하기 위한 최소한의 자산만 필요합니다.
새로운 계정을 생성해야 하는 경우 다음 명령어를 실행할 수 있습니다.
# step 1. access your docker container
docker exec -it YOUR_CONTAINER_NAME /bin/bash
# step 2. move to the tools directory
cd tools
# step 3. install required packages
npm install
# step 4. generate validator accounts
# case 1. generate accounts for basic nodes
npm run create_accounts
# case 2. generate accounts for full nodes
npm run create_accounts -- --full
명령어를 실행하면 사용 가능한 새 검증자 계정이 다음과 같이 출력됩니다. 다음 프로세스를 진행하려면 각 계정에 요구 사항을 충족하는 충분한 BFC를 전송해야 합니다.

다음으로, 검증자 노드는 합의 알고리즘에 사용될 세션 키를 발행하고 등록해야 합니다. 이 프로세스는 다음 명령어를 실행하여 수행할 수 있습니다. (실행 이전에 현재 tools
디렉토리에 있는지 확인하시기 바랍니다).
npm run set_session_keys -- \
--controllerPrivate "YOUR_CONTROLLER_PRIVATE_KEY"

해당 명령어는 노드에 대한 세 가지 세션 키를 생성합니다. 각 키는 고유한 목적을 가집니다. Aura는 블록 생성을 위한 것이고, Grandpa는 블록 최종화를 위한 것이며, ImOnline은 노드 활성 (liveness)을 위한 것입니다. 생성된 키는 체인 데이터 디렉토리(/var/lib/bifrost-data/chains/{testnet|mainnet}/keystore
)에 저장됩니다.
마지막으로, 검증자 노드의 자체 본딩 (self-bonds)을 예치하여 초기 투표 권한을 형성해야 합니다. 이 프로세스는 다음 명령어를 통해 수행할 수 있습니다.
# case 1. join as a basic node
npm run join_validator_candidates -- \
--controllerPrivate "YOUR_CONTROLLER_PRIVATE_KEY" \
--stashPrivate "YOUR_STASH_PRIVATE_KEY" \
--bond "YOUR_SELF_BOND_AMOUNT_IN_BFC"
# case 2. join as a full node
npm run join_validator_candidates -- \
--controllerPrivate "YOUR_CONTROLLER_PRIVATE_KEY" \
--stashPrivate "YOUR_STASH_PRIVATE_KEY" \
--relayerPrivate "YOUR_RELAYER_PRIVATE_KEY" \
--bond "YOUR_SELF_BOND_AMOUNT_IN_BFC"
위에 언급된 모든 프로세스를 성공적으로 완료하면, 스태시 계정에서 예치된 BFC 금액이 지갑에서 차감되며, 컨트롤러 계정은 다음 라운드에서 활성 검증자 업데이트 프로세스에 참여하게 됩니다. 다음 페이지에서 검증자 풀에 성공적으로 합류했는지 확인할 수 있습니다.

운영하려는 검증자 노드의 티어가 풀 노드인 경우, 릴레이어와 함께 운영되어야 합니다. 릴레이어 설정에 대한 매뉴얼은 "릴레이어 셋업" 섹션에서 찾을 수 있습니다.
노드 클라이언트 업데이트
바이프로스트 네트워크는 계속 발전하고 있어, 노드 클라이언트 업그레이드가 요구될 때가 있습니다. 업그레이드 가능 여부와 필수 여부(일부 업그레이드는 선택 사항)는 디스코드 채널이나 개별 연락을 통해 노드 운영자에게 알려드립니다.
노드 클라이언트 업그레이드 전에는 혹시 모를 데이터, 키 또는 자격 증명 손실을 막기 위해 반드시 체인 데이터를 백업해 두셔야 합니다.
# 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 version on run command
# e.g.
docker run -d --network host -v "/var/lib/bifrost-data:/data" --name "YOUR_CONTAINER_NAME" thebifrost/bifrost-node:latest \
--base-path /data \
--chain /specs/bifrost-testnet.json \
--port 30333 \
--validator \
--state-pruning archive \
--trie-cache-size 0 \
--runtime-cache-size 64 \
--name "YOUR_NODE_NAME"
Last updated