Solidity
呼叫solidity函式時如何返回數組?
喲,我對編碼很陌生,所以請耐心等待。我正在使用帶有 web3 的 ReactJS 從智能合約呼叫函式,但我試圖呼叫的函式返回一個數組,我不知道如何使用 web3 返回數組。
當我嘗試呼叫該函式時,它只返回:
Object { 0: "0x0000000000000000000000000000000000000000", 1: [], tokens: [] }
const ownedTokens = () => { blockchain.smartContract.methods .ownedTokens() .call().then((tokens) => { console.log(tokens) }); };
這是我試圖呼叫的solidity函式
function ownedTokens() public view returns(address, uint256[] memory tokens){ return(msg.sender, addressesVault[msg.sender].ownedTokens); }
以及它從中獲取的結構
struct addresses{ uint256[] ownedTokens; } mapping(address => addresses) addressesVault;
原因是因為
msg.sender
設置為0x0000000000000000000000000000000000000000
當你使用該call
方法時。所以你應該from
在呼叫call
方法時設置值,設置msg.sender
如下:const ownedTokens = () => { blockchain.smartContract.methods .ownedTokens() .call({from: '0x1a7d5bF03d2a72494B9487fF0E0B9491c13965B4'}, function(error, tokens){ console.log(tokens); });; };
代替
0x1a7d5bF03d2a72494B9487fF0E0B9491c13965B4
設置您想要的地址msg.sender
。