Алгоритм консенсуса
Обеспечение надежной работы социальной сети, устойчивой к цензуре.
Консенсус-протокол представляет собой процесс, посредством которого сеть компьютеров может достичь однозначного согласия о том, кто чем владеет. Цель этого консенсус-протокола – минимизировать риски по созданию альтернативной блокчейн-цепочки, закрытию сети, или цензурированию отдельных пользователей. В Голосе используется протокол, сочетающий в себе методы, используемые протоколами Доказательства владения (POS) и Доказательства работы(POW), за счет чего обеспечивается большая надежность и устойчивость к цензурованию.
Консенсус представляет собой процесс, посредством которого группа лиц достигает однозначного согласия по поводу текущего состояния распределенной сети. Основным требованием для достижения консенсуса является соглашение о порядке следования событий и детерминированный алгоритм для обработки этих событий. Второе по значимости требование – устойчивость к цензурированию. Устойчивость к цензурированию означает наделение всех пользователей правом размещать свои собственные материалы в социальной сети.
На каждом 21 блоке (один раз в раунде) выбираются 21 активных майнеров для текущего раунда. Из активных майнеров в случайном порядке формируется очередь для производства блоков (блок производится каждые 3 секунды). Отбор активных майнеров осуществляется следующим образом:
19 лучших майнеров, за которые проголосовали держатели Силы ГОЛОСА (отложенных ГОЛОСОВ) 1 слот предназначен для всех невыбранных майнеров 1 слот выбирается посредством механизма Доказательства работы
Голосование за майнеров
Каждый пользователь может проголосовать за любое количество майнеров либо непосредственно, либо опосредованно – по доверенности. Голосование по доверенности может быть до 3-х уровней в глубину. Процесс голосования очень похож на то, как майнеры биткоина голосуют при выборе майнинговых пулов. Только владельцы ГОЛОСОВ, имеющие отложенные ГОЛОСА (Силу ГОЛОСА), имеют право голосовать. Никто не замораживает свой капитал на год или более без оплаты. Мы считаем, что ликвидность имеет реальную стоимость, как и электроэнергия имеет стоимость. Соответственно, оба параметра могут использоваться как объективная мера работы.
Использование оставшихся (невыбранных) майнеров
Лучшие 19 майнеров имеют приоритет и получают возможность производить блоки в каждом раунде. Оставшиеся желающие производить блок по очереди получают это право примерно раз в 63 секунды. Цель состоит в том, чтобы эффективно распределить право на производство блока между этими желающими, пропорционально доле голосов, которые они получают. Тот, кто имеет в два раза больше голосов, должен получать право на майнинг в два раза чаще. Выбранный алгоритм является разновидностью алгоритма честных очередей со средневзвешенными коэффициентами (WFQ). Согласно WFQ каждый производитель блока получает слот для майнинга, основываясь на весе тех голосов, которые он имеет, и времени ожидания на производство блока. При любом изменении количества голосов за того или иного майнера время слота обновляется. В начале каждого раунда производитель блока с наименьшим временным слотом выбирается для создания блока и перемещается в конец очереди.
Если майнер не в состоянии произвести блок, то блок не будет произведен. Если ни один из оставшихся майнеров не произведет блок, то сеть будет по-прежнему на 95% надежна, выдавая блоки каждые 3 секунды.
Доказательство работы
В сети предполагается использовать преимущества алгоритма Доказательства работы (майнинга), но без недостатков последнего, таких как непредсказуемое время производства блока, концентрация и централизация майнинговых пулов, вероятность, что конечные блоки окажутся брошенными. Основные преимущества ДР (POW):
Высокая цена подделки
Экономическая заинтересованность в оптимизации необходимых компьютерных алгоритмов Модель распределения, которая привлекает технически грамотных пользователей Создание надежной сети с малой временной задержкой
В отличие от традиционного майнинга, временные интервалы на производство блока и выполнение доказательства работой разнесены. Когда решение, которое соответствует заданной трудности в сети, найдено, транзакция попадает в сеть и включается в текущий блок на производство. Для включения в блок ДР (POW) должно быть получено с использованием данных заголовка текущего блока. Далее транзакция добавляется в очередь на включение в следующий раунд. Заданная сложность становится функцией длины очереди. Простой алгоритм требует, чтобы количество начальных нулевых битов хэша POW равнялось бы количеству производителей в очереди.
При заданном времени производства блока (3 секунды) майнер ДР (POW) должен работать на ноде (узле) с минимальной задержкой, чтобы получать заголовок блока как можно оперативнее и транслировать результат вычислений в сеть с временным запасом, достаточным для получения этих данных следующим производителем блока. Использование майнинговых пулов значительно увеличивает временную задержку и соответственно существенно сокращает время доступное на вычисление (ДР).
Алгоритм майнинга
Несмотря на то, что использоваться может любой алгоритм майнинга, представленный ниже алгоритм имеет несколько полезных свойств. При этом данный алгоритм требует подтверждение майнером факта владения приватным ключом от учетной записи, с которой в конечном счете будет произведен блок и куда будет зачислено вознаграждение. Алгоритм также требует от пользователя произвести верификацию подписи с помощью эллиптической кривой, оптимизация которой положительно скажется на проверке (валидация) всех транзакций и снизит расходы на эксплуатацию сети в долгосрочной перспективе.
Пусть HASH = надёжная хэш-функция (SHA256 или лучше) Пусть H = заголовок блока ID Пусть Н2 = HASH (H + NONCE) Пусть PRI = приватный ключ производителя Пусть PUB = публичный ключ производителя Пусть S = SIGN (PRI, HASH (H)) Пусть K = RECOVER_PUBLIC_KEY (H2, S) Пусть POW = HASH (K)
Для того, чтобы быть действительным POW должно быть меньше заданной трудности, и RECOVER_PUBLIC_KEY (H2, S) должно равняться PUB. Случайность задается майнером либо за счёт случайного выбора NONCE, либо при генерации подписи методом эллиптической кривой. Это в сочетании с выбором приватного ключа должно обеспечить, что каждый майнер работает над своим вычислением.
Начиная и заканчивая POW с криптографически защищенной хэш-функцией мы можем гарантировать, что любые уязвимости или вычислительные сокращения, которые могут существовать в алгоритме RECOVER_PUBLIC_KEY или алгоритме SIGN, в конечном счете вернут алгоритм POW к простому POW, основанному на хэш-функции.
Атака двойного расхода
Двойное расходование средств может произойти в любой момент, когда при реорганизации блокчейна исключаются ранее включенные транзакции. Это может произойти при разрыве связи. При делегируемом доказательстве работы (DPOW) вероятность разрыва связи и проведения двойной атаки очень низка.
Сеть способна мониторить свое состояние, и любой разрыв связи сразу обнаруживается, поскольку майнеры не могут производить блоки по расписанию. Когда это происходит, пользователям необходимо подождать до тех пор, пока половина майнеров не подтвердит их транзакции, что может занять до 42 секунд.
Транзакции в качестве доказательства владения
Каждая транзакция в сети может дополнительно включать хэш недавнего блока. Если это имеет место быть, то подписант транзакции может быть уверен в том, что его транзакция принадлежит основному блокчейну. Побочным эффектом этого процесса является то, что со временем все заинтересованные стороны начинают напрямую подтверждать целостность реестра транзакций.
Реорганизация блокчейна
Поскольку подавляющее большинство майнеров выбираются, подотчетны и получают временной слот для майнинга, ситуация, когда существуют параллельные блокчейны, маловероятна. Время от времени из-за задержек в сети майнеры не будут вовремя получать предыдущий блок. При такой ситуации последующий майнер разрешает эту проблему путем майнинга с использованием первого блока из предыдущих, который он получил. После 14 подтверждений (около 42 секунд) транзакция подтверждается 2/3 активных майнеров, что означает невозможность отката назад блокчейна без ручного вмешательства.
Несмотря на то, что система устойчива к естественному переструктурированию, существует вероятность создания конкурирующих цепочек в один или два блока путем использования специализированного программного обеспечения, разрывов в сети или действий некомпетентных или злонамеренных майнеров. Система всегда будет выбирать цепочку блоков, над созданием которой работает максимальное количество майнеров. Майнер, который работает на себя, сможет производить только один блок за раунд. Соответственно, его блокчейн будет всегда иметь более низкий уровень участия, чем альтернативный блокчейн. Майнер или небольшая группа майнеров не смогут создать блокчейн, где будет задействовано больше майнеров, чем в основном блокчейне. Уровень участия рассчитывается путем сравнения числа блоков, ожидаемого к производству за определенный период времени, и фактического количества произведенных блоков.
Максимальная децентрализация
В случае с делегируемым доказательством работы (DPOW) все заинтересованные стороны имеют возможность влиять на процесс производства блоков пропорционально своей доле. Каждый, кто желает участвовать в майнинге, может произвести блок без участия в гонке за голоса избирателей. Любая другая существующая система консенсуса исключает подавляющее большинство интересантов от участия в процессе майнинга. Исключение происходит по-разному: некоторые блокчейны имеют встроенный механизм участия «только по приглашениям», другие исключают, создав системы при которых стоимость участия превышает возможный заработок. Есть системы, которые технически позволяют каждому участвовать в процессе майнинга, но эти участники игнорируются несколькими крупными игроками, которые производят подавляющее большинство всех блоков. Только механизм делегированного доказательства работы гарантирует равномерное распределение майнинга среди большинства и позволяет каждому влиять на выбор майнеров.