// SPDX-License-Identifier: MIT
pragma solidity ^0.8.7;
import "@chainlink/contracts/src/v0.8/ChainlinkClient.sol";
import "@chainlink/contracts/src/v0.8/ConfirmedOwner.sol";
contract FetchFromArray is ChainlinkClient, ConfirmedOwner {
using Chainlink for Chainlink.Request;
string public id="before";
string public test="4";
bytes32 private jobId;
uint256 private fee;
event RequestFirstId(bytes32 indexed requestId, string id);
constructor() ConfirmedOwner(msg.sender) {
setChainlinkToken(0x326C977E6efc84E512bB9C30f76E30c160eD06FB);
setChainlinkOracle(0x40193c8518BB267228Fc409a613bDbD8eC5a97b3);
jobId = "7d80a6386ef543a3abb52817f6707e3b";
fee = (1 * LINK_DIVISIBILITY) / 10; // 0,1 * 10**18 (Varies by network and job)
}
function requestFirstId() public returns (bytes32 requestId) {
Chainlink.Request memory req = buildChainlinkRequest(
jobId,
address(this),
this.fulfill.selector
);
req.add(
"get",
"https://site.api.espn.com/apis/site/v2/sports/basketball/nba/summary?event=401541181"
);
req.add("path", "header,gameNote");
return sendChainlinkRequest(req, fee);
}
function fulfill(
bytes32 _requestId,
string memory _id
) public recordChainlinkFulfillment(_requestId) {
emit RequestFirstId(_requestId, _id);
id = _id;
test="2";
}
function withdrawLink() public onlyOwner {
LinkTokenInterface link = LinkTokenInterface(chainlinkTokenAddress());
require(
link.transfer(msg.sender, link.balanceOf(address(this))),
"Unable to transfer"
);
}
}
我在 sepolia testnet(eth) 和 mumbai(polygon) 上进行了测试。
我还进行了其他 API 请求并检查了 req.add('path',~) well.
Jobid也通过文件证实了
然而,合约 fulfill() 并没有被调用。
其他几个成功的API请求已经确认成功。 唯一的区别是对失败请求的大量响应似乎失败了。
但是,关于响应大小,无法通过文档确认。因此,确切的原因是未知的。
ChainlinkRequested事件确认,但id和test变量没有变化
我在混音上测试过