Ungültige Anzahl von Argumenten Fehler für Getter-Funktion ohne übergebene Argumente

getUsersIch erhalte diesen Fehler, wenn ich versuche, die Getter-Funktion aus dem folgenden Vertrag aufzurufen : Invalid number of arguments to Solidity function. Läuft auf Truffle im Entwicklungsmodus.

mapping (address => User) Users;
address[] usersByAddress;

struct User {
    string handle;
    bytes32 city;
    bytes32 state;
    bytes32 country;
}

function registerNewUser(string handle, bytes32 city, bytes32 state, bytes32 country) returns (bool success) {
    address thisNewAddress = msg.sender;
    if(bytes(Users[msg.sender].handle).length == 0 && bytes(handle).length != 0){
        Users[thisNewAddress].handle = handle;
        Users[thisNewAddress].city = city;
        Users[thisNewAddress].state = state;
        Users[thisNewAddress].country = country;
        usersByAddress.push(thisNewAddress);  
        return true;
    } else {
        return false;       
    }
  }

//getters
function getUsers() view returns (address[]) { return usersByAddress; }

function getUser(address userAddress) view returns (string, bytes32, bytes32, bytes32) {
    return (Users[userAddress].handle, Users[userAddress].city, Users[userAddress].state, Users[userAddress].country);
}

Angenommen, Sie stellen diesen Vertrag in Truffle Develop Testnet bereit und erhalten eine Instanz des Objekts x. Ich kann einen Benutzer erstellen, indem ich die Transaktion sende x.registerNewUser("Bob123","Orlando","FL","USA"). Dann laufe ich x.getUser(web3.eth.accounts[0])und erhalte das folgende Array:

[ 'Bob123', '0x4f726c616e646f00000000000000000000000000000000000000000000000000', '0x464c000000000000000000000000000000000000000000000000000000000000', '0x5553410000000000000000000000000000000000000000000000000000000000' ]

Dies wird erwartet, da die letzten 3 Elemente im Array vom Typ sind bytes32. Ich erwarte, x.getUsersdass oder x.getUsers.call()ein Array mit einer Adresse (meine Adresse unter ) zurückgibt, web3.eth.accounts[0]bekomme aber stattdessen den invalid Solidity argumentsFehler, obwohl keine Argumente an übergeben werden getUsers.

Bitte geben Sie den Code an, in dem Sie getUser aufrufen
Ich habe die Frage mit dem Code bearbeitet, mit dem ich einen Benutzer registriere und die Funktionen getUserund aufrufe getUsers.
Dies ist definitiv ein Truffle-Problem - Ihr Code läuft problemlos in Remix. Auf den Truffle- und web3.js- GitHubs gibt es diesbezüglich einige Probleme mit Lösungsvorschlägen - einen Versuch wert. Lassen Sie uns wissen, ob es hilft.
Danke @benjaminion für diese Links, das Löschen der Artefakte in /build verhindert, dass der Fehler angezeigt wird.

Antworten (1)

Probier diese:

x.getUser.call(web3.eth.accounts[0],{from: 'YOUR ADDRESS'}, function (error, result) {
    console.log('error ' + error);
    console.log('result ' + result);
});
Es gibt keine Probleme damit, die getUser()Funktion zum Laufen zu bringen. Wie in meiner Frage angegeben, ist es die getUsers(). Die einzige Möglichkeit, wie ich es zum Laufen bringen konnte, war, was @benjaminion vorgeschlagen hat, die Artefakte in /build zu löschen, zu migrieren --reset, und neue Artefakte werden in /build geschrieben, wodurch verhindert wird, dass Fehler angezeigt werden, wenn Sie aufrufen getUsers().