ИТХ — ежедневное закрытие блокчейна SHiNE (кратко, для людей)
Статус: дизайн согласован, код не написан. Подробная спецификация для реализации: Спецификация_ИТХ_v1.md.
Что это
Раз в сутки один из серверов SHiNE («дежурный») делает закрытие дня:
- Строит меркл-дерево по вершинам всех пользовательских цепочек — его корень называется ИТХ (итоговый хэш дня).
- Собирает бандл — все новые блоки, появившиеся с прошлого закрытия, с хэшами и подписями пользователей.
- Заливает всё это одним файлом (чекпоинт) в Arweave. Каждый чекпоинт ссылается на предыдущий — получается цепочка чекпоинтов.
- Пишет в свой Solana PDA: «крайний чекпоинт — вот такой хэш, лежит по такому Arweave-адресу».
- Публикует пост о закрытии в своём канале закрытий прямо в Сиянии.
Остальные серверы проверяют чекпоинт, и если всё сходится:
- обновляют слот в своём PDA на этот же чекпоинт («согласен»);
- ставят лайк на пост дежурного в канале.
Несогласие = просто ничего не делать (слот остаётся на прошлом чекпоинте).
Зачем
- Неизменяемость истории. Прошлые дни зафиксированы в Arweave и Solana — их нельзя переписать даже сговором всех живых серверов.
- Независимая проверяемость. Любой желающий может скачать цепочку чекпоинтов из Arweave и проверить всю историю, не доверяя ни одному живому серверу.
- Резерв последней надежды. Даже если все серверы погибнут, история до последнего чекпоинта не потеряна.
В повседневной работе серверы синхронизируются друг с другом напрямую — Arweave почти не читается, это гарантия, а не рабочая лошадка.
Кто дежурит
График ведёт DAO в специальном PDA: упорядоченный список логинов серверов
и дата начала эпохи. Дежурный дня = dayIndex % количество_серверов.
Обновлять список может только DAO.
Расписание суток (UTC)
| Время | Что происходит |
|---|---|
| День D, 00:00–24:00 | Обычная работа, блоки копятся. |
| D+1, 00:00–06:00 | Дежурный закрывает день D: Arweave → PDA → пост в канал. |
| D+1, до 24:00 | Остальные проверяют и подтверждают (PDA + лайк). |
Если дежурный не закрыл (или закрыл неверно) — день просто пропускается: никто ничего не подтверждает, а следующий дежурный включает в свой бандл блоки за все пропущенные дни и ссылается на последний признанный чекпоинт.
Как понять, какой чекпоинт «настоящий»
Актуальный чекпоинт = последний, на который указывают слоты больше половины серверов из графика. Кворума on-chain нет — каждый сервер публикует только своё мнение, а наблюдатель считает голоса сам. Сервер, который систематически ошибается, DAO просто исключает из списка.
Восстановление сервера с нуля
- Прочитать DAO PDA → список серверов графика.
- Прочитать их PDA-слоты → последний признанный чекпоинт (>половины голосов).
- Скачать из Arweave цепочку чекпоинтов от генезиса и раскатать бандлы.
- «Хвост» после последнего чекпоинта добрать живой синхронизацией с серверами.
Кто платит
Каждый сервер платит сам: за свои 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.