2.9 KiB
CONNECTION блоки (type=3, version=1)
CONNECTION описывает историю социальных связей и подписок пользователя.
Подтипы
• 10/11 — close_friend / unclose_friend (близкий друг)
• 14/15 — friend / unfriend (друг)
• 20/21 — contact / uncontact (контакт)
• 30/31 — follow / unfollow (подписка)
• 40/41 — spouse / unspouse
• 50/51 — parent / unparent
• 52/53 — child / unchild
• 54/55 — sibling / unsibling
• 70/71 — shine_confirmed / shine_unconfirmed
• 74/75 — shine_seen / shine_unseen
• 80/81 — official_account / unofficial_account
60/61 — legacy/reserved и новым UI не создаются.
Линия связей
У пользователя существует ровно одна линия CONNECTION. Отдельный lineCode в body не хранится: логический код линии всегда 0.
Первый CONNECTION ссылается на HEADER #0 и имеет connectionSequence=1. Каждый следующий обязан ссылаться на фактический текущий хвост CONNECTION-линии и увеличивать sequence ровно на 1.
Body (version=1)
Big-endian:
[4] prevConnectionBlockNumber
[32] prevConnectionBlockHash32
[4] connectionSequence
[1] toLoginLen
[N] toLogin UTF-8
[2] toForkNumber
[4] toBlockGlobalNumber
[32] toBlockHash32
prevConnectionBlockNumber— глобальныйblockNumberпредыдущего CONNECTION-блока.prevConnectionBlockHash32— SHA-256 Frame предыдущего CONNECTION-блока.connectionSequence— порядковый номер изменения связей1..N.
Сервер проверяет номер, hash и sequence относительно текущего хвоста CONNECTION-линии. Это позволяет выгрузить только связи пользователя и проверить, что внутри выбранной истории нет пропущенного шага.
Target
toForkNumber хранит fork, который видел автор связи (1..999), но не входит в логическую identity цели. 0 зарезервирован как unknown/legacy; 1000+ недопустим.
Для связи на пользователя обычно используется его HEADER:
toBlockGlobalNumber=0
toBlockHash32=SHA-256(Frame HEADER)
Для FOLLOW на канал target указывает на root канала: HEADER для канала 0 либо TECH_CREATE_CHANNEL для пользовательского канала.
ANS-104 тег
Каждый CONNECTION обязан иметь подписанный тег:
t=conn