跳到主要内容

以太坊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

访问

可用账户

默认地址账户为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
...