Протокол Nostr
Це огляд протоколу Nostr на високому рівні з деталями про типи подій та як працюють Можливості Впровадження Nostr (NIPs).
§ Nostr на найвищому рівні
- Існує два основні компоненти мережі Nostr: клієнти та релеї.
- Клієнти — це інтерфейс, який користувачі використовують для читання та запису даних до релеїв. У контексті соціальних мереж, це можна порівняти з веб-додатком або мобільним додатком Twitter. Це клієнт, який дозволяє вам читати дані з централізованої бази даних Twitter і записувати дані до неї.
- Релеї схожі на бази даних (хоча вони роблять набагато більше, ніж просто зберігають дані). Вони дозволяють клієнтам надсилати їм дані та зберігати ці дані в базі даних. Клієнти можуть потім читати дані з релеїв, щоб показувати їх користувачам.
- Кожен користувач ідентифікується за допомогою публічного ключа. Кожен об’єкт події (наприклад, повідомлення, яке ви публікуєте, оновлення вашого списку підписників тощо) підписується. Клієнти перевіряють ці підписи, щоб переконатися, що вони правильні.
- Клієнти отримують дані з релеїв і публікують дані до релеїв. Релеї майже завжди обираються користувачем. Релеї не обов’язково повинні спілкуватися один з одним, але можуть потенційно робити це в майбутньому.
- Наприклад, щоб оновити свій профіль, ви просто інструктуєте свій клієнт надіслати подію типу 0 до релеїв, які ви хочете використовувати. Релеї потім зберігають цю подію.
- Під час запуску ваш клієнт запитує дані з релеїв, які ви йому вказали. Це можна відфільтрувати, щоб показувати лише події для користувачів, на яких ви підписані, або ви можете запитати все від усіх, тоді клієнт відображає ці дані вам.
- Існує багато різних типів подій. Події можуть містити всілякі структуровані дані, і найбільш використовувані структури знаходять своє місце в Можливостях Впровадження Nostr (NIPs – стандарти протоколу, яких дотримуються всі), щоб усі клієнти та релеї могли безперешкодно їх обробляти.
- Дані, які ви можете бачити на 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.
kind | description | NIP |
---|---|---|
0 | Metadata | 1 |
1 | Short Text Note | 1 |
2 | Recommend Relay | 1 |
3 | Contacts | 2 |
4 | Encrypted Direct Messages | 4 |
5 | Event Deletion | 9 |
6 | Reposts | 18 |
7 | Reaction | 25 |
8 | Badge Award | 58 |
40 | Channel Creation | 28 |
41 | Channel Metadata | 28 |
42 | Channel Message | 28 |
43 | Channel Hide Message | 28 |
44 | Channel Mute User | 28 |
1063 | File Metadata | 94 |
1984 | Reporting | 56 |
9734 | Zap Request | 57 |
9735 | Zap | 57 |
10000 | Mute List | 51 |
10001 | Pin List | 51 |
10002 | Relay List Metadata | 65 |
13194 | Wallet Info | 47 |
22242 | Client Authentication | 42 |
23194 | Wallet Request | 47 |
23195 | Wallet Response | 47 |
24133 | Nostr Connect | 46 |
30000 | Categorized People List | 51 |
30001 | Categorized Bookmark List | 51 |
30008 | Profile Badges | 58 |
30009 | Badge Definition | 58 |
30017 | Create or update a stall | 15 |
30018 | Create or update a product | 15 |
30023 | Long-form Content | 23 |
30078 | Application-specific Data | 78 |
30402 | Classifieds | 99 |
31989 | Handler recommendation | 89 |
31990 | Handler information | 89 |
Standardized Tags
name | value | other parameters | NIP |
---|---|---|---|
e | event id (hex) | relay URL, marker | 1, 10 |
p | pubkey (hex) | relay URL | 1 |
a | coordinates to an event | relay URL | 33, 23 |
r | a reference (URL, etc) | 12 | |
t | hashtag | 12 | |
g | geohash | 12 | |
nonce | random | 13 | |
subject | subject | 14 | |
d | identifier | 33 | |
expiration | unix timestamp (string) | 40 |
§ NIPs
Nostr Implementation Possibility, або NIP, існують для документування того, що МАЄ, що ПОВИННО і що МОЖЕ бути реалізовано програмним забезпеченням, сумісним з релеями та клієнтами Nostr. NIPs — це документи, які описують, як працює протокол Nostr.
Чому мені варто перейматися NIPs?
Nostr є децентралізованим і не належить централізованій службі (як Twitter). Це означає, що напрямок розвитку протоколу залежить від усіх нас! Ми можемо пропонувати та відстоювати зміни, а також надавати відгуки щодо ідей, запропонованих іншими.
Активна участь у спільноті дає вам право голосу в напрямку розвитку мережі. NIPs, опубліковані в основному репозиторії, вже затверджені. Додавання нових ідей здійснюється через Pull Request у цьому репозиторії.
Де я можу знайти NIPs?
Ви можете побачити всі поточні NIPs у репозиторії Nostr NIP.