Chainlink大响应功能调用外部API取字符串无返回问题咨询
故障排查点
1. specId/JobID匹配问题(你怀疑的方向优先级最高)
- 你代码中使用的specId
7a97ff8493ec406d90621b2531f9251a需要确认和你调用的Oracle地址0xc57B33452b4F7BB189bB5AfaE9cc4aBa1f7a4FD8部署的Job完全适配:- 该Oracle的对应Job必须是支持任意长度bytes返回的大响应专用Job,普通默认Job只能处理32字节返回值,超过长度的请求会被节点直接丢弃,不会触发回调
- 检查Job的任务链配置是否使用
ethbytes编码器,而非默认的ethuint256、ethtext等编码器,返回给合约的payload格式必须和回调函数入参完全匹配,格式不匹配时节点不会发起回调
2. 回调函数配置校验
- 确认Job配置的回调参数和你代码中
fulfillBytes函数的入参顺序、类型完全一致:你的函数入参为bytes32 requestId, bytes memory bytesData,如果Job配置的返回参数顺序或类型不匹配,节点生成的回调交易会直接失败,不会上链
3. 外部API配置有效性
- 你代码中占位的
--- ExampleApi---、---ExamplePath---替换为实际值后,需要确认:- Chainlink节点服务器可以正常访问该API,无IP封禁、跨域、鉴权限制,API返回状态码为200
- 按指定path取到的值确实为字符串类型,无空值、类型不匹配的问题,否则节点处理请求时会直接终止,不会发起回调
4. 支付金额匹配
- 你设置的请求支付金额为
100000000000000000(0.1 LINK),需要确认该Oracle对应Job要求的最低支付金额不超过0.1 LINK,如果Job要求的支付额更高,节点会直接拒绝处理请求
5. 测试网节点状态校验
- 确认你调用的Oracle节点在Kovan测试网处于正常运行状态,没有暂停服务、Gas费设置过低导致回调交易无法上链的问题,可以在区块浏览器查询该Oracle地址的历史交易,排查是否存在失败的回调交易记录
另外代码注释中存在笔误signle应为single,不影响代码运行。
内容的提问来源于stack exchange,提问作者Nic H.
相关产品推荐
相关产品推荐

