Solidity
使用 Chainlink 外部適配器不會返回任何內容
嘗試使用此比特幣適配器
但是在 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; }
目前只能返回 bool、bytes32 或 (u)int256 的單個值。如果數據足夠小,您可以在外部適配器中連接多個值(例如用“,”連接多個整數),並自行將其轉換為 bytes32。在您的智能合約中,您將根據您在 EA 中的連接方式對其進行解碼。
多字響應是一項正在積極開發中的功能。您可以在 Pivotal tracker 中關注進度:https ://www.pivotaltracker.com/epic/show/4157014