Что такое «селектор» в вызове API ChainLink?

Nov 30 2020

Я использую пример из chainlink для вызова API; однако я не уверен, что это так.

function checkProof(string memory JobLocation, int job_id) public {
   Chainlink.Request memory req = buildChainlinkRequest(stringToBytes32(JOBID), address(this), this.fulfill.selector);

   req.add("get",JobLocation);

   req.add("path", "proof");

   sendChainlinkRequestTo(ORACLE_ADDRESS, req, ORACLE_PAYMENT);
}

Я знаю, что он вызывает следующую функцию

 function fulfill(bytes32 _requestId, bool _isProofCorrect, unit val) public recordChainlinkFulfillment(_requestId){
        customers[1].proof = _isProofCorrect;
 }

Но что делает селектор в приведенном выше коде (this.fulfill.selecor)?

Ответы

1 PatrickCollins Nov 30 2020 at 18:47

что делает селектор в приведенном выше коде (this.fulfill.selecor)?

В вашей buildChainlinkRequestфункции требуется 3 аргумента :

  • bytes32 _specId
  • address _callbackAddress
  • bytes4 _callbackFunctionSignature

Он bytes4 _callbackFunctionSignatureсообщает узлу Chainlink, какой метод вызывать, когда он возвращает данные. Он известен как селектор функций и позволяет узлу точно указать, что ему нужно вызвать, в вашем случае - fulfillфункцию.

Кроме того, как передать аргумент функции выполнения? Я пытаюсь обновить переменную доказательства моей карты клиентов, используя то, что вызывает цепочка.