Ganache/Web3: "Clave no encontrada en la base de datos"

Estoy usando Ganache CLI v6.1.0 (ganache-core: 2.1.0))(comencé con la configuración predeterminada ejecutando simplemente ganache-cli), web3 (^1.0.0-beta.33)y mi contrato inteligente está escrito para solidity ^0.4.0.

Tengo algunas funciones funcionando donde puedo, por ejemplo, hacer clic en un botón en mi interfaz de usuario web y hacer que envíe una transacción a mi contrato inteligente implementado y actualice los datos en la cadena. Esto funciona sin ningún problema.

Extrañamente, el caso simple de callenviar una constantfunción (que simplemente devuelve la longitud de una matriz) es donde tengo problemas. Por alguna razón, cada vez que hago esto, aparece un error: Key not found in database. Este error ocurre en la promesa devuelta por la callinvocación.

Aquí está mi código:

Función de solidez:

function getItemsLength() public constant returns(uint256) {
    return items.length;
}

Código JS:

var account;
var numItems = 0;
web3.eth.getAccounts().then(function(result) {
account = result[0];
var contract = new web3.eth.Contract(
    simpleStorageABI,
    contractAddress,
    {
      from: account,
      gasPrice: '20000000000',
      gas: '100000'
    }
  )
contract.methods.getItemsLength().call(account) // Error occurs here      
.then(function(result) {
    numItems = result;
  })
});

Tuve este trabajo usando testrpc en lugar de Ganache hace unos días, pero luego me mudé a Ganache para soporte de websocket (para oyentes de eventos). En algún momento esto se rompió, y parece que tal vez sea un error en Ganache.

¿Se ha encontrado alguien mas con esto? Vi algunos problemas en mi búsqueda que parecían similares, pero en su mayoría parecían intermitentes y relacionados específicamente con las pruebas. Cualquier idea u orientación sería apreciada, he estado atascado en esto durante demasiado tiempo.

¿Por qué pasas cuentas en la función de llamada? Tampoco se ha definido. ¿Qué valor contiene?
Vaya, eso es un error tipográfico! Fijado
todavía está mal. Debe proporcionar la cuenta de esta manera: { de: cuenta }

Respuestas (2)

La invocación está mal. Solo trata de escribirlo de esta manera:

contract.methods.getItemsLength().call({ de: cuenta })
.then(función(resultado) {
    numItems = resultado;
})

Tuve este problema cuando estaba usando variables de bloques de funciones como block.number o block. Dificultad que algunos no están disponibles en remix, supongo, cuando los eliminé, el código funcionó.