waves_logo Docs
  • Руководство владельца ноды
    Руководство владельца ноды
  • Установить ноду Waves
    • Развернуть ноду в Docker
      Развернуть ноду в Docker
    • Установить ноду на Ubuntu
      Установить ноду на Ubuntu
    • Установить ноду на macOS
      Установить ноду на macOS
    • Установить ноду на Windows
      Установить ноду на Windows
    • Установить из исходников (сборка SBT)
      Установить из исходников (сборка SBT)
    Установить ноду Waves
  • Синхронизировать блокчейн Waves
    • Импортировать и экспортировать блокчейн
      Импортировать и экспортировать блокчейн
    • Загрузить актуальный блокчейн
      Загрузить актуальный блокчейн
    • Откатить ноду
      Откатить ноду
    Синхронизировать блокчейн Waves
  • Генерировать блоки
    Генерировать блоки
  • Обновить ноду
    Обновить ноду
  • Конфигурация ноды
    Конфигурация ноды
  • Логирование
    Логирование
  • Кошелек ноды
    Кошелек ноды
  • Фичи
    • Протокол активации
      Протокол активации
    Фичи
  • Собственный блокчейн
    Собственный блокчейн
  • REST API ноды
    • API-ключ
      API-ключ
    • Работа с транзакциями
      Работа с транзакциями
    • Формат числовых полей
      Формат числовых полей
    • Постраничная выборка
      Постраничная выборка
    • CORS
      CORS
    • Ограничения пула публичных нод
      Ограничения пула публичных нод
    • Медленные запросы
      Медленные запросы
    • Коды ответов и ошибки
      Коды ответов и ошибки
    REST API ноды
  • Расширения
    • gRPC Server
      gRPC Server
    • Blockchain Updates
      Blockchain Updates
    Расширения
  • Устранение неполадок
    • Генерация блока FAQ
      Генерация блока FAQ
    Устранение неполадок
  • Нода на языке Go
    Нода на языке Go
      • English
      • Русский
      On this page
        • Нововведения и отличия от ноды Scala
        • Генерация блоков
        • Разработчикам Go
        • Как запустить ноду Go
      waves_logo Docs

          # Нода на языке Go

          Осенью 2018 года был запущен проект второй реализации ноды Waves (на языке Go). Наличие второй (альтернативной) реализации ноды делает сеть Waves менее уязвимой к ошибкам реализации протокола Waves. Кроме того, нода Go позволяет испытать новые подходы к реализации существующих алгоритмов и внести в спецификации протокола Waves детали, скрытые в коде на Scala. Нода Go - довольно молодой продукт с меньшим количеством пользовательских интерфейсов, чем у ноды Scala, однако разработчики планируют расширить функциональность и добавить поддержку большего количества знакомых пользователям интерфейсов. Поддержка оригинального REST API ноды Go реализована только частично. В настоящее время все крупные релизы протокола Waves выходят одновременно на Scala и Go.

          Подробно об истории создания ноды Go .

          В данной статье:

          • Нововведения и отличия от ноды на Scala
          • Генерация блоков
          • Разработчикам Go
          • Как запустить ноду Go

          # Нововведения и отличия от ноды Scala

          В реализации ноды Go применяется отличная от реализации Scala концепция хранения блоков и состояния ноды. Блоки не хранятся в хранилище leveldb, новые блоки целиком добавляются к простому бинарному файлу, а мета-информация о них сохраняется в leveldb.

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

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

          # Генерация блоков

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

          # Разработчикам Go

          Ноду Go можно использовать для разработки и эксплуатации сервисов, ориентирующихся на получение данных через gPRC API. В ноде Go полностью реализован gRPC интерфейс (gRPC API) для доступа к данным ноды и блокчейна.

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

          Если у вас возникли вопросы или предложения, создайте Issue на Github или пообщайтесь с разработчиками в чате в Telegram или Discord .

          # Как запустить ноду Go

          Для начала работы с нодой Go, загрузите исполняемый файл для своей платформы на странице релиза в Github и запустите ноду, следуя инструкции .

          Генерация блока FAQ
          Генерация блока FAQ