如何将自定义tracer文件加入go-ethereum的eth/tracers实现按名称调用
你的猜想是正确的,需要把自定义tracer的代码纳入go-ethereum的内置资源打包逻辑,同时完成名称注册,具体操作步骤如下:
第一步:放置自定义tracer文件
将你编写完成的JS tracer代码保存为custom_tracer.js,放到eth/tracers/internal/tracers/目录下,和原生call_tracer.js等内置tracer文件同级。第二步:注册tracer名称映射
打开eth/tracers/internal/tracers/tracers.go文件,找到内置tracer的名称映射表,该表内已经预设了callTracer、prestateTracer等原生tracer的对应关系,新增一条你的自定义tracer映射规则:
"customTracer": mustRead("custom_tracer.js"),
如果你只是修改了原生call_tracer.js的逻辑不需要新增名称,这一步可以跳过,编译后原有callTracer名称就会调用你修改后的逻辑。
- 第三步:生成资源打包文件(仅旧版本需要)
如果你使用的是v1.10.0之前的旧版本go-ethereum,项目依赖go-bindata工具打包静态资源,你需要在项目根目录执行以下命令重新生成assets.go,将你的JS代码纳入打包范围:
go generate ./eth/tracers/internal/tracers/...
v1.10.0及以上版本已经切换到go原生//go:embed机制,不需要手动执行生成命令,编译时会自动读取对应目录下的JS文件嵌入二进制。
- 第四步:重新编译geth
执行geth项目的编译命令生成新的二进制文件,启动新编译的节点后,就可以直接通过Tracer: "customTracer"的方式调用你的自定义tracer,用法和原生内置tracer完全一致。
内容的提问来源于stack exchange,提问作者user140120
相关产品推荐
相关产品推荐

