1. BSC FULL节点部署
目前只有三个客户端支持BSC链
- Geth: https://github.com/bnb-chain/bsc
- Reth: https://github.com/bnb-chain/reth
- Erigon: https://github.com/node-real/bsc-erigon 因为 Erigon 主要支持存档模式,请使用 archive_node.md
本次以Geth安装,支持在 Mac OS X、Linux 和 Windows 上运行全节点
1.0 服务器环境
基于centos7.x
geth_bsc_v1.4.16
aws_c5.4xlarge(16x32g)
1.1 full节点作用
Full Node 将完整的世界状态存储在磁盘上,并且能够:
- 处理新交易并产生新区块,可以作为验证节点使用。
- 执行并验证新收到的区块。
- 验证每个账户的状态,因为它具有完整的世界状态。
1.2 两种方式设置BSC全节点
https://github.com/bnb-chain/bsc
1.Snapshot-推荐
下载最新的快照,并根据快照进行同步
2.Genesis
从创世区块同步整个 BSC 链
截至 2024 年 11 月,BSC 主网的最新区块高度超过 40M,需要更强大的硬件,并且需要很长时间才能从创世同步,因此建议基于快照设置 BSC 全节点。
1.3 下载
# 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
- 下载配置文件
#下载配置
# 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
- 下载快照文件
这个需要双倍磁盘空间(解压)
1.4 部署
- 创建目录
mkdir -p /data/apps/bsc
mkdir -p /data/bsc
mkdir -p /data/apps/bsc
mkdir -p /data/bsc
- 移动geth
mv geth_linux /data/apps/bsc/geth
chmod -v u+x geth
mv geth_linux /data/apps/bsc/geth
chmod -v u+x geth
- 创建用户
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
- 创建启动脚本
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万最新数据
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
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 启动
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
- 查看同步状态
tail /data/bsc/bsc.log
tail /data/bsc/bsc.log
- 关闭服务
kill -HUP $(pgrep geth)
kill -HUP $(pgrep geth)
2. BSC 同步模式
通过标志 --syncmode 指定
2.1 snap-推荐
该模式为默认,模式用于初始同步,它将下载最新的状态,而不是执行创世中的区块。初始同步完成后,它将自动切换到完全同步。
2.2 full
模式也可用于进行初始同步,这将执行自创世以来的所有 block。但不建议这样做,因为历史数据量太大。相反,你可以从官方存储库下载快照,然后从快照开始完全同步。
3. BSC常用命令
# 查看当前最新区块
$ 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