Wie übergebe ich ein Argument an den Chainlink-Selektor?
Nov 30 2020
Ich habe eine Zuordnung mit Ganzzahlschlüsseln und Strukturwerten.
mapping (int => Client) public customers;
Jeder Kunde hat sein eigenes Beweisargument, das ich mit einem Chainlink-API-Aufruf aktualisieren möchte. Hier ist meine Struktur.
struct Client {
int id,
bool proof;
}
Hier ist, wie ich API Get Call anfordere
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);
}
Und diese Funktion löst die folgende Funktion aus
function fulfill(bytes32 _requestId, bool _isProofCorrect, unit val) public recordChainlinkFulfillment(_requestId){
customers[1].proof = _isProofCorrect;
}
Wie kann ich das Proof-Argument meines Konstrukts mithilfe der Kunden-ID aktualisieren? Zum Beispiel:
customers[<customer_id>].proof = _isProofCorrect;
Antworten
1 PatrickCollins Nov 30 2020 at 22:17
Für alle Chainlink-API-Aufrufe akzeptiert die fulfil
Methode nur zwei Argumente.
bytes32 _requestId
DerrequestId
des Chainlink API-Aufrufs.<type> _data
Das_data
, was vom Chainlink-API-Aufruf zurückgegeben wird.
Dies bedeutet, dass Sie 3 Parameter nicht übergeben können.
Was dies bedeutet ist, dass Sie Ihre Karte requestId
auf Ihren Wert , und es wird in etwa so aussehen.
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;
}