SHA256
Добавить линии связей и параметров пользователя
This commit is contained in:
@@ -1,41 +1,68 @@
|
||||
# CONNECTION блоки (`type=3`, `version=1`)
|
||||
|
||||
CONNECTION-тип описывает социальные связи и подписки.
|
||||
CONNECTION описывает историю социальных связей и подписок пользователя.
|
||||
|
||||
## Подтипы
|
||||
|
||||
• `10/11` — `close_friend / unclose_friend` (близкий друг)
|
||||
• `20/21` — `contact / uncontact` (контакт)
|
||||
• `30/31` — `follow / unfollow` (подписан)
|
||||
• `40/41` — `spouse / unspouse` (супруг/супруга)
|
||||
• `50/51` — `parent / unparent` (родитель)
|
||||
• `52/53` — `child / unchild` (ребёнок)
|
||||
• `54/55` — `sibling / unsibling` (брат/сестра)
|
||||
• `60/61` — `known_person / unknown_person` (знаю этого человека)
|
||||
• `70/71` — `shine_confirmed / shine_unconfirmed` (точно уверен, что сияющий)
|
||||
• `74/75` — `shine_seen / shine_unseen` (мало знаком, но видел сияющим)
|
||||
• `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`
|
||||
|
||||
## Общий формат payload
|
||||
`60/61` — legacy/reserved и новым UI не создаются.
|
||||
|
||||
- line-поля (`lineCode`, `prevLineNumber`, `prevLineHash32`, `thisLineNumber`)
|
||||
- target (`toLogin`, `toForkNumber`, `toBlockGlobalNumber`, `toBlockHash32`)
|
||||
## Линия связей
|
||||
|
||||
## Бинарный target
|
||||
У пользователя существует ровно одна линия `CONNECTION`. Отдельный `lineCode` в body не хранится: логический код линии всегда `0`.
|
||||
|
||||
Первый CONNECTION ссылается на `HEADER #0` и имеет `connectionSequence=1`. Каждый следующий обязан ссылаться на фактический текущий хвост CONNECTION-линии и увеличивать sequence ровно на `1`.
|
||||
|
||||
## Body (`version=1`)
|
||||
|
||||
Big-endian:
|
||||
|
||||
```text
|
||||
[1] toLoginLen (uint8)
|
||||
[4] prevConnectionBlockNumber
|
||||
[32] prevConnectionBlockHash32
|
||||
[4] connectionSequence
|
||||
|
||||
[1] toLoginLen
|
||||
[N] toLogin UTF-8
|
||||
[2] toForkNumber (uint16, BigEndian)
|
||||
[2] toForkNumber
|
||||
[4] toBlockGlobalNumber
|
||||
[32] toBlockHash32
|
||||
```
|
||||
|
||||
`toForkNumber` хранит fork, который видел автор связи (`1..999`), но не участвует в identity. Значения `0` и `1000+` недопустимы. Для связи на пользователя используется **реальный HEADER hash**: `toBlockGlobalNumber=0`, `toBlockHash32=SHA-256(Frame HEADER)`. Нулевой hash запрещён.
|
||||
- `prevConnectionBlockNumber` — глобальный `blockNumber` предыдущего CONNECTION-блока.
|
||||
- `prevConnectionBlockHash32` — SHA-256 Frame предыдущего CONNECTION-блока.
|
||||
- `connectionSequence` — порядковый номер изменения связей `1..N`.
|
||||
|
||||
## Правила target
|
||||
Сервер проверяет номер, hash и sequence относительно текущего хвоста CONNECTION-линии. Это позволяет выгрузить только связи пользователя и проверить, что внутри выбранной истории нет пропущенного шага.
|
||||
|
||||
- FRIEND/CONTACT обычно указывают на `HEADER` цели (`block 0`).
|
||||
- FOLLOW указывает на root канала:
|
||||
- `HEADER` для канала `0`;
|
||||
- `CREATE_CHANNEL` для пользовательского канала.
|
||||
- Для остальных типов связи (`SPOUSE/PARENT/CHILD/SIBLING`) используется тот же target-формат.
|
||||
## 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
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user