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