June 13

Лучший гайд по нодам

CryptoFortochka — гайды, ноды, новости, тестнеты

Если речь идёт о нодах, то криптосообщество можно условно разделить на три категории:

  1. Кто вообще не знает о существовании нод.
  2. Кто знает о нодах, но не хочет или не умеет их запускать.
  3. Кто участвует в тестнетах с нодами и запускает их в мейннетах.

Цель данного руководства приблизить новичков в нодах к категории №3.

Содержание

Что такое нода

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

Зачем нужна нода

Она связана с другими нодами (пирами), цель этой связи — прийти к консенсусу. Это специальный механизм, который исключает повторную трату криптовалюты, что была задействована в транзакции. Вот основные моменты:

  • Связь с другими нодами: ноды обмениваются данными с другими нодами в сети, что позволяет им синхронизировать состояние блокчейна.
  • Механизм консенсуса: это алгоритм, который помогает нодам прийти к единому мнению о правильности транзакций и блоков. Примеры механизмов консенсуса включают Proof of Work (PoW) и Proof of Stake (PoS).
  • Предотвращение двойной траты: консенсусный механизм гарантирует, что одна и та же криптовалюта не может быть потрачена дважды, что критически важно для доверия к системе.

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

Proof of Work (PoW) и Proof of Stake (PoS)

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

Proof of Work (доказательство выполнения работы) — это алгоритм консенсуса, который используется в некоторых криптовалютах, таких как Bitcoin.

Как это работает?

  1. Майнеры: участники сети на PoW называются майнерами, они используют мощные компьютеры для решения сложных математических задач.
  2. Задача: эти задачи требуют значительных вычислительных ресурсов и энергии. Цель задачи — найти решение, которое удовлетворяет определенным условиям.
  3. Решение: когда майнер находит решение, он передает его другим участникам сети для проверки.
  4. Подтверждение: если решение правильно, майнер получает право добавить новый блок транзакций в блокчейн и получает вознаграждение в виде криптовалюты (например, биткойнов).

Зачем это нужно?

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

Простой пример:

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

Proof of Stake (доказательство доли) — это другой алгоритм консенсуса, который используется в криптовалютах, таких как Ethereum 2.0, Cosmos, Polygon, Solana и многие другие. Он также обеспечивает согласие между участниками сети, но делает это иначе, чем PoW.

Как это работает?

  1. Владельцы монет: участники сети на PoS называются валидаторами, они блокируют определенное количество своих монет в сети. Это называется "стейкинг".
  2. Выбор валидаторов: сеть случайным образом выбирает валидаторов для создания новых блоков и проверки транзакций. Вероятность быть выбранным зависит от количества заблокированных монет — чем больше монет, тем выше шанс.
  3. Создание блоков: выбранный валидатор создаёт новый блок транзакций и добавляет его в блокчейн.
  4. Вознаграждение: валидаторы получают вознаграждение за свою работу в виде новых монет или комиссий за транзакции.

Зачем это нужно?

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

Простой пример:

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

Эти два алгоритма консенсуса помогают поддерживать децентрализованные сети, обеспечивая их безопасность и целостность. PoW требует значительных вычислительных ресурсов и энергии, а PoS использует экономический стимул, заставляя участников заботиться о безопасности сети. Также существуют менее популярные алгоритмы консенсуса — Delegated Proof of Stake (DPoS), Byzantine Fault Tolerance (BFT), Proof of Authority (PoA), Proof of Burn (PoB) и другие.

Виды нод и их различия

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

  1. Полные ноды (Full Nodes): полные ноды загружают и хранят полную копию блокчейна. Они проверяют и подтверждают транзакции и блоки, обеспечивая децентрализацию и безопасность сети. Примеры: Bitcoin Core для биткойна.
  2. Легкие ноды (Light Nodes или SPV Nodes): легкие ноды не хранят полную копию блокчейна. Вместо этого они загружают только заголовки блоков и полагаются на полные ноды для проверки транзакций. Такие ноды более компактны и требуют меньше ресурсов. Например, такой тип нод есть в Avail или Celestia.
  3. Майнинговые ноды (Mining Nodes): эти ноды участвуют в процессе майнинга, создавая новые блоки и добавляя их в блокчейн. Они решают сложные математические задачи, чтобы подтвердить транзакции и заработать награды в виде новых монет. Примеры: Iron Fish или Aleo.
  4. Валидационные ноды (Validator Nodes): эти ноды используются в сетях, которые работают на алгоритмах консенсуса Proof of Stake (PoS). Валидационные ноды проверяют и подтверждают транзакции и блоки, ставя на кон свои монеты (стейк). Примеры: Ethereum 2.0 (первая версия использовала майнинг и была на PoW), Cosmos или Binance Smart Chain.

Стоит отметить, что проект может использовать легкие ноды, полные ноды и валидационные ноды, так как это не мешает достижению консенсуса, а наоборот повышает работоспособность сети. Например, все эти виды нод есть в Celestia, а тестнет 0G работает благодаря полным и валидационным нодам. А вот использовать майнинговые и валидационные ноды в рамках одного проекта не получится — принцип работы этих нод строится на разных алгоритмах консенсуса (PoW и PoS соответственно).

Аренда серверов — какой хостинг выбрать и почему?

— Можно ли ставить ноду на свой домашний компьютер делая из него сервер?

— Можно, но не нужно!

В облачного сервера есть неоспоримое преимущество — он в работе 24/7, таким образом вероятность поломки и перебоев с электричеством или интернетом сведена к минимуму.

VPS, VDS и DS

Серверы делятся на два основных типа — VPS (Virtual Private Server) и VDS (Virtual Dedicated Server). Представьте, что физический сервер, на котором стоят VPS и VDS, это город. Панельные многоэтажки в нём — это VPS, а районы с частным сектором — это VDS. В панельках квартиры разделены тонкими стенами — это виртуализация сервера на уровне операционной системы, в таких квартирах всем приходиться уживаться между собой. Это значит, что ресурсы (CPU, память и дисковое пространство) могут быть разделены между различными VPS на одном физическом сервере. Обычно используется технология виртуализации, такая как OpenVZ или контейнерная виртуализация, где ресурсы разделены на уровне операционной системы. К примеру, сосед врубил утром перфоратор и все вокруг страдают. В нашем же случае, соседи по VPS страдают, если кто-то подрубил майнер (майнинговая нода), тогда производительность падает у всех.

Что же касается районов с частным сектором, то там дома ограждены большими и крепкими заборами — это виртуализация сервера на аппаратном уровне, то есть полная изоляция от соседних VDS. Каждый VDS функционирует как отдельный физический сервер, обеспечивая лучшую производительность и стабильность, так как соседние VDS не могут повлиять на ресурсы друг друга. Используются технологии виртуализации на уровне гипервизора, такие как KVM или VMware, которые обеспечивают полную изоляцию и выделение ресурсов. По этой причине, такие сервера имеют выше стоимость, чем VPS.

Ещё существует вид серверов, которые стоит выделить отдельно — DS (Dedicated Server). Это вид хостинга, при котором клиенту предоставляется целиком отдельный физический сервер (компьютер). Этот сервер не делится с другими клиентами, что обеспечивает полный контроль над его ресурсами и конфигурацией. Если следовать аналогии выше, то DS — это элитные особняки в пригороде. По этой причине DS является самым дорогим видом аренды серверов из-за выделенных аппаратных ресурсов и возможностей кастомизации. Но с другой стороны, такие серверы имеют мощные характеристики и большие объемы памяти, что позволяет при определенном уровне знаний запускать 20-30 нод разных проектов на одном таком сервере.

Обзор хостингов

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

Условно хостеров можно разделить на следующие категории:

  1. Топовые хостинги, с которыми в 99% случаев не будет никаких проблем, но и цены там соответствующие. VULTR, Digital Ocean, OVH, Amazon AWS, Google Cloud Platform — эти платформы предоставляют качественную и быструю поддержку, современное и мощное железо. Некоторые с них предоставляют бесплатное пользование на конкретный период.
  2. Hetzner — в сфере нод этот хостер стоит вынести в отдельную категорию. По мнению большинства нодеров — это золотая середина в аспекте цена/качество. Официально в правилах хостера прописано, что установка криптовалютных нод запрещена, но по факту большинство тестнетов едут именно на Hetzner. Строго не рекомендуется запускать на нём майнеры или регулярно следить, чтобы сервер не был постонно перегружен.
  3. Хостинги-середняки, в которых за недорого можно получить годный сервер, но и также можно арендовать сервер с уже изношенными жесткими дисками, что для нод некоторых проектов очень критично. Например, для проектов на Cosmos плохие жесткие диски = пропуск блоков, отставание от сети или невозможность синхронизироваться. Как правило, такие хостинги имеют хорошую ценовую политику и там, где сервер на Hetzner будет стоить 20-25 долларов, то тут можно взять за 5-7 долларов. Сюда можно отнести Xorek, Contabo, Selectel и VDSina.

Мониторинг работы ноды и решение возможных проблем

Чтобы нода постоянно работала, необходимо следить за ее состоянием и проводить регулярные проверки:

  • Мониторинг: используйте инструменты мониторинга, такие как Prometheus и Grafana, чтобы отслеживать производительность ноды.
  • Обновления: регулярно обновляйте программное обеспечение ноды, чтобы она оставалась совместимой с сетью и защищенной от уязвимостей. Для этого нужно следить за анонсами проектов, чтобы вовремя выполнять все необходимые действия.
  • Журналы (логи): периодически проверяйте журналы (логи) ноды на наличие ошибок. Эти журналы помогут выявить проблемы и понять, что нужно исправить.
  • Резервное копирование: обязательно делайте резервные копии файлов, как правило в официальных документах и гайдах указывают, что именно нужно сохранить и как восстановить работу ноду в случае переезда на другой сервер или при критических ошибках.

Если возникла проблема:

  • Проверьте журналы: ошибки в журналах могут указать на конкретную проблему, если не знаете, как исправить проблему, то воспользуйтесь советом из следующего пункта.
  • Обратитесь к сообществу: часто сообщество криптовалюты может помочь с решением проблемы, предоставив советы и инструкции. В первую очередь рекомендуем обратится к автору гайда или в официальные Discord проекта, в большинстве случаев проекты создают специальные каналы для помощи с нодами.
  • Рестарт ноды: иногда перезапуск ноды может решить временные проблемы. Если же и после перезапуска ошибка не исчезла, то придется искать истинную причину проблемы.

Стоит отметить, что настройка мониторинга, это отдельная тема для полноценного большего гайда. Как правило, в этих целях используют Node-exporter, Grafana и Prometheus.

  • Node Exporter устанавливается на каждом сервере, который нужно мониторить, и собирает метрики о состоянии системы, такие как использование CPU, памяти и дискового пространства. То есть, его необходимо устанавливать на сервере, где запущена нода.
  • Prometheus — это система управления базами данных (СУБД), которая периодически запрашивает данные у Node Exporter и других источников, сохраняет их в базе данных временных рядов и выполняет анализ с использованием языка запросов PromQL.
  • Grafana подключается к базе данных Prometheus, чтобы визуализировать собранные метрики на интерактивных дашбордах, предоставляя удобный интерфейс для мониторинга и анализа данных.

Также сообщество того или иного проекта часто разрабатывают кастомные боты и скрипты для мониторинга. Например, в Initia один энтузиаст создал бота в Telegram, который отслеживает пропуск блоков и если нода пропустила больше 20 блоков подряд, то бот присылает уведомления.

Для проектов на Cosmos есть инструмент под названием TenderDuty, который также способен отправлять уведомления по заданным параметрам в Telegram и/или Discord.

Космофорки: как одни из самых популярных тестнетов с нодами

Подавляющие большинство тестнетов, где запускаются ноды, это как раз космофорки (Cosmos SDK Forks). Но для начала необходимо разобраться с двумя понятиями, а именно Cosmos (сам проект с криптовалютой ATOM) и Cosmos SDK (фреймворк). Они тесно связаны и являются частями единой экосистемы, созданной для облегчения разработки и взаимодействия блокчейнов.

Проект Cosmos (ATOM)

Cosmos (ATOM) - это блокчейн-платформа, созданная для обеспечения взаимодействия между различными блокчейнами. Основная цель Cosmos — создать "интернет блокчейнов", где блокчейны могут обмениваться данными и ценностями между собой. Cosmos Hub, основной блокчейн сети Cosmos, использует собственный токен ATOM для обеспечения безопасности сети через механизм стейкинга и управления.

Основные особенности Cosmos (ATOM):

  • Cosmos Hub: центральный блокчейн первого уровня, который связывает различные блокчейны (зоны) в экосистеме Cosmos.
  • IBC (Inter-Blockchain Communication): протокол, который позволяет блокчейнам взаимодействовать и обмениваться данными.
  • ATOM: токен, используемый для стейкинга и управления в сети Cosmos.

Использование Cosmos дает разработчикам мощные инструменты и инфраструктуру (готовые модули) для создания и интеграции блокчейнов, что значительно упрощает процесс разработки и открывает возможности для создания комплексных децентрализованных приложений.

Фреймворк Cosmos SDK

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

Основные особенности Cosmos SDK:

  • Модульность: разработчики могут выбирать и интегрировать модули, такие как управление токенами, стейкинг, управление и другие.
  • Гибкость: позволяет создавать блокчейны, которые могут быть настроены для различных случаев использования, от финансовых приложений до игр и социальных сетей.
  • Тендерминт (Tendermint): использует Tendermint Core в качестве консенсусного механизма PoS, который обеспечивает высокую производительность и безопасность.

Допустим, разработчик создает новый блокчейн с использованием Cosmos SDK для децентрализованного финансового приложения. Этот блокчейн может подключиться к Cosmos Hub через IBC, позволяя пользователям переводить активы между этим блокчейном и другими блокчейнами в экосистеме Cosmos. Токен ATOM может быть использован для стейкинга и обеспечения безопасности, поддерживая надежность всей сети.

Таким образом, Cosmos SDK предоставляет инструменты для создания блокчейнов, а проект Cosmos (ATOM) обеспечивает инфраструктуру для их взаимодействия и интеграции в глобальную сеть блокчейнов.

Особенности космофорков

Исходя из выше написанного, косфорки (форки Cosmos SDK) - это блокчейны, созданные на основе фреймворка Cosmos SDK и являются частью экосистемы Cosmos. Рассмотрим их плюсы и минусы с точки зрения нодранера.

Плюсы:

  • низкий порог входа — новичок после установки 2-3 таких нод без проблем сможет в дальнейшем запускать и обслуживать космофорки, так как алгоритм запуска в 99% случаях одинаковые;
  • в официальных документах проекты сильно завышают требования к серверу, где будет запускаться нода — как правило, на таком сервере можна будет запустить 2-3 ноды разных космофорков;
  • большое сообщество, которое поможет разобраться с потенциальными проблемами и ошибками;
  • много систем мониторинга и оповещения о неполадках с нодой (например, TenderDuty);
  • не слишком частые обновления, то есть в работу ноды вмешиваться нужно крайне редко;
  • хорошо подходят для набивание порфтолио, если цель попадать в мейннеты космофорков.

Минусы:

  • большая часть космофорков не раздают наград или вообще не доживают до листингов, будьте готовы установить и обслуживать ноду за просто так;
  • для космофорков не сильно важны процессор и оперативная память, но критично важны жесткие диски, а именно играет роль их изношенность (плохие жесткие диски, это первая причина пропусков блоков и невозможность догнать актуальную высоту блока).

Примеры космофорков:

  1. Stargaze: платформа для создания и торговли NFT.
  2. Osmosis: децентрализованная биржа для обмена криптовалютами.
  3. Secret Network: блокчейн с акцентом на конфиденциальность данных.
  4. Juno: смарт-контрактная платформа, которая позволяет разработчикам создавать и развертывать децентрализованные приложения (dApps).
  5. Celestia: модульная блокчейн-платформа, ориентированная на масштабируемость и децентрализацию, которая предоставляет инфраструктуру для создания специализированных блокчейнов.

Больше примеров вы найдете в этом експлорере.

Установка нескольких космофорков на один сервер

Частая проблем среди новичков — это запуск нескольких нод на одном сервере. Боязнь этого дела приводит к дополнительным тратам, ибо новички арендуют больше серверов, что бы установить по одной ноде на каждый сервер. Хотя это и правильная стратегия, но если вспомнить момент, что не за все ноды дают награды, то таким образом затраты на сервера растут в разы. Поэтому лучше придерживаться правила "один сервер = одна нода", если вы запускаетесь в мейннете.

Первый шаг к беспроблемной установки ноды — это проверка портов, которые она использует. В большинстве случаев, проекты в официальной документации указывают, какие порты использует нода.

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

92.124.15.10:26657

92.124.15.10 — IP сервера

26657 — порт

Если нужно поменять порт, то не рекомендуется занимать так называемые зарезервированные порты (Well-known ports). Они находятся в диапазоне 0-1023 и используются системными процессами и службами, например, HTTP (порт 80), HTTPS (порт 443), FTP (порт 21). Максимальный диапазон в сетевом протоколе TCP/IP варьируются от 0 до 65535.

Стандартные порты космофорков

Все ноды, которые используют Cosmos SDK, имеют стандартный набор портов.

pprof_laddr:

  • 26656 - для связи между нодами, обмена блоками и транзакциями.

laddr (rpc):

  • 26657 - для взаимодействия с нодой через API, включая отправку транзакций и получение информации о блоках.

prometheus:

  • 26660 - для мониторинга и сбора метрик.

gRPC:

  • 9090 - для взаимодействия с клиентами и другими сервисами через протокол gRPC.

gRPC (web):

  • 9091 - для взаимодействия через протокол gRPC-web.

proxy_app:

  • 26658 - для связи ноды с приложением (ABCI).

laddr (p2p):

  • 6060 - для профилирования производительности.

api:

  • 1317 - для REST API сервера.

То есть, при установке космофорка на чистый сервер можно ничего не менять и нода будет правильно работать, но вот уже второй космофорк работать не будет и в логах буде подобная ошибка:

E[2024-06-07|12:34:56.789] Failed to start P2P server module=p2p err="failed to listen on 0.0.0.0:26656: listen tcp 0.0.0.0:26656: bind: address already in use"
E[2024-06-07|12:34:56.790] Node failed to start module=main err="P2P listen err: failed to listen on 0.0.0.0:26656: listen tcp 0.0.0.0:26656: bind: address already in use"

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

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

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

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

Изменения портов для космофорков

Существует два способа изменения портов для космофорков — ручной и при помощи команды в терминале.

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

Порты в космофорках нужно менять в трёх файлах — config.toml, app.toml и client.toml. Которые, на примере 0G, находятся по следующему пути:

Пример расположения параметров в файлах конфигурации

config.toml

[p2p]
laddr = "tcp://0.0.0.0:26656"

[rpc]
laddr = "tcp://0.0.0.0:26657"

[proxy]
proxy_app = "tcp://127.0.0.1:26658"

[instrumentation]
prometheus_listen_addr = ":26660"
pprof_laddr = "localhost:6060"

app.toml

[grpc]
address = "0.0.0.0:9090"
grpc-web.address = "0.0.0.0:9091"

[api]
address = "tcp://0.0.0.0:1317"

client.toml

node = "tcp://localhost:26657"

Также можно поменять порты при помощи команды в терминале, этот подход более правильный и професcиональный. Пропишем команду на примере проекта 0G, она сработает, если порты на ноде стандартные, в противном случае команду нужно редактировать:

sed -i.bak -e "s%:26658%:27658%; s%:26657%:27657%; s%:6060%:6160%; s%:26656%:27656%; s%:26660%:27660%" $HOME/.0gchain/config/config.toml && sed -i.bak -e "s%:9090%:9190%; s%:9091%:9191%; s%:1317%:1417%; s%:8545%:8645%; s%:8546%:8646%; s%:6065%:6165%" $HOME/.0gchain/config/app.toml && sed -i.bak -e "s%:26657%:27657%" $HOME/.0gchain/config/client.toml 

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

Переходим сюда и ищем блок, как на скрине ниже:

Для смены портов просто нажмите на цифру 1, если будете ставить ещё космофорк на этот сервер, то нажмите цифру 2 и так далее.

Здесь вновь команда на примере проекта 0G, но если вы хотите поменять порты для другого проекта, то после выбора цифры скопируйте команду в любой редактор и измените в трёх местах название папки с .0gchain на название папки другого проекта.