Автор данной статьи-Майк Магазин оригинальных работ Перепечатывается с согласия автора
вышеАнализ архитектуры Lotus-Storage-MinerПредставлена основная архитектура программного обеспечения для майнинга.В этой статье будет проанализирован консенсус Filecoin и процесс генерации блоков с точки зрения исходного кода.
механизм консенсуса
Для блокчейна очень важным моментом является его механизм консенсуса.Механизм консенсуса необходим для распределенных систем, потому что механизм консенсуса определяет, кто имеет право производить блоки, и он может обеспечить участие распределенной сети.Все стороны сотрудничают с единая цель, координировать несколько сторон для достижения одного и того же результата и обеспечивать непрерывную и стабильную работу всей сети. В настоящее время основными механизмами консенсуса в публичной цепочке блокчейна являются:
- Рабочая нагрузка PoW доказала, что чем больше сухих, тем больше доход
- PoS доказательство доли, чем больше вы держите, тем больше вы получаете
- DPoS голосуют прокси
Механизм консенсуса Filecoin
Для сети Filecoin он не использует вышеуказанный механизм консенсуса, а использует неинтерактивный способ его достижения, который называется ожидаемым консенсусом (Expected Consensus). Сторонам, участвующим в выборах, не нужно голосовать друг за друга.Каждый узел должен только произвести внутренние расчеты.Если определенный результат будет удовлетворен, выборы будут выиграны, и будет предоставлено право упаковки блоков. Поэтому в каждом раунде выборов будет избран один или несколько майнеров для создания нового блока.Также возможно, что в этом раунде нет победителя, поэтому этот раунд называется пустым раундом. Если на выборах побеждает более одного майнера, то в этом раунде будет несколько блоков, и комбинация этих блоков называется набором подсказок.
Базовая реализация механизма консенсуса Filecoin EC
Представленный выше, будет глобальный запуск Miner Miner со структурой StorageMinerAPI, в которую входят два членаstorage.Minerиminer.Miner, хранилище. Майнер в основном отвечает за процесс герметизации хранилища данных, доказательство репликации, доказательство пространства-времени и майнер. Майнер отвечает за майнинг и производство блоков.
Среди них API — это интерфейс связи с блочными узлами, epp предоставляет интерфейс для создания пространственно-временных доказательств на основе вызовов, а waitFunc — это функция обратного вызова. При запуске службы Miner будет инициализирована структура miner.Miner, а затем в начальном интерфейсе miner.Miner будет открыта сопрограмма для выполнения функции майнинга.Эта функция относительно длинная, поэтому скриншоты неполные trace.StartSpan — это сервис, который запускает трассировку ссылок. мой откроет бесконечный цикл, а выбор в основном используется для управления выходом. Внутри есть еще один цикл for:В этом цикле выполняются следующие операции: GetBestMiningCandidate в основном получает TipSet последнего блока, а затем всегда вызывает интерфейс BeaconGetEntry узла блока через API, чтобы определить, начался ли последний раунд. TipSet предыдущего раунда и выход из цикла Блоки генерируются на основе TipSet предыдущего раунда, и каждый узел майнинга должен дождаться нового раунда, чтобы начать работу.
Когда начнется новый раунд, будет вызвана команда mineOne, чтобы начать кампанию за победителя, и только победитель имеет право производить блоки:
Рассчитать билет
Сначала выполните некоторую инициализацию параметров и получите некоторые необходимые параметры для участия в генерации блока, а затем вызовите ComputeTicket для расчета Тикета в соответствии с этими параметрами (ps: Тикет генерируется для каждого раунда генерации блока).Давайте посмотрим на как генерируется билет:Расчет Билета зависит от случайного числа, и вам необходимо понять реализацию случайного числа.
Вычислить случайные числа
Процесс вычисления случайного числа выглядит следующим образом:Расчет случайных чисел зависит от некоторых параметров, и rebase вызывается в предыдущем раунде блоков.BeaconEntryструктура, подробности см.Генерация случайных чисел Filecoin, pers — тип перечисления, представляющий тип случайных чисел, round — раунд, entropy — результат сериализации адреса майнера.Согласно описанию в статье, количество раундов может быть записано раундом, а данные представляют собой сигнатуру случайного числа, сгенерированную раундом. Следующий раунд генерации случайных чисел требует использования предыдущего раунда подписей случайных чисел в сочетании с адресом узла Miner и другими параметрами для выполнения операций blake2b-256, в результате чего получается 256-байтовая подпись.
После генерации случайного числа необходимо вызвать функцию ComputeVRF, которая включает в себя концепцию VRF в Filecoin.
Что такое ВРФ
VRF (проверяемая случайная функция) проверяемая случайная функция, см.Принцип ВРФ
VRF аналогичен концепции подписи кошелька: закрытый ключ кошелька может подписать любое сообщение для получения дайджеста, а открытый ключ может проверить подпись.
Any third party in possession of the corresponding public key, the message, and the VRF output, can verify if the digest has been computed correctly and by the correct signer
Согласно интерпретации видно, что владелец открытого ключа, сообщения и вывода VRF может проверить правильность дайджеста.
В процессе генерации билетов VRF позволяет любому проверить, исходит ли сгенерированный блок от квалифицированного производителя. То есть, если майнер успешно побеждает на выборах для отправки блока, другие майнеры могут судить, соответствует ли майнер-победитель условиям, посредством представленных выходных данных VRF.
Как выбрать победителя
Победитель выборов вызывает функцию IsRoundWinner.
Также будет процесс генерации проверяемых подписей, который в конечном итоге вызовет ComputeWinCount, Входными параметрами являются текущая вычислительная мощность майнера и текущая вычислительная мощность сети:Алгоритм вроде как связан с распределением Пуассона.По принципу работы алгоритма можно понять, что чем больше доля вычислительной мощности Майнера, тем больше вероятность победы на выборах.
Вычислительное пространственно-временное доказательство
После успешного избрания победителем майнер должен предоставить действительное доказательство PoSt (доказательство времени и пространства), чтобы доказать, что они действительно предоставляют место для хранения, а предоставленное доказательство времени и места необходимо для участия в выборах лидера (поскольку могут быть несколькими майнерами, чтобы стать областью приобретения победителя) Блокировать права на упаковку), чем больше емкость хранилища майнеров, тем больше шанс на победу, и майнеры получают вознаграждение в зависимости от размера места для хранения, которое они предоставляют доказательство пространства доказательство, которое показывает, чтоЕсли шахтер отправляется в этот период, тем больше награды это получают., в избирательный процесс, также включаетSurprise PoStМеханизм, этот механизм случайным образом выберет некоторых майнеров и попросит этих майнеров предоставить пространственно-временные доказательства, чтобы подтвердить их место для хранения.Если нет ответа, вычислительная мощность будет потеряна, а заложенный FIL будет конфискован.Если нет ответ два раза подряд. Информация о майнере будет очищена системой.
Поэтому, если майнеры, не участвовавшие в выборах, выбраны механизмом Surprise PoSt, им также необходимо предоставить собственные доказательства времени и пространства. Еще одним преимуществом этого механизма является то, что если некоторые вновь участвующие майнеры не имеют права упаковывать блоки в начале, они могут отправлять доказательства пространства-времени через этот механизм для получения вычислительной мощности.Здесь будет вызываться функция в Rust для генерации результата пространственно-временного доказательства на основе данных SectorInfo.
пул сообщений
После того, как доказательство сгенерировано, необходимо выбрать некоторые сообщения из пула сообщений узла блока, чтобы упаковать их в блок и отправить в цепочку.
Генерировать блоки
Получив сообщение из пула сообщений, приступаем к созданию блока:Информация об адресе майнера и подтверждающая информация будут упакованы в заголовок блока и, наконец, отправлены в цепочку для трансляции.После подтверждения большинством узлов этот раунд майнинга заканчивается.