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?
Para otros que se encuentran con Error: no suitable peers available
, es muy probable que su geth
instancia 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 console
al 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)