以太坊2.0本地测试环境搭建
提示
参考prysm官网提供文章How to Set Up an Ethereum Proof-of-Stake Devnet in Minutes
注:prysm 是一个Golang 实现以太坊共识客户端。
docker启动local testnet
下载项目
git clone https://github.com/Offchainlabs/eth-pos-devnet && cd eth-pos-devnet
修改配置文件(直接运行报错)
注:2024-05-24时直接使用docker compose up -d会报错
,如下:
INFO[0000] Specified a chain config file: config.yml prefix=genesis
FATA[0000] Could not generate beacon chain genesis state error="could not set config params: version 0x05000000 for fork electra in config interop conflicts with existing config named=mainnet: configset cannot add config with conflicting fork version schedule" prefix=genesis
问题及解决方式可参考https://github.com/OffchainLabs/eth-pos-devnet/pull/50
原因是因为consensus/config.yml
存在问题,配置中缺少ELECTRA_FORK_VERSION: 0x20000094
完整可用的配置文件如下:
PRESET_BASE: interop
# Genesis
GENESIS_FORK_VERSION: 0x20000089
# Altair
ALTAIR_FORK_EPOCH: 0
ALTAIR_FORK_VERSION: 0x20000090
# Merge
BELLATRIX_FORK_EPOCH: 0
BELLATRIX_FORK_VERSION: 0x20000091
TERMINAL_TOTAL_DIFFICULTY: 0
# Capella
CAPELLA_FORK_EPOCH: 0
CAPELLA_FORK_VERSION: 0x20000092
MAX_WITHDRAWALS_PER_PAYLOAD: 16
# Deneb
DENEB_FORK_VERSION: 0x20000093
# Electra
ELECTRA_FORK_VERSION: 0x20000094
# Time parameters
SECONDS_PER_SLOT: 12
SLOTS_PER_EPOCH: 6
# Deposit contract
DEPOSIT_CONTRACT_ADDRESS: 0x4242424242424242424242424242424242424242
启动
docker composer up -d
运行成功如下:
[+] Building 0.0s (0/0) docker:desktop-linux
[+] Running 6/6
✔ Container eth-pos-devnet-geth-remove-db-1 Exited 0.0s
✔ Container eth-pos-devnet-create-beacon-chain-genesis-1 Exited 0.0s
✔ Container eth-pos-devnet-beacon-chain-1 Running 0.0s
✔ Container eth-pos-devnet-geth-genesis-1 Exited 0.0s
✔ Container eth-pos-devnet-validator-1 Running 0.0s
✔ Container eth-pos-devnet-geth-1 Running
查看容器:
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f3430b548451 ethereum/client-go:latest "geth --http --http.…" About an hour ago Up About an hour 0.0.0.0:8545-8546->8545-8546/tcp, :::8545-8546->8545-8546/tcp, 0.0.0.0:8551->8551/tcp, :::8551->8551/tcp, 30303/tcp, 30303/udp eth-pos-devnet-geth-1
065aa9f0b9ea gcr.io/prysmaticlabs/prysm/validator:v4.1.1 "/app/cmd/validator/…" About an hour ago Up About an hour eth-pos-devnet-validator-1
d54feb1cfb0c ethereum/client-go:latest "geth --datadir=/exe…" About an hour ago Exited (0) About an hour ago eth-pos-devnet-geth-genesis-1
f1d1b333e8ed gcr.io/prysmaticlabs/prysm/beacon-chain:v4.1.1 "/app/cmd/beacon-cha…" About an hour ago Up About an hour 0.0.0.0:3500->3500/tcp, :::3500->3500/tcp, 0.0.0.0:4000->4000/tcp, :::4000->4000/tcp, 0.0.0.0:6060->6060/tcp, :::6060->6060/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp eth-pos-devnet-beacon-chain-1
d261e36d2ced gcr.io/prysmaticlabs/prysm/cmd/prysmctl:HEAD-10dedd "/prysmctl testnet g…" About an hour ago Exited (0) About an hour ago eth-pos-devnet-create-beacon-chain-genesis-1
32fb83e1efd3 alpine:3.19.0 "rm -rf /execution/g…" About an hour ago Exited (0) About an hour ago eth-pos-devnet-geth-remove-db-1
查看日志
geth日志
docker logs eth-pos-devnet-geth-1
信标链日志
docker logs -f eth-pos-devnet-beacon-chain-1
validator client日志
docker logs -f eth-pos-devnet-validator-1
访问
- go-ethereum JSON-RPC API: http://geth:8545
- Prysm 客户端的 REST API:http://beacon-chain:3500
可用账户
默认地址账户为0x123463a4b065722e99115d6c222f267d9cabb524
, 对应私钥保存在execution/sk.json
中,私钥为:
2e0834786285daccd064ca17f1654f67b4aef298acbb82cef9ec422fb4975622
可用于发送交易、部署合约等。
chinId(networkId)修改
修改genesis.json
vim execution/genesis.json
{
"config": {
"chainId": 新的chainId(数字表示),
},
...
}
修改docker-compose.yml
service:
...
beacon-chain:
command:
...
- --chain-id=${CHAIN_ID:-新的chainId与genesis.json中对应}
...
其他注意点
启动时可能会遇到8080
端口已经使用了,需要修改docker-compose.yml
,把暴露的8080端口进行修改,如beacon-chain
默认暴露的8080
端口
service:
...
beacon-chain:
...
ports:
- 4000:4000
- 3500:3500
- 8080:8080
- 6060:6060
- 9090:9090
...