# 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 ```