Skip to content

Вселенная

World является глобальным субъектом, который содержит другие субъекты. World состоит из:

Когда домены, равные или роли зарегистрированы или не зарегистрировались, World является целью (не) регистрации инструкции.

Взгляд на мировое состояние (WSV)

World State View - это представление в памяти текущего состояния блокчейна. Он включает в себя World, обязательные хеш-блоки, индексы транзакций и сверстники, избранные для нынешней эпохи. Полная нагрузка блоков подается из Kura, а не дублируется как изменчивые WSV данные.

В настоящее время WSV Это состояние, в котором прочитываются запросы и блокируют исполнение. Продолжительная история хранится в Kura, и WSV могут быть восстановлены из Kura блокируются или загружаются из состояния мгновенного снимка, а затем захватываются воспроизведением новейшего Kura Блоки.

Что за следы WSV

Объект WSV более широкий, чем объект World, на практике он содержит:

  • World: параметры, аналоги, домены, учетные записи, активы, NFTs, роли, разрешения, триггеры, данные исполнителя и другие зарегистрированные объекты модели данных.
  • заданные хэши блока и последняя заданная высота
  • индексы транзакции к блоку, используемые для запросов и полученных расписок
  • текущая и предыдущая топология обязательств, используемая в консенсусе
  • индексы в памяти, полученные из обязательных блоков, такие как обязательства по доступности данных, курсоры приема, намерения пин и маркеры проекции запроса
  • изображения конфигурации runtime, необходимые для выполнения детерминистических блоков, такие как криптография, управление, трубопровод, содержание, расчет и настройки Nexus

Запросы обычно получают только для чтения StateView над этими структурами. Посмотр является последовательным снимком для выполнения запроса; он не позволяет прямой мутации WSV.

Как изменяется WSV

Изменения WSV выполняются на этапе до их совершения. Исполнение блока создает перекрытие состояния по объему блока, и каждая принятая транзакция применяет свои инструкции в перекрытии по объему транзакции. Временные триггеры оцениваются после эффектов транзакций для блока.

После того, как консенсус назначает блок, пир сначала зачисляет заданный блок в Kura. Если этот шаг зачисляния не удается, WSV не продвигается, и цепь консенсуса пытается перезагрузить полезную нагрузку блока. Когда блок принимается в очередь Kura, Iroha применяет эффекты блока после исполнения, обновляет полученные индексы и совершает этапные изменения WSV под блокировкой состояния. Это мешает читателям наблюдать за частично обязательным блоком.

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

Начало и воспроизведение

При запуске Iroha сначала инициирует Kura и узнает высоту сохранённого блока. Затем он пытается загрузить снимок состояния. Если нет никакого снижения, или если снимок отклоняется как восстановительный, Iroha создает первоначальное состояние и восстанавливает взятые блоки из Kura. Если снимок действителен, но позади Kura, воспроизводится только отсутствующий диапазон высоты.

Replay подтверждает каждый сохраненный блок, восстанавливает список коммитаций для этой высоты, применяет эффекты блока к WSV и обязывает полученное состояние. Это означает, что Kura является пути восстановления для WSV, в то время как снимки являются оптимизацией, которая избегает повторного воспроизведения всей цепочки.

Kura Хранение

Kura является постоянным блоковым хранилищем Iroha. Он хранит подписанные блоки и метаданные восстановления. В нем не хранится вторая изменяемая копия WSV.

Kura хранилище коренится на kura.store_dir. В этом корне данные блока разделены по полосе или сегменту.

Путь .Цель .
blocks/<segment>/blocks.dataСовместные подписанные блочные полезные нагрузки с рамками Norito.
blocks/<segment>/blocks.indexФиксированный размер (start, length) вводит высоту блока карты в байтах в blocks.data.
blocks/<segment>/blocks.hashesБлокируйте хеш по высоте для быстрого поиска и проверки запуска.
blocks/<segment>/blocks.count.noritoУстойчивый маркер обязательства, записывающий количество блочных индексов, которые безопасны в использовании.
blocks/<segment>/da_blocks/Устраненные полезные нагрузки блоков, хранящиеся за пределами blocks.data, когда исполнение дискового бюджета выводит старые тела из горячего файла.
blocks/<segment>/pipeline/sidecars.norito и sidecars.indexБоковые машины для восстановления трубопровода по высоте блока.
blocks/<segment>/pipeline/roster_sidecars.norito и roster_sidecars.indexНедавние боковые машины, используемые для синхронизации блоков и воспроизведения.
merge_ledger/<segment>.logЗаписи с объединением, выровненные с обязательными блоками.
commit-rosters.noritoСохранение сертификатов обязательства и контрольных пунктов проверки для недавних блоков.

Kura сохраняет компактный вектор в памяти для цепочки: каждая высота имеет хэш-блок и, возможно, корпус блока. Блок генезиса остается запасным, и последнее kura.blocks_in_memory Негенезистые блоки сохраняют свои тела в памяти. Kura файлы, когда это необходимо.

Во время инициирования, strict режим проверяет сохраненные блоки из полезных нагрузок блоков и переписывает хеш-файл при необходимости. fast режим начинается с хранения хэш/индексовых метаданных и возвращается к строгому инициированию, если эти метаданные несовместимы. Kura обнаруживает испорченный хвост, он сокращает хранение до последнего проверенного блока.

Kura пишет новые блоки через автора фона. Писатель добавляет полезные нагрузки блоков, хэши и индексные записи, затем продвигает прочный счет-маркер в соответствии с конфигурированной политикой fsync. При активном соблюдении диск-бюджета Kura может очистить отставные сегменты или выселить старые блоки в da_blocks/, сохраняя хэши и индексные записи доступными для проверки и поиска.