back32hash 5591: готово к тестам

Вроде как всё готово к тестам.
This commit is contained in:
AidarKC
2026-10-02 01:32:37 +03:00
parent e101e5c5f4
commit de8700f8e0
51 changed files with 337 additions and 18091 deletions
+10 -7
View File
@@ -27,6 +27,7 @@ ANS-104 DataItem
|---|---:|---|
| `frameCode` | 2 | `0x0001` |
| `prevHash32` | 32 | SHA-256 полного Frame v1 предыдущего SHiNE-блока; для блока 0 — нули |
| `back32Hash32` | 32 | SHA-256 Frame блока `N-32`; для `N<32` — 32 нулевых байта |
| `blockSize` | 4 | точный размер Frame v1, включая header и body |
| `blockNumber` | 4 | номер блока, начиная с 0 |
| `timestamp` | 8 | Unix time seconds |
@@ -35,11 +36,12 @@ ANS-104 DataItem
| `version` | 2 | версия body |
| `body` | N | данные конкретного типа |
`FRAME_HEADER_SIZE = 56` bytes.
`FRAME_HEADER_SIZE = 88` bytes.
```text
blockHash32 = SHA256(FrameV1Bytes)
next.prevHash32 = blockHash32
blockN.back32Hash32 = (N < 32 ? ZERO_HASH_32 : HASH(block N-32))
```
Подписи внутри Frame v1 нет. Единственная подпись пользователя — подпись окружающего ANS-104 DataItem.
@@ -72,7 +74,7 @@ next.prevHash32 = blockHash32
Каждый блок:
```text
App = test5590
App = test5591
```
Это временное namespace-значение для разработки. Перед реальным запуском оно будет заменено отдельным изменением протокола/кода.
@@ -94,7 +96,7 @@ t=prof # USER_PROFILE
Если блок относится к конкретному каналу, он дополнительно содержит:
```text
c_test5590 = <canonical_channel_slug>
c = <canonical_channel_slug>
```
Slug входит в подпись DataItem и не может быть изменён сервером после подписи.
@@ -118,16 +120,17 @@ Slug входит в подпись DataItem и не может быть изм
Сервер обязан:
1. распарсить полный ANS-104 DataItem;
2. проверить `App=test5590`;
2. проверить `App=test5591`;
3. проверить `t`, если тип блока требует фиксированный индексный поток;
4. проверить `c_test5590`, если тип блока требует канал;
4. проверить `c`, если тип блока требует канал;
5. проверить ANS-104 Ed25519 подпись;
6. проверить, что `owner` равен текущему blockchain public key пользователя;
7. распарсить Frame v1 и body;
8. проверить `blockNumber == last + 1`;
9. проверить `prevHash32 == lastBlockHash`;
10. проверить строгую непрерывность логической линии, если body line-based;
11. записать DataItem и новое состояние атомарно в PostgreSQL.
10. проверить `back32Hash32`: нули для `N<32`, иначе hash блока `N-32`;
11. проверить строгую непрерывность логической линии, если body line-based;
12. записать DataItem и новое состояние атомарно в PostgreSQL.
## Нормативное правило версий body