Ошибка синхронизации GETH: Looking for peers и нулевой блок

    Вы запускаете GETH, видите бесконечное Looking for peers, а eth.syncing возвращает False и номер последнего блока равен 0. Это классическая проблема, когда клиент не может найти пиров для синхронизации. В этой статье мы разберём основные причины и дадим пошаговое руководство по настройке, чтобы ваша Ethereum-нода заработала как через Infura.

    Почему GETH не видит пиров?

    Ошибка Looking for peers при eth.syncing: false и нулевом блоке обычно возникает из-за сетевых ограничений или неверной конфигурации. Вот главные причины:

    • Проблемы с портами: GETH использует порты 30303 (TCP/UDP) для обмена данными. Если они закрыты фаерволом или маршрутизатором, нода не найдёт пиров.
    • Устаревшая версия GETH: Старые клиенты могут не подключаться к актуальной сети Ethereum после обновлений консенсуса.
    • Синхронизация на другом диске: Если система на C, а данные на D, это не должно мешать, но проблемы с правами доступа или путём могут заблокировать работу.
    • Неправильный режим синхронизации: light требует постоянного подключения к пирам, а snap или full - больше времени и ресурсов.

    Пошаговое решение проблемы

    1. Проверьте сетевые настройки

    Убедитесь, что порт 30303 открыт. В командной строке выполните: geth -port 30303. Если используете роутер, настройте проброс портов (port forwarding). Для теста можно запустить GETH с флагом -netrestrict 0.0.0.0/0, но это временное решение.

    2. Обновите GETH до последней версии

    Скачайте актуальный бинарник с официального сайта. Устаревшая версия может не поддерживать текущий протокол. После обновления удалите старые данные синхронизации: geth removedb (только для тестовой сети).

    3. Настройте правильный путь к данным

    Если диск D используется для данных, укажите его явно: geth -datadir D:\Ethereum. Убедитесь, что у пользователя есть права на запись в эту папку. Проблема с диском редко вызывает Looking for peers, но может привести к ошибкам загрузки цепочки.

    4. Используйте режим snap с явными пирами

    Режим snap быстрее, но если пиров нет, добавьте их вручную. Найдите список активных нод на Ethernodes и укажите флаг -bootnodes. Пример: geth -syncmode snap -bootnodes enode://...@ip:30303.

    5. Альтернатива: используйте Infura

    Если настройка своей ноды кажется сложной, подключитесь к Infura через HTTPS. Это даст те же возможности (чтение блоков, отправка транзакций) без необходимости синхронизации. Пример кода на Python:

    from web3 import Web3
    w3 = Web3(Web3.HTTPProvider('https://mainnet.infura.io/v3/YOUR_PROJECT_ID'))
    print(w3.eth.getBlock('latest').number)

    Проверка после исправлений

    После запуска GETH с корректными параметрами проверьте статус:

    • eth.syncing должен вернуть объект с прогрессом (или false, если синхронизация завершена).
    • eth.getBlock('latest').number - число больше 0 (на момент написания статьи около 19 000 000).
    • В логах должны быть сообщения о подключении к пирам: Looking for peers сменится на Block synchronisation started.

    Если проблема осталась, проверьте логи на наличие ошибок timeout или dial tcp. Чаще всего это указывает на блокировку порта провайдером - в таком случае используйте VPN или измените порт через -port.

    Часто задаваемые вопросы