Getter für öffentliche Struct-Array-Variablen

Ich erstelle ein Struct-Array und bilde es einer Adresse zu:

contract MyContract
{
    struct something {
        bytes32 test1;
        bytes32 test2;
        bytes32 test3;
    }

    mapping (address => Something[]) public stuff;
}

In der App versuche ich die automatisch erstellte Getter-Funktion wie folgt zu verwenden:

let sender = web3.eth.accounts[0];

console.log(contract.stuff(sender))

Es tritt diesen Fehler zurück:

inpage.js:14246 Uncaught Error: Invalid number of arguments to Solidity function
    at Object.InvalidNumberOfSolidityArgs (inpage.js:14246)
    at c.validateArgs (inpage.js:14246)
    at c.toPayload (inpage.js:14246)
    at c.call (inpage.js:14246)
    at c.execute (inpage.js:14246)
    at addStuff (index.js:30)
    at HTMLButtonElement.onclick ((index):53)

Was benötigt die Getter-Funktion "Stuff"? Wenn ich das Mapping so ändere:

mapping (address => Something) public stuff;

Ich kann es gut nennen. Muss ich Test1, Test2 und Test3 bestehen?

Antworten (2)

Sie müssen den Inhaltsindex hinzufügen

console.log(contract.stuff(sender,0))

Entschuldigung, ich bin noch neu dabei, ich habe mir das ABI angesehen und die Eingaben waren genau dort:

{
  "constant": true,
  "inputs": [
    {
      "name": "",
      "type": "address"
    },
    {
      "name": "",
      "type": "uint256"
    }
  ],
  "name": "stuff",
  "outputs": [
    {
      "name": "test1",
      "type": "bytes32"
    },
    {
      "name": "test2",
      "type": "bytes32"
    },
    {
      "name": "test3",
      "type": "bytes32"
    }
  ],
  "payable": false,
  "stateMutability": "view",
  "type": "function"
},