¿Qué es "selector" en la llamada API ChainLink?

Nov 30 2020

Estoy usando el ejemplo de chainlink para llamar a una API; sin embargo, no estoy seguro de que así sea.

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);
}

Sé que llama a la siguiente función

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

Pero, ¿qué hace el selector en el código anterior (this.fulfill.selecor)?

Respuestas

1 PatrickCollins Nov 30 2020 at 18:47

¿Qué hace el selector en el código anterior (this.fulfill.selecor)?

En su buildChainlinkRequestfunción, toma 3 argumentos :

  • bytes32 _specId
  • address _callbackAddress
  • bytes4 _callbackFunctionSignature

El bytes4 _callbackFunctionSignaturele dice al nodo Chainlink qué método llamar cuando devuelve los datos. Se lo conoce como selector de función y permite que el nodo especifique exactamente qué necesita llamar, en su caso, la fulfillfunción.

Además, ¿cómo puedo pasar un argumento a la función de cumplimiento? Estoy tratando de actualizar la variable de prueba del mapa de mis clientes usando lo que Chainlink llama.