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>] - 人間が読めるメッセージ

フィルター

フィルターは取得するイベントを指定し、以下のフィールドを含みます: idsauthorskinds#e/#p/#t(タグ値)、since/untillimit。フィルター内の条件はANDロジックを使用し、REQ内の複数のフィルターはORロジックで結合されます。


主要ソース:

言及箇所:

関連項目: