चैनलिंक चयनकर्ता से तर्क कैसे पारित करें?

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 _requestIdrequestIdChainlink API कॉल की।
  • <type> _data_dataChainlink 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;  
}