部署以太坊2.0
搭建准备
配置 JWT 身份验证
信标节点和执行节点之间的 HTTP 连接需要使用JWT 令牌进行身份验证。
https://seanwasere.com/generate-random-hex/
生成出来的值如:d874f729a21a8b261aec0fe8b6f0f19b060c409fc05a0352d77f2ccbf6e867b8
部署执行节点geth
运行geth
~# geth --goerli --http.api "eth,net,engine,admin" --http --http.addr "0.0.0.0" --authrpc.addr 0.0.0.0"" --cache 2048 --maxpeers 30 --allow-insecure-unlock --ignore-legacy-receipts --authrpc.jwtsecret /data/goerli/jwt.hex --datadir /data/goerli
参数解释:
- --datadir:数据库和密钥库的数据目录(默认:"~/.ethereum")
- --http.api:指定需要调用的HTTP-RPC API接口,默认只有eth,net,web3
- --http:启动HTTP-RPC服务(基于HTTP的)
- --http.addr:HTTP-RPC服务器监听地址(default: "localhost")
- --cache:分配给内部缓存的内存的兆字节 (默认值为: 1024)
- --maxpeers:最大的网络节点数量(如果设置为0,网络将被禁用)(默认值:25)
- --allow-insecure-unlock:允许使用不安全的账户解锁
- --authrpc.port:设置认证监听的api端口,默认为8551
- -authrpc.addr:允许连接认证监听api端口的IP地址
- --authrpc.vhosts:允许连接认证监听api端口的域名
- --authrpc.jwtsecret:设置身份验证的RPC接口的JWT私钥的路径
部署共识节点Prysm
下载Prysm镜像
docker pull gcr.io/prysmaticlabs/prysm/beacon-chain:v3.1.1
运行prysm
docker run -itd --restart=unless-stopped \
-v /etc/localtime:/etc/localtime \
-v /etc/timezone:/etc/timezone \
--name prysm \
-v $(pwd)/data:/data -v $(pwd)/jwt.hex:/opt/jwt.hex \
--network=host \
gcr.io/prysmaticlabs/prysm/beacon-chain:v3.1.1 \
--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://10.8.2.241:8551 \
--accept-terms-of-use=true \
--goerli
参数说明:
- --datadir:数据库和密钥库的数据目录(默认:"~/.ethereum")
- --authrpc.jwtsecret:设置身份验证的RPC接口的JWT私钥的路径
- --rpc-host:允许连接RPC服务的主机(默认值:“127.0.0.1”)
- --grpc-gateway-host:允许连接网关的主机(默认值:“127.0.0.1”)
- --monitoring-host:用于监听和响应prometheus监控的主机(默认值:“127.0.0.1”)
- --execution-endpoint:连接执行客户端的http端点。格式为“http://localhost:8551”
- --accept-terms-of-use:接受条款和条件(用于非交互环境)(默认值:false)
检查节点是否同步完成
检查geth执行节点
使用以下命令检查节点的同步状态:
curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_syncing","params":[],"id":1}' http://localhost:8545
如果节点已完成同步,将看到响应:
{"jsonrpc":"2.0","id":1,"result":false}
检查prysm共识节点
使用以下命令检查节点的同步状态:
# curl http://localhost:3500/eth/v1alpha1/node/syncing
如果节点已完成同步,将看到响应:
{"syncing":false}
geth常用命令
- 查询最新区块高度
# curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":1}' http://localhost:8545
{"jsonrpc":"2.0","id":1,"result":"0xedd589"}
- 根据区块高度获取区块信息
# curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_getBlockByNumber","params":["0xedd592", true],"id":1}' http://localhost:8545
- 根据交易哈希查询交易信息
curl -H Content-Type:application/json -X POST --data '{"jsonrpc":"2.0","method":"eth_getTransactionByHash","params":["0xc8fcaf677d0f28c21e1c0bfab5470fa026bc6379eb9421805837a76e7517b3f5"],"id":1}' http://localhost:8545
- 返回给定地址的帐户的余额
# curl -H "Content-Type: application/json" -X POST --data '{"jsonrpc":"2.0","method":"eth_getBalance","params":["0xb8001c3ec9aa1985f6c747e25c28324e4a361ec1", "latest"],"id":1}' http://localhost:8545
{"jsonrpc":"2.0","id":1,"result":"0x6c74cac7c08da0ab59"}
端口说明
端口/协议 | 防火墙规则 | 原因/注意事项 |
---|---|---|
8545/TCP | 阻止所有流量。 | 这是执行节点的查询 API 的 JSON-RPC 端口。您(和应用程序)可以使用此端口检查执行节点状态,查询执行层链数据,甚至提交交易。这个端口一般不应该暴露给外界。 |
3500/TCP | 阻止所有流量。 | 这是信标节点查询 API 的 JSON-RPC 端口。您(和应用程序)可以使用此端口检查信标节点状态并查询共识层链数据。这个端口一般不应该暴露给外界。 |
8551/TCP | 阻止所有流量。 | 您的信标节点使用此端口连接到执行节点的引擎 API 。只有当您的本地信标节点连接到远程执行节点时,才应允许通过此端口的入站和出站流量。 |
4000/TCP | 阻止所有流量。 | 您的验证器使用此端口通过gRPC连接到您的信标节点。只有当您的本地验证器连接到远程信标节点时,才应允许通过此端口的入站和出站流量。 |
*/UDP+TCP | 允许出站流量。 | 为了发现对等点,Prysm 的信标节点通过随机端口拨出。允许来自任何端口的出站 TCP/UDP 流量将有助于 Prysm 找到对等点。 |
13000/TCP | 允许入站和出站流量。 | 在我们发现对等点后,我们通过此端口拨叫它们为libp2p建立持续连接,所有 gossip/p2p 请求和响应都将通过该连接流动。 |
12000/UDP | 允许入站和出站流量。 | 你的信标节点公开这个 UDP 端口,以便其他以太坊节点可以发现你的节点,请求链数据,并提供链数据。 |
30303/TCP+UDP | 允许入站和出站流量。 | 30303/TCP是您的执行节点的侦听器端口,30303/UDP而是它的发现端口。此规则允许您的执行节点连接到其他对等节点。请注意,某些客户端30301默认使用。 |
参考文档
- 官方部署文档:https://docs.prylabs.network/docs/execution-node/authentication
- 官方docker部署文档:https://docs.prylabs.network/docs/install/install-with-docker
- 官方源代码部署文档:https://docs.prylabs.network/docs/install/install-with-bazel
- geth执行节点github:https://github.com/ethereum/go-ethereum
- prysm共识节点github:https://github.com/prysmaticlabs/prysm