Делегатство и роли нод

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

Алгоритм DPOS (делегированное доказательство доли) был предложен Даниэлем Ларимером и впервые был применен в BitShares.

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

В Голосе как и в Стиме используется смешанный консенсус DPOS (Delegated Proof of Stake) + POW.

За один раунд создается 21 блок, с интервалом около 3 секунд. Топ 19 делегатов из общего списка (набравшие в сумме наибольший вес голосов за свои кандидатуры) производят блок в каждом раунде, еще один блок производит делегат, не попавший в топ 19, причем вероятность того, что он произведет блок пропорциональна весу голосов отданных за него (и соответственно его позиции в листинге), в сравнении с другими делегатами, не вошедшими в топ. И последний (21-й) блок в раунде производит POW - майнер в соответствии с очередью.

Однако в Голосе задача делегатов не ограничивается одним лишь подписанием блоков. Одной из важнейших задач делегатов является публикация ценовых фидов (price feed) (курс токенов GOLOS в Золотых (GBG)). При этом они напрямую заинтересованы в выставлении корректной стоимости, (которая в свою очередь регулируется рынком), ведь получая вознаграждение в виде Силы Голоса они будут нести потери при публикации недостоверных цен. С учетом того, что ценовые фиды устанавливаются делегатами, которые были избраны сообществом, текущая цена, используемая для конверсии является медианным значением выборки ценовых фидов. Из этого следует, что делегаты, имеющие существенное отклонение от медианного значения имеют в свою очередь минимальное влияние на цену конверсии, однако могут терять свою репутацию в сообществе. Кроме того, делегаты устанавливают минимальную комиссию в GP (Сила Голоса) за создание аккаунта, и процентную ставку доходности Золотого (GBG), а также принимают/либо отклоняют новые релизы сети (хардфорки).

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

Одним из важных преимуществ данной системы – является то, что с её помощью все держатели Силы Голоса являются одновременно акционерами платформы, и могут через доверенных лиц (делегатов) принимать участие в принятии различных важных для платформы решений. Активное развитие платформ Стима, а теперь и Голоса подтверждают, что данный алгоритм определенно имеет большое будущее, в том числе для развития децентрализованных платформ.

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

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

Типы и роли нод

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

Witness node

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

Зачастую делегаты держат две ноды, основную и запасную (резерв). Часто они находятся в разных дата-центрах и не зависят друг от друга. Если с основной нодой происходит неполадка, то делегат меняет ключ подписи блоков на резервный и формированием блоков будет заниматься запасная нода.

Seed node

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

API node

Часть плагинов занимаются предоставляем API для разработчиков и их пользователей. Такие ноды часто называют полными, если у них включены все доступные плагины и хранят историю с первого блока. Так как плагины дают доступ не только к состоянию системы, но и формируют свои структуры данных, у них повышенные требования к ресурсам сервера (особенно к оперативной памяти, так как нода хранит базу данных ChainBase в RAM). Именно через API ноды происходят запросы на актуальную информацию, статус аккаунтов, историю операций или заявки в комитете.

Примеры таких плагинов:

  • network_broadcast_api — отправка транзакции в сеть;

  • database_api — основной плагин предоставляющий доступ к состоянию системы, получение данных об аккаунтах, получение информации о блоке, получение параметров сети;

  • account_history — получение списка операций связанных с аккаунтом;

  • worker_api — получение списка заявок, информации о заявке, получение списка голосов по заявке;

  • operation_history — получение информации об операциях в блоке;

  • witness_api — получение списка делегатов, очереди делегатов, информации о конкретном делегате и его голосуемых параметрах сети.

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