Запуск та налаштування вузла в Docker

Docker запускає повністю налаштовану програму у віртуальному контейнері. У нашому випадку він завантажує з DockerHub останню версію контейнера із вузлом Tezos і розгортає його на комп'ютері.

Спільнота Tezos створила скрипт tezos-docker-manager.shell для спрощення запуску та керування вузлом у Docker. Наприклад, замість ручної компіляції та запуску вузла через термінал достатньо виконати команду ./script.sh start.

Ми покажемо запуск вузла тестової мережі Granadanet на прикладі macOS і вкажемо моменти, де на Windows потрібно використовувати інші команди. Запуск вузла основної мережі відбувається так само, тільки замість granadanet потрібно використовувати mainnet.

Важливо!

Замініть в командах слово «granadanet» на назву актуальної тестової мережі, або на mainnet, якщо хочете запустити вузол в основній мережі.

Встановіть Docker із офіційного сайту. Потім скачайте скрипт для завантаження Docker-контейнера з вузлом Tezos:

  • якщо у вас встановлений завантажувач wget, завантажте скрипт за допомогою команди:
wget -O granadanet.sh https://gitlab.com/tezos/tezos/raw/latest-release/scripts/tezos-docker-manager.sh
  • якщо ви не хочете встановлювати wget або використовуєте Windows, створіть файл granadanet.sh, перейдіть за посиланням та вставте код звідти у файл.

Перенесіть скрипт до папки, до якої вам буде зручно прописати шлях у терміналі, наприклад, у Documents.

Запустіть термінал та за допомогою команди cd перейдіть до папки зі скриптом. На macOS виконайте команду chmod +x, щоб зробити скрипт виконуваним:

chmod +x granadanet.sh

Цей скрипт запускає компоненти вузла Tezos у контейнері Docker. За допомогою скрипта можна управляти компонентами, конфігурувати вузол, а також передавати команди клієнту Tezos.

Після запуску вузол почне завантажувати блокчейн Tezos, щоб синхронізуватися з мережею. Під час синхронізації команди іноді не працюють або видають помилки, тому що ви не можете звертатися до блоків, які вузол ще не скачав. Швидкість синхронізації залежить від кількості вузлів у мережі. У тестнеті granadanet на синхронізацію піде приблизно тиждень, у мейннеті — кілька днів.

Щоб не чекати тиждень, ми імпортуємо у вузол снапшот — архівований блокчейн. Вузлу потрібно буде докачати кілька тисяч блоків за останній день замість кількох мільйонів.

Завантажте останній снапшот granadanet full з xtz-shots.io. Збережіть його у папці із зручним шляхом: Documents, Downloads або іншій.

Запустіть вузол зі спеціальним параметром --history-mode rolling. Цей параметр забороняє вузлу завантажувати блоки від бейкерів і звіряти поточну конфігурацію з даними снапшота, що позбавить вас помилок на кшталт «Вузол чекав снапшот mainnet, а отримав снапшот granadanet!».

Виконайте команду:

./granadanet.sh node start --rpc-port 8732 --history-mode rolling

Docker завантажить контейнер Tezos, а потім запустить вузол з відкритим портом 8732. У цьому порту інші вузли зможуть підключатися до вашої ноди. Порт 8732 майже завжди вільний, і запуск вузла не вплине на швидкість інтернету та роботу інших програм.

Дочекайтеся, доки скрипт не звітує про запуск усіх компонентів. Якщо з'явиться попередження про нову версію скрипта, оновіть його за допомогою команди:

./granadanet.sh update_script

Імпортуйте снапшот командою import. Можете перетягнути файл прямо у вікно терміналу, щоб він автоматично додав повний шлях до снапшоту.

./granadanet.sh snapshot import /шлях/до/снапшоту/назва_снапшота.full

Термінал завершить імпортування повідомленням про code 0. Тепер потрібно перезапустити вузол зі стандартним параметром зберігання блокчейна full замість rolling, щоб вузол завантажив відсутні блоки. Виконайте команду stop і дочекайтеся повідомлення про зупинення компонентів вузла. Потім перезапустіть вузол із параметром full:

./granadanet.sh stop./granadanet.sh node start --rpc-port 8732 --history-mode full

Після запуску вузла перевірте процес синхронізації за допомогою команди bootstrapped. Термінал ще 10-30 хвилин видаватиме повідомлення про підвантаження блоків за останній день:

./granadanet.sh client bootstrapped

Коли синхронізація закінчиться, термінал повідомить node is bootstrapped.

Вузол працює, але до нього ще не підключено обліковий запис Tezos. Щоб почати бейкінг, потрібно додати у вузол приватний ключ адреси, де є мінімум 6000 XTZ.

Спочатку перейдіть на teztnets.xyz і створіть тестову адресу. Підтвердіть, що ви не робот, завантажте JSON-файл з даними облікового запису і перенесіть його в папку зі скриптом granadanet.sh. Перейменуйте файл на acc.json, тому що назву файлу потрібно буде кілька разів прописати в терміналі і краще щоб вона була короткою.

Перейдіть до терміналу та завантажте файл acc.json у контейнер вузла Tezos:

docker cp acc.json granadanet_node_1:/home/tezos

Потім завантажте ключі у вузол. У macOS потрібно використовувати команду sudo chown, але у Windows вона не потрібна:

docker exec granadanet_node_1 sudo chown tezos:nogroup /home/tezos/acc.json

Активуйте тестовий обліковий запис із заданим ключем. Bake — псевдонім нашого облікового запису, до якого буде прив'язаний ключ. Ви можете вибрати інший псевдонім:

./granadanet.sh client activate account Bake with /home/tezos/acc.json

Тепер клієнт Tezos буде використовувати ваш приватний ключ для підписання запитів на кшталт передачі токенів іншій адресі або старту бейкінгу.

Перевірте, скільки XTZ є на вашій адресі:

./granadanet.sh client get balance for Bake

teztnets.xyz видає облікові записи з випадковою кількістю тестових токенів. Якщо пощастило, ви отримали 6000 XTZ або більше. Тоді ви зможете виконати останні команди та почати бейкінг у тестовій мережі. Якщо не пощастило — нічого страшного. Ви вже зробили найважче і запустили робочий вузол, а отже, при бейкінгу в мейннеті наступні команди спрацюють без помилок.

Зараз потрібно зареєструвати акаунт в якості бейкера, а потім окремо запустити демонів baker та accuser з адресою акаунта. Скрипт granadanet.sh іноді видає помилку при виконанні реєстрації, тому надійніше зробити все безпосередньо з Docker.

Зупиніть вузол за допомогою команди stop:

./granadanet.sh stop

Запустіть демона node за допомогою команди start. Цей демон відповідає за роботу клієнта Tezos, і через нього можна керувати рештою компонентів вузла. Про всяк випадок вкажіть кілька варіантів підключення до вузла через порт 8732, щоб файрвол вашої операційної системи не заблокував підключення:

./granadanet.sh node start --rpc-port 8732 --rpc-addr :8732 --allow-all-rpc 8732 --connections 20

Відкрийте програму Docker. У списку ліворуч виберіть вкладку Containers / Apps. По центру з'явиться список раніше запущених контейнерів, серед яких буде granadanet із помаранчевою іконкою. Вона означає, що в контейнері не запущено частину компонентів — так і має бути.

Натисніть на білу стрілку біля помаранчевої іконки granadanet, щоб відкрити список компонентів. Знайдіть демона granadanet_node_1 — єдиного із зеленою іконкою. Наведіть на нього курсор і клацніть другий значок з підписом CLI, щоб відкрити термінал з-під демона node. Так ви зможете безпосередньо керувати вузлом через консоль.

У цьому терміналі перевірте, чи не збилися установки облікових записів, з’єднання та синхронізація з мережею. Для цього виконайте команду get balance:

tezos-client get balance for Bake

Зареєструйте свою адресу в якості делегата. У нашому випадку термінал видав помилку операції, тому що ми вже реєструвалися:

tezos-client register key Bake as delegate

Термінал видасть повідомлення про виконану транзакцію. На жаль, ви зможете розпочати бейкінг лише через 14 днів. Протокол складає розклад бейкерів на 5 циклів вперед, тому ваша адреса потрапить у розклад через два тижні. Ви можете запустити всіх потрібних демонів зараз і залишити комп'ютер увімкненим на два тижні, або зробити все через 11-12 днів.

Закрийте це вікно і поверніться до терміналу, в якому ви запускали вузол за допомогою скрипта ./granadanet.sh. Виконайте команду start, щоб запустити інші компоненти вузла:

./granadanet.sh start --rpc-port 8732 --rpc-addr :8732 --allow-all-rpc 8732 --connections 20

Дочекайтеся підтвердження та перейдіть до Docker. У списку знайдіть контейнер granadanet і розгорніть його вміст білою стрілкою. Більшість компонентів має бути з іконками зеленого кольору.

У списку знайдіть основні компоненти: granadanet_baker-010-PtGRANAD_1 та granadanet_accuser-010-PtGRANAD_1. Це процеси, які відповідають за підписання, підтвердження та перевірку блоків відповідно.

Натисніть назву granadanet_baker-010-PtGRANAD_1. Відкриється вбудована консоль із логами операцій. Але оскільки наша адреса ще не потрапила в розклад циклу, найближчі два тижні він повертатиме помилку no slot found. Як тільки протокол включить адресу в розклад, процес baker почне підписувати блоки, а endorser їх підтверджувати.