NIP-02はkind 3イベントを定義し、フォローリストを保存します。このシンプルなメカニズムが、タイムラインを可能にするソーシャルグラフを支えています。

構造

kind 3イベントにはフォローしているpubkeyをリストするpタグが含まれます:

{
  "id": "d7a8f...",
  "pubkey": "a3b9c...",
  "created_at": 1734912000,
  "kind": 3,
  "tags": [
    ["p", "91cf9..af5f", "wss://alicerelay.example.com", "alice"],
    ["p", "14aeb..8dad", "wss://bobrelay.example.com", "bob"],
    ["p", "612ae..982b", "", ""]
  ],
  "content": "",
  "sig": "e4f8a..."
}

pタグには4つの位置があります: タグ名、フォローしているpubkey(hex)、オプションのリレーURLヒント、オプションの「petname」(ローカルニックネーム)。リレーヒントは他のクライアントにそのユーザーのイベントをどこで見つけるかを伝えます。petnameを使用すると、自己宣言した表示名に頼らずに連絡先に覚えやすい名前を割り当てることができます。

置換可能な動作

Kind 3は置換可能な範囲(0、3、10000-19999)に属するため、リレーはpubkeyごとに最新バージョンのみを保持します。新しい人をフォローすると、クライアントはすべてのフォローと新しいものを含む完全な新しいkind 3を公開します。つまり、フォローリストは毎回完全でなければならず、増分更新を公開することはできません。

タイムラインの構築

ホームフィードを構築するために、クライアントはユーザーのkind 3を取得し、すべてのpタグのpubkeyを抽出し、それらの作成者からのkind 1イベントを購読します:

["REQ", "home", {"kinds": [1], "authors": ["91cf9...", "14aeb...", "612ae..."], "limit": 50}]

リレーはマッチするノートを返し、クライアントはそれらをレンダリングします。kind 3のリレーヒントは、クライアントがフォローしている各ユーザーに対してどのリレーにクエリするかを知るのに役立ちます。

Petnameとアイデンティティ

petnameフィールドは分散型命名スキームを可能にします。ユーザーがプロフィールで主張する名前を信頼するのではなく、自分自身のラベルを割り当てることができます。クライアントは「alice(私の姉妹)」と表示するかもしれません。ここで「alice」は彼女のkind 0プロフィールから、「私の姉妹」はあなたのpetnameです。これはグローバルなユーザー名では提供できないコンテキストを提供します。

実践的な考慮事項

kind 3イベントは置換可能で完全でなければならないため、クライアントは更新時に不明なタグを保持する必要があります。別のクライアントがあなたのクライアントが理解しないタグを追加した場合、盲目的に上書きするとそのデータが失われます。ゼロから再構築するのではなく、新しいフォローを追加してください。


主要ソース:

言及箇所:

関連項目: