Solidity

使用 Chainlink 外部適配器不會返回任何內容

  • November 25, 2020

嘗試使用此比特幣適配器

但是在 copyPath 參數和回調參數方面存在一些問題。

一方面,我想檢索輸出的 JSON 的多個部分,所以我認為我的請求中需要多個 copyPath 參數,但找不到任何範例。我也不確定回調函式應該有什麼參數,我假設類型是字元串,但沒有找到任何地方定義的。

這是我到目前為止所擁有的,節點收到我的請求並處理它,但我在回調中沒有得到任何回報(或者它可能永遠不會被呼叫)。

   string public addr1;
   string public addr2;
   uint public value1;
   uint public value2;

   function makeRequest(string memory btcTX_ID) public {
       Chainlink.Request memory req = buildChainlinkRequest(jobId, address(this), this.fulfill.selector);
       req.add("rpc_command", "getRawTransaction");
       req.add("tx_id", btcTX_ID);
       req.add("copyPath", "result.data.tx.vout.0.scriptPubKey.addresses");
       req.add("copyPath", "result.data.tx.vout.0.value");
       req.add("copyPath", "result.data.tx.vout.1.scriptPubKey.addresses");
       req.add("copyPath", "result.data.tx.vout.1.value");
       sendChainlinkRequestTo(oracle, req, fee);
   }
   
   //callback function 
   function fulfill(bytes32 _requestId, string memory _addr1, uint _value1, string memory _addr2, uint _value2) public recordChainlinkFulfillment(_requestId) {
       addr1 = _addr1;
       value1 = _value1;
       addr2 = _addr2;
       value2 = _value2;
   }

這是在 Solidity 中使用外部適配器的文件頁面

目前只能返回 bool、bytes32 或 (u)int256 的單個值。如果數據足夠小,您可以在外部適配器中連接多個值(例如用“,”連接多個整數),並自行將其轉換為 bytes32。在您的智能合約中,您將根據您在 EA 中的連接方式對其進行解碼。

多字響應是一項正在積極開發中的功能。您可以在 Pivotal tracker 中關注進度:https ://www.pivotaltracker.com/epic/show/4157014

引用自:https://ethereum.stackexchange.com/questions/90442