Метод заполнения будильника Chainlink никогда не вызывался?

Работая с будильником Chainlink , мой fulfill()метод, кажется, никогда не вызывается. Таким образом, для примера с документами (ниже) votingLiveникогда не возвращается значение false по истечении времени. Все остальное работает, и я дошел до этого момента с оракулами ринкеби и кована в ремиксе и локально с той же проблемой.

Проблема...

Задержка по времени не добавляется, и функция не выполняется.

Код...

pragma solidity ^0.6.0;

import "@chainlink/contracts/src/v0.6/ChainlinkClient.sol";


contract ChainlinkTimedVote is ChainlinkClient
{
  uint private oraclePayment;
  address private oracle;
  bytes32 private jobId;
  uint private yesCount;
  uint private noCount;
  bool private votingLive;
  mapping(address => bool) public voters;

  //only the contract owner should be able to start voting
  address payable owner;
  modifier onlyOwner {
  require(msg.sender == owner);
  _;
  }

  constructor() public {
      setPublicChainlinkToken();
      owner = msg.sender;
      oraclePayment = 0.1 * 10 ** 18; // 0.1 LINK
      //Rinkeby alarm oracle
      oracle = 0x7AFe1118Ea78C1eae84ca8feE5C65Bc76CcF879e; 
      jobId = "4fff47c3982b4babba6a7dd694c9b204";
      //initialize votes
      yesCount = 0;
      noCount = 0;
      votingLive = false;
  }

  function startVote(uint voteMinutes) public onlyOwner {
      Chainlink.Request memory req = buildChainlinkRequest(jobId, address(this), this.fulfill.selector);
      req.addUint("until", now + voteMinutes * 1 minutes);
      //Start voting window then submit request to sleep for $voteMinutes
      votingLive = true;
      sendChainlinkRequestTo(oracle, req, oraclePayment);
  }

  //Callback for startVote request
  function fulfill(bytes32 _requestId) public recordChainlinkFulfillment(_requestId) {
      //$voteMinutes minutes have elapsed, stop voting
      votingLive = false;
  }

  //Increments appropriate vote counter if voting is live
  function vote(bool voteCast) public {
    require(!voters[msg.sender], "already Voted!");
    //if voting is live and address hasn't voted yet, count vote  
      if(voteCast) {yesCount++;}
      if(!voteCast) {noCount++;}
      //address has voted, mark them as such
      voters[msg.sender] = true;
   }
   
   //Outputs current vote counts
  function getVotes() public view returns (uint yesVotes, uint noVotes) {
      return(yesCount, noCount);
  }
  
  function isVotingLive() public view returns (bool) {
      return votingLive;
  }

  //Lets user know if their vote has been counted
  function haveYouVoted() public view returns (bool) {
      return voters[msg.sender];
  }
}

Мысли...

Может я неправильно строю запрос?

      Chainlink.Request memory req = buildChainlinkRequest(jobId, address(this), this.fulfill.selector);
      req.addUint("until", now + voteMinutes * 1 minutes);

листать

      votingLive = true;
      sendChainlinkRequestTo(oracle, req, oraclePayment);

к

      sendChainlinkRequestTo(oracle, req, oraclePayment);
      votingLive = true;

Я также замечаю, что задержка по времени не добавляется.

Подсказки: 1. Вы уверены, что ваша РАБОТА работает правильно? 2. Оракулам Chainlink нужно время, чтобы вернуть данные. Возможно, вам нужно немного подождать с ответом.
Можете ли вы проверить это, сначала установив votingliveзначение true? Просто чтобы убедиться, что вы получаете ответ?

Ответы (1)

Похоже, что может быть проблема с узлами в текущих документах Chainlink. Вместо этого попробуйте этот узел (на Коване) и задание:

Адрес Оракула = 0xAA1DC356dc4B18f30C347798FD5379F3D77ABC5b

идентификатор задания = 982105d690504c5d9ce374d040c08654

Для справки в будущем я искал похожие вакансии на market.link: https://market.link/search/all?network=42&search=Alarm%20Clock .

Документы будут обновлены.

Также работал над этим и не передавал цепочку к контракту, что определенно вызывало некоторые проблемы. Было бы неплохо также упомянуть об этом в документации для новичков в Solidity, таких как я. Также, к вашему сведению, мне удалось заставить работать следующий оракул в Коване ---- oracle = 0x2f90A6D021db21e1B2A077c5a37B3C7E75D15b7e; jobId = "a7ab70d561d34eb49e9b1612fd2e044b";