¿Cómo pasar un argumento al selector Chainlink?
Nov 30 2020
Tengo un mapeo con claves enteras y valores de estructura.
mapping (int => Client) public customers;
Cada cliente tiene su propio argumento de prueba que estoy tratando de actualizar con una llamada API Chainlink. Aquí está mi estructura.
struct Client {
int id,
bool proof;
}
Así es como solicito la llamada de API
function checkProof(string memory JobLocation, bytes32 JOBID) public {
Chainlink.Request memory req = buildChainlinkRequest(JOBID, address(this), this.fulfill.selector);
req.add("get",JobLocation);
req.add("path", "proof");
sendChainlinkRequestTo(ORACLE_ADDRESS, req, ORACLE_PAYMENT);
}
Y esta función activa la siguiente función
function fulfill(bytes32 _requestId, bool _isProofCorrect, unit val) public recordChainlinkFulfillment(_requestId){
customers[1].proof = _isProofCorrect;
}
¿Cómo puedo actualizar el argumento de prueba de mi Construct usando el ID de cliente? Por ejemplo:
customers[<customer_id>].proof = _isProofCorrect;
Respuestas
1 PatrickCollins Nov 30 2020 at 22:17
Para todas las llamadas a la API Chainlink , el fulfil
método solo toma 2 argumentos.
bytes32 _requestId
ElrequestId
de la llamada API Chainlink.<type> _data
El_data
que devuelve la llamada API Chainlink.
Esto significa que no puede pasar 3 parámetros.
Lo que esto significa es que puede asignar requestId
su valor a su valor , y se verá algo así.
mapping (bytes32 => uint) public requestMapping;
function checkProof(string memory JobLocation, bytes32 JOBID) public {
Chainlink.Request memory req = buildChainlinkRequest(JOBID, address(this), this.fulfill.selector);
req.add("get", JobLocation);
req.add("path", "proof");
bytes32 requestId = sendChainlinkRequestTo(ORACLE_ADDRESS, req, ORACLE_PAYMENT);
requestMapping[requestId] = customerId;
}
function fulfill(bytes32 _requestId, bool _isProofCorrect, unit val) public recordChainlinkFulfillment(_requestId){
uint256 value = requestMapping[_requestId]
customers[value].proof = _isProofCorrect;
}