Solidity

如何在 Solidity 函式中獲取返回值?

  • May 18, 2022

想像一下,我正在開發一個簡單的函式,如下所示:

      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;
   }

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