Контрактный вызов узла Geth () Ошибка: «не удается получить тройной ключ»

я бегуgeth --syncmode "light"

Когда я пытаюсь связаться со смарт-контрактом, уже развернутым в основной сети, я делаю следующее в консоли geth :

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

Однако, когда я пытаюсь выполнить функцию, я получаю следующее:

>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

Также:

>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

Является ли это проблемой лайтнода и его связи с пирами?

Как решить эту проблему?

Ответы (2)

Для других, сталкивающихся с Error: no suitable peers available, очень вероятно, что ваш gethэкземпляр просто еще не нашел подходящего партнера, если вы работаете в облегченном режиме. Мне потребовалось около 15 минут, чтобы найти полноценный узел, поддерживающий синхронизацию с легкими клиентами.

Цитата из связанной проблемы Github :

К вашему сведению, я использую несколько легких серверов за свой счет, и мои узлы перенасыщены одноранговыми соединениями легких клиентов. «Исправление» здесь заключается в том, что больше людей в сообществе запускают узлы и включают легкий сервер ( см. Здесь ), пожалуйста, подумайте о том, чтобы помочь делу и запустить легкий сервер тоже 😄.

Если вы хотите подтвердить, запустите add consoleв конец вашей команды geth и вызовите admin.peers.

У меня была такая же проблема. Я использую Geth 1.7.3 с:

--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 "*

После запуска чистой (существующие данные удалены) легкой синхронизации с нуля и ожидания завершения синхронизации в течение 40 минут я получил эту ошибку при выполнении eth.getBalance()

Я остановил и перезапустил geth, и это сработало, но только временно. Мне удалось выполнить eth.getTransactionCount(), но второй вызов, который у меня был

Error: can't fetch trie key 

После повторного запуска вроде работает. Так что я думаю, вам нужно продолжать пытаться и быть терпеливым

РЕДАКТИРОВАТЬ: Извините, я получаю эту ошибку также при вызове функции контракта. Все остальное вроде работает (развертывание, балансировка, регистрация событий)