前言

ETH在升级后需要同时同步两个层。一个是执行层一个是信标层。
在尝试了很多rpc,包含试了rpc负载均衡之后,最终还是决定自己起一条本地的来避免限速的情况。

配置

配置采用的是虚拟化的一台ubuntu服务器大致如下:

  1. cpu 13490F
  2. 内存 22G
  3. 硬盘 4T
  4. 宽带 中国移动 200M下行 30M上行

Image

注意 这台虚拟机上还运行了一个bsc的fast node,属于是极低成本了。这也侧面证实了evm对资源的需求极低。

配置信标链

这里使用了prysm

 cd /		                #进入根目录
 mkdir eth	                #创建eth文件夹
 cd eth
 mkdir consensus
 mkdir execution
 cd consensus
 mkdir prysm && cd prysm
 curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh && chmod +x prysm.sh
 ./prysm.sh beacon-chain generate-auth-secret  #这里生成的是jwt.hex加密文件,用来充当和执行层 之间的密钥

启动信标链客户端

screen -S prysm   #创建prysm启动窗口
./prysm.sh beacon-chain --execution-endpoint=http://localhost:8551 --jwt-secret=/eth/consensus/prysm/jwt.hex

加速信标链同步的方法,prysm支持从最近的checkpoint进行同步,这也的话就不验证你的节点之前的内容,我们不质押只是为了使用rpc,采用最快的方式就行。参考

./prysm.sh beacon-chain --execution-endpoint=http://localhost:8551 --jwt-secret=/eth/consensus/prysm/jwt.hex --checkpoint-sync-url=<checkpoint url> --genesis-beacon-api-url=<checkpoint url>

社区维护的checkpoint url 可以在这里找到-->check point

必须使用加速的方法,不然国内的网络同步太慢了,如果你的checkpoint都配置正确的话,同步到checkpoint大概只需要5min左右。

可以多尝试几个url,如果10min还没有反应的话,可以删除当前目录下的dist文件夹,重新启动prysm脚本测试下。

配置geth

执行层还是使用传统的geth
去这里下载对应你的版本的geth-->download
启动命令

./geth --cache 10240 --datadir ./node \
  --http --http.addr 0.0.0.0 --http.port 8547 --http.corsdomain "*" --http.api "eth,net,web3,txpool" \
  --ws --ws.port 8548 --ws.addr 0.0.0.0 --ws.origins '*' \
  --authrpc.addr localhost --authrpc.port 8551 --authrpc.vhosts localhost \
  --maxpeers=300 \
  --syncmode=snap\
  --authrpc.jwtsecret ../consensus/prysm/jwt.hex \
  --state.scheme=path

注意这里使用的http.port我做了修改,因为和bsc启动的冲突了。同时--authrpc.port 8551就代表了和信标链通信的端口,--authrpc.jwtsecret则需要和信标链使用同一个jwt.hex文件。

节点同步

如果你全部配置完成,那么你可以看到geth的输出日志正在追块了

Image

国内的对等节点并不多,只有10个左右,但是同步速度并不慢,下载节点的速度可以达到23MB/s,这基本是我的带宽的极限了。

Image

在同步完成后,再启动信标链可以去掉checkpoint参数了,直接执行

./prysm.sh beacon-chain --execution-endpoint=http://localhost:8551 --jwt-secret=./jwt.hex 

补充

经过大约1天的时间,完成了追块,消耗硬盘资源大约1.1T,消耗内存大约10G。这样看来还能扣扣硬盘到2T。