本节将演示部署一个bArtio
测试网RPC归档节点,该节点包含beacond
共识客户端和reth
执行客户端。
注意:目前,测试网验证节点需被列入等候白名单,并在网络需要时运行。
先决条件
开始之前,请确保你的本地设备上满足以下条件:
最低硬件要求
运行执行客户端和共识客户端均需要满足以下要求。建议在同一台设备运行这两个客户端,以实现两者之间的低延迟通信。
CPU架构:AMD64,ARM64或ARM64 Darwin
如果以Docker容器运行,请确保每个Docker容器有足够的资源,以满足总需求。
源代码构建和运行
本节快速入门文档,将从源头构建共识客户端。
注意:请勿在Vscode中运行执行客户端或共识客户端,容易造成崩溃,请使用专业的Shell终端。
复制代码库并验证binary文件
首先,复制BeaconKit代码库 ,创建binary文件。
复制 git clone https://github.com/berachain/beacon-kit;
cd beacon-kit;
make build;
# [Expected Output]:
# mkdir -p /path/to/beacon-kit/build/bin/
# Variables
# Building beacond/cmd
# ...
# go: downloading github.com/berachain/cosmos-sdk v0.46.0-beta2.0.20240624014538-75ba469b1881
这将创建一个位于./build/bin/beacond
的本地binary文件。
接下来,运行以下代码,测试其是否正常工作:
复制 # FROM: ./beacon-kit
./build/bin/beacond version;
# [Expected Output]:
# v0.2.0-alpha.1-172-g071b95a5
配置共识客户端
以下将演示配置一个BeaconKit
共识客户端。
第 1 步:初始化信标节点
首先,为配置创建一个临时文件夹目录。此步骤可省略,但为了后续便利,创建临时文件夹以保存所有配置和数据库数据。
复制 # FROM: ./beacon-kit
mkdir build/bin/config;
mkdir build/bin/config/beacond;
mkdir build/bin/config/reth;
接下来,使用所有标准数据初始化节点。
复制 # FROM: ./beacon-kit
# Replace <YOUR_MONIKER_NAME> with a name of your choice.
MONIKER_NAME=<YOUR_NODE_MONIKER>; # Ex: MONIKER_NAME=BingBongNode
./build/bin/beacond init $MONIKER_NAME --chain-id bartio-beacon-80084 --consensus-key-algo bls12_381 --home ./build/bin/config/beacond;
# Ex: ./build/bin/beacond init BingBongNode --chain-id bartio-beacon-80084 --consensus-key-algo bls12_381 --home ./build/bin/config/beacond;
# [Expected Output]:
# {
# "moniker": "BingBongNode", // <YOUR_MONIKER_NAME>
# "chain_id": "bartio-beacon-80084",
# "node_id": "72e2e6f9d667898d32ede54de9b9299eb567f692",
# "gentxs_dir": "",
# ...
现在,应该能够在./build/bin/config
文件夹中看到新创建的文件。
重要提示 :运行验证器节点,务必安全备份priv_validator_key.json
文件。该文件包含验证器的私钥,用于验证器对区块进行签名。如果丢失该文件,无人能提供帮助,你将永远无法恢复验证器及提取资产。
复制 # FROM: ./beacon-kit
tree build/bin/config/beacond;
# [Expected Output]:
# build/bin/config/beacond
# ├── config
# │ ├── app.toml
# │ ├── client.toml
# │ ├── config.toml
# │ ├── genesis.json
# │ ├── node_key.json
# │ └── priv_validator_key.json <---- BACK THIS UP
# └── data
# └── priv_validator_state.json
第 2 步:添加配置文件
首先,通过下载到config
文件夹中的文件,恢复源文件:
复制 # FROM: ./beacon-kit
curl -o "./build/bin/config/beacond/config/genesis.json" "https://raw.githubusercontent.com/berachain/beacon-kit/main/testing/networks/80084/genesis.json";
# [Expected Output]:
# % Total % Received % Xferd Average Speed Time Time Time Current
# Dload Upload Total Spent Left Speed
# 100 46860 100 46860 0 0 295k 0 --:--:-- --:--:-- --:--:-- 293k
仔细检查源文件,确保类似于以下形式:
复制 # FROM: ./beacon-kit
cat ./build/bin/config/beacond/config/genesis.json;
# [Expected Output]:
# {
# "app_name": "beacond",
# "app_version": "v0.2.0-alpha.0",
# "genesis_time": "2024-06-05T14:00:00Z",
# "chain_id": "bartio-beacon-80084",
# "initial_height": 1,
# "app_hash": null,
# "app_state": {
# ...
接下来,恢复kzg可信设置:
复制 # FROM: ./beacon-kit
curl -o "./build/bin/config/beacond/kzg-trusted-setup.json" "https://raw.githubusercontent.com/berachain/beacon-kit/main/testing/networks/80084/kzg-trusted-setup.json";
# [Expected Output]:
# % Total % Received % Xferd Average Speed Time Time Time Current
# Dload Upload Total Spent Left Speed
# 100 436k 100 436k 0 0 2744k 0 --:--:-- --:--:-- --:--:-- 2747k
然后,从BeaconKit testnet repo 恢复app.toml
和config.toml
数据:
复制 # FROM: ./beacon-kit
# app.toml
curl -o "./build/bin/config/beacond/config/app.toml" "https://raw.githubusercontent.com/berachain/beacon-kit/main/testing/networks/80084/app.toml";
# config.toml
curl -o "./build/bin/config/beacond/config/config.toml" "https://raw.githubusercontent.com/berachain/beacon-kit/main/testing/networks/80084/config.toml";
通过添加moniker name和peers以修改配置。
如果你的设备不是MacOS系统,请将下方代码中的-i ''
替换为-i
。
复制 # FROM: ./beacon-kit
# Rename the moniker
MONIKER_NAME=<YOUR_NODE_MONIKER>; # Ex: MONIKER_NAME=BingBongNode
sed -i '' "s/^moniker = \".*\"/moniker = \"$MONIKER_NAME\"/" "$PWD/build/bin/config/beacond/config/config.toml";
# set jwt.hex path
JWT_PATH=$PWD/build/bin/config/beacond/jwt.hex; # generating in next step
sed -i '' "s|^jwt-secret-path = \".*\"|jwt-secret-path = \"$JWT_PATH\"|" "$PWD/build/bin/config/beacond/config/app.toml";
# seeds
# - Comma separated list of seeds
seeds_url="https://raw.githubusercontent.com/berachain/beacon-kit/main/testing/networks/80084/cl-seeds.txt";
seeds=$(curl -s "$seeds_url" | tail -n +2 | tr '\n' ',' | sed 's/,$//');
sed -i '' "s/^seeds = \".*\"/seeds = \"$seeds\"/" "$PWD/build/bin/config/beacond/config/config.toml";
# persistent peers
# - Comma separated list of nodes to keep persistent connections to
sed -i '' "s/^persistent_peers = \".*\"/persistent_peers = \"$seeds\"/" "$PWD/build/bin/config/beacond/config/config.toml";
第 3 步:生成JWT令牌
这将创建一个JSON Web令牌,以允许BeaconKit共识客户端与EVM执行客户端通信。
运行以下代码,创建JWT令牌:
复制 # FROM: ./beacon-kit
./build/bin/beacond jwt generate -o ./build/bin/config/beacond/jwt.hex;
# [Expected Output]:
# Successfully wrote new JSON-RPC authentication secret to: ./build/bin/config/jwt.hex
这将创建一个jwt.hex
文件,可以使用-o
标签指定可选路径。如果不指定输出位置,则在beacond配置目录中生成,例如/root/.beacond/config/jwt.hex
。
第 4 步:下载快照 (推荐操作)
强烈建议执行此步骤,以避免后续等待较长的同步时间。
从源资源库同步节点可能需要几小时,甚至几天,具体取决于带宽速度和peers数量。
参阅此处,获取快照链接列表:Berachain bArtio V2 Snapshots
运行以下代码,创建快照文件夹并下载快照文件:
复制 # FROM: ./beacon-kit
mkdir snapshots;
curl -L EXAMPLE_SNAPSHOT_FILE.tar.lz4 > ./snapshots/EXAMPLE_SNAPSHOT_FILE.tar.lz4;
# [Example Output]:
# % Total % Received % Xferd Average Speed Time Time Time Current
# Dload Upload Total Spent Left Speed
# 0 43.0G 0 78.1M 0 0 18.7M 0 0:39:07 0:00:04 0:39:03 18.7M
下载完成,解压快照文件并验证数据:
复制 # FROM: ./beacon-kit
# make a directory and download snapshots
mkdir snapshots/tmp;
mkdir snapshots/tmp/beacond;
mkdir snapshots/tmp/reth;
# curl ...
# unzip
# - beacond
lz4 -dc < ./snapshots/EXAMPLE_SNAPSHOT_BEACOND.tar.lz4 | tar xvf - -C ./snapshots/tmp/beacond;
# [Expected Output]:
# ...
# x data/application.db/012580.sst
# x data/application.db/012780.sst
# x data/application.db/012421.sst
# x data/application.db/012420.sst
# - reth
lz4 -dc < ./snapshots/EXAMPLE_SNAPSHOT_RETH.tar.lz4 | tar xvf - -C ./snapshots/tmp/reth;
# [Expected Output]:
# ...
# x static_files/static_file_transactions_0_499999
# x static_files/static_file_receipts_1000000_1499999.off
# x static_files/static_file_headers_0_499999
快照文件应包含以下beacond
和reth
所需内容 (或相应EVM执行客户端所需内容):
复制 # ./snapshots/tmp/beacond - (needed folders & files)
# └── data
# ├── application.db
# ├── blobs
# ├── blockstore.db
# ├── cs.wal
# ├── deposits.db
# ├── evidence.db
# ├── snapshots.db
# ├── state.db
# ├── tx_index.db
# └── priv_validator_state.json
#
# ./snapshots/tmp/reth - (needed folders & files)
# ├── blobstore
# ├── db
# └── static_files
快照文件夹和快照文件验证完成后,将快照数据移入相应的配置文件夹。
复制 # FROM: ./beacon-kit
# beacond
mv ./snapshots/tmp/beacond/data ./build/bin/config/beacond/data;
# reth
mv ./snapshots/tmp/reth/blobstore ./build/bin/config/reth/blobstore;
mv ./snapshots/tmp/reth/db ./build/bin/config/reth/db;
mv ./snapshots/tmp/reth/static_files ./build/bin/config/reth/static_files;
第 5 步:运行Beacon
配置好config.toml
和app.toml
文件后,运行以下代码,启动Beacon:
复制 # FROM: ./beacon-kit
./build/bin/beacond start --home ./build/bin/config/beacond;
# [Expected Output]:
# ...
# INFO Starting service type=validator-updates-broker
# INFO Starting service type=engine-client
# INFO Initializing connection to the execution client... service=engine.client dial_url=http://localhost:8551
# INFO Waiting for execution client to start... 🍺🕔 service=engine.client dial_url=http://localhost:8551
# INFO Waiting for execution client to start... 🍺🕔 service=engine.client dial_url=http://localhost:8551
现在,你的BeaconKit共识客户端已配置完成,接下来配置执行客户端。
配置执行客户端
接下来,需要将执行客户端与beacond
配对。
注意:所有基于以太坊的执行客户端均受支持!
然而,有些客户端可能需要更复杂的配置和微调,才能达到出块时间要求。因此,目前最推荐以下客户端:
下述示例中,将使用Reth 作为执行客户端。
首先,新建一个终端会话,下载MacOS (基于苹果电脑芯片的操作系统) 的binary文件:
警告 :本快速入门演示了如何在MacOS系统上运行节点,仅用于测试目的,不建议真实生产环境中在MacOS系统上运行节点。
复制 # FROM: ./beacon-kit
curl -L https://github.com/paradigmxyz/reth/releases/download/v1.0.3/reth-v1.0.3-x86_64-apple-darwin.tar.gz > reth-v1.0.3-x86_64-apple-darwin.tar.gz;
tar -xzvf reth-v1.0.3-x86_64-apple-darwin.tar.gz;
# # [Expected Output]:
# % Total % Received % Xferd Average Speed Time Time Time Current
# Dload Upload Total Spent Left Speed
# 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
# 100 20.6M 100 20.6M 0 0 47.5M 0 --:--:-- --:--:-- --:--:-- 47.5M
# x reth
运行以下代码,检查reth
客户端是否正常工作:
复制 # FROM: ./beacon-kit
./reth --version;
# [Expected Output]:
# reth Version: 1.0.0
# Commit SHA: 31e2470
# Build Timestamp: 2024-06-24T10:26:24.880668000Z
# Build Features: jemalloc
# Build Profile: maxperf
第 1 步:配置源文件
首先,从BeaconKit代码库下载eth创世源文件。
复制 # FROM: ./beacon-kit
curl -o "./build/bin/config/reth/eth-genesis.json" "https://raw.githubusercontent.com/berachain/beacon-kit/main/testing/networks/80084/eth-genesis.json";
# [Expected Output]:
# % Total % Received % Xferd Average Speed Time Time Time Current
# Dload Upload Total Spent Left Speed
# 100 7232 100 7232 0 0 42532 0 --:--:-- --:--:-- --:--:-- 42792
仔细检查源文件,确保类似于以下形式:
复制 # FROM: ./beacon-kit
cat ./build/bin/config/reth/eth-genesis.json;
# [Expected Output]:
# {
# "config": {
# "chainId": 80084,
# "homesteadBlock": 0,
# "daoForkBlock": 0,
# "daoForkSupport": true,
# ...
第 2 步:启动Reth
运行以下代码,完成剩余reth文件配置:
复制 # FROM: ./beacon-kit
./reth init --datadir ./build/bin/config/reth --chain=./build/bin/config/reth/eth-genesis.json;
第 3 步:运行Reth客户端
复制 # retrieve bootnode
bootnodes_url="https://raw.githubusercontent.com/berachain/beacon-kit/main/testing/networks/80084/el-bootnodes.txt";
bootnodes=$(curl -s "$bootnodes_url" | grep '^enode://' | tr '\n' ',' | sed 's/,$//');
# run reth
./reth node --authrpc.jwtsecret=./build/bin/config/beacond/jwt.hex \
--chain=./build/bin/config/reth/eth-genesis.json \
--datadir=./build/bin/config/reth \
--port=30303 \
--http \
--http.addr=0.0.0.0 \
--http.api="eth,net,web3,txpool,debug" \
--http.port=8545 \
--http.corsdomain="*" \
--bootnodes=$bootnodes \
--trusted-peers=$bootnodes \
--ws \
--ws.addr=0.0.0.0 \
--ws.port=8546 \
--ws.origins="*" \
--authrpc.addr=0.0.0.0 \
--authrpc.port=8551 \
--log.file.directory=./build/bin/config/reth/logs \
--metrics=0.0.0.0:6060;
# [Expected Output]:
# INFO Initialized tracing, debug log directory: ./build/bin/config/reth/logs/80084
# INFO Starting reth version="1.0.0 (31e2470)"
# INFO Opening database path="./build/bin/config/reth/db"
# INFO Configuration loaded path="./build/bin/config/reth/reth.toml"
# INFO Adding trusted nodes
# INFO Verifying storage consistency.
# INFO Database opened
# INFO Starting metrics endpoint addr=0.0.0.0:6060
# ...
检查同步状态
新建一个终端会话,并运行以下代码:
复制 # Don't have jq? `brew install jq`;
./build/bin/beacond --home=./build/bin/config/beacond status | jq;
# [Expected Output]:
# {
# "node_info": {
# "protocol_version": {
# "p2p": "9",
# "block": "11",
# "app": "0"
# },
# "id": "3078798f76b4db03aca9c71dd3264c252e06dfbf",
# "listen_addr": "tcp://0.0.0.0:26656",
# "network": "bartio-beacon-80084",
# "version": "1.0.0-rc1",
# "channels": "40202122233038606100",
# "moniker": "BingBongNode",
# "other": {
# "tx_index": "off",
# "rpc_address": "tcp://127.0.0.1:26657"
# }
# },
# "sync_info": {
# "latest_block_hash": "A72E1C5BD31B0E14604BB6DBA5A313F5B17F78FEE482453D9ED703E49D0C059B",
# "latest_app_hash": "FC649179895650C9B6EB4320A096F46D8882CAD3AAFEE1B0D997B338BDF31618",
# "latest_block_height": "1126228",<---- CURRENT NETWORK BLOCK
# "latest_block_time": "2024-07-05T03:50:15.349853738Z",
# "earliest_block_hash": "F10DEBCEF3E370F813E93BD8BBFA3DAC0392E6C3E9A8A63871E932ACDE44EE1F",
# "earliest_app_hash": "E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855",
# "earliest_block_height": "1",
# "earliest_block_time": "2024-06-05T14:00:00Z",
# "catching_up": false<---- IF `true` = STILL SYNCING
# },
# "validator_info": {
# "address": "74F0F7AC6C37306E765487F8C43F01059EE28391",
# "pub_key": {
# "type": "cometbft/PubKeyBls12_381",
# "value": "i/z8e0Fz1+EiW1YGe9wdqCuAM9sny3r8s4gpjLlDHGFQfv36Vffq/+KoCJKuGRT8"
# },
# "voting_power": "0"
# }
# }
测试本地RPC节点
现在,通过以下步骤来验证当前网络是否正常运行,需要执行一些RPC请求,并部署一个合约。
获取当前区块高度
复制 curl --location 'http://localhost:8545' \
--header 'Content-Type: application/json' \
--data '{
"jsonrpc":"2.0",
"method":"eth_blockNumber",
"params":[],
"id":83
}';
# [Expected Output]:
# {
# "jsonrpc": "2.0",
# "result": "0xfae90",
# "id": 83
# }