|
|
|
|
@ -13,12 +13,15 @@
|
|
|
|
|
8-битный `ver` сохраняется как диагностический счётчик; свежесть определяется |
|
|
|
|
только timestamp. |
|
|
|
|
|
|
|
|
|
Профиль endpoint в SOCKMETA содержит независимые `mapping` и `inbound`, |
|
|
|
|
Профиль endpoint в SOCKMETA содержит независимые `mapping` и `inbound`, источник `source`, |
|
|
|
|
`evidence_id` и `checked_at`. Последние относятся к измерению владельца, |
|
|
|
|
а не к версии всего NODEINFO: повтор записи или изменение имени не продлевает |
|
|
|
|
измерение. Новые поля профиля на проводе кодируются явными BE-байтами; |
|
|
|
|
границы списков metadata/адресов/REALITY также входят в каноническую подпись. |
|
|
|
|
Алгоритм и условия неопределённости описаны в `doc/nat_detection.txt`. |
|
|
|
|
`source=ETCP` обозначает измерение рабочего endpoint, `source=STUN` — резервную оценку |
|
|
|
|
по IP/netif с другого порта. Source входит в подпись; SOCKMETA занимает 21 байт. |
|
|
|
|
STUN mapped endpoint не публикуется как внешний адрес рабочего сокета. |
|
|
|
|
|
|
|
|
|
Таблица `node_snapshots` хранит полную сериализованную запись без группового |
|
|
|
|
окружения. `node_addresses` остаётся проекцией для поиска и отображения, а не |
|
|
|
|
@ -27,7 +30,7 @@ snapshot загрузка использует его. Локальная пуб
|
|
|
|
|
ошибка сохранения не разрешает публикацию новой версии. |
|
|
|
|
|
|
|
|
|
В проекции адресов сохраняются `nat_mapping`, `nat_inbound`, `nat_evidence`, |
|
|
|
|
`nat_checked`, `address_kind`. Уникальность определяется endpoint и видом адреса, |
|
|
|
|
`nat_checked`, `nat_source`, `address_kind`. Уникальность определяется endpoint и видом адреса, |
|
|
|
|
а не отображаемым классом NAT. Старый производный формат пересоздаётся; |
|
|
|
|
bootstrap-загрузка без подписанного snapshot не подтверждает NAT-профиль. |
|
|
|
|
|
|
|
|
|
|