«

ETH RPC搭建

时间:2023-3-2 12:21     作者:苏慕白     分类: 笔记


配置选择

先是看了aws、谷歌云、阿里云
这个配置都要1-2wrmb一个月,太贵了
问了很多朋友,打算用hetzner,50欧一个月足以

我选的配置:64gb,2tb ssd
开好后在邮箱收到信息

链接后
按以下步骤安装系统:https://0o0.me/server/hetzner-reinstall-with-raid0.html
系统选ubuntu 22


搭建RPC节点

搭建eth rpc指令:

mkdir /data
cd /data

wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.11.2-73b01f40.tar.gz
tar -zxvf geth-linux-amd64-1.11.2-73b01f40.tar.gz

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

cd /data/
cd geth-linux-amd64-1.11.2-73b01f40

输入完,按两次回车:
nohup ./geth  --datadir "/data/eth/" --maxpeers 75  --cache=2048 --authrpc.jwtsecret /data/prysm/jwt.hex  --http --http.addr "127.0.0.1" --http.port "18181" >&1 &

cd /data/prysm/
输入完,按两次回车:
nohup ./prysm.sh beacon-chain --execution-endpoint=http://localhost:8551 --jwt-secret=./jwt.hex --suggested-fee-recipient=0x91a0982397BEB2B65DFF9a6436695e362135cBa6  --accept-terms-of-use   &

查看eth执行层日志 tail -f /data/geth-linux-amd64-1.11.2-73b01f40/nohup.out
查看eth共识层日志 tail -f /data/prysm/nohup.out

等待同步最新块,over~
大概要1周内


使用老版本执行层同步

eth执行层如果只想太慢可以用老版本
用老版本同步到分叉的那个块,再运行新版本
运行老版本之前要先关掉新版本的进程并且删除eth文件夹

ps -ef | grep geth
kill -9 123456
rm -rf /data/eth
wget https://gethstore.blob.core.windows.net/builds/geth-linux-amd64-1.10.24-972007a5.tar.gz
tar -zxvf geth-linux-amd64-1.10.24-972007a5.tar.gz
cd geth-linux-amd64-1.10.24-972007a5/
nohup ./geth --datadir "/data/eth/" --maxpeers 75 --cache=2048 --http --http.addr "127.0.0.1" --http.port "18181" 1>&1 &

使用Python3执行脚本

等两个层都同步完成之后
就可以用python3来调用自己的rpc节点了
像我搭建的节点
ipc地址:/data/eth/geth.ipc
http地址:http://127.0.0.1:18181/

这里会出现pip3不存在的情况
需要先安装pip3
然后再安装web3

wget https://bootstrap.pypa.io/get-pip.py get-pip.py && sudo python3 get-pip.py
pip3 -V
pip3 install web3

python3 demo 代码:

from web3 import Web3

my_provider = Web3.IPCProvider('/data/eth/geth.ipc')
my_provider = Web3.HTTPProvider("http://127.0.0.1:18181/")

w3 = Web3(my_provider)
# 当前区块高度
blockNumber = w3.eth.blockNumber
print(blockNumber)

更多的操作可以在网上找资料
还可以用nodejs写,用golong的话最快