NIP-02:关注列表
NIP-02 定义了 kind 3 事件,用于存储您的关注列表。这个简单的机制驱动着使时间线成为可能的社交图谱。
结构
kind 3 事件包含列出关注公钥的 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 标签有四个位置:标签名称、关注的公钥(十六进制)、可选的中继 URL 提示和可选的"昵称"(本地昵称)。中继提示告诉其他客户端在哪里找到该用户的事件。昵称让您可以为联系人分配易记的名称,而不依赖于他们自己声明的显示名称。
可替换行为
Kind 3 属于可替换范围(0, 3, 10000-19999),因此中继每个公钥仅保留最新版本。当您关注新用户时,您的客户端发布一个完整的新 kind 3,包含所有关注者加上新关注者。这意味着关注列表每次必须是完整的;您不能发布增量更新。
构建时间线
要构建主页信息流,客户端获取用户的 kind 3,提取所有 p 标签公钥,然后订阅来自这些作者的 kind 1 事件:
["REQ", "home", {"kinds": [1], "authors": ["91cf9...", "14aeb...", "612ae..."], "limit": 50}]
中继返回匹配的笔记,客户端渲染它们。kind 3 中的中继提示帮助客户端知道要查询哪些中继以获取每个关注用户的内容。
昵称和身份
昵称字段实现了去中心化命名方案。与其信任用户在其个人资料中声称的名称,您可以分配自己的标签。客户端可能显示 “alice (我的姐姐)",其中 “alice” 来自她的 kind 0 个人资料,“我的姐姐” 是您的昵称。这提供了全局用户名无法提供的上下文。
实际考虑
因为 kind 3 事件是可替换的且必须完整,客户端在更新时应保留未知标签。如果另一个客户端添加了您的客户端不理解的标签,盲目覆盖会丢失该数据。追加新关注而不是从头重建。
主要来源:
提及于:
另请参阅: