如何自建一个基于PoS的ETH节点

Geth自建节点分为三种模式,全节点(full)、快照节点(snap)和轻节点(light)

我们今天搭建snap模式的节点,实时监听pending中的交易

基本准备

购买服务器,snap模式的最低的要求服务器有1TB的存储,因为首次同步的数据占到650G,后面每周会增加大概12G的数据。

我自己购买的vultr的服务器,可以使用支付宝付费很方便,如果像我一样要求不是很高,建议买 E-2286G 的配置的就好,完全够用

服务器购买单租户裸机,位置选择新加坡,系统选择CentOS 7(没有SELinux),服务器大小就选E-2286G,磁盘选择没有RAID的已格式化磁盘就好,其他默认。输入服务器主机名和标签名后就可以了

启动后,通过ssh链接到服务器,基本的准备算是完成

配置客户端

ETH由PoW转向PoS协议之后,每个节点就需要同时运行两个软件,执行客户端和共识客户端。这里需要提到的是运行节点并不需要质押ETH。但如果要作为验证者,产生区块,获得收益,就必须运行共识客户端的验证器,并质押32个ETH。本文中并不介绍质押相关的内容,有需要的可以在节点搭建完成后,阅读运行验证器

首先,创建ethereum文件夹,并在其中创建两个子文件夹consensusexecution,分别存放共识客户端和执行客户端

安装共识客户端

进入consensus文件夹,执行如下命令

mkdir prysm && cd prysm
curl https://raw.githubusercontent.com/prysmaticlabs/prysm/master/prysm.sh --output prysm.sh && chmod +x prysm.sh

安装执行客户端

首先安装Golang,可以直接用yum

yum install golang

下载并安装Geth,查看最新版本

wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.10.25-69568c55.tar.gz
tar -xzvf geth-linux-amd64-1.10.25-69568c55.tar.gz -C ./geth
cd geth && make geth
ln -s 你的解压路径  /usr/local/bin/geth

执行完,运行geth version能正常看到版本号即安装完成

运行执行客户端

nohup geth --syncmode snap --cache 24000 --datadir /usr/ethereum/execution/ --http --http.addr 0.0.0.0 --http.port 8545  --http.api "eth,engine,net,admin,rpc" --ws --ws.addr 0.0.0.0 --ws.port 8546 --ws.api "eth,net,web3,txpool" --txpool.globalslots=250000 --txpool.globalqueue=50000 --maxpeers 50 >> /usr/local/eth/output.log 2>&1 & 

命令解释:使用nohup守护geth进程,通过snap的模式运行节点,设置缓存大小,通过datadir设置链数据储存数据目录(这里的路径设置为最开始创建的两个子文件夹中的execution文件夹),设置http协议运行ip和端口,设置ws协议的运行ip和端口(客户端通过rpc链接到节点监听pending交易,必须设置txpool)设置txpool参数,设置太小会导致pending交易不能全部被监听到,maxpeers为同步数据时最大连接的其他节点数,指定nohup日志输出文件

节点运行后,开始同步区块链的数据,数据会被存储到execution下,可能需要10-20个小时,中途可以结束进程,再次运行的时候会继续上次的工作

通过查看nohup的日志文件,可以看到最新同步状况

tailf /usr/local/eth/output.log

运行共识客户端

nohup ./prysm.sh beacon-chain --execution-endpoint=/usr/ethereum/execution/geth.ipc --checkpoint-sync-url=https://beaconstate.info --genesis-beacon-api-url=https://beaconstate.info  >> /usr/local/eth/prysm.log 2>&1 & 

命令解释:使用nohup守护prysm进程,指定本地执行客户端,指定同步URL(加快信标链同步速度,几乎是瞬间完成)

通过查看nohup的日志文件,可以看到prysm的运行情况

tailf /usr/local/eth/prysm.log

此时,你已经完成了需要做的工作,等待执行客户端同步完数据,节点就可以用了

客户端中,你可以使用ethers.js库的WebSocketProvider,通过ws链接到节点,就可以监听pending池子啦

provider.on('pending', (tx) => {
  console.log(tx)
})

后期

前面提到,本地的区块链数据会不断增加,1TB的磁盘很快就会被用完,这里可以使用gethpruning对旧数据进行修剪,详情产可以查看,文档说的很仔细

Subscribe to 白丁
Receive the latest updates directly to your inbox.
Mint this entry as an NFT to add it to your collection.
Verification
This entry has been permanently stored onchain and signed by its creator.