本文将手把手演示如何用 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 已安装且引擎已启动
- 安装最新版 Kurtosis CLI
- Node.js ≥16、yarn、npx(用于运行 Hardhat 项目)
建议检查版本:
docker --version
kurtosis version
node --version3 分钟拉起第一条本地测试网
打开终端执行:
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项目模板含:
contracts/ChipToken.solscripts/deploy.tstest/simple.js
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 ETHFAQ:私有密钥放在配置文件里会泄露吗?
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.yamlKurtosis 会先销毁旧网络再拉起 3 节点混合拓扑,输出可知 RPC 端口已更新,重启 Hardhat 只需把端口改到新值即可。
FAQ:想测试更多分叉怎么办?
Q5: 能模拟上海、坎昆升级吗?
A: 在 network_params 里配置 capella_fork_epoch、deneb_fork_epoch 即可精确设定分叉块高。
Q6: 日志太占磁盘如何清理?
A: kurtosis clean -a 会同时清除容器及数据卷,按需执行。
结语
现在你已掌握:
- 如何用 Kurtosis 在本地 3 分钟拉起完全可配置的以太坊测试网
- 把 Hardhat 无缝切换到本地环境进行开发、部署、测试
- 通过 YAML/JSON 灵活调试节点类型、数量与分叉参数
下一步可尝试把 Mocha、Foundry 等框架接入同一张网络,或继续扩展更多节点、模拟攻击场景来做压力测试。祝开发顺利!