使用 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 或使用前面提到的在文档中找到的那个。
我一直在尝试将 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 或使用前面提到的在文档中找到的那个。