Solidity

呼叫solidity函式時如何返回數組?

  • July 26, 2022

喲,我對編碼很陌生,所以請耐心等待。我正在使用帶有 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

參考

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