Como passar o argumento para o seletor Chainlink?
Nov 30 2020
Eu tenho um mapeamento com chaves inteiras e valores de estrutura.
mapping (int => Client) public customers;
Cada cliente tem seu próprio argumento de prova que estou tentando atualizar com uma chamada de API Chainlink. Aqui está minha estrutura.
struct Client {
int id,
bool proof;
}
Aqui está como eu solicito uma chamada API get
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);
}
E esta função aciona a seguinte função
function fulfill(bytes32 _requestId, bool _isProofCorrect, unit val) public recordChainlinkFulfillment(_requestId){
customers[1].proof = _isProofCorrect;
}
Como posso atualizar o argumento de prova do meu Construto usando o ID do cliente. Por exemplo:
customers[<customer_id>].proof = _isProofCorrect;
Respostas
1 PatrickCollins Nov 30 2020 at 22:17
Para todas as chamadas da API Chainlink , o fulfil
método leva apenas 2 argumentos.
bytes32 _requestId
OrequestId
da chamada da API Chainlink.<type> _data
O_data
que está sendo retornado pela chamada da API Chainlink.
Isso significa que você não pode passar 3 parâmetros.
O que isso significa é que você pode mapear requestId
seu valor de acordo com o seu valor , e ele se parecerá com isso.
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;
}
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino