Протокол Nostr

Це огляд протоколу Nostr на високому рівні з деталями про типи подій та як працюють Можливості Впровадження Nostr (NIPs).

§ Nostr на найвищому рівні

  • Існує два основні компоненти мережі Nostr: клієнти та релеї.
    • Клієнти — це інтерфейс, який користувачі використовують для читання та запису даних до релеїв. У контексті соціальних мереж, це можна порівняти з веб-додатком або мобільним додатком Twitter. Це клієнт, який дозволяє вам читати дані з централізованої бази даних Twitter і записувати дані до неї.
    • Релеї схожі на бази даних (хоча вони роблять набагато більше, ніж просто зберігають дані). Вони дозволяють клієнтам надсилати їм дані та зберігати ці дані в базі даних. Клієнти можуть потім читати дані з релеїв, щоб показувати їх користувачам.
  • Кожен користувач ідентифікується за допомогою публічного ключа. Кожен об’єкт події (наприклад, повідомлення, яке ви публікуєте, оновлення вашого списку підписників тощо) підписується. Клієнти перевіряють ці підписи, щоб переконатися, що вони правильні.
  • Клієнти отримують дані з релеїв і публікують дані до релеїв. Релеї майже завжди обираються користувачем. Релеї не обов’язково повинні спілкуватися один з одним, але можуть потенційно робити це в майбутньому.
  • Наприклад, щоб оновити свій профіль, ви просто інструктуєте свій клієнт надіслати подію типу 0 до релеїв, які ви хочете використовувати. Релеї потім зберігають цю подію.
  • Під час запуску ваш клієнт запитує дані з релеїв, які ви йому вказали. Це можна відфільтрувати, щоб показувати лише події для користувачів, на яких ви підписані, або ви можете запитати все від усіх, тоді клієнт відображає ці дані вам.
  • Існує багато різних типів подій. Події можуть містити всілякі структуровані дані, і найбільш використовувані структури знаходять своє місце в Можливостях Впровадження Nostr (NIPs – стандарти протоколу, яких дотримуються всі), щоб усі клієнти та релеї могли безперешкодно їх обробляти.
  • Дані, які ви можете бачити на Nostr, повністю залежать від релеїв, до яких ви вирішите підключитися. Дивіться діаграму мережі нижче для більш детальної інформації.

Діаграма мережі

Діаграма мережі Nostr

На діаграмі вище ми бачимо 3 релеї та 3 користувачів. Кожен з користувачів підключається до Nostr за допомогою різного клієнта (і на різній платформі).

Враховуючи читання та запис на діаграмі:

  • Боб може бачити всі пости Аліси, але не може бачити нічого від Мері (і навіть не знає, що вона існує)
  • Аліса може бачити всі пости Боба, але не може бачити нічого від Мері (і навіть не знає, що вона існує)
  • Мері може бачити всі пости Боба та Аліси. Це тому, що хоча вона пише тільки до Релею 3, вона читає з Релею 2, де Боб і Аліса пишуть свої пости.

Це дуже спрощена ситуація, але ви вже можете побачити, що вибір релеїв, до яких ви хочете підключитися, може мати великий вплив на те, кого і що ви побачите, використовуючи Nostr.

§ Події

Події є єдиним типом об’єктів у мережі Nostr. Кожен об’єкт події має kind, який позначає, який це тип події (яку дію може виконати користувач або які повідомлення можуть бути отримані).

Ось як виглядає подія типу 1 (тип 1 призначений для коротких текстових нотаток – тобто щось на кшталт твіту в Twitter)

{
    "id": "4376c65d2f232afbe9b882a35baa4f6fe8667c4e684749af565f981833ed6a65",
    "pubkey": "6e468422dfb74a5738702a8823b9b28168abab8655faacb6853cd0ee15deee93",
    "created_at": 1673347337,
    "kind": 1,
    "tags": [
        ["e", "3da979448d9ba263864c4d6f14984c423a3838364ec255f03c7904b1ae77f206"],
        ["p", "bf2376e17ba4ec269d10fcc996a4746b451152be9031fa48e74553dde5526bce"]
    ],
    "content": "Walled gardens became prisons, and nostr is the first step towards tearing down the prison walls.",
    "sig": "908a15e46fb4d8675bab026fc230a0e3542bfade63da02d542fb78b2a8513fcd0092619a2c8c1221e581946e0191f2af505dfdf8657a414dbca329186f009262"
}
  • Поле id вказує нам ID події
  • Поле pubkey вказує нам публічний ключ користувача, який надіслав подію
  • Поле created_at вказує нам, коли подія була опублікована
  • Поле kind вказує нам, який це тип події
  • Поле tags вказує нам теги події. Вони використовуються для створення посилань, додавання медіа та згадування інших користувачів або подій.
  • Поле content надає нам зміст події. У цьому випадку це короткий текстовий пост.
  • Поле sig є підписом, який клієнти використовують для перевірки того, що користувач з цим публічним ключем дійсно надіслав цю подію на зазначену дату.

Event Kinds

Це список поточних типів Event. Найактуальніший список завжди можна знайти в репозиторії Nostr NIPs.

kinddescriptionNIP
0Metadata1
1Short Text Note1
2Recommend Relay1
3Contacts2
4Encrypted Direct Messages4
5Event Deletion9
6Reposts18
7Reaction25
8Badge Award58
40Channel Creation28
41Channel Metadata28
42Channel Message28
43Channel Hide Message28
44Channel Mute User28
1063File Metadata94
1984Reporting56
9734Zap Request57
9735Zap57
10000Mute List51
10001Pin List51
10002Relay List Metadata65
13194Wallet Info47
22242Client Authentication42
23194Wallet Request47
23195Wallet Response47
24133Nostr Connect46
30000Categorized People List51
30001Categorized Bookmark List51
30008Profile Badges58
30009Badge Definition58
30017Create or update a stall15
30018Create or update a product15
30023Long-form Content23
30078Application-specific Data78
30402Classifieds99
31989Handler recommendation89
31990Handler information89

Standardized Tags

namevalueother parametersNIP
eevent id (hex)relay URL, marker1, 10
ppubkey (hex)relay URL1
acoordinates to an eventrelay URL33, 23
ra reference (URL, etc)12
thashtag12
ggeohash12
noncerandom13
subjectsubject14
didentifier33
expirationunix timestamp (string)40

§ NIPs

Nostr Implementation Possibility, або NIP, існують для документування того, що МАЄ, що ПОВИННО і що МОЖЕ бути реалізовано програмним забезпеченням, сумісним з релеями та клієнтами Nostr. NIPs — це документи, які описують, як працює протокол Nostr.

Чому мені варто перейматися NIPs?

Nostr є децентралізованим і не належить централізованій службі (як Twitter). Це означає, що напрямок розвитку протоколу залежить від усіх нас! Ми можемо пропонувати та відстоювати зміни, а також надавати відгуки щодо ідей, запропонованих іншими.

Активна участь у спільноті дає вам право голосу в напрямку розвитку мережі. NIPs, опубліковані в основному репозиторії, вже затверджені. Додавання нових ідей здійснюється через Pull Request у цьому репозиторії.

Де я можу знайти NIPs?

Ви можете побачити всі поточні NIPs у репозиторії Nostr NIP.