Запуск и настройка узла в 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 hangzhounet.sh https://gitlab.com/tezos/tezos/raw/latest-release/scripts/tezos-docker-manager.sh
  • если вы не хотите устанавливать wget или используете Windows, создайте файл granadanet.sh, перейдите по ссылке и вставьте код оттуда в файл.

Перенесите скрипт в папку, к которой вам будет удобно прописать путь в терминале, например, в Documents.

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

chmod +x granadanet.sh

Этот скрипт запускает компоненты узла Tezos в контейнере Docker. С помощью скрипта можно управлять компонентами, конфигурировать узел, а также передавать команды клиенту Tezos.

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

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

Скачайте последний снапшот granadanet full с xtz-shots.io. Сохраните его в папке с удобным путем: Documents, Downloads или другим.

Теперь запустите узел со специальным параметром --history-moderolling. Этот параметр запрещает узлу скачивать блоки от пиров и сверять текущую конфигурацию с данными снапшота, что избавит вас от ошибок вроде «Узел ожидал снапшот 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_endorser-010-PtGRANAD_1 и granadanet_accuser-010-PtGRANAD_1. Это процессы, которые отвечают за подписание, подтверждение и проверку блоков соответственно.

Нажмите на название granadanet_baker-010-PtGRANAD_1. Откроется встроенная консоль с логами операций. Но так как у нашего адреса еще нет права подписывать блоки, ближайшие две недели он будет возвращать ошибку no slot found. Как только протокол включит адрес в расписание, процесс baker начнет подписывать и подтверждать блоки..