From f97d1f21ca438de7235b3c1ca2dbf59380c7f643 Mon Sep 17 00:00:00 2001 From: kehiy Date: Tue, 23 Jul 2024 14:02:46 +0330 Subject: [PATCH] nip1 part 1 --- src/nip-01.md | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 77 insertions(+), 1 deletion(-) diff --git a/src/nip-01.md b/src/nip-01.md index 1d87dfe..e23761d 100644 --- a/src/nip-01.md +++ b/src/nip-01.md @@ -27,4 +27,80 @@ } ``` -برای محاسبه شناسه رویداد هش sha256 حالت سریالایز شده ان را محاسبه میکنیم. \ No newline at end of file +برای محاسبه شناسه رویداد هش sha256 حالت سریالایز شده ان را محاسبه میکنیم. + +فرایند سریالایز کردن رویداد ها با استفاده از استاندارد UTF-8 و رشته سریالایز شده جیسان با ساختار زیر اتفاق می افتد: + +```json +[ + 0, + , // کلید عمومی + , // زمان ساخت بصورت عدد + , // گونه به صورت عدد + , // برچسب ها له صورت ارایه ای از رشته ها ناتهی + // محتوا بصورت رشته +] +``` + +برای جلوگیری از ساخت شناسه های متفاوت برای یک رویداد در پیاده سازی های متفاوت قوانین زیر **باید** دنبال شود: + +- برار رمزگذاری بایذ از 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>, ]` + +- برچسب `p` برای واگذاری به کاربری استفاده میشود: `["p", <32-bytes lowercase hex of a pubkey>, ]` + +- برچسب `a` برای واگذاری به یک رویداد (شاید پارامتر شده) قابل جایگزین استفاده میشود: + + - برای رویداد پارامتر شده قابل جایگزین: `["a", :<32-bytes lowercase hex of a pubkey>:, ]` + + - برای رویداد پارامتر نشده قابل جایگزین: ‍`["a", :<32-bytes lowercase hex of a pubkey>:, ]` + + +به عنوان یک اصل تمامی بر چسب های تک حرفی با نام های بندواژه (حروف البفا) انگلیسی کوچک و بزرگ توقع میشود کلید ها یا نام ها توسط رله ها فهرست (index) شوند. + +به گونه ای که پرس و جو یا دنبال کردن رویداد هایی که به رویداد با شناسه `"5c83da77af1dec6d7289834998ad7aafbd9e2191396d75ec3cc27f5a77226f36"` واگذاری دارند با استفاده از صافیه (filter) `{"#e": ["5c83da77af1dec6d7289834998ad7aafbd9e2191396d75ec3cc27f5a77226f36"]}` ممکن باشد. + + +## گونه ها