SHA256
69 lines
2.9 KiB
Markdown
69 lines
2.9 KiB
Markdown
# 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:
|
|
|
|
```text
|
|
[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:
|
|
|
|
```text
|
|
toBlockGlobalNumber=0
|
|
toBlockHash32=SHA-256(Frame HEADER)
|
|
```
|
|
|
|
Для FOLLOW на канал target указывает на root канала: HEADER для канала `0` либо `TECH_CREATE_CHANNEL` для пользовательского канала.
|
|
|
|
## ANS-104 тег
|
|
|
|
Каждый CONNECTION обязан иметь подписанный тег:
|
|
|
|
```text
|
|
t=conn
|
|
```
|