簡體   English   中英

EthersJS 未正確從 function 調用的智能合約返回值

[英]EthersJS not properly returning a value from a smart contract on function call

我正在以太坊網絡上開發 DApp,並在反應前端使用 EthersJS 與智能合約進行交互。 我已經部署了我的智能合約,我的大部分function 調用似乎一切正常,但是由於某種原因,我無法從 EtherJS 正確調用幾個合約函數。 這就是我的意思...

在 Remix(我部署了智能合約的地方)中,我可以調用視圖沒有問題; 我得到了我期望的結果。 重新混合顯示正確的值

但是,當我從 EthersJS 調用相同的視圖時,我得到以下信息: EthersJS 只為這個視圖和這個視圖返回任何內容。

正如您在屏幕截圖中看到的,來自 EthersJS 的視圖調用返回0x00而不是所需的值。

這是我正在調用的智能合約的片段(可靠):

function getAllPendingRewardsByAddress(address _addr) public view returns (uint256) {
    uint256 pendingRewardsFromSnapshot;
    for (uint256 i = 1; i < currentMonth; i++) {
        pendingRewardsFromSnapshot += getPendingRewardPerSnapshot(i, _addr);
    }

    return pendingRewardsFromSnapshot;
}

...這是我為訪問數據而調用的前端代碼:

  const provider = new ethers.providers.Web3Provider(window.ethereum)
  const accounts = await provider.send("eth_requestAccounts", []);
  const pendingRewards = await dividendContract.getAllPendingRewardsByAddress(accounts[0])
  console.log("PENDING", pendingRewards)

我已經嘗試了以下調試步驟:

  1. 我已經將十六進制地址直接放在getAllPendingRewardsByAddress("ADDRESS")中,沒有骰子。
  2. 我已經驗證了 ABI 是正確的。
  3. 我試過調用其他視圖,它們似乎都工作正常。

我有一些預感...

  • 這與視圖中的 for 循環有關嗎? 也許 EthersJS 需要更多的氣體來正確執行 for 循環,或者類似的東西?
  • ^ 以此為基礎......也許這與分配一個導致 TX 沒有足夠氣體的局部變量pendingRewardsFromSnapshot值有關?

我正在為這個撓頭,以前從未見過這樣的問題。 想知道有沒有人遇到過類似的問題,請告訴我,非常感謝!

我發現了這個問題,顯然 EthersJS 使用單獨的帳戶調用視圖,而不是我調用視圖的帳戶(真的很奇怪)。 無論如何,我不得不更改我的一個支持視圖( getBalanceOfCallerWithPrecisionPerSnapshot )以使用傳遞的地址而不是 msg.sender,這解決了我的問題。 如果您有類似的問題,請檢查那里。 謝謝你成為我的橡皮鴨@sms!

你能告訴我 getPendingRewardPerSnapshot() function 也許問題出在 function 或者你從 1 開始你的 for 循環,也許你應該重新檢查它!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM