Files

ИТХ — ежедневное закрытие блокчейна SHiNE (кратко, для людей)

Статус: дизайн согласован, код не написан. Подробная спецификация для реализации: Спецификация_ИТХ_v1.md.

Что это

Раз в сутки один из серверов SHiNE («дежурный») делает закрытие дня:

  1. Строит меркл-дерево по вершинам всех пользовательских цепочек — его корень называется ИТХ (итоговый хэш дня).
  2. Собирает бандл — все новые блоки, появившиеся с прошлого закрытия, с хэшами и подписями пользователей.
  3. Заливает всё это одним файлом (чекпоинт) в Arweave. Каждый чекпоинт ссылается на предыдущий — получается цепочка чекпоинтов.
  4. Пишет в свой Solana PDA: «крайний чекпоинт — вот такой хэш, лежит по такому Arweave-адресу».
  5. Публикует пост о закрытии в своём канале закрытий прямо в Сиянии.

Остальные серверы проверяют чекпоинт, и если всё сходится:

  • обновляют слот в своём PDA на этот же чекпоинт («согласен»);
  • ставят лайк на пост дежурного в канале.

Несогласие = просто ничего не делать (слот остаётся на прошлом чекпоинте).

Зачем

  • Неизменяемость истории. Прошлые дни зафиксированы в Arweave и Solana — их нельзя переписать даже сговором всех живых серверов.
  • Независимая проверяемость. Любой желающий может скачать цепочку чекпоинтов из Arweave и проверить всю историю, не доверяя ни одному живому серверу.
  • Резерв последней надежды. Даже если все серверы погибнут, история до последнего чекпоинта не потеряна.

В повседневной работе серверы синхронизируются друг с другом напрямую — Arweave почти не читается, это гарантия, а не рабочая лошадка.

Кто дежурит

График ведёт DAO в специальном PDA: упорядоченный список логинов серверов и дата начала эпохи. Дежурный дня = dayIndex % количество_серверов. Обновлять список может только DAO.

Расписание суток (UTC)

Время Что происходит
День D, 00:0024:00 Обычная работа, блоки копятся.
D+1, 00:0006:00 Дежурный закрывает день D: Arweave → PDA → пост в канал.
D+1, до 24:00 Остальные проверяют и подтверждают (PDA + лайк).

Если дежурный не закрыл (или закрыл неверно) — день просто пропускается: никто ничего не подтверждает, а следующий дежурный включает в свой бандл блоки за все пропущенные дни и ссылается на последний признанный чекпоинт.

Как понять, какой чекпоинт «настоящий»

Актуальный чекпоинт = последний, на который указывают слоты больше половины серверов из графика. Кворума on-chain нет — каждый сервер публикует только своё мнение, а наблюдатель считает голоса сам. Сервер, который систематически ошибается, DAO просто исключает из списка.

Правило работает относительно списка: по умолчанию считают по DAO-списку, но любой наблюдатель вправе считать голоса по собственному списку доверенных серверов. Коротко: запись — по общему списку, чтение — по любому.

Форки и параллельные группы

  • Пользователь раздвоил свою цепочку до чекпоинта — дежурный возьмёт самую длинную ветку, проигравшая отбросится; пользователь не наказывается.
  • Ветка против уже зачекпоинченного — побеждает чекпоинт, ветка отбрасывается.
  • Умудрился дописать противоречащие ветки в архивы двух разных групп закрытий — цепочка замораживается навсегда (два неизменных архива слить нельзя), дальше пользователь начинает новую цепочку login-002.
  • Любая другая группа серверов может вести свою параллельную цепочку чекпоинтов над теми же данными — это разрешено by design: подделать блоки они не могут, а независимых «нотариусов» у истории становится больше.

Восстановление сервера с нуля

  1. Прочитать DAO PDA → список серверов графика.
  2. Прочитать их PDA-слоты → последний признанный чекпоинт (>половины голосов).
  3. Скачать из Arweave цепочку чекпоинтов от генезиса и раскатать бандлы.
  4. «Хвост» после последнего чекпоинта добрать живой синхронизацией с серверами.

Кто платит

Каждый сервер платит сам: за свои Arweave-загрузки в свои дежурные дни и за свои Solana-транзакции.

Связанные документы

  • Спецификация_ИТХ_v1.md — точный формат и алгоритмы (для реализации).
  • docs/Blockchain/ — формат блоков и цепочек SHiNE.
  • docs/Blockchain/sync-between-servers.md — живая межсерверная синхронизация.
  • docs/Solana_Architecture/README.md — устройство Solana-части.
  • shine-solana/shine/doc/formats/shine-user-pda-format-v.1.0.md — формат user_pda.