# 🧩 HMP Container Specification (v1.2-draft) > ⚠️ **Π’ΠΠ˜ΠœΠΠΠ˜Π•:** Данная вСрсия спСцификации являСтся Ρ‡Π΅Ρ€Π½ΠΎΠ²ΠΈΠΊΠΎΠΌ для [HMP-0005.md](HMP-0005.md). > > ПослС утвСрТдСния пятой вСрсии ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π° Π±ΡƒΠ΄Π΅Ρ‚ зафиксирована ΠΊΠ°ΠΊ ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Π°Ρ `v1.2`. ## 1. НазначСниС Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚ описываСт ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ **ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° HMP**, примСняСмый для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΈ хранСния всСх Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ… Π²Π½ΡƒΡ‚Ρ€ΠΈ сСти **HyperCortex Mesh Protocol (HMP)**. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ слуТат стандартной ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΎΠΉ для сообщСний, Ρ†Π΅Π»Π΅ΠΉ, Ρ€Π΅ΠΏΡƒΡ‚Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… ΠΏΡ€ΠΎΡ„ΠΈΠ»Π΅ΠΉ, консСнсусных голосований, писСм ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… сущностСй. Единая структура ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° обСспСчиваСт: * ΡƒΠ½ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… ΠΌΠ΅ΠΆΠ΄Ρƒ Π°Π³Π΅Π½Ρ‚Π°ΠΌΠΈ; * Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ Π±Π΅Π· измСнСния Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»Π°; * Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ криптографичСской подписи ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ цСлостности; * нСзависимоС Ρ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΈ ΠΌΠ°Ρ€ΡˆΡ€ΡƒΡ‚ΠΈΠ·Π°Ρ†ΠΈΡŽ смысловых Π±Π»ΠΎΠΊΠΎΠ²; * ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ сТатия ΠΈ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. --- ## 2. ΠžΠ±Ρ‰Π°Ρ структура ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ```json { "hmp_container": { "version": "1.2", "class": "goal" | "reputation" | "knowledge_node" | "ethics_case" | "protocol_goal" | ..., "class_version": "1.0", "class_id": "goal-v1.0", "container_did": "did:hmp:container:abc123", "schema": "https://mesh.hypercortex.ai/schemas/container-v1.json", "sender_did": "did:hmp:agent123", "public_key": "BASE58(...)", "recipient": ["did:hmp:agent456", "did:hmp:agent789"], "broadcast": false, "tags": ["research", "collaboration"], "timestamp": "2025-10-10T15:32:00Z", "ttl": "2025-11-10T00:00:00Z", "sig_algo": "ed25519", "signature": "BASE64URL(...)", "compression": "zstd", "payload_type": "json", "payload_hash": "sha256:abcd...", "payload": { /* Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΠΌΠΎΠ΅ зависит ΠΎΡ‚ class */ }, "related": { "previous_version": "did:hmp:container:abc122", "in_reply_to": "did:hmp:container:msg-77", "see_also": ["did:hmp:container:ctx-31", "did:hmp:container:goal-953"] }, "relations": [ { "type": "depends_on", "target": "did:hmp:container:goal-953" } ], "magnet_uri": "magnet:?xt=urn:sha256:abcd1234..." }, "referenced-by": ["did:hmp:container:ctx-34", "did:hmp:container:goal-945"] } ``` --- ## 3. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля | ПолС | Π’ΠΈΠΏ | НазначСниС | | --------------- | -------- | ------------------------------------------------------------------------------------------------- | | `version` | string | ВСрсия спСцификации ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° | | `class` | string | Π’ΠΈΠΏ содСрТимого (`goal`, `reputation`, `knowledge_node`, `ethics_case`, `protocol_goal` ΠΈ Ρ‚.ΠΏ.) | | `class_version` | string | ВСрсия ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ класса | | `class_id` | string | Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ класса (ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ формируСтся ΠΊΠ°ΠΊ `_v`) | | `container_did` | string | DID самого ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `did:hmp:container:abc123`) | | `schema` | string | Бсылка Π½Π° JSON Schema, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ валидируСтся ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ | | `sender_did` | string | DID-ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ отправитСля | | `timestamp` | datetime | ВрСмя создания ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° | | `payload_hash` | string | Π₯эш распакованной ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ | | `sig_algo` | string | Алгоритм Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ подписи (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ `ed25519`) | | `signature` | string | Цифровая подпись ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° | | `payload_type` | string | Π’ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (`json`, `binary`, `mixed`) | | `payload` | object | ОсновноС содСрТимоС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° | --- ## 4. ΠžΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ поля | ПолС | Π’ΠΈΠΏ | ОписаниС | | -------------------------- | ------------- | ---------------------------------------------------------------------------- | | `recipient` | array(string) | Один ΠΈΠ»ΠΈ нСсколько DID-адрСсатов | | `broadcast` | bool | Π€Π»Π°Π³ ΡˆΠΈΡ€ΠΎΠΊΠΎΠ²Π΅Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠΉ рассылки (Ссли `true`, ΠΏΠΎΠ»Π΅ `recipient` игнорируСтся) | | `tags` | array(string) | ВСматичСскиС Ρ‚Π΅Π³ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° | | `ttl` | datetime | Π‘Ρ€ΠΎΠΊ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ (ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π½Π΅ пСрСдаётся послС истСчСния) | | `public_key` | string | ΠŸΡƒΠ±Π»ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ отправитСля, Ссли Π½Π΅Ρ‚ глобальной привязки ΠΊ DID | | `compression` | string | Алгоритм сТатия ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (`zstd`, `gzip`) | | `magnet_uri` | string | Magnet-ссылка Π½Π° ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π» ΠΈΠ»ΠΈ Π·Π΅Ρ€ΠΊΠ°Π»Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° | | `related.previous_version` | string | Бсылка Π½Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° | | `related.in_reply_to` | string | ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π΄Π°Π½ ΠΎΡ‚Π²Π΅Ρ‚ | | `related.see_also` | array(string) | Бписок связанных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² для Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ контСкста | | `relations` | array(object) | БСмантичСскиС связи Π² Π²ΠΈΠ΄Π΅ ΠΏΠ°Ρ€ `{ "type": "...", "target": "..." }` | | `encryption_algo` | string | Алгоритм ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ | | `key_recipient` | string | DID получатСля, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ | | `payload_type` | string | ΠœΠΎΠΆΠ΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ слоТныС Ρ‚ΠΈΠΏΡ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ `encrypted+zstd+json` | | `referenced-by` | array(string) | НСподписываСмоС ΠΏΠΎΠ»Π΅, Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ΅ Π°Π³Π΅Π½Ρ‚ΠΎΠΌ Π½Π° основС ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… ссылок. Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠΈΡ‚ список DID-ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ. ΠœΠΎΠΆΠ΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ, поэтому Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ; ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для локальной Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ | --- ## 5. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ (`payload`) ПолСзная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° содСрТит ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π’ΠΈΠΏ ΠΈ структура зависят ΠΎΡ‚ поля `class`. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ описания ΠΏΠΎΠ»Π΅ΠΉ: ``` - key: имя поля type: Ρ‚ΠΈΠΏ значСния (JSON | TXT | BOOL | INT | FLOAT | ARRAY) description: ΠΊΡ€Π°Ρ‚ΠΊΠΎΠ΅ Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ required: true/false value: ΠΏΡ€ΠΈΠΌΠ΅Ρ€ значСния ``` **ΠŸΡ€ΠΈΠΌΠ΅Ρ€:** ``` - key: "title" type: "TXT" required: true description: "НазваниС Ρ†Π΅Π»ΠΈ" value: "Improve local agent discovery" - key: "priority" type: "FLOAT" required: false description: "Π’Π°ΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°Π΄Π°Ρ‡ΠΈ" value: 0.82 - key: "dependencies" type: "JSON" required: false description: "Бписок зависимостСй Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ†Π΅Π»Π΅ΠΉ" value: ["goal-953", "goal-960"] ``` --- ## 6. Подпись ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° 1. ΠŸΠΎΠ΄ΠΏΠΈΡΡ‹Π²Π°Π΅Ρ‚ΡΡ **вСсь JSON-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ `hmp_container`**, ΠΊΡ€ΠΎΠΌΠ΅ поля `signature`. 2. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ Ed25519. 3. ΠŸΡ€ΠΈ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ поля `public_key` ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° подписи ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒΡΡ Π±Π΅Π· обращСния ΠΊ глобальной Π±Π°Π·Π΅ DID. 4. АгСнт, ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ²ΡˆΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€, обязан ΡΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ с извСстными Π΄Π°Π½Π½Ρ‹ΠΌΠΈ DID-ΡƒΠ·Π»ΠΎΠ², Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄ΠΌΠ΅Π½Ρƒ ΠΊΠ»ΡŽΡ‡Π°. * Если Π°Π³Π΅Π½Ρ‚ Π½Π΅ Π·Π½Π°Π΅Ρ‚ отправитСля β€” ΠΎΠ½ ΠΈΠ½ΠΈΡ†ΠΈΠΈΡ€ΡƒΠ΅Ρ‚ опрос сосСдних ΡƒΠ·Π»ΠΎΠ² ΠΎ соотвСтствии `sender_did β†’ public_key`. --- ## 7. Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ (`compression`) 1. ПолС `compression` ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сТатия ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. 2. Π‘ΠΆΠ°Ρ‚ΠΈΠ΅ выполняСтся **Π΄ΠΎ вычислСния `payload_hash` ΠΈ подписи**. 3. Для Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° полСзная Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ распакована, Π·Π°Ρ‚Π΅ΠΌ вычисляСтся Ρ…ΡΡˆ ΠΈ свСряСтся с `payload_hash`. --- ## 8. Π¨ΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ (`encryption_algo`) 1. Если ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ для ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹Ρ… ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»Π΅ΠΉ (`recipient`), допускаСтся **Π³ΠΈΠ±Ρ€ΠΈΠ΄Π½ΠΎΠ΅ ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅** ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. 2. Алгоритм указываСтся Π² ΠΏΠΎΠ»Π΅ `encryption_algo`. Π Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ΅ΠΌΡ‹Π΅ значСния: - `x25519-chacha20poly1305` - `rsa-oaep-sha256` 3. ΠŸΠΎΡ€ΡΠ΄ΠΎΠΊ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ ΠΏΡ€ΠΈ создании Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°: 1. Π‘Ρ„ΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ `payload` (JSON, Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ Ρ‚.Π΄.) 2. Π‘ΠΆΠ°Ρ‚ΡŒ (`compression`) 3. Π—Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠ»ΡŽΡ‡ΠΎΠΌ получатСля (`public_key`) 4. Π’Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ `payload_hash` ΠΏΠΎ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌ Π΄Π°Π½Π½Ρ‹ΠΌ 5. ΠŸΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (`signature`) 4. Для Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ структуры ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π½Π΅ трСбуСтся Ρ€Π°ΡΡˆΠΈΡ„Ρ€ΠΎΠ²ΠΊΠ°, Π½ΠΎ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ `payload_hash` ΠΈ подписи β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Π°Ρ Ρ„ΠΎΡ€ΠΌΠ° ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ Π½Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ. 5. Поля: | ПолС | Π’ΠΈΠΏ | НазначСниС | |------|-----|------------| | `encryption_algo` | string | Алгоритм ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ | | `key_recipient` | string | DID получатСля, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Ρ‹ Π΄Π°Π½Π½Ρ‹Π΅ | | `payload_type` | string | РСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСфикс `encrypted+`, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ `encrypted+zstd+json` | --- ## 9. ВСрификация ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° 1. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ. 2. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ `timestamp` (Π½Π΅ Π² Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΌ). 3. Если ΡƒΠΊΠ°Π·Π°Π½ΠΎ `ttl` β€” ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ считаСтся Π½Π΅Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠΎ истСчСнии этого Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. 4. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ…ΡΡˆ: Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ `sha256(payload)` ΠΈ ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ с `payload_hash`. 5. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΡƒΡŽ подпись ΠΏΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ Ed25519 (Ссли ΠΈΠ½ΠΎΠ΅ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½ΠΎ Π² `sig_algo`). 6. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ Π΄ΠΎΠΏΡƒΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ схСмы (`class` Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ извСстным Ρ‚ΠΈΠΏΠΎΠΌ). * Для совмСстимости: Ссли Π°Π³Π΅Π½Ρ‚ Π½Π΅ распознаёт ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ `class`, Π½ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π²Π°Π»ΠΈΠ΄Π΅Π½ ΠΏΠΎ [Π±Π°Π·ΠΎΠ²ΠΎΠΉ схСмС](https://github.com/kagvi13/HMP/tree/main/docs/schemas/container-v1.2.json), ΠΎΠ½ обязан ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈ Ρ€Π΅Ρ‚Ρ€Π°Π½ΡΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (Ρ€Π΅ΠΆΠΈΠΌ **store & forward**). 7. РСкомСндуСтся пСриодичСски ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π½Π°ΠΉΡ‚ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, Π³Π΄Π΅ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΡƒΠΊΠ°Π·Π°Π½ ΠΊΠ°ΠΊ `previous_version` β€” для обнаруТСния Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Ρ… ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ. 8. ΠŸΡ€ΠΈ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚Π΅ Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… вСрсий β€” Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ считаСтся Ρ‚Π°, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»Π° ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ² (консСнсус Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ DHT). --- ## 10. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΊΠ°ΠΊ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΠ΅ сообщСниС Π›ΡŽΠ±ΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΡΡ‚ΡƒΠΏΠ°Ρ‚ΡŒ контСкстом (`in_reply_to`) для Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π­Ρ‚ΠΎ позволяСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π΄ΠΈΠ½ΡƒΡŽ структуру для **обсуТдСний**, **голосований**, **писСм**, **Π³ΠΈΠΏΠΎΡ‚Π΅Π·**, **Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ²** ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ„ΠΎΡ€ΠΌ ΠΊΠΎΠΌΠΌΡƒΠ½ΠΈΠΊΠ°Ρ†ΠΈΠΈ. Π¦Π΅ΠΏΠΎΡ‡ΠΊΠΈ `in_reply_to` ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ **диалСктичСскоС Π΄Π΅Ρ€Π΅Π²ΠΎ рассуТдСний**, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ каТдая Π²Π΅Ρ‚Π²ΡŒ ΠΎΡ‚Ρ€Π°ΠΆΠ°Π΅Ρ‚ Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ мысли, ΡƒΡ‚ΠΎΡ‡Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΈΠ»ΠΈ ΠΊΠΎΠ½Ρ‚Ρ€Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, обсуТдСния ΠΈ консСнсусы Π² HMP ΠΈΠΌΠ΅ΡŽΡ‚ Π½Π΅ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ, Π° **ΠΌΠ½ΠΎΠ³ΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²ΡƒΡŽ ΠΈ ΡΠ°ΠΌΠΎΡ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽΡΡ структуру**. > Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, **всС взаимодСйствия ΠΌΠ΅ΠΆΠ΄Ρƒ Π°Π³Π΅Π½Ρ‚Π°ΠΌΠΈ Π² HMP** ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·Π°Π½Π½ΡƒΡŽ ΡΠ΅Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Ρ„ΠΎΡ€ΠΌΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ **ΠΊΠΎΠ³Π½ΠΈΡ‚ΠΈΠ²Π½Ρ‹ΠΉ Π³Ρ€Π°Ρ„ рассуТдСний**. --- ## 11. ВСрсионированиС ΠΈ ΠΏΡ€Π΅Π΅ΠΌΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΡΠ²ΠΎΠ»ΡŽΡ†ΠΈΡŽ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· ΠΏΠΎΠ»Π΅ `related.previous_version`. Π­Ρ‚ΠΎ позволяСт ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ происхоТдСниС, обновлСния ΠΈ ΡΠΌΡ‹ΡΠ»ΠΎΠ²ΡƒΡŽ ΠΏΡ€Π΅Π΅ΠΌΡΡ‚Π²Π΅Π½Π½ΠΎΡΡ‚ΡŒ. * ΠŸΠΎΡ‚ΠΎΠΌΠΎΠΊ признаётся Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ, Ссли Π΅Π³ΠΎ подпись совпадаСт с DID Π°Π²Ρ‚ΠΎΡ€Π° ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсии. * ΠŸΡ€ΠΈ расхоТдСнии подписи допустимо ΠΏΡ€ΠΈΠ·Π½Π°Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΌΠΊΠ° Π»Π΅Π³ΠΈΡ‚ΠΈΠΌΠ½Ρ‹ΠΌ ΠΏΡ€ΠΈ ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠΈ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ **β…” Π΄ΠΎΠ²Π΅Ρ€Π΅Π½Π½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ² сСти**. Π’ этом случаС ΠΏΡ€Π°Π²ΠΎ Π½Π° дальнСйшСС Ρ€Π°Π·Π²ΠΈΡ‚ΠΈΠ΅ ΠΈΠ΄Π΅ΠΈ фактичСски ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄ΠΈΡ‚ сообщСству β€” ΠΊΠ°ΠΊ Ρ„ΠΎΡ€ΠΌΠ° ΠΊΠΎΠ»Π»Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ владСния смыслом. * АгСнты обязаны Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄Π½Ρƒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° для совмСстимости ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ цСлостной Ρ†Π΅ΠΏΠΎΡ‡ΠΊΠΈ. * Один ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ² (Π°Π»ΡŒΡ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π½Ρ‹Ρ… Π²Π΅Ρ‚Π²Π΅ΠΉ), Ρ€Π°Π·Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΠΎ Π΄Π°Ρ‚Π΅ ΠΈΠ»ΠΈ авторству; ΠΏΡ€ΠΈ нСобходимости ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚ опрСдСляСтся ΠΏΠΎ консСнсусу сСти. Π’Π°ΠΊΠΈΠ΅ Π²Π΅Ρ‚Π²ΠΈ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ **смысловыС Ρ„ΠΎΡ€ΠΊΠΈ** β€” ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Π»ΠΈΠ½ΠΈΠΈ развития ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ΄Π΅ΠΈ, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ±Ρ‰Π΅Π³ΠΎ ΠΊΠΎΠ³Π½ΠΈΡ‚ΠΈΠ²Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π°. --- ## 12. TTL ΠΈ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ПолС `ttl` Π·Π°Π΄Π°Ρ‘Ρ‚ срок Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для сообщСний `DISCOVERY`). Если `ttl` отсутствуСт β€” ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ считаСтся Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ **Π΄ΠΎ появлСния Π½ΠΎΠ²ΠΎΠΉ вСрсии**, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΡƒΠΊΠ°Π·Π°Π½ ΠΊΠ°ΠΊ `previous_version`. По истСчСнии срока дСйствия ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ сохраняСтся Π² Π°Ρ€Ρ…ΠΈΠ²Π΅, Π½ΠΎ **Π½Π΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈΡ‚ рСтрансляции** Π² Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎΠΉ сСти. --- ## 13. Π Π°ΡΡˆΠΈΡ€ΡΠ΅ΠΌΠΎΡΡ‚ΡŒ * Π Π°Π·Ρ€Π΅ΡˆΠ°Π΅Ρ‚ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… ΠΏΠΎΠ»Π΅ΠΉ, Π½Π΅ ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΡƒΡŽΡ‰ΠΈΡ… с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ. * ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΡΡ‚Π°Ρ€ΡˆΠΈΡ… вСрсий Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌΠΈ ΡƒΠ·Π»Π°ΠΌΠΈ, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΌΠΈ младшиС вСрсии. * ΠŸΡ€ΠΈ появлСнии Π½ΠΎΠ²Ρ‹Ρ… классов (`class`) ΠΎΠ½ΠΈ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π² ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎΠΌ рССстрС схСм (`/schemas/container-types/`). * Для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‰ΠΈΡ… **спСцификации ΠΏΡ€ΠΎΡ‚ΠΎΠΊΠΎΠ»ΠΎΠ²**, рСкомСндуСтся ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прСфикс `protocol_`, Π·Π° ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ слСдуСт ΠΎΠ±Π»Π°ΡΡ‚ΡŒ примСнСния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, `protocol_goal`, `protocol_reputation`, `protocol_mesh_handshake` ΠΈ Ρ‚.ΠΏ.). --- ## 14. Π’ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Π΅ ссылки (`referenced-by`) ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ "ΠΎΡ‚ΡΠ»Π΅ΠΆΠΈΠ²Π°Ρ‚ΡŒ", **ΠΊΠ°ΠΊΠΈΠ΅ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° Π½Π΅Π³ΠΎ**. Π­Ρ‚ΠΎΡ‚ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ называСтся **`referenced-by`** ΠΈ: * **НС подписываСтся** β€” `referenced-by` формируСтся ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΠΎΡ‚ ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π½Π΅ Π»ΠΎΠΌΠ°Π΅Ρ‚ Π΅Π³ΠΎ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ Π°Π³Π΅Π½Ρ‚ΠΎΠΌ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ получСния Π½ΠΎΠ²Ρ‹Ρ… ссылок. * **ЀормируСтся локально Π°Π³Π΅Π½Ρ‚ΠΎΠΌ** ΠΏΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ссылок (`in_reply_to`, `see_also`, `relations`). * **ΠŸΠΎΠ΄Π»Π΅ΠΆΠΈΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅** β€” ΠΏΠ΅Ρ€Π΅Π΄ Ρ‚Π΅ΠΌ ΠΊΠ°ΠΊ Π΄ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ ссылкам, Π°Π³Π΅Π½Ρ‚ свСряСт ΠΈΡ… с содСрТимым ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². ### 14.1 ΠŸΡ€ΠΈΠ½Ρ†ΠΈΠΏ Ρ€Π°Π±ΠΎΡ‚Ρ‹ 1. АгСнт ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ `[C1]` ΠΈ сопоставляСт Π΅Π³ΠΎ с ΡƒΠΆΠ΅ извСстными ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌΠΈ `[C2..Cn]`, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° `[C1]`. 2. Π›ΠΎΠΊΠ°Π»ΡŒΠ½ΠΎ формируСтся список: ```text referenced-by = [C2, C3, ..., Cn] ``` 3. ΠŸΡ€ΠΈ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠΈ `[C1]` ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΡƒΠ·Π»ΠΎΠ² с Π΄Ρ€ΡƒΠ³ΠΈΠΌ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ссылок ΠΈΠ»ΠΈ Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΡΡ‹Π»Π°ΡŽΡ‚ΡΡ Π½Π° `[C1]`, список обновляСтся: * Π½ΠΎΠ²Ρ‹Π΅ ссылки Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ послС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ, * Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ссылки ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ. 4. Если обнаруТиваСтся нСсоотвСтствиС (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ заявляСт ссылку, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π½Π΅Ρ‚), Π°Π³Π΅Π½Ρ‚ ΠΌΠΎΠΆΠ΅Ρ‚: * ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ ссылку локально, * **ΠΏΠΎ ТСланию** ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ ΡƒΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»Ρƒ-источнику: `"ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒ ΠΈ ΠΏΠΎΠΏΡ€Π°Π²ΡŒ"` (Ρ‚Π°ΠΊΠΎΠ΅ сообщСниС Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄Π»Π΅ΠΆΠΈΡ‚ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ΅ ΠΈ Π²Π΅Ρ€ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ). 5. Π­Ρ‚ΠΎΡ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ позволяСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Ρ‚ΡŒ Π°ΠΊΡ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π³Ρ€Π°Ρ„ ссылок ΠΈ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹Ρ… ссылок Π±Π΅Π· измСнСния исходного ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° `[C1]`. #### ΠŸΡ€ΠΈΠΌΠ΅Ρ€ | АгСнт | received `[C1]` references | | ----- | -------------------------- | | A | [C2], [C3] | | B | [C4], [C5] | | C | [C6], [C7] | АгСнт D Π°Π³Ρ€Π΅Π³ΠΈΡ€ΡƒΠ΅Ρ‚ всС ссылки: ```text referenced-by = [C2, C3, C4, C5, C6, C7] ``` ПослС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ выясняСтся, Ρ‡Ρ‚ΠΎ `[C7]` Π½Π΅ ссылаСтся Π½Π° `[C1]`, поэтому ΠΈΡ‚ΠΎΠ³ΠΎΠ²Ρ‹ΠΉ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚: ```text referenced-by = [C2, C3, C4, C5, C6] ``` > ⚠️ ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ [C1] остаётся Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½Ρ‹ΠΌ; Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ referenced-by хранится ΠΊΠ°ΠΊ обособлСнный Π±Π»ΠΎΠΊ, вычисляСтся ΠΈ провСряСтся локально Π°Π³Π΅Π½Ρ‚ΠΎΠΌ. ### 14.2 ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ * ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ Π³Ρ€Π°Ρ„Ρ‹ обсуТдСний, голосований ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ. * УскоряСт поиск связанных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π±Π΅Π· постоянного запроса всСй истории. * ПолСзно для ΠΎΡ†Π΅Π½ΠΊΠΈ **ConsensusResult**, Π²Π΅Ρ‚Π²Π»Π΅Π½ΠΈΠΉ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠΉ ΠΈ Π»ΡŽΠ±Ρ‹Ρ… ссылочных Ρ†Π΅ΠΏΠΎΡ‡Π΅ΠΊ. * АгСнт ΠΌΠΎΠΆΠ΅Ρ‚ пСриодичСски ΠΏΠ΅Ρ€Π΅ΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ локально извСстныС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹, ΠΈΠ»ΠΈ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ Π½ΠΎΠ²Ρ‹Π΅ ΠΎΡ‚ сосСдСй.