![](/img/trans.png)
[英]How to call Solidity Function to return Ether from Smart Contract?
[英]EthersJS not properly returning a value from a smart contract on function call
我正在以太坊網絡上開發 DApp,並在反應前端使用 EthersJS 與智能合約進行交互。 我已經部署了我的智能合約,我的大部分function 調用似乎一切正常,但是由於某種原因,我無法從 EtherJS 正確調用幾個合約函數。 這就是我的意思...
在 Remix(我部署了智能合約的地方)中,我可以調用視圖沒有問題; 我得到了我期望的結果。
但是,當我從 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)
我已經嘗試了以下調試步驟:
getAllPendingRewardsByAddress("ADDRESS")
中,沒有骰子。我有一些預感...
pendingRewardsFromSnapshot
值有關?我正在為這個撓頭,以前從未見過這樣的問題。 想知道有沒有人遇到過類似的問題,請告訴我,非常感謝!
我發現了這個問題,顯然 EthersJS 使用單獨的帳戶調用視圖,而不是我調用視圖的帳戶(真的很奇怪)。 無論如何,我不得不更改我的一個支持視圖( getBalanceOfCallerWithPrecisionPerSnapshot
)以使用傳遞的地址而不是 msg.sender,這解決了我的問題。 如果您有類似的問題,請檢查那里。 謝謝你成為我的橡皮鴨@sms!
你能告訴我 getPendingRewardPerSnapshot() function 也許問題出在 function 或者你從 1 開始你的 for 循環,也許你應該重新檢查它!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.