Як синхронізувати вузол Ethereum, не допускаючи помилок, які я допустив

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

Незнання термінології лише ускладнювало.

Отже, у цій статті я хочу об’єднати всі типові помилки, з якими ви можете зіткнутися, та пояснити причини кожного кроку при синхронізації вузла. Сподіваємось, у вас не буде такого неприємного раннього досвіду, як у мене.

Швидкий вступ

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

Для синхронізації вузла Ethereum нам знадобиться таке програмне забезпечення:

  • Geth - Клієнт вузла Ethereum.
  • Гаманець Ethereum - користувальницький інтерфейс для вузла Ethereum.

Давайте розпочнемо.

Встановіть Geth

Щоб завантажити Geth, перейдіть сюди для користувачів Windows. Потім натисніть кнопку «Geth для Windows».

Користувачам MacOS рекомендую завантажувати за допомогою домашньої мови. Ви можете зробити це за допомогою таких команд:

brew tap ethereum/ethereumbrew install ethereum

Докладнішу інформацію див. В інструкціях Geth.

Переконайтесь, що Geth встановлений належним чином, набравши geth versionтермінал (MacOS) або PowerShell (Windows).

Встановіть Ethereum Wallet

GUI, який взаємодіє з мережею, ми називаємо “гаманцем”. За допомогою швидкого пошуку в Google ви можете знайти безліч різних гаманців для Ethereum (наприклад, Parity, Jaxx та MyEtherWallet). Мені особисто подобається користуватися Ethereum Wallet. Він має зручний інтерфейс, і я також трохи упереджений, оскільки його розробляє сам Ethereum.

Ви можете знайти програму встановлення тут.

Примітка. Я віддаю перевагу Ethereum Wallet ніж Mist . Mist - це в основному браузер, який надає децентралізовані програми (dApps) та веб-сайти.

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

Mainnet проти Testnet

В Ethereum існує дві основні мережі: основна та тестова.

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

Як розробники, ми не хочемо запускати тести додатків на реальні гроші. Саме для цього призначена тестова мережа.

Ми називаємо testnet Ropsten .

Запустіть Geth і Ethereum Wallet

Коли ви розробляєте смарт-контракт, вам слід спочатку синхронізувати тестову мережу. Нам потрібно буде синхронізувати основну мережу лише тоді, коли ми будемо готові до розгортання.

Для синхронізації тестової мережі вам знадобиться близько 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

--rpcАргумент дозволяє серверу HTTP-RPC. Це дозволяє нам користуватися певними послугами, такими як те, що зазначено в --rpcapi eth,web3,net,personal.

Після введення команди ви повинні побачити щось подібне:

Щоб не пошкодити блокчейн, особливо після багатьох годин синхронізації, НЕ слід різко закривати командний рядок. Завжди зупиняйте синхронізацію, натискаючи Ctrl + C, і зачекайте, поки Geth вимкне для вас програму.

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

Просто створіть файл за допомогою будь-якого текстового редактора, який у вас є, і збережіть його як файл .bat . Наприклад, RunGethTestnet.bat (ім'я не важливо). Скопіюйте та вставте команду у файл та збережіть її. Наступного разу, коли вам потрібно буде запустити Geth для Ropsten, просто двічі клацніть файл.

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

Подібно до Geth, я також зберег для нього пакетний файл за допомогою прикладу команди, наприклад, наведеної нижче:

Зверніть увагу, що ваша команда може виглядати трохи інакше, як моя, оскільки ви можете зберігати свою програму в іншому каталозі.

Крім того, ви можете додати програму до свого шляху.

Аргумент --node-datadir="C:\EthereumTestnet"вказує, де я зберігав свої ланцюгові дані, які точно такі ж, як я вказав для Geth.

Для користувачів Mac

Це трохи простіше для MacOS, оскільки дані ланцюга завантажуються автоматично в бібліотеку, а не приховуються від нас. Отже, нам не потрібно буде вказувати каталог даних.

Тим не менше, я рекомендую створити файл сценарію, щоб полегшити запуск Geth і Ethereum Wallet.

Примітка: Geth повинен працювати перед гаманцем Ethereum .

Запуск лише Ethereum Wallet автоматично запускає процес синхронізації, оскільки автоматично запускає клієнт 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, вам має бути сповіщення про те, щоб дозволити підключення. Ну, звичайно, натисніть «Дозволити.

Щоб перевірити, перейдіть до Налаштування системи> Система та конфіденційність.

На вкладці Брандмауер натисніть Параметри брандмауера .

Користувачі Windows

Щоб відкрити порт, перейдіть на Панель керування> Система та безпека> Брандмауер захисника Windows.

Клацніть на Додаткові налаштування . На бічній панелі натисніть Вхідні правила .

Вхідними портами, які ви хочете відкрити, є TCP та UDP 30303. Тож я створив одне правило для TCP 30303, а інше для UDP 30303.

Можливо, вам доведеться також відкрити вихідні порти для TCP 30303.

Зверніть увагу, що будь-який сторонній брандмауер / антивірус також може обмежити ваші з’єднання, тому обов’язково налаштуйте його відповідно.

Прикріпити до Гет

Щоб отримати більше інформації про свій вузол, ви можете підключити до клієнта Geth і виконувати з ним команди за допомогою служб RPC.

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

geth attach //127.0.0.1:8545

Знову ж ви, можливо, захочете зберегти його у пакетному файлі / скрипті для власної зручності.

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

Введіть, web3.ethі ви побачите багато інформації. Щоб отримати конкретну інформацію про синхронізацію, введіть web3.eth.syncingнатомість.

Як ви можете бачити, індикатор знаходиться у верхній частині Wallet Ефіріума це просто порівняння між highestBlock і currentBlock . Як highestBlock відомо на ваш комп'ютер не може бути фактичним високим блоком, індикатор може не відображати реальний прогрес.

Насправді, найвищий блок і відомі держави продовжуватимуть зростати, коли ви синхронізуєте свої вузли.

Деякі заключні моменти

Оскільки технологія швидко змінюється, завжди використовуйте стабільну версію клієнта та гаманця, щоб уникнути більших болів.

Також зауважте, що для вирішення будь-якої проблеми, з якою ви стикаєтесь, завжди є обхідний шлях. Коли ви стикаєтесь із проблемою синхронізації, ви можете спробувати шукати рішення, оскільки, ймовірно, ви не перший, хто стикається з цією ж проблемою.

І завжди нагадуйте собі, що вам не потрібно синхронізувати вузол для розробки смарт-контракту. Це лише сприяє вашому розумінню навколишнього середовища, а також процесу розвитку. Тож, не бийтеся над цим, якщо ви стикаєтесь із проблемами настільки рано в процесі розробки.

Щоб отримати більше таких статей, слідкуйте за мною або відвідайте мій сайт - Точка зору розробника.