Chainlink v0.8调用requestOracleData触发白名单函数错误如何解决
错误原因
- 冗余调用冲突:你在
createRequestTo函数中同时调用了requestOracleData()和sendChainlinkRequestTo()两个Chainlink请求发送方法,v0.8版本的ChainlinkClient库对请求逻辑做了更严格的校验,不再兼容这种冗余写法。 - 方法适配错误:
requestOracleData()是专门为支持大响应的新版Operator合约设计的请求方法,调用时要求目标Operator合约将该方法加入白名单。你当前使用的Rinkeby测试网Oracle还是旧版普通Oracle,没有开放该方法的白名单权限,所以触发了execution reverted: Must use whitelisted functions报错。
修复方案
根据你的实际需求二选一即可:
方案一:需要使用大响应功能(切换v0.8的初衷)
- 删除
sendChainlinkRequestTo(RINKEBY_ORACLE, req, FEE);这行代码,仅保留requestOracleData(req, FEE); - 将当前使用的旧版Rinkeby Oracle地址、JobID替换为支持大响应的Operator合约地址和对应的大响应JobID
- 将回调函数
fulfill的入参bytes32 _data修改为bytes memory _data,适配大响应的返回格式
方案二:不需要大响应功能,仅保留v0.6版本的原有功能
直接删除requestOracleData(req, FEE);这行冗余代码即可,原有sendChainlinkRequestTo逻辑可以正常运行,和v0.6版本行为完全一致。
内容的提问来源于stack exchange,提问作者oliverJaros
相关产品推荐
相关产品推荐

