チェーンリンクセレクターに引数を渡す方法は?

Nov 30 2020

整数キーと構造体値を使用したマッピングがあります。

mapping (int => Client) public customers;

各顧客には、ChainlinkAPI呼び出しで更新しようとしている独自の証明引数があります。これが私の構造です。

struct Client {
    int id,
    bool proof;
}

これが私がAPIgetcallをリクエストする方法です

   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;  
}

顧客IDを使用してコンストラクトの証明引数を更新するにはどうすればよいですか。例えば:

customers[<customer_id>].proof = _isProofCorrect;

回答

1 PatrickCollins Nov 30 2020 at 22:17

すべてのChainlinkAPI呼び出しで、fulfilメソッドは2つの引数のみを取ります。

  • bytes32 _requestIdrequestId金網のAPI呼び出しの。
  • <type> _dataこれ_dataは、ChainlinkAPI呼び出しによって返されます。

これは、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;  
}