चैनलिंक चयनकर्ता से तर्क कैसे पारित करें?
Nov 30 2020
मेरे पास पूर्णांक कुंजियों और संरचनात्मक मूल्यों के साथ मानचित्रण है।
mapping (int => Client) public customers;
प्रत्येक ग्राहक का अपना प्रमाण तर्क होता है जिसे मैं एक चैनलिंक एपीआई कॉल के साथ अपडेट करने का प्रयास कर रहा हूं। यहाँ मेरी संरचना है।
struct Client {
int id,
bool proof;
}
यहां बताया गया है कि एपीआई कैसे कॉल करता है
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);
}
और यह फ़ंक्शन निम्न फ़ंक्शन को ट्रिगर करता है
function fulfill(bytes32 _requestId, bool _isProofCorrect, unit val) public recordChainlinkFulfillment(_requestId){
customers[1].proof = _isProofCorrect;
}
मैं ग्राहक आईडी का उपयोग करके अपने निर्माण के प्रमाण तर्क को कैसे अपडेट कर सकता हूं। उदाहरण के लिए:
customers[<customer_id>].proof = _isProofCorrect;
जवाब
1 PatrickCollins Nov 30 2020 at 22:17
सभी चेनलिंक एपीआई कॉल के लिए , fulfil
विधि केवल 2 तर्क लेती है।
bytes32 _requestId
requestId
Chainlink API कॉल की।<type> _data
_data
Chainlink API कॉल द्वारा दिया जा रहा है कि।
इसका मतलब है कि आप 3 मापदंडों को पारित नहीं कर सकते।
इसका मतलब यह है, कि आप अपने मूल्य के लिए अपने नक्शेrequestId
कर सकते हैं , और यह कुछ इस तरह दिखेगा।
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;
}