Skip to content

1. BSC FULL节点部署

目前只有三个客户端支持BSC链

本次以Geth安装,支持在 Mac OS XLinuxWindows 上运行全节点

1.0 服务器环境

基于centos7.x

geth_bsc_v1.4.16

aws_c5.4xlarge(16x32g)

1.1 full节点作用

Full Node 将完整的世界状态存储在磁盘上,并且能够:

  • 处理新交易并产生新区块,可以作为验证节点使用。
  • 执行并验证新收到的区块。
  • 验证每个账户的状态,因为它具有完整的世界状态。

1.2 两种方式设置BSC全节点

https://docs.bnbchain.org/bnb-smart-chain/developers/node_operators/full_node/#2run-bsc-full-node-geth

https://github.com/bnb-chain/bsc

1.Snapshot-推荐

下载最新的快照,并根据快照进行同步

2.Genesis

从创世区块同步整个 BSC 链

截至 2024 年 11 月,BSC 主网的最新区块高度超过 40M,需要更强大的硬件,并且需要很长时间才能从创世同步,因此建议基于快照设置 BSC 全节点。

1.3 下载

release page

bash
# Linux
wget   $(curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest |grep browser_ |grep geth_linux |cut -d\" -f4)

#指定版本进行下载
wget https://github.com/bnb-chain/bsc/releases/download/v1.4.16/geth_linux
# Linux
wget   $(curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest |grep browser_ |grep geth_linux |cut -d\" -f4)

#指定版本进行下载
wget https://github.com/bnb-chain/bsc/releases/download/v1.4.16/geth_linux
  • 下载配置文件
bash
#下载配置
# mainnet
wget   $(curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest |grep browser_ |grep mainnet |cut -d\" -f4)
unzip mainnet.zip

#指定版本进行下载
wget https://github.com/bnb-chain/bsc/releases/download/v1.4.16/mainnet.zip
#下载配置
# mainnet
wget   $(curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest |grep browser_ |grep mainnet |cut -d\" -f4)
unzip mainnet.zip

#指定版本进行下载
wget https://github.com/bnb-chain/bsc/releases/download/v1.4.16/mainnet.zip
  • 下载快照文件

here

这个需要双倍磁盘空间(解压)

1.4 部署

  • 创建目录
bash
mkdir -p /data/apps/bsc

mkdir -p /data/bsc
mkdir -p /data/apps/bsc

mkdir -p /data/bsc
  • 移动geth
bash
mv geth_linux /data/apps/bsc/geth

chmod -v u+x geth
mv geth_linux /data/apps/bsc/geth

chmod -v u+x geth
  • 创建用户
bash
useradd -rs /bin/false bsc

chown -R bsc. /data/apps/bsc

chown -R bsc. /data/bsc
useradd -rs /bin/false bsc

chown -R bsc. /data/apps/bsc

chown -R bsc. /data/bsc
  • 创建启动脚本
bash
cat > /data/apps/bsc/bsc_bsc_validator.sh <<EOF
cd /data/apps/bsc/
/data/apps/bsc/geth --config /data/apps/bsc/config.toml --syncmode snap --datadir /data/bsc  --cache 2000 -rpc.allow-unprotected-txs --txlookuplimit 0 --txpool.reannouncetime 5m --history.transactions 0 --db.engine=pebble --pruneancient=true --diffsync
EOF
cat > /data/apps/bsc/bsc_bsc_validator.sh <<EOF
cd /data/apps/bsc/
/data/apps/bsc/geth --config /data/apps/bsc/config.toml --syncmode snap --datadir /data/bsc  --cache 2000 -rpc.allow-unprotected-txs --txlookuplimit 0 --txpool.reannouncetime 5m --history.transactions 0 --db.engine=pebble --pruneancient=true --diffsync
EOF

参数解释:

--config:指定BSC节点配置文件

--datadir:指定BSC节点数据库和密钥存储库的数据目录(默认:"/root/.ethereum")

--cache:设置最大分配给内部缓存的内存,默认:1024(建议3分之1,设置越大,每次同步的数据越多,消耗的内存也越大)

--rpc.allow-unprotected-txs:允许通过RPC提交不受保护的(非 EIP155 签名)交易

--txlookuplimit 0 : 禁用删除事务索引

--diffsync:启用差异同步协议来帮助节点更快地同步

--db.engine :使用数据库实现(pebble or leveldb)

--pruneancient=true :只保留90000万最新数据

bash
chown -R bsc. /data/apps/bsc

chmod -v u+x /data/apps/bsc/bsc_bsc_validator.sh
chown -R bsc. /data/apps/bsc

chmod -v u+x /data/apps/bsc/bsc_bsc_validator.sh
  • 创建systemd
bash
cat > /etc/systemd/system/bsc.service <<EOF
[Unit]
Description=BSC Validator
Documentation=https://docs.bnbchain.org/bnb-smart-chain/
After=network.target
Wants=bsc-sys-tuner.service
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=bsc
LimitNOFILE=1000000
LogRateLimitIntervalSec=0
Environment="PATH=/data/apps/bsc:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
ExecStart=/data/apps/bsc/bsc_validator.sh
ExecStop=/bin/kill -HUP $MAINPID
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
cat > /etc/systemd/system/bsc.service <<EOF
[Unit]
Description=BSC Validator
Documentation=https://docs.bnbchain.org/bnb-smart-chain/
After=network.target
Wants=bsc-sys-tuner.service
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
User=bsc
LimitNOFILE=1000000
LogRateLimitIntervalSec=0
Environment="PATH=/data/apps/bsc:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
ExecStart=/data/apps/bsc/bsc_validator.sh
ExecStop=/bin/kill -HUP $MAINPID
KillMode=process
[Install]
WantedBy=multi-user.target
EOF
  • 修改启动配置文件

HTTPHost: HTTP-RPC服务连接白名单,此参数的值默认为 "localhost",仅允许本地可访问,可设置为:"0.0.0.0"

HTTPVirtualHosts:HTTP-RPC服务监听接口,此参数的值默认为 ["localhost"],可设置为:HTTPVirtualHosts = ["*"]

HTTPPort:http协议rpc端口

WSPort:websocket协议rpc端口

WSHost:websocket服务连接白名单,此参数的值默认为 "localhost",仅允许本地可访问,如果需要外网访问节点可设置为:"0.0.0.0"

WSOrigins:websocket服务监听接口,可设置为:WSOrigins = ["*"]

1.5 启动

bash
systemctl daemon-reload
systemctl enable --now bsc


## 测试
./geth --config ./config.toml --datadir <datadir>  --cache 8000
systemctl daemon-reload
systemctl enable --now bsc


## 测试
./geth --config ./config.toml --datadir <datadir>  --cache 8000
  • 查看同步状态
bash
tail /data/bsc/bsc.log
tail /data/bsc/bsc.log
  • 关闭服务
bash
kill -HUP $(pgrep geth)
kill -HUP $(pgrep geth)

2. BSC 同步模式

通过标志 --syncmode 指定

2.1 snap-推荐

该模式为默认,模式用于初始同步,它将下载最新的状态,而不是执行创世中的区块。初始同步完成后,它将自动切换到完全同步。

2.2 full

模式也可用于进行初始同步,这将执行自创世以来的所有 block。但不建议这样做,因为历史数据量太大。相反,你可以从官方存储库下载快照,然后从快照开始完全同步。

3. BSC常用命令

bash
# 查看当前最新区块
$ curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' http://127.0.0.1:8545

{"jsonrpc":"2.0","id":1,"result":"0x8f8e68"}

# 查看当前同步状态
$ curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' http://127.0.0.1:8545

{"jsonrpc":"2.0","id":1,"result":false}
# 注:结果为false为同步完成

$ curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":1}' http://127.0.0.1:8545
# 查看当前最新区块
$ curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' http://127.0.0.1:8545

{"jsonrpc":"2.0","id":1,"result":"0x8f8e68"}

# 查看当前同步状态
$ curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' http://127.0.0.1:8545

{"jsonrpc":"2.0","id":1,"result":false}
# 注:结果为false为同步完成

$ curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"net_version","params":[],"id":1}' http://127.0.0.1:8545