Solidity

使用注入的 web3 元遮罩執行時,Solidity 函式不返回任何數據

  • October 14, 2021

有我的程式碼。當我使用注入的 web3 元遮罩執行此程式碼時,getRight 函式不會返回數據,但當我使用 JavaScript VM 執行它時它會返回數據。我確實找到了問題所在以便解決它。

pragma experimental ABIEncoderV2;
contract AccessControlManagment
{
   string idReq;
   string actionn;
   string idRes;
   struct  right {
      string idRequester;
      string idResource;
      string action;
   }

   function addReq(string memory id) public{
        idReq =id;
  }
   function addRes(string memory id) public{
        idRes =id;
  }
  function addRight(string memory idRequester,string memory idResource, string memory action) public{
        right memory r = right(idRequester,idResource,action);
        idReq =idRequester;
         idRes =idResource;
        actionn = action;
  }
  function getidReq() public  returns (string memory){
      return idReq;
  }
  function getidRes() public  returns (string memory){
      return idRes;
  }
  function getaction() public returns (string memory)
  {
      return actionn;
  }
  
  function getRight() public  returns (string memory, string memory,string memory) {
      
      return (idReq,idRes,actionn);
      
  }
}

要從 Solidity 函式中獲取 Web3 的返回值,您有以下兩種選擇之一:

  • 首先可以標記 function view,表示該 function 不能更新 state 或 ledger,然後在使用時會返回返回值給 Web3call()
  • 其次,如果您的函式更新了狀態,那麼您可以使用要檢索的數據發出一個事件,然後稍後在 web3.js 中從該事件中檢索數據。(請參閱此 web3 方法:https ://web3js.readthedocs.io/en/v1.3.4/web3-eth-contract.html#getpastevents )

根據提供的程式碼,您似乎需要標記getRight()view,這將返回您要查找的數據。您可能還希望將其作為數組值而不是元組返回。我不確定 Web3.js 是否知道如何處理元組返回類型。

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