В этой статье будет представлена техническая реализация быстрой и строгой согласованности в сети DFINITY. Основные ключевые слова: пороговая группа, пороговое реле, вероятностный консенсус по слотам карт и пороговое реле.
Предыстория
DFINITY использует механизм консенсуса PoS. Для участия в сети требуется определенная сумма доли (то есть токенов DFINITY) в качестве депозита. Все узлы равны, и единственный способ увеличить отдачу — добавить в сеть больше узлов. Следует подчеркнуть, что депозиты для всех узлов DFINITY одинаковы, и дополнительных преимуществ за оплату большего количества депозитов не будет.
Частью преимущества PoS является то, что все узлы известны платформе, поэтому платформа может вызывать узлы для выполнения определенных функций и ожидать, что эти узлы будут в сети. Если вызываемый узел не в сети, узел может потерять часть депозита.
Поскольку мы знаем, кто участвует в сети, и предполагаем, что почти все узлы находятся в сети, мы можем случайным образом назначать задачи узлам с высокой степенью уверенности в том, что эти задачи будут выполнены. Это также является основой DFINITY.
Пороговая группа
Комитет
Пороговая группа — очень важная концепция во всем процессе генерации консенсуса DFINITY. Пороговые группы позволяют нам избежать ситуации, когда есть только один человек, принимающий решения, и являются ядром DFINITY. В любой момент времени в сети существует пул активных пороговых групп. Каждая пороговая группа выбирается случайным образом из всех узлов, подключенных к сети, и узел может быть включен в несколько пороговых групп одновременно.
Все узлы в пороговой группе работают вместе, создавая случайность; В каждом раунде из пула пороговых групп выбирается новая пороговая группа.

Пороговые группы выбираются случайным образом заранее и помещаются в пул. Как показано на рисунке ниже, в течение периода времени 1 выбирается пороговая группа для периода времени 2. По окончании периода времени 1 пороговая группа для этого периода времени распускается и начинает действовать пороговая группа для периода времени 2. Один и тот же процесс повторяется бесконечно.
Пороговое реле
Пороговое реле
Случайность DFINITY генерируется с помощью пороговой ретранслируемой проверяемой случайной функции. Представьте, что вы играете в покер. Вам нужно убедиться, что дилер не может предсказать или манипулировать картами, которые выпадают из колоды. Вот почему вам приходится тасовать свое место на публике. Перетасовка колоды карт — пример проверяемой случайной функции, которая работает в сети ненадежных узлов: игроков в покер.
Для создания пороговых реле мы используем пороговое шифрование. Но сначала давайте рассмотрим криптографию с открытым ключом. Представьте себе, что у вас есть два ключа от двери вашего дома: один ключ, чтобы закрыть дверь, а другой — чтобы открыть дверь. Вы можете отдать ключ от своей двери кому угодно, так кого волнует, что кто-то другой может запереть вашу дверь? Важно то, что открыть дверь можете только вы.
Цифровые подписи в криптографии с открытым ключом по сути являются тем же самым, но более абстрактными. У вас есть два ключа: один может подписать фрагмент данных, а другой может использоваться для проверки подписи. Если другие люди могут проверить вашу подпись под фрагментом данных, это хорошо, при условии, что вы единственный, кто мог создать эту подпись. Отсюда и появился термин «криптография с открытым ключом и закрытым ключом». Ключ подписи должен быть закрытым.
Пороговое шифрование в основном работает по тому же принципу, за исключением одного отличия: при пороговом шифровании закрытый ключ или ключ подписи делится на несколько частей, каждая из которых может быть использована для создания подписи. После того, как пороговый процент подписей собран, создается полная цифровая подпись, которую можно проверить с помощью открытого ключа.
Если доли акций недостаточно для создания полной цифровой подписи, ее невозможно проверить. При фактической реализации DFINITY нам необходимо достичь только большинства (51%) коэффициента агрегации. Здесь нам нужно знать: у каждой пороговой группы есть открытый ключ, а у каждого члена группы есть доля закрытого ключа.

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

Так как же генерируется случайный маяк? Мы начинаем со случайного источника, используем случайный источник для выбора пороговой группы, а члены пороговой группы подписывают случайность (используемую для выбора пороговой группы).
Эта пороговая сигнатура (помните, нам нужен только порог в 51%, и ни один член пороговой группы не может повлиять на сигнатуру здесь) используется для выбора следующей пороговой группы. Этот процесс продолжается бесконечно.

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

Узлы могут делать это самостоятельно и расставлять приоритеты между блоками перед их созданием и трансляцией. Это экономит вычислительные и сетевые ресурсы, поскольку на практике для создания и трансляции блока может потребоваться всего несколько (например, пять) узлов.
Блок подписи
В сети DFINITY пороговые группы для создания случайности также имеют функцию подписи блоков.
Каждый член пороговой группы следует одному и тому же правилу: он получает блок и, если он недействителен, отбрасывает его. Если он действителен, проверяется его приоритет.
Если у него более низкий приоритет, чем у ранее полученного блока, они его отбрасывают. Если приоритет выше, они подписывают его с помощью своего общего закрытого ключа, а затем транслируют блок и подписанный общий ключ.

Как только блок набирает необходимое количество подписных акций для создания полной, проверяемой подписи, он считается «нотариально заверенным», и блок добавляется в цепочку.
Ниже представлен весь процесс блока:

Эффективное подтверждение блоков DFINITY
Благодаря использованию пороговых релейных проверяемых случайных функций время подтверждения блока сети DFINITY составляет всего два блока, время подтверждения может составлять всего 2,5 секунды, а объем обработки транзакций в секунду составляет около 50 транзакций. В целом скорость подтверждения блоков действительно очень высокая, и мы также должны видеть огромную роль, которую играет VRF.
Как создать пороговую группу
1) Новые клиенты, присоединяющиеся к сети, случайным образом распределяются по разным группам с помощью алгоритма VRF.
2) Инициализируйте параметры пороговой группы (включая размер группы, порог и т. д.).
3) После завершения инициализации открытый ключ успешно созданной группы регистрируется в сети.
4) Создание пороговых групп отделено от бизнес-процесса блокчейна, поэтому их можно выполнять параллельно. Как показано на рисунке, мы создаем красные и зеленые группы одновременно.
5) Недавно добавленные пороговые группы и клиенты (или майнеры) должны подождать 2 цикла EPOCH, прежде чем их можно будет активировать.
Как выбрать подходящую длину эпохи: Чтобы обеспечить корректность, эпоха должна содержать больше блоков, чем ветвь цепи. Однако, поскольку облегченные клиенты сохраняют только информацию заголовка блока ключевых кадров, в целях эффективности эпоху необходимо определять как можно дольше, например, одну неделю.
Вероятностный слотовый протокол — обеспечение генерации блоков и предотвращение форков
Внедрение вероятностного слотового протокола в структуру пороговой ретрансляции подписей может гарантировать, что майнеры в сети всегда будут производить блоки в оптимальной основной цепочке. При этом в сочетании с алгоритмом VRF достигается высокая согласованность и эффективное время подтверждения блока.
Процесс генерации блока для каждой высоты h выглядит следующим образом:
1) Сортируем процессы текущей группы порогов высоты по алгоритму VRF.
2) Разделите отсортированные процессы на разные слоты и отметьте их в порядке приоритета в системе.
3) Оцените процессы в разных слотах и отметьте их вес.
4) DFINITY также вводит механизм, основанный на тайм-ауте, который определяет, как долго следует ждать первого выбранного процесса. Если блок не сгенерирован, следующий процесс выполнит блок.
Как показано на рисунке, полный процесс генерации блока: ① Случайная сортировка; ② Группировка (слоты); ③ Подсчет очков; ④ Выберите процесс с наивысшей оценкой для упаковки блока и его трансляции; ⑤ Эстафета с пороговой группой, продолжайте искать цепочку с наивысшим счетом снова и снова.
Оставшиеся вопросы
Структура порогового реле и протокол вероятностного слота позволяют добиться эффективной генерации блоков и крайне низкой вероятности событий разветвления цепи. Однако мы по-прежнему сталкиваемся с попытками атак со стороны злоумышленников в сети, например, в следующих двух ситуациях:
1) Эгоистичная атака майнинга: злонамеренные злоумышленники выборочно сохраняют добытые блоки и постепенно освобождают их, получая преимущество контроля транзакций по сравнению с честными узлами; В то же время атаки эгоистичного майнинга увеличивают количество подтверждений, необходимых для достижения окончательной согласованности.
2) Ничего не поставлено на карту: злонамеренному злоумышленнику достаточно быть достаточно удачливым, чтобы быть выбранным в качестве слота серии 0 (т. е. с наивысшим приоритетом), после чего он может голосовать за все вилки в любое время и создавать вилки с высоты h и выше, а также выполнять атаку повторного воспроизведения.
Сеть DFINITY предлагает решение:
Основная идея — ввести нотариуса. Подпись нотариуса должна быть на текущей высоте. Таким образом, если блок будет выпущен с опозданием, подпись нотариуса не будет получена, и блок будет считаться недействительным.
Процесс производства блока в нотариальном режиме
Чтобы устранить две потенциальные угрозы, мы ввели нотариуса для подписания блока. Анализ блочного принципа выглядит следующим образом:
1) После того, как текущая высота h получает пороговую сигнатуру предыдущей группы, члены группы запускают свои собственные таймеры и собирают информацию о транзакциях в течение BLOCK_TIME (без обработки, примечание: DFINITY не полагается на строгую синхронизацию часов).
2) Во время ожидания BLOCK_TIME протокол вероятностного слота оценивает процессы и выбирает упакованные процессы.
3) После того, как BLOCK_TIME, т.е. время ожидания 5 секунд, истекло, принимаются два решения: ① была ли оценена цепочка с наивысшим счетом; ② является ли блок допустимым и выбран ли слот в качестве процесса, ответственного за упаковку; ③ нотариус проверяет блок, и процесс транслирует фрагмент пороговой групповой подписи блока.
Когда же заканчивается процесс подписания? После достижения порогового значения и объединения групповой подписи текущей высоты фрагмент подписи текущей высоты больше не будет подписан.
Несколько выводов:
1) При нормальной работе сети, если BLOCK_TIME установлено достаточно большим с учетом синхронизации сети, каждый член группы будет отдавать приоритет только цепочке с наивысшим рейтингом.
2) Нотариальная группа будет сертифицировать только блоки, представляющие цепочку с наивысшим рейтингом.
3) Такой подход позволяет предотвратить разветвления и, таким образом, быстро достичь окончательной согласованности.
Решение той же проблемы с оценкой
Процесс в слоте 0, контролируемый злоумышленником, может транслировать большое количество различных версий своего блока в DOS. Хотя этот вредоносный процесс будет быстро изгнан из сети из-за византийского поведения, как мы можем предотвратить это?
Решение: Если процесс находит блок с таким же наивысшим баллом, он пересылает его только тем узлам, которые еще не обнаружили такой же балл. Если член группы находит блок с таким же наивысшим баллом, он не подписывает его, а вместо этого начинает подписывать следующий по величине блок из другого слота.
краткое содержание
Благодаря общему архитектурному проекту сеть DFINITY обеспечивает возможность эффективного создания блоков, а любое вредоносное поведение будет игнорироваться сетью и наказываться нотариусом.
В идеале для достижения окончательной согласованности сети DFINITY требуется всего 2 блока и пороговый групповой ретранслятор, что является огромным преимуществом по сравнению с конкурирующими блокчейн-платформами. Если BLOCK_TIME установлено на 5 секунд, среднее время подтверждения составляет всего 7,5 секунд.
Версия DFINITY Bronze имеет значительные преимущества в производительности по сравнению с технологиями блокчейнов первого поколения (Bitcoin) и второго поколения (Ethereum) с точки зрения времени блока, времени подтверждения транзакции и расхода топлива.
вопрос
Вопрос: Пороговая группа для временного периода 2 выбирается в течение временного периода 1. В этом случае будут ли члены пороговой группы для временного периода 2 уязвимы для DDOS-атак?
Ответ: Ответ — нет. Потому что в DFINITY эти участники скрыты. Платформа выбирает этих участников, но никто не знает, кто они.
Проблема: Проблемы со связью являются узким местом при создании ключей BLS. Сколько узлов в пороговой группе DFINITY? Как решить эту проблему?
Ответ: В пороговой группе 400 узлов. Связь стоит дорого, но не настолько, чтобы стать проблемой, которую нам нужно решать.
Вопрос: Что делать, если член пороговой группы раскроет свой закрытый ключ?
Ответ: Поскольку для достижения консенсуса нам необходим определенный порог (51%) долей закрытого ключа, утечка одной доли не является проблемой.
Вопрос: Сколько узлов выбирается для инициирования блока?
Ответ: Ответ — 0. Каждый узел может быть выбран для инициирования блока. Конкретная вероятность определяется предыдущим алгоритмом случайной сортировки. Узел с более высоким приоритетом имеет более высокую вероятность. Если блок инициирован, то его фактически реализуют около 5 узлов.

IC-контент, который вам интересен
Технологический прогресс | Информация о проекте | Глобальная деятельность

Собирайте и подписывайтесь на канал IC Binance
Получайте последние новости

