我从 chainlink 文档运行此代码,但没有获得图像。
function requestBytes() public returns (bytes32 requestId) {
address oracle = "0xc57B33452b4F7BB189bB5AfaE9cc4aBa1f7a4FD8";
bytes32 specId = "7a97ff8493ec406d90621b2531f9251a";
uint256 payment = 100000000000000000;
Chainlink.Request memory req = buildChainlinkRequest(specId, address(this), this.fulfillBytes.selector);
req.add("get","https://ipfs.io/ipfs/QmZgsvrA1o1C8BGCrx6mHTqR1Ui1XqbCrtbMVrRLHtuPVD?filename=big-api-response.json");
req.add("path", "image");
return sendChainlinkRequestTo(oracle, req, payment);
}
event RequestFulfilled(
bytes32 indexed requestId,
bytes indexed data
);
function fulfillBytes(
bytes32 requestId,
bytes memory bytesData
)
public
recordChainlinkFulfillment(requestId)
{
emit RequestFulfilled(requestId, bytesData);
data = bytesData;
url = string(data);
}
解决作业执行问题的最佳方法是检查您的预言机合约,以了解相关区块浏览器中最近的任何交易:
如果在相关时间范围内您的预言机合约中没有任何交易,这可能意味着 Chainlink 节点内的作业运行出错。检查您的 Chainlink 节点日志(或从 Chainlink GUI 中导航到相应的作业运行)以获取更多信息。
如果您的预言机合约在相关时间范围内最近有一笔交易,但交易因
out of gas
异常而失败,您将需要增加相应预言机作业的 Gas 限制,因为写入您请求的数据超出了节点配置的限制(通常为 500000 Gas)。您可以通过将 gasLimit
属性添加到您的 ethTx
作业任务来针对每个作业配置此限制:https://docs.chain.link/chainlink-nodes/oracle-jobs/all-tasks#eth -tx-任务。
如果您的预言机合约在相关时间范围内最近有一笔交易,但由于其他原因导致交易失败
execution error
,您的消费者合约的履行函数中可能存在一些逻辑错误。检查合约的履行函数是否有编码错误,然后重试。
希望有帮助!