Solidity
如何在 Solidity 函式中獲取返回值?
想像一下,我正在開發一個簡單的函式,如下所示:
uint256 state; event Addition(uint256 result); function addition(uint256 a, uint256 b) public returns (uint256) { uint256 result = a + b; state = result; emit Addition(result); return result; }
如何獲取返回值(結果)?我知道我可以通過監聽事件 Addition 來獲取值,但是在那種情況下……**我為什麼要返回值?**當我在我的 javascript 前端中使用 web3.js 執行該函式時,我可以等到事務完成,但結果沒有出現事務響應。
我相信您所描述的問題是因為您試圖從標記為非靜態(非純/視圖)的函式中獲取返回變數。不幸的是,據我所知,不可能從探勘的交易中獲得函式結果。
但是,您應該能夠告訴 web3js 在靜態上下文中評估此函式。使用 ethersjs,這是 .callstatic。對於 web3js,這可能意味著(對 web3js 不太熟悉)您使用 .call 而不是 .send 來獲得函式結果。
您的函式既不是純函式也不是視圖,因此它返回交易收據而不是返回值。此函式將返回結果:
function addition(uint256 a, uint256 b) public pure returns (uint256) { uint256 result = a + b; return result; }