如何模拟Chainlink/oracle API在安全帽上的响应



在hardhat入门套件上,单元测试会检查您是否可以发出api请求。但它实际上并没有满足要求。在任务中,它请求卷数据,但没有显示如何完成请求。

通过查看mockOracle的代码,我发现了这个函数。

const r = await mockOracle.fulfillOracleRequest(requestId, data)

我不知道如何使数据成为我想要的样子。例如,当我传递以下数据时,它会返回一个巨大的随机数24516769870864860957297836120308737325622166553046088662895407649136392011776。

const data = ethers.utils.formatBytes32String("64")

如何用传递给fulfillOracleRequest的数据模拟api响应?此外,因为我在chainlink入门套件中找不到任何这样的例子,所以在本地安全帽网络上这样做是否正确?

MockOracle合约中的fulfillOracleRequest函数为响应获取一个字节32参数,因此需要对其进行正确编码。这就是作为APIConsumer单元测试的一部分模拟响应的方法:

let mockResponse = '777'
const responseBytes = ethers.utils.formatBytes32String(mockResponse)
const r = await mockOracle.fulfillOracleRequest(requestId, responseBytes)

为了回答你的第二个问题,是的,当使用未集成到Chainlink预言机的本地链时,这是正确的做法。实际上,在单元测试中实现这些功能是一个悬而未决的问题。如果你想的话,可以随意接受!

最新更新