如果新链使用的客户端已经在已适配列表里(例如又一条 OP Stack 链),写侧通常只需要新建部署,不需要改代码。
写侧:把 pipeline 接入执行客户端
选择适配路径
三份适配指南在 pipeline 仓库:
标准、
遗留、
Reth。
需要改动的位置
以标准 Geth 分叉为例:1
扩展 tracing hooks
在
core/tracing/hooks.go 增加 OnCommit 和 OnBlockDBStart。2
导出状态差异
在
core/state/statedb.go 增加 StateDiff(),把提交集转成 pipeline 的类型。3
分发 hook
在
core/blockchain.go 的区块处理路径上调用新 hook,并在确定 canonical head 时计算 reorg、发布 Kafka 通知。4
注册 live tracer
新建
eth/tracers/live/pipeline.go,把 pipeline tracer 注册进 LiveDirectory。5
添加 RPC
实现
trace_debankBlock 并在 eth/backend.go 注册 trace 命名空间。6
验证
go build ./... 通过后,实际跑一条链,比对 trace_debankBlock 的输出与 S3 上的对象。用 Claude Code 辅助适配
pipeline 仓库内置了适配技能,可以自动检测客户端类型并分阶段引导:Cargo.toml、go.mod、tracing.Hooks、vm.EVMLogger 等特征判断类型,检查是否已有集成,然后路由到对应的专用技能(/adapt-pipeline-geth、/adapt-pipeline-legacy、/adapt-pipeline-reth)。每个阶段的流程是:探测代码结构 → 查阅指南 → 生成修改 → 运行 go build 或 cargo check 验证。
读侧:为 leafage-evm 增加执行器
如果新链的 EVM 行为与已支持的某条链完全一致,只需要用对应的--evm-type 启动,配上正确的 --chain-cfg(链 ID)。行为有差异时才需要新增执行器。
需要改动的位置:
一个典型的配置分支:
disable_* 这几项对状态查询是常规设置:eth_call 不需要校验余额、base fee 和区块 gas 上限。
历史区间缺数据
有些链存在无法获取 block diff 的历史区间(典型是 OP pre-bedrock)。用--historical-rpc 指定外部 RPC,--historical-height 指定分叉高度,低于阈值的查询会被转发出去。
验证
1
比对状态
对同一批地址和存储槽,比较 leafage-evm 与该链官方全节点的
eth_getBalance、eth_getStorageAt、eth_getCode 返回值。2
比对调用结果
用
leafage-bench 对同一份语料库同时打 leafage-evm 和全节点,对比 eth_call 的返回值与延迟。3
观察重组
盯一段时间的
changeType: 2 通知,确认 leafage-evm 的链头跟随正确。reorg 较深的链需要相应调大 --catchup-safe-depth。部署
新链的部署与已有链完全一致,只是chainID 不同:Kafka topic、S3 前缀和 etcd 键都以链 ID 开头,天然隔离。nodex-proxy 不需要重启,通过 etcd 发现新链的节点即可。
具体步骤见部署指南。