本地部署Uniswap V3 subgraph至graph-node报Value is not a BigInt错误
Uniswap V3 Subgraph本地部署问题解答
1. 官方适配的graph-node版本
Uniswap V3官方公开部署的subgraph,稳定适配的graph-node版本区间为0.24.x~0.25.x,长期生产环境使用的版本为v0.25.2,匹配@graphprotocol/graph-ts依赖版本为0.27.0。你当前使用的0.26.0版本存在schema类型解析逻辑的不兼容变更,是触发报错的诱因之一。
2. "Value is not a BigInt"报错原因与修复方案
核心报错信息:Mapping aborted at ~lib/@graphprotocol/graph-ts/index.ts, line 811, column 4, with message: "Value is not a BigInt",wasm调用栈依次指向
Token实体decimals字段读取、BigDecimal实例构造、流动性变更处理函数。
报错原因
报错核心是索引到区块高度7011552的流动性事件时,映射逻辑读取Token实体的decimals字段构造BigDecimal实例,该字段未被正确赋值为BigInt类型,读取到空值/非法类型值触发执行中断,具体诱因有两点:
- 移除graft配置后起始区块设置错误:Goerli测试网Uniswap V3相关合约的部署、初始化事件早于你设置的起始块
7011478,该高度之前已经产生了大量Token创建、PositionManager相关事件,跳过这部分区块索引会导致对应Token实体未被提前创建、decimals字段未完成初始化,后续处理流动性事件时读取空值触发类型错误。 - 版本不兼容放大问题:graph-node 0.26.0版本收紧了实体字段空值校验逻辑,旧版本会对未赋值的数字类型字段默认填充0,新版本会直接抛出类型不匹配错误。
修复步骤
- 版本对齐:修改docker-compose配置,将graph-node镜像替换为
graphprotocol/graph-node:v0.25.2,同时确认subgraph项目package.json中@graphprotocol/graph-ts版本锁定为0.27.0,执行yarn install更新依赖。 - 修正起始块:将subgraph.yaml中Goerli网络的起始区块高度设置为小于等于
6805567(Uniswap V3在Goerli测试网的部署区块高度),确保所有合约初始化、Token创建事件能被完整索引。 - 清理旧数据后重新部署:
# 清理docker部署模式下的旧索引数据卷 docker-compose down -v # 重新执行部署流程 yarn yarn codegen yarn create-local yarn deploy-local - 可选容错优化:如果不想从过低区块开始索引,可以在映射逻辑中为
Token.decimals字段增加非空判断,读取到空值时先调用对应ERC20合约的decimals()只读接口拉取链上数据完成赋值,再进行后续数值计算,避免空值触发执行中断。
内容的提问来源于stack exchange,提问作者THE_PRINCE
相关产品推荐
相关产品推荐

