Три хранилища
Зафиксированный блок
Хранилище реестратранзакции · выходные данные · события · наборы записей · аккумуляторы · метаданные
Воспроизведение и аудит
Хранилище состояниятекущие и исторические значения, шестнадцать шардов, горячее — в своём ярусе
Запросы и исполнение
Хранилище Мерклаверсионированное разреженное дерево Меркла и индексы вытесненных узлов
Проверка — доказательства
Чтение, которому нужно только значение, не платит за обход дерева, а доказательство не собирается заново из хранилища для точечных выборок.
Аутентификация
Две структуры Меркла делают разную работу.Версионированное разреженное дерево Меркла
Аккумуляторы
Ваш ключ и его значение
хеш-сосед
хеш-сосед
Корень состояния — фиксирует консенсус
Ваша транзакция или событие
Аккумулятор транзакций · аккумулятор событийкаждый фиксирует всё включённое до сих пор, по порядку
Корень реестра — фиксирует консенсус
Дерево доказывает, каким было значение; аккумуляторы — что произошло и в каком порядке. Вместе они позволяют доказать «эта транзакция есть в блокчейне на этой позиции», не имея самого блокчейна.
Спекулятивное состояние
Результаты блока существуют до того, как их зафиксировали. Незафиксированное состояние не пишут в долговечное дерево с откатом на случай, если блок не зафиксируется, — его держат в разреженном наложении Меркла в памяти поверх последней зафиксированной версии. Исполнение читает сквозь это наложение и видит согласованную картину. Если блок фиксируется, наложение материализуется. Если нет — наложение выбрасывается, и ничего долговечного никто не трогал. Именно это не даёт спекулятивному исполнению оставлять мусор в хранилище.Кеширование
Узлы дерева кешируются на двух уровнях: кеш, который знает о версиях и держит недавние версии адресуемыми, и под ним — кеш, вытесняющий давно не использованное. Шаблон доступа торгового блокчейна — небольшой набор горячих ключей, затрагиваемых каждый блок, против длинного хвоста, затрагиваемого редко, — ровно то, подо что эти кеши сделаны.Обрезка истории
Хранить каждую версию вечно — это выбор, а не требование. По трём хранилищам работают три независимых обрезчика, у каждого своя политика хранения: один по реестру, один по значениям состояния, один по узлам Меркла. Обрезчики Меркла и значений состояния управляются индексами устаревания, которые пишутся одновременно с самими данными. Когда версия вытесняет узел или значение, вытесненная запись отмечается устаревшей на этой версии. Тогда обрезка — это сканирование диапазона по индексу, а не поиск мусора: что и когда станет пригодным к удалению, отмечено уже в момент записи.Глубина хранения — решение оператора с реальными последствиями. Агрессивно обрезанный узел эффективно отдаёт текущее состояние, но не может ни отвечать на исторические запросы, ни обслуживать синхронизацию состояния для узла, который стартует с более ранней точки. Архивный узел хранит всё и платит за это. См. Запуск узла.
Резервное копирование и восстановление
Хранилища можно резервировать и восстанавливать независимо от работающего узла. Именно поэтому узел можно поднять из снимка, а не воспроизводить с генезиса, и сверить состояние восстановленного узла с зафиксированными корнями, а не доверять резервной копии.Что дальше
Синхронизация состояния
Как узел догоняет блокчейн, не воспроизводя его целиком.
Модель состояния
Что именно хранится и какое представление — источник истины.
Индексатор
Восстановление истории по зафиксированным записям.
Запуск узла
Роли узлов и как запросить возможность управлять узлом.