Chainlink

sendChainlinkRequest 似乎沒有返回 requestId

  • June 23, 2022

我正在嘗試使用 Chainlink 從 API 獲取數據。他們提供的範常式式碼工作正常,但不太適合我的需要,所以我正在嘗試調整它。

我想儲存 requestId 以便我知道回調中正在處理哪個請求,但是當我嘗試保存它時,我只得到 0 作為 requestId。

我只是添加這個:

// added to Contract object
bytes32 public requestId

.
.
.

// store response instead of just disregarding like in sample code
requestId = sendChainlinkRequest(req, fee);

此處提供的範常式式碼: https ://docs.chain.link/docs/api-array-response/

文件說保存 requestId 很好,但通常不需要,所以我認為這段程式碼應該可以工作。

任何幫助,將不勝感激。

使用最新版本的 ChainlinkClient 合約,當您呼叫 sendChainlinkRequest 函式時會生成 requestID,但它不會返回,因此您在發送請求後會得到零。

如果您在 v0.8 Chainlink 客戶端中跟踪函式呼叫,您可以看到請求 id 已生成並在rawRequest 函式中使用,但不再返回(即沒有返回語句)。

您仍然可以在您的合約回調函式中訪問生成的請求 ID,因為它會被發送回那裡。您只需要將它添加到您的函式定義中

  function fulfill(bytes32 _requestId, uint256 _volume) public recordChainlinkFulfillment(_requestId) {
       emit RequestVolume(_requestId, _volume);
       volume = _volume;
   }

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