NIP-01: 基本プロトコル
NIP-01はNostrの基礎となるプロトコルを定義し、他のすべてのNIPが構築するデータ構造と通信パターンを確立します。
イベント
イベントはNostrにおける唯一のオブジェクト型です。プロフィール更新からテキスト投稿、リアクションまで、すべてのデータはこの構造を持つイベントとして表現されます:
- id: シリアライズされたイベントのSHA256ハッシュ(一意識別子)
- pubkey: 作成者の公開鍵(32バイトhex、secp256k1)
- created_at: Unixタイムスタンプ
- kind: イベントタイプを分類する整数
- tags: メタデータ用の配列の配列
- content: ペイロード(解釈はkindに依存)
- sig: 真正性を証明するSchnorr署名
Kind
Kindはリレーがイベントをどのように保存・処理するかを決定します:
- 通常イベント (1, 2, 4-44, 1000-9999): 通常どおり保存され、すべてのバージョンが保持
- 置換可能イベント (0, 3, 10000-19999): pubkeyごとに最新のもののみ保持
- 一時的イベント (20000-29999): 保存されず、購読者に転送のみ
- アドレス指定可能イベント (30000-39999): pubkey + kind +
dタグの組み合わせごとに最新を保持
コアkindには以下が含まれます: 0(ユーザーメタデータ)、1(テキストノート)、3(フォローリスト)
クライアント-リレー通信
クライアントはJSON配列を使用してWebSocket接続でリレーと通信します:
クライアントからリレーへ:
["EVENT", <event>]- イベントを公開["REQ", <sub-id>, <filter>, ...]- イベントを購読["CLOSE", <sub-id>]- 購読を終了
リレーからクライアントへ:
["EVENT", <sub-id>, <event>]- マッチするイベントを配信["EOSE", <sub-id>]- 保存されたイベントの終わり(以降はライブストリーミング)["OK", <event-id>, <true|false>, <message>]- 受理/拒否の確認["NOTICE", <message>]- 人間が読めるメッセージ
フィルター
フィルターは取得するイベントを指定し、以下のフィールドを含みます: ids、authors、kinds、#e/#p/#t(タグ値)、since/until、limit。フィルター内の条件はANDロジックを使用し、REQ内の複数のフィルターはORロジックで結合されます。
主要ソース:
言及箇所:
関連項目: