Добавить линии связей и параметров пользователя

This commit is contained in:
AidarKC
2026-10-02 00:33:13 +03:00
parent 8d22602761
commit e101e5c5f4
33 changed files with 1293 additions and 568 deletions
+45
View File
@@ -0,0 +1,45 @@
# USER_PROFILE блоки (`type=4`, `version=1`)
`USER_PROFILE` хранит только данные, которыми пользователь описывает собственный профиль.
> В текущем Java/JS коде историческое внутреннее имя класса/метода может оставаться `UserParamBody` / `addBlockUserParam`. На уровне протокола и документации тип называется `USER_PROFILE`.
## Подтип
`subType=1` — текстовое поле профиля: `paramKey + paramValue`.
Примеры полей: имя, фамилия, `about`, аватар, web, телефон, роль аккаунта и другие свойства профиля, определённые приложением.
## Линия профиля
У пользователя существует ровно одна линия `USER_PROFILE`. Отдельный `lineCode` для неё не нужен и в body не хранится: логический код линии всегда `0`.
Первый `USER_PROFILE` ссылается на `HEADER #0` и имеет `profileSequence=1`. Каждый следующий блок обязан ссылаться на фактический текущий хвост профильной линии и увеличивать sequence ровно на `1`.
## Body (`version=1`)
Big-endian:
```text
[4] prevProfileBlockNumber
[32] prevProfileBlockHash32
[4] profileSequence
[2] paramKeyLen
[N] paramKey UTF-8
[2] paramValueLen
[M] paramValue UTF-8
```
- `prevProfileBlockNumber` — **глобальный `blockNumber`** предыдущего блока профильной линии, а не локальный sequence.
- `prevProfileBlockHash32` — SHA-256 Frame предыдущего блока профильной линии.
- `profileSequence` — порядковый номер изменения профиля `1..N`.
Сервер проверяет одновременно номер предыдущего блока, его hash и непрерывность sequence. Поэтому выборка всех блоков `USER_PROFILE` позволяет обнаружить пропуск или боковую ветку.
## ANS-104 тег
Каждый `USER_PROFILE` обязан иметь подписанный тег:
```text
t=prof
```