参考资料:
以太坊2.0客户端Prysm搭建并运行节点记录_我也不知道该起什么名字的博客-CSDN博客
部署prysm mainnet_51CTO博客_yapi部署
https://github.com/prysmaticlabs/prysm/issues?page=3&q=is%3Aissue+is%3Aclosed
https://github.com/ethereum/go-ethereum
Ethereum节点搭建可基于源码或基于docker。这里介绍基于docker的方式搭建。该方式需要启动两个客户端prysm 和 geth客户端,且两者需要通信
docker pull ethereum/client-go
docker pull prysmaticlabs/prysm-beacon-chain
生成 jwt.hex用于两个客户端之间通信时的身份验证。jwt.hex文件可以放在任何位置,因为我这里准备把下载的链数据放在/data/eth下,所以我这里就在/data/eth下生成jwt.hex,生成jwt.hex执行以下命令即可。
openssl rand -hex 32 | tr -d "\n" > "jwt.hex"
创建docker网络,我这里叫mynet 用于两个客户端之间可以互相通信
docker network create -d bridge mynet
启动geth。 指定参数 --network=mynet --authrpc.jwtsecret /root/.ethereum/jwt.hex
docker run -itd -p 8545:8545 -p 30303:30303 -p 8551:8551 --name eth -v /data/eth:/root/.ethereum --network=mynet ethereum/client-go --http --http.addr "0.0.0.0" --authrpc.jwtsecret /root/.ethereum/jwt.hex --syncmode "full" --authrpc.addr eth --authrpc.port 8551 --authrpc.vhosts "*" --mainnet
启动prysm。指定参数 --network=mynet --execution-endpoint=http://eth:8551 ,eth为容器名称
docker run -itd --restart=unless-stopped -v /etc/localtime:/etc/localtime -v /etc/timezone:/etc/timezone --name beacon-node -v /data/eth/prysm:/data -v /data/eth/jwt.hex:/opt/jwt.hex --network=mynet prysmaticlabs/prysm-beacon-chain --datadir=/data --jwt-secret=/opt/jwt.hex --rpc-host=0.0.0.0 --grpc-gateway-host=0.0.0.0 --monitoring-host=0.0.0.0 --execution-endpoint=http://eth:8551 --accept-terms-of-use=true
下载的区块链数据默认存放在 容器的~/.ethereum/目录下 可添加参数 --datadir 指定目录,这里使用 -v参数挂载文件,将数据存放在/data/eth下。容器启动后需等待几十分钟到几个小时可能才会开始同步数据,等着吧。 可通过进入geth客户端进入查看同步情况。
这里也介绍使用docker的方式搭建节点,在装有docker的环境中,打开终端执行此命令即可。
docker run -itd --name=arb -v /data/arbitrum:/home/user/.arbitrum -p 0.0.0.0:8547:8547 -p 0.0.0.0:8548:8548 offchainlabs/nitro-node:v2.0.14-2baa834 --l1.url=https://ethereum.publicnode.com --l2.chain-id=42161 --http.api=net,web3,eth,debug,admin --http.corsdomain=* --http.addr=0.0.0.0 --http.vhosts=* --node.feed.input.url=wss://arb1.arbitrum.io/feed --init.url="https://snapshot.arbitrum.io/mainnet/nitro.tar" --node.rpc.classic-redirect="https://arb-mainnet.g.alchemy.com/v2/rwQ5PfDeqB11Ptak2pb_SEI0zR9TjZXH"
参数解释:
/data/arbitrum为数据存放磁盘上的路径
offchainlabs/nitro-node:v2.0.14-2baa834为镜像名
--l1.url=https://ethereum.publicnode.com 主链数据同步的链接地址
--init.url="https://snapshot.arbitrum.io/mainnet/nitro.tar" 初始化链数据链接
搭建optimism节点有两种方式,基于docker和基于源码。基于源码的方式比较复杂且过程中遇到的问题较多。这里介绍使用docker的方式搭建。先启动节点,从头同步区块的方式较慢且不稳定,所以我们使用先下载快照数据再进行同步的方式。
https://community.optimism.io/docs/developers/build/run-a-node/#non-docker-configuration
https://github.com/smartcontracts/simple-optimism-node
拉取镜像
optimism节点依赖的镜像中op-node镜像和op-geth镜像在谷歌云上。国内无法直接拉取,需通过谷歌云上传至阿里云,再通过阿里云拉取到本地。
镜像地址
https://console.cloud.google.com/artifacts/docker/oplabs-tools-artifacts/us/images/op-node
https://console.cloud.google.com/artifacts/docker/oplabs-tools-artifacts/us/images/op-geth
参考教程
使用GoogleCloudShell解决99%的镜像拉取问题 - 知乎
2:下载快照
下载
aria2c -c -o /data/op/mainnet-bedrock.tar.zst https://datadirs.optimism.io/mainnet-bedrock.tar.zst > aria2c.log 2>&1 &
解压
zstd -d /bigdata/op/mainnet-bedrock.tar.zst -o /bigdata/op/mainnet-bedrock.tar.zst/torrent_downloads/bedrock.tar
参考链接
https://github.com/smartcontracts/simple-optimism-node/issues/84
3:启动容器
进入simple-optimism-node文件夹
启动:
docker compose --profile current up -d
停止:
docker compose --profile current down
日志查看:
docker compose logs
启动成功后若没有报错,需等待几分钟到几十分钟才会开始同步。