Ethereum Chainlink核心适配器路径问题:httpGet uint256从treasury.gov API返回0

Ethereum Chainlink核心适配器路径问题:httpGet uint256从treasury.gov API返回0,ethereum,solidity,chainlink,Ethereum,Solidity,Chainlink,我正在尝试使用Chainlink连接到一个API,以从下面的请求列表中的URL获取uint。问题是,每次“体积”值返回0时。我觉得这个问题是两件事之一: oracle不喜欢访问阵列。我试过“数据[0]”和“数据.0”。“文档”页面上的这两项工作都有效 API返回的是字符串而不是数字(因为数字用引号括起来)。我也尝试了bytes32作业,只返回0x0。其他StackOverflow帖子也显示了以数字形式读取字符串的预言 以下代码片段是对Chainlink文档中显示的“在remix上部署”代码所做的

我正在尝试使用Chainlink连接到一个API,以从下面的请求列表中的URL获取uint。问题是,每次“体积”值返回0时。我觉得这个问题是两件事之一:

  • oracle不喜欢访问阵列。我试过“数据[0]”和“数据.0”。“文档”页面上的这两项工作都有效
  • API返回的是字符串而不是数字(因为数字用引号括起来)。我也尝试了bytes32作业,只返回0x0。其他StackOverflow帖子也显示了以数字形式读取字符串的预言
  • 以下代码片段是对Chainlink文档中显示的“在remix上部署”代码所做的唯一更改:


    这些合同通过混音/元掩码部署在Kovan上,有大量链接为合同提供资金。我可能做错了什么?

    有几个问题:

  • 响应太大,因此节点仅在
    HttpGet
    任务处停止。我已经在我的节点上测试了它,下面是我得到的确切错误:
    HTTP响应太大,必须小于32768字节。如果你能影响这个,那就太好了。否则,您将需要拥有自己的节点,该节点将返回与上述限制匹配的较短响应

  • 结果应该只有整数,Solidity不理解小数点,而是使用WEI。这就是为什么你需要将结果乘以至少100,10^18是一个标准,所以我同意。下面的部分应该适合您:

  • 函数请求数据(字符串内存id,字符串内存字段)公共{
    Chainlink.Request memory Request=buildChainlinkRequest(作业ID、地址(this)、this.fulldata.selector);
    请求。添加(“获取”https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v2/accounting/od/avg_interest_rates?sort=-记录日期);
    字符串[]内存路径=新字符串[](3);
    路径[0]=“数据”;
    路径[1]=\u id;
    路径[2]=\u字段;
    addStringArray(“路径”,路径);
    int timesAmount=10**18;
    请求。附加(“次数”,timesAmount);
    sendChainlinkRequestTo(oracle、请求、费用);
    }
    
    我还添加了
    \u id
    \u field
    作为函数参数来查询任何对象的任何字段。请注意,只有在您能够找出如何获得更短的响应时,这才有效

    request.add("get", "https://api.fiscaldata.treasury.gov/services/api/fiscal_service/v2/accounting/od/avg_interest_rates?sort=-record_date");
    
    request.add("path", "data.0.avg_interest_rate_amt");