SHA256
46 lines
2.4 KiB
Markdown
46 lines
2.4 KiB
Markdown
# 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
|
|
```
|