Solidity
使用注入的 web3 元遮罩執行時,Solidity 函式不返回任何數據
有我的程式碼。當我使用注入的 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 是否知道如何處理元組返回類型。