2.4 KiB
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:
[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 обязан иметь подписанный тег:
t=prof