getUsers
Ich 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.getUsers
dass oder x.getUsers.call()
ein Array mit einer Adresse (meine Adresse unter ) zurückgibt, web3.eth.accounts[0]
bekomme aber stattdessen den invalid Solidity arguments
Fehler, obwohl keine Argumente an übergeben werden getUsers
.
Probier diese:
x.getUser.call(web3.eth.accounts[0],{from: 'YOUR ADDRESS'}, function (error, result) {
console.log('error ' + error);
console.log('result ' + result);
});
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()
.
Wiederholung 122442
atc
getUser
und aufrufegetUsers
.Benjaminion
atc