Recibo este error cuando intento llamar a la getUsers
función getter del siguiente contrato: Invalid number of arguments to Solidity function
. Ejecutándose en Truffle en modo de desarrollo.
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);
}
Supongamos que implementa este contrato en Truffle, desarrolla testnet y obtiene una instancia del objeto x
. Puedo crear un usuario enviando la transacción x.registerNewUser("Bob123","Orlando","FL","USA")
. Luego corro x.getUser(web3.eth.accounts[0])
y obtengo la siguiente matriz:
['Bob123', '0x4f726c616e646f000000000000000000000000000000000000000000000000000000000000'
Esto es de esperar ya que los últimos 3 elementos de la matriz son de tipo bytes32
. Espero x.getUsers
o x.getUsers.call()
devolver una matriz de una dirección (mi dirección en web3.eth.accounts[0]
), pero en su lugar aparece el invalid Solidity arguments
error aunque no se pasan argumentos a getUsers
.
prueba este:
x.getUser.call(web3.eth.accounts[0],{from: 'YOUR ADDRESS'}, function (error, result) {
console.log('error ' + error);
console.log('result ' + result);
});
getUser()
función funcione. Como se indica en mi pregunta, es el getUsers()
. La única forma en que pude hacer que funcionara fue lo que @benjaminion sugirió que elimine los artefactos en /build, migre --reset y se escribirán nuevos artefactos en /build, lo que evita que aparezcan errores cuando llama getUsers()
.
Iteración 122442
atc
getUser
ygetUsers
.benjaminion
atc