Skip to content

Commit

Permalink
nip1 part 1
Browse files Browse the repository at this point in the history
  • Loading branch information
kehiy committed Jul 23, 2024
1 parent 778487d commit f97d1f2
Showing 1 changed file with 77 additions and 1 deletion.
78 changes: 77 additions & 1 deletion src/nip-01.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,80 @@
}
```

برای محاسبه شناسه رویداد هش sha256 حالت سریالایز شده ان را محاسبه میکنیم.
برای محاسبه شناسه رویداد هش sha256 حالت سریالایز شده ان را محاسبه میکنیم.

فرایند سریالایز کردن رویداد ها با استفاده از استاندارد UTF-8 و رشته سریالایز شده جیسان با ساختار زیر اتفاق می افتد:

```json
[
0,
<pubkey, as a lowercase hex string>, // کلید عمومی
<created_at, as a number>, // زمان ساخت بصورت عدد
<kind, as a number>, // گونه به صورت عدد
<tags, as an array of arrays of non-null strings>, // برچسب ها له صورت ارایه ای از رشته ها ناتهی
<content, as a string> // محتوا بصورت رشته
]
```

برای جلوگیری از ساخت شناسه های متفاوت برای یک رویداد در پیاده سازی های متفاوت قوانین زیر **باید** دنبال شود:

- برار رمزگذاری بایذ از UTF-8 استفاده شود.

- فضا های خالی و خطوط جدید و دگیر فرمت های غیر ضرروی نباید در ساختار جیسان خروجی در نظر گرفته شوند.

- نشان های زیر در فیلد محتوا (content) باید به شکل زیر نادیده گرفته شوند و دیگر نشان ها باید واژه به واژه در محتوا فراگرفته شوند:

- برای نشان رفتن به خط بعد (`0x0A`) باید از `\n` استفاده شود.

- برای نشان نقل قول (`0x22`) باید از `\"` استفاده شود.

- برای نشان بک اسلش باید (`0x5C`) باید از `\\` استفاده شود.

- برای نشان بازگشت carriage (`0x0D`) باید از `\r` استفاده شود.

- برای نشان تب (`0x09`) باید از `\t` استفاده شود.

- برای نشان بک اسپیس باید از (`0x08`) باید از `\b` استفاده شود.

- برای نشان حالت فید (feed) (`0x0C`) باید از `\f` استفاده شود.

## برچسب ها

هر برچسب ارایه ای از رشته ها با مجموعه ای از قرار داد های مربوط به ان می باشد. به نمونه زیر نگاه کنید:

```jsonc
{
"tags": [
["e", "5c83da77af1dec6d7289834998ad7aafbd9e2191396d75ec3cc27f5a77226f36", "wss://nostr.example.com"],
["p", "f7234bd4c1394dda46d09f35bd384dd30cc552ad5541990f98844fb06676e9ca"],
["a", "30023:f7234bd4c1394dda46d09f35bd384dd30cc552ad5541990f98844fb06676e9ca:abcd", "wss://nostr.example.com"],
["alt", "reply"],
// ...
],
// ...
}
```

بخش یکم هر برچسب نام یا کلید برچسب نامیده میشود و بخش دوم مقدار ان. پس ما میتوانیم با خیال راحت بگوییم در نمونه بالا رویداد ما یک برچسب `e` با مقدار `"5c83da77af1dec6d7289834998ad7aafbd9e2191396d75ec3cc27f5a77226f36"` و یک برچسب `alt` با مقدار `"reply"` دارد.

تمامی بخش ها بعد از دومین نام اصولی ندارند.

این نیپ سه برچسب استاندارد معرفی میکند که در همه رویداد ها با هر گونه ای با معنی یکی استفاده شود:

- برچسب `e` برای واگذاری (ارجاع) به رویدادی استفاده میشود: ‍‍`["e", <32-bytes lowercase hex of the id of another event>, <recommended relay URL, optional>]`

- برچسب `p` برای واگذاری به کاربری استفاده میشود: `["p", <32-bytes lowercase hex of a pubkey>, <recommended relay URL, optional>]`

- برچسب `a` برای واگذاری به یک رویداد (شاید پارامتر شده) قابل جایگزین استفاده میشود:

- برای رویداد پارامتر شده قابل جایگزین: `["a", <kind integer>:<32-bytes lowercase hex of a pubkey>:<d tag value>, <recommended relay URL, optional>]`

- برای رویداد پارامتر نشده قابل جایگزین: ‍`["a", <kind integer>:<32-bytes lowercase hex of a pubkey>:, <recommended relay URL, optional>]`


به عنوان یک اصل تمامی بر چسب های تک حرفی با نام های بندواژه (حروف البفا) انگلیسی کوچک و بزرگ توقع میشود کلید ها یا نام ها توسط رله ها فهرست (index) شوند.

به گونه ای که پرس و جو یا دنبال کردن رویداد هایی که به رویداد با شناسه `"5c83da77af1dec6d7289834998ad7aafbd9e2191396d75ec3cc27f5a77226f36"` واگذاری دارند با استفاده از صافیه (filter) `{"#e": ["5c83da77af1dec6d7289834998ad7aafbd9e2191396d75ec3cc27f5a77226f36"]}` ممکن باشد.


## گونه ها

0 comments on commit f97d1f2

Please sign in to comment.