You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Chainlink多参数请求调用fulfillMultipleParameters报arrayify无效值错误排查

问题原因
  • 多返回值请求参数配置缺失
    你当前的请求逻辑仅添加了times参数,没有告知Chainlink节点需要返回3个对应汇率值的取值路径,也没有配置多值返回的声明,导致节点仅返回空值或单值,回调函数需要3个uint256参数,拿到空值后做字节编码时触发了你碰到的错误。
    Chainlink多值请求需要调用addMultiPath方法指定每个返回值对应的数据源字段路径,比如你要取usd、eur、jpy三个汇率,需要在请求中添加对应配置:
req.addMultiPath("usd,eur,jpy");

如果节点返回的是嵌套结构,也可以分别指定每个值的路径:

req.add("path", "rates,usd");
req.add("path", "rates,eur");
req.add("path", "rates,jpy");
  • Job ID配置不匹配
    你在函数内部硬编码覆盖了传入的specId,首先要确认这个硬编码的specId对应的Chainlink节点Job是支持多值返回的,Job的任务流水线必须配置为输出3个uint256类型的结果,要是Job本身仅支持单值返回,也会返回无效空值触发错误。
  • 参数类型不匹配
    要确认节点返回的三个值确实是uint256类型,如果节点返回的是int256或者其他类型,和回调函数的参数类型不匹配,解码失败也会抛出类似错误。
修正后的请求代码示例
function requestMultipleParameters(
bytes32 specId, 
uint256 payment) public{
    // 注意:硬编码specId仅用于测试,生产环境建议从参数传入
    specId = 0x3934636531316335393937643432336338646331383761653431306536653163;
    payment = 100000000000000;
    Chainlink.Request memory req = buildChainlinkRequest(specId, address(this), this.fulfillMultipleParameters.selector);
    req.addUint("times", 10000);
    // 新增多返回值路径配置,对应你需要的三个汇率字段
    req.addMultiPath("usd,eur,jpy");
    requestOracleData(req, payment);
}

内容的提问来源于stack exchange,提问作者Daniel Vieira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 00:12:03