一般 VRF 不成功,有两个原因:
第一是 VRF subscription 的 balance 不满足 minimum balance。
第二是 callbackgaslimit 设置的太低了,VRF 没法完成 fulfillRandomWords 中的操作。
你的 Callbackgaslimit 设置的是 200k,可能有点低了,改高一点试试,上限是 2.5M。
我在合约中,通过 Chainlink VRF 申请随机数,requestRandomWords()
和官方文档中的是一样的
这个是我的输入
以下是我的 fulfillRandomWords 函数:

function fulfillRandomWords(
uint256 _requestId,
uint256[] memory _randomWords
) internal verifyMinimumHolder {
if (block.timestamp > lastRequestTime.add(randomNumberInterval)) {
_requestCounter.increment();
randomWords[_requestCounter.current()] = _randomWords;
isRequestInitialised = false;
lastFulfilledId = _requestId;
requestIds.push(_requestId);
lastRequestTime = block.timestamp;
isAvailableForInitialize = true;
emit FulfilledRequest(
_requestId,
_requestCounter.current(),
_randomWords[0],
_randomWords[1]
);
}
}
但是我的 fulfillRandomWords
一直没有被执行。
一般 VRF 不成功,有两个原因:
第一是 VRF subscription 的 balance 不满足 minimum balance。
第二是 callbackgaslimit 设置的太低了,VRF 没法完成 fulfillRandomWords 中的操作。
你的 Callbackgaslimit 设置的是 200k,可能有点低了,改高一点试试,上限是 2.5M。