在本地快速启动可配置以太坊测试网:Kurtosis 实战指南

·

本文将手把手演示如何用 Kurtosis 一键拉起本地以太坊测试网,连接 Hardhat 环境与智能合约,并学习通过 YAML/JSON 灵活调整节点数量及 EL/CL 客户端组合,让你在真正上测试网或主网之前就能做足充分验证。

Kurtosis 是什么?为什么要用它做测试网

Kurtosis 是一个专为动态、多容器场景设计的可组合构建系统。它能将复杂的启动逻辑封装成“包”,开发者通过参数即可在本地复刻任意规模的网络拓扑。
在以太坊场景下,Kurtosis 的 ethereum-package 支持 Geth、Teku、Lighthouse、Lodestar 等主流客户端组合,远比 Hardhat Network、Ganache、Anvil 一类的单体方案灵活,这也是为什么以太坊基金会曾用 Kurtosis 做 Merge 测试的原因之一。

核心关键词:Kurtosis、本地测试网、以太坊、dApp、Hardhat、节点配置、EL/CL 客户端。

前置准备

请先完成最低环境要求:

建议检查版本:

docker --version
kurtosis version
node --version

3 分钟拉起第一条本地测试网

打开终端执行:

kurtosis --enclave local-eth-testnet run github.com/ethpandaops/ethereum-package

命令中 --enclave 给网络起了一个名字,方便后续再次调用。
过程中 Kurtosis 会打印执行步骤,最终输出类似:

|| Created enclave: local-eth-testnet ||
...
el-client-0 rpc: 8545/tcp -> 127.0.0.1:54251
cl-client-0-beacon http: 4000/tcp -> 127.0.0.1:54263

恭喜,你已经在 Docker 内跑起了一个由 Geth + Lighthouse 组成的单节点测试网。

FAQ:本地测试网与公共测试网的差异?

Q1: 能直接用 faucet 领测试以太吗?
A: 不能。本地测试网的账户已在创世时预资助,Kurtosis 自带 10 个各有 10,000 ETH 的私钥,无需 faucet。

Q2: 该网络的链 ID 是多少?怎么改?
A: 默认 3151908,可在自定义的配置文件中修改 network_params.network_id

用 Hardhat 连接本地测试网

1. 准备项目

git clone https://github.com/kurtosis-tech/awesome-kurtosis.git
cd awesome-kurtosis/smart-contract-example
yarn

项目模板含:

2. 修改 hardhat.config.ts

localnet: {
  url: `http://127.0.0.1:${YOUR_PORT}`,
  accounts: [
    // 10 条私钥已预置,可直接使用
  ]
}

${YOUR_PORT} 替换成 Kurtosis 输出里 el-client-0 rpc 的端口,例如 54251。

保存后验证连接:

npx hardhat balances --network localnet
# 预期会看到 10 条地址,每条 10,000 ETH

👉 想亲手部署智能合约前先做这一步!

FAQ:私有密钥放在配置文件里会泄露吗?

Q3: 私钥与主网无关,仅用于本地测试网络,因此没关系。
Q4: 如果我想换一组创世预资助地址怎么做?
A: 通过调整 --args-file 指向的 YAML/JSON 文件,写入新的助记词即可。

编译、部署、测试三步走

# 编译
npx hardhat compile

# 部署 ChipToken 到本地测试网
npx hardhat run scripts/deploy.ts --network localnet
# 输出:ChipToken deployed to: 0xAb2A01BC351770D09611Ac80f1DE076D56E0487d

# 运行测试
npx hardhat test --network localnet
# 输出:1 passing (654ms)

此时你已完成 dApp 的基础闭环:本地编译、部署、单元测试,再通过自定义网络参数复压不同场景。

进阶:自定义网络拓扑

想测试多节点、不同 EL/CL 组合?只需准备一份 JSON/YAML 配置文件并启动:

eth-network-params.yaml 示例(三段节点):

participants:
  - el_client_type: geth
    cl_client_type: lighthouse
  - el_client_type: geth
    cl_client_type: lodestar
  - el_client_type: geth
    cl_client_type: teku
network_params:
  network_id: "3151908"
  seconds_per_slot: 12
  genesis_delay: 120

启动命令:

kurtosis clean -a
kurtosis run --enclave local-eth-testnet github.com/ethpandaops/ethereum-package --args-file ~/eth-network-params.yaml

Kurtosis 会先销毁旧网络再拉起 3 节点混合拓扑,输出可知 RPC 端口已更新,重启 Hardhat 只需把端口改到新值即可。

👉 用异构节点网络提前发现兼容性问题,点击体验!

FAQ:想测试更多分叉怎么办?

Q5: 能模拟上海、坎昆升级吗?
A: 在 network_params 里配置 capella_fork_epochdeneb_fork_epoch 即可精确设定分叉块高。

Q6: 日志太占磁盘如何清理?
A: kurtosis clean -a 会同时清除容器及数据卷,按需执行。

结语

现在你已掌握:

下一步可尝试把 Mocha、Foundry 等框架接入同一张网络,或继续扩展更多节点、模拟攻击场景来做压力测试。祝开发顺利!