Как синхронизировать узел Ethereum, не совершая ошибок, которые я сделал

1656590660 kak sinhronizirovat uzel ethereum ne sovershaya oshibok kotorye ya sdelal

от Зака

GRyYLq0mgQ4m8ie273EFb1q7pmhhdNopJ8AI

Когда я только начал разрабатывать на платформе Ethereum, синхронизация узла была одной из первых вещей, которые я сделал. Поскольку меня никто не держал за руку и нигде объединить все распространенные ошибки, с которыми я сталкивался, я потратил недели на синхронизацию узла. Это была такая головная боль, что я чуть не сдался.

Незнание терминологии только усложняло это.

Поэтому в этой статье я хочу объединить все распространенные ошибки, с которыми вы можете столкнуться, и объяснить причины каждого шага при синхронизации узла. Надеюсь, у вас не будет такого неприятного раннего опыта, как у меня.

Быстрое поступление

В Ethereum разработчики создают части программы, работающие в сети. Эти называются смарт-контракты. Хотя вы можете развернуть их вручную без синхронизации с узлом Ethereum, в долгосрочной перспективе синхронизировать процесс разработки будет удобнее (особенно, когда мы хотим использовать фреймворки разработки, такие как Truffle).

Для синхронизации узла Ethereum нам понадобится следующее программное обеспечение:

  • Geth – клиент для узла Ethereum.
  • Ethereum Wallet — Пользовательский интерфейс для узла Ethereum.

Давайте начнем.

Установите Geth

Для загрузки Geth перейдите сюда для пользователей Windows. Затем нажмите кнопку «Geth для Windows».

fnSKoLWe6RsDwH7GWm0HzodzM1SA7aeXYXOM

Для пользователей MacOS я рекомендую скачивать с помощью homebrew. Вы можете сделать это с помощью следующих команд:

brew tap ethereum/ethereumbrew install ethereum

Дополнительную информацию можно найти в инструкциях Geth.

Убедитесь, что Geth установлен правильно, введя geth version в терминале (MacOS) или PowerShell (Windows).

Установите кошелек Ethereum

Мы называем графический интерфейс, взаимодействующий с сетью, «кошельком». Вы можете найти много разных кошельков для Ethereum с помощью быстрого поиска в Google (например, Parity, Jaxx и MyEtherWallet). Лично мне нравится использовать кошелек Ethereum. Он имеет удобный интерфейс, и я также немного пристрастен, поскольку он разработан самим Ethereum.

Вы можете найти инсталлятор здесь.

Примечание: я предпочитаю Кошелек Ethereum к туман. Mist – это в основном браузер, воспроизводящий децентрализованные приложения (dApps) и веб-сайты.

Для разработки смарт-контракта нам понадобится кошелек Ethereum.

Mainnet против Testnet

В Ethereum есть две главные сети: основная и тестовая.

Основная сеть используется для транзакций реального эфира. Стоимость эфира привязана к реальной фиатной валюте из-за криптовалютных бирж.

Как разработчики мы не хотим запускать тестирование приложений за реальные деньги. Именно для этого и предназначена тестовая сеть.

Мы называем тестовую сеть Ропстен.

Запустите кошелек Geth и Ethereum

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

Вам понадобится близко 30 Гб места для синхронизации тестовой сети Поскольку в основной сети больше транзакций, вам понадобится примерно 100 ГБ для синхронизации сети.

Примечание: некоторые говорят, что для быстрой записи требуется накопитель SSD, чтобы синхронизация могла догнать последний блок. Лично я полагаю, что накопитель на жестком диске в порядке. Однако, будь выбор, я бы точно использовал SSD-накопители.

Для пользователей Windows

Для легкого доступа я рекомендую создать папку для хранения блокчейна. Например, C:\EthereumTestnet.

После создания папки попробуйте выполнить следующую команду:

geth — testnet — data-dir=”C:\EthereumTestnet” — rpc — rpcapi eth,web3,net,personal

Похоже, некоторые аргументы изменились. Если вы столкнулись с такой ошибкой «флаг предоставлен, но не определен: -data-dir», попробуйте изменить название аргумента на — datadir вместо data-dir.

Аргумент --testnet указывает, что мы хотим синхронизироваться с сетью Ropsten. Таким образом, чтобы синхронизировать сеть, вам просто нужно удалить аргумент --testnet и изменить каталог данных. Например:

geth — data-dir=”C:\EthereumMainnet” — rpc — rpcapi eth,web3,net,personal

The --rpc аргумент включает сервер HTTP-RPC. Это позволяет нам использовать определенные услуги, например то, что указано в --rpcapi eth,web3,net,personal.

После ввода команды вы должны увидеть что-то вроде этого:

SPf0RV1q1D0K0i0xwtnAl3Dc1y9KbzGHmSoD
Geth начинает работать.

Чтобы не повредить блокчейн, особенно после многих часов синхронизации, вы должны НЕТ внезапно закройте командную строку. Всегда останавливайте синхронизацию, нажимая Ctrl+C и подождите, пока Geth закроет приложение для вас.

WaIidVusyhviJMr2FRsXWPb1kpeQS7V7TCh1
После нажатия Ctrl+C Geth отключается.

Однако трудно запомнить все командные службы и службы rpc, которые вам нужны. Вот почему я предлагаю создать ярлык или пакетный файл, чтобы помочь вам.

Просто создайте файл в любом текстовом редакторе и сохраните его как .bat файл. Например, RunGethTestnet.bat (имя не важно). Скопируйте и вставьте команду в файл и сохраните его. В следующий раз, когда вам нужно будет запустить Geth для Ropsten, просто дважды щелкните файл.

После запуска Geth мы должны запустить Ethereum кошелек. Поскольку мы хотим, чтобы интерфейс находил точное местоположение, где мы синхронизировали наши файлы с помощью Geth, мы выполняем его из консоли.

Подобно Geth, я также сохранил пакетный файл для него с помощью примера команды, например, приведенной ниже:

oJVB33zdplMlBzKGqVlJvLUTHH5VTdTO4cUU

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

Кроме того, вы можете добавить приложение в свой путь.

Аргумент --node-datadir="C:\EthereumTestnet" указывает, где я хранил свои данные цепи, которые точно такие, которые я указал для Geth.

Для пользователей Mac

Для MacOS это немного проще, потому что данные цепи автоматически загружаются в библиотеку и не скрываются от нас. Следовательно, нам не нужно будет указывать каталог данных.

Тем не менее, я рекомендую создать файл сценария, чтобы упростить запуск Geth и Ethereum Wallet.

UpneIcjqnia6pTXOqQqzAkBQ7zgGl3KNIEmD
Команда Geth для тестовой сети
jS0TKBaz-kKx0kN6pC3fbqbsmlbXkbwKpPtM
Команда для запуска кошелька Ethereum

Примечание: Geth должен запустить перед Ethereum Wallet.

Запуск только кошелька Ethereum автоматически начнет процесс синхронизации, поскольку он автоматически запускает клиент Geth в фоновом режиме. Это удобно для пользователей, но не включает службы RPC, которые мы хотим использовать. Таким образом, мы хотим убедиться, что RPC включен как при выполнении Geth, так и Ethereum Wallet.

Несколько примечаний

  1. Процесс синхронизации очень длительный и может занять до 2–3 дней. Наберитесь терпения и подумайте о том, как оставить компьютер включенным на ночь.
  2. Скорость синхронизации зависит от скорости вашего Интернета, количества одноранговых устройств и скорости записи на вашем накопителе.
  3. Поскольку данные хранятся в блоках и связаны между собой, повреждение в одном блоке может повредить всю цепочку данных. Это потенциально может потратить ваши усилия на дни ожидания синхронизации узла. Поэтому очень важно правильно закрыть свой Geth. В некоторых случаях вам может понадобиться откат. Но здесь лучше предупредить, чем лечить.
  4. Индикатор прогресса на вашем кошельке Ethereum является НЕТ точный. Полагаясь на это, вы донесете много тревоги и разочарования.
  5. Geth работает на порту 30303 для внешнего прослушивания.
  6. Стандартным портом, используемым для внутренней связи, например, между вашим кошельком и Geth, является 8545.

Убедитесь, что ваш порт клиента Geth открыт

Очень важно убедиться, что подключение к вашему клиенту Geth не ограничено. Одной из огромных проблем, с которой я столкнулся было позволить своему брандмауэру ограничить количество соединений, которые я мог иметь через клиент Geth.

Вы можете заметить эту проблему, посмотрев на сверстники учитывают. Если он остается стабильно низким на уровне примерно 1–3 одноранговых устройств (по крайней мере, полчаса), есть большая вероятность, что ваше соединение ограничено. Здоровый диапазон составляет более 5 сверстников.

Пользователи MacOS

Когда вы запускаете Geth, должно появиться уведомление, чтобы разрешить подключение. Ну, конечно, нажмите «Разрешить.

Чтобы проверить, перейдите в Системные настройки> Система и конфиденциальность.

под Брандмауэр вкладку, нажмите на Параметры брандмауэра.

8KMRVnoiExu52vU1KMe37GdTLLf31qRSm8H-

Пользователи Windows

Для открытия порта выделите Панель управления > Система и безопасность > Брандмауэр Windows Defender.

Нажмите на Расширенные настройки. На боковой панели щелкните Входные правила.

L8rwzz5b5RnDj9NrNzbUYFDxVWZUAkmsYm45
LGmZGE7ILFS22HZ7Vn7WXzlR0wi06a6m4bD5

Входящие порты, которые вы хотите открыть – это TCP и UDP 30303. Поэтому я создал одно правило для TCP 30303 и другое для UDP 30303.

Возможно, вам также понадобится открытие выходных портов для TCP 30303.

Обратите внимание, что любой посторонний брандмауэр/антивирус также может ограничить соединение, поэтому обязательно настройте его соответствующим образом.

Присоединиться к Гету

Для получения дополнительной информации о своем узле вы можете подключиться к клиенту Geth и выполнять с ним команды с помощью служб RPC.

Вот простой способ проверить состояние синхронизации: подключитесь к клиенту, введя такую ​​команду на отдельном терминале/консоли.

geth attach http://127.0.0.1:8545

Опять же вы можете сохранить его в пакетном/скриптовом файле для собственного удобства.

После выполнения команды вы должны увидеть нечто подобное.

7uWtIMqSbpdOAmw7BZfG1DKvx-BRafBLhkj5

Тип web3.eth и вы должны увидеть много информации. Для получения конкретной информации о синхронизации введите web3.eth.syncing вместо этого.

AWbDTgfiHY6BUWLoNCn8Rij2oikEOggIBtDb

Как видите, индикатор прогресса, расположенный в верхней части кошелька Ethereum, является лишь сравнением между самый высокий блок и текущий блок. Как самый высокий блок известный вашему компьютеру может быть не самым высоким блоком, индикатор выполнения может не отображать реальный прогресс.

На самом деле, самый высокий блок и известные штаты будет продолжать увеличиваться по мере синхронизации ваших узлов.

Несколько последних пунктов

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

Кроме того, обратите внимание, что для любой проблемы, с которой вы сталкиваетесь, всегда есть обходной путь. Если вы столкнулись с проблемой синхронизации, вы можете попытаться найти решение, поскольку, вероятно, вы не первый, кто столкнулся с такой же проблемой.

И всегда напоминайте себе, что для разработки смарт-контракта не нужно синхронизировать узел. Это только поможет вам понять окружающую среду, а также процесс развития. Поэтому не возмущайтесь этим, если у вас возникли проблемы в самом начале процесса разработки.

Чтобы получить больше таких статей, следите за мной или посетите мой сайт – точка зрения разработчика.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *