如何通过单次Chainlink请求从同一JSON响应中读取多个uint256值
完全可以通过单次请求完成同一份JSON响应内两个uint256值的解析,无需发起两次独立请求。
依赖要求
不需要使用专门定制的Chainlink节点,标准Chainlink节点均支持该能力,但需要使用适配了多返回值解析逻辑的JobID,Job侧需要提前配置好从同一份JSON响应中提取两个目标字段的任务流。
合约端实现调整
你需要将原本两个独立的回调函数合并为一个接收多参数的回调,同时调整请求发起逻辑,指定新的回调函数签名即可,示例代码如下:
// 发起单次请求同时请求两个数值 function requestWeightAndHeight() public returns (bytes32 requestId) { // 此处JOB_ID替换为支持多值返回的对应JobID Chainlink.Request memory req = buildChainlinkRequest(JOB_ID, address(this), this.fulfillWeightAndHeight.selector); req.add("get", "你的目标API请求地址"); // 额外的请求参数可按原有逻辑添加 return sendChainlinkRequest(req, fee); } // 合并后的回调函数,按顺序接收两个uint256参数 function fulfillWeightAndHeight(bytes32 _requestId, uint256 _weight, uint256 _height) public recordChainlinkFulfillment(_requestId) { weight = _weight; height = _height; // 此处可直接编写你需要的计算逻辑 }
Job侧配置要求(节点运营方完成)
对应Job的任务流水线需要按以下逻辑配置:
- 拉取指定API的JSON响应数据
- 分别通过两个JSON解析任务提取weight、height对应路径的数值,转换为uint256格式
- 将两个数值按回调函数的参数顺序做ABI编码后,发送到你的合约回调地址
内容的提问来源于stack exchange,提问作者Daniel Vieira
相关产品推荐
相关产品推荐

