使用 Chainlink 请求数据,响应不是预期的

Requesting data with Chainlink, response not what expected

我一直在尝试将 Chainlink 集成到我的合约中,设法让随机数正常工作,但 API 调用对我不起作用。这是我得到的:

contract ValorantCards is Ownable, ERC1155, VRFConsumerBase, ChainlinkClient {
using Chainlink for Chainlink.Request;

address private linkToken;

// Chainlink VRF
bytes32 private keyHash;
uint256 private vrfFee;

uint256 public randomResult;

// Chainlink API calls
address private oracle;
bytes32 private jobId;
uint256 private oracleFee;

uint256 public playerLevel;

constructor(
    address _vrfCoordinator,
    address _linkToken,
    bytes32 _keyHash,
    address _oracle,
    bytes32 _jobId,
    uint256 _oracleFee
) ERC1155("") VRFConsumerBase(_vrfCoordinator, _linkToken) {
    setPublicChainlinkToken();

    linkToken = _linkToken;
    keyHash = _keyHash;
    vrfFee = 0.1 * 10**18;

    oracle = _oracle;
    jobId = _jobId;
    oracleFee = _oracleFee;
}

function requestUserLevel() public returns (bytes32 requestId) {
    Chainlink.Request memory request = buildChainlinkRequest(
        jobId,
        address(this),
        this.fulfill.selector
    );

    request.add(
        "get",
        "https://api.henrikdev.xyz/valorant/v1/account/draven/2023"
    );
    request.add("path", "data.account_level");

    return sendChainlinkRequestTo(oracle, request, oracleFee);
}

function fulfill(bytes32 _requestId, uint256 _level)
    public
    recordChainlinkFulfillment(_requestId)
{
    playerLevel = _level;
}

我正在从 hardhat 进行部署,使用以下参数(忽略 VRF 的参数,因为它正在工作):

甲骨文:0x9C0383DE842A3A0f403b0021F6F85756524d5599

职位编号:0x3766623533366265383635623433333662323766633130313437633139336337

Oracle 费用:0.1 * 10**18

函数运行正常,交易没有恢复或其他任何东西,但是当我检查“playerLevel”时,它总是只有 0

希望大家多多指教,先谢过了!

查看 Etherscan activity,看起来您正在使用的节点可能处于非活动状态。试试这个节点和 jobId:

Oracle = 0xc57B33452b4F7BB189bB5AfaE9cc4aBa1f7a4FD8; 
JobId = "d5270d1c311941d0b08bead21fea7747";

这些取自 Chainlink Official Docs

要检查节点是否处于非活动状态,请在区块浏览器中查看预言机地址。 You can see here您尝试使用的原始节点已经有一段时间没有发布交易了。

如果某个节点处于非活动状态,您将需要寻找一个新节点或自己托管一个节点。要查找更多节点和作业,您可以检查 market.link 或使用前面提到的在文档中找到的那个。