Files
SHiNE-server/docs/ИТХ/README.md
T

82 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ИТХ — ежедневное закрытие блокчейна SHiNE (кратко, для людей)
Статус: дизайн согласован, код не написан.
Подробная спецификация для реализации: [Спецификация_ИТХ_v1.md](./Спецификация_ИТХ_v1.md).
## Что это
Раз в сутки один из серверов SHiNE («дежурный») делает **закрытие дня**:
1. Строит меркл-дерево по вершинам всех пользовательских цепочек —
его корень называется **ИТХ** (итоговый хэш дня).
2. Собирает **бандл** — все новые блоки, появившиеся с прошлого закрытия,
с хэшами и подписями пользователей.
3. Заливает всё это одним файлом (**чекпоинт**) в Arweave.
Каждый чекпоинт ссылается на предыдущий — получается цепочка чекпоинтов.
4. Пишет в свой Solana PDA: «крайний чекпоинт — вот такой хэш, лежит по такому Arweave-адресу».
5. Публикует пост о закрытии в своём канале закрытий прямо в Сиянии.
Остальные серверы проверяют чекпоинт, и если всё сходится:
- обновляют слот в **своём** PDA на этот же чекпоинт («согласен»);
- ставят **лайк** на пост дежурного в канале.
Несогласие = просто ничего не делать (слот остаётся на прошлом чекпоинте).
## Зачем
- **Неизменяемость истории.** Прошлые дни зафиксированы в Arweave и Solana —
их нельзя переписать даже сговором всех живых серверов.
- **Независимая проверяемость.** Любой желающий может скачать цепочку чекпоинтов
из Arweave и проверить всю историю, не доверяя ни одному живому серверу.
- **Резерв последней надежды.** Даже если все серверы погибнут,
история до последнего чекпоинта не потеряна.
В повседневной работе серверы синхронизируются друг с другом напрямую —
Arweave почти не читается, это гарантия, а не рабочая лошадка.
## Кто дежурит
График ведёт DAO в специальном PDA: упорядоченный список логинов серверов
и дата начала эпохи. Дежурный дня = `dayIndex % количество_серверов`.
Обновлять список может только DAO.
## Расписание суток (UTC)
| Время | Что происходит |
| --- | --- |
| День D, 00:00–24:00 | Обычная работа, блоки копятся. |
| D+1, 00:0006:00 | Дежурный закрывает день D: Arweave → PDA → пост в канал. |
| D+1, до 24:00 | Остальные проверяют и подтверждают (PDA + лайк). |
Если дежурный не закрыл (или закрыл неверно) — день просто пропускается:
никто ничего не подтверждает, а следующий дежурный включает в свой бандл
блоки за все пропущенные дни и ссылается на последний признанный чекпоинт.
## Как понять, какой чекпоинт «настоящий»
**Актуальный чекпоинт = последний, на который указывают слоты
больше половины серверов из графика.** Кворума on-chain нет —
каждый сервер публикует только своё мнение, а наблюдатель считает голоса сам.
Сервер, который систематически ошибается, DAO просто исключает из списка.
## Восстановление сервера с нуля
1. Прочитать DAO PDA → список серверов графика.
2. Прочитать их PDA-слоты → последний признанный чекпоинт (>половины голосов).
3. Скачать из Arweave цепочку чекпоинтов от генезиса и раскатать бандлы.
4. «Хвост» после последнего чекпоинта добрать живой синхронизацией с серверами.
## Кто платит
Каждый сервер платит сам: за свои Arweave-загрузки в свои дежурные дни
и за свои Solana-транзакции.
## Связанные документы
- [Спецификация_ИТХ_v1.md](./Спецификация_ИТХ_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`.