Número no válido de error de argumentos para la función getter sin argumentos pasados

Recibo este error cuando intento llamar a la getUsersfunció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.getUserso 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 argumentserror aunque no se pasan argumentos a getUsers.

Proporcione el código donde llama a getUser
Edité la pregunta con el código que uso para registrar un usuario y llamar a las funciones getUsery getUsers.
Este es definitivamente un problema de Truffle: su código se ejecuta sin problemas en Remix. Hay algunos problemas en Truffle y web3.js GitHubs sobre esto con soluciones sugeridas, vale la pena intentarlo. Háganos saber si ayuda.
Gracias @benjaminion por esos enlaces, eliminar los artefactos en /build evita que aparezca el error.

Respuestas (1)

prueba este:

x.getUser.call(web3.eth.accounts[0],{from: 'YOUR ADDRESS'}, function (error, result) {
    console.log('error ' + error);
    console.log('result ' + result);
});
No hay ningún problema para que la 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().