Files
SHiNE-server/docs/Blockchain/14_USER_PROFILE_Blocks.md
T

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