Geth light node contract call () Error: 'no se puede obtener la clave trie'

Estoy corriendogeth --syncmode "light"

Cuando intento comunicarme con un contrato inteligente ya implementado en la red principal, hago lo siguiente en la consola geth :

>var Contract = eth.contract(abi)
>var myContract = Contract.at(address)

Sin embargo, cuando intento ejecutar una función me sale lo siguiente:

>myContrant.func.call(3,5)
Error: can't fetch trie key b3658ad28c17c69b3cd0fc2dfebbc66b9223d1c01ec56751ea9dd000cd79b061: no suitable peers available
    at web3.js:3143:20
    at web3.js:6347:15
    at web3.js:5081:36
    at web3.js:4102:22
    at <anonymous>:1:1

También:

>myContract.func.sendTransaction(3, 5, {from: eth.accounts[1]})
Error: no suitable peers available
    at web3.js:3143:20
    at web3.js:6347:15
    at web3.js:5081:36
    at web3.js:4137:16
    at <anonymous>:1:1

¿Es este un problema del nodo de luz y su comunicación con los pares?

¿Cómo se puede resolver este problema?

Respuestas (2)

Para otros que se encuentran con Error: no suitable peers available, es muy probable que su gethinstancia aún no haya encontrado un par adecuado si está ejecutando en modo ligero. Tardé unos 15 minutos en encontrar un nodo completo que admitiera la sincronización con clientes ligeros.

Citando de un problema relacionado de Github :

Para su información, estoy ejecutando algunos servidores ligeros por mi cuenta, y mis nodos se saturan con conexiones de pares de clientes ligeros. La "solución" aquí es que más personas en la comunidad ejecuten nodos y habiliten el servidor ligero ( ver aquí ), considere ayudar a la causa y ejecutar un servidor ligero también 😄.

Si desea confirmar, ejecute add consoleal final de su comando geth y llame a admin.peers.

Yo estaba teniendo el mismo problema. Estoy ejecutando Geth 1.7.3 con:

--testnet --syncmode="light" --datadir "C:\Ethereum\data_testnet"  --rpc --rpcapi db,eth,net,web3,personal --cache=1024 --rpcport 8545 --rpcaddr 127.0.0.1 --rpccorsdomain "*

Después de iniciar una sincronización ligera limpia (datos existentes eliminados) desde cero, y esperar 40 minutos para que termine la sincronización, recibí este error al hacer un eth.getBalance()

Paré y reinicié geth y funcionó, pero solo temporalmente. Logré hacer un eth.getTransactionCount() pero la segunda llamada que tuve

Error: can't fetch trie key 

Después de lanzarlo de nuevo, parece funcionar. Así que supongo que debes seguir intentándolo y ser paciente.

EDITAR: Lo siento, también recibo este error cuando llamo a una función de un contrato. Todo lo demás parece funcionar (implementación, equilibrio, registro de eventos)