Solidity

已解決 CHAINLINK VRF V2 不呼叫回調函式 fulfillRandomWords()

  • July 20, 2022

我有以下程式碼使用 REMIX Injected Web3 部署到 AVALANCHE FUJI TESTNET

import '@chainlink/contracts/src/v0.8/interfaces/VRFCoordinatorV2Interface.sol';
import '@chainlink/contracts/src/v0.8/VRFConsumerBaseV2.sol';

contract ULotto is VRFConsumerBaseV2{

VRFCoordinatorV2Interface COORDINATOR;

   //values for CHAIN Link Integration
   uint64 s_subscriptionId; 
   address vrfCoordinator = 0x2eD832Ba664535e5886b75D64C46EB9a228C2610;
   bytes32 s_keyHash = 0x354d2f95da55398f44b7cff77da56283d9c6c829a4bdf1bbcaf2ad6a4d081f61;
   uint32 callbackGasLimit = 2000000;
   uint16 requestConfirmations = 3;
   uint32 numWords = 6;
   uint256[] public s_results;

constructor(uint64 subscriptionId) VRFConsumerBaseV2(vrfCoordinator){
       owner = msg.sender;
       lotteryIdCounter = 1;

       COORDINATOR = VRFCoordinatorV2Interface(vrfCoordinator);
       s_subscriptionId = subscriptionId;
   }

function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal override {
       s_results = randomWords;
   }

   function drawNumbers() public onlyOwner returns (uint256 requestId){
       //dragons require logic here

       requestId = COORDINATOR.requestRandomWords(
           s_keyHash,
           s_subscriptionId,
           requestConfirmations, 
           callbackGasLimit,
           numWords
       );

   }

}

當我呼叫抽獎號碼時,我可以從 testnet.snowtrace.io/ 看到對我的函式的回調有錯誤。

在此處輸入圖像描述 在此處輸入圖像描述 假定回調的內部 TXN

有人可以指出我正確的方向嗎?

有一些事情需要檢查這樣的問題。

  1. 檢查契約是否是 VRF 訂閱中的消費者,正如上面提到的 Richard Horrocks
  2. 仔細檢查您為契約提供了正確的訂閱 ID
  3. 嘗試執行該fulfillRandomWords函式以查看氣體需求。如果涉及回調中的邏輯,通常callbackGasLimit需要增加 will。

對於將來可能會查看此問題的任何人。

作為總結,您需要關注回复的 2 位理查茲的回饋。

要考慮的重要一點是如何處理 randomWords。盡量使內容fulfillRandomWords()簡單,可能只是保存uint256[] randomWords. 我有循環來處理我的響應,我認為這就是導致交易為out of gasor的原因revert

引用自:https://ethereum.stackexchange.com/questions/132024