What is Nostr?
Nostr社区党支部书记
npub1d5y…p6lz
2025-03-02 15:01:12

Nostr社区党支部书记 on Nostr: #nostr知识科普 # NIP, Kind, Event 和 Tag 的关系 ## 基本关系 **NIP (Nostr ...

#nostr知识科普

# NIP, Kind, Event 和 Tag 的关系

## 基本关系

**NIP (Nostr Implementation Possibilities)**:
- 是定义Nostr功能的技术规范文档
- 描述了如何实现特定功能以及相关的数据格式
- 通常包含引入新类型的事件(kind)和标签(tag)的规范

**Event**:
- Nostr的基本数据单元,由NIP-01定义
- 包含字段:id, pubkey, created_at, kind, tags, content, sig
- 所有Nostr通信和数据存储都基于事件

**Kind**:
- 事件的类型编号,标识事件的用途
- 由不同NIP定义和引入
- 不同范围的kind值有不同的用途

**Tag**:
- 事件中的元数据数组,提供额外上下文
- 由不同NIP定义和引入
- 格式为 `["标签类型", "值", "可选值"...]`

## Kind 清单及关联的 NIP

### 基础类型 (0-999)
- **Kind 0**: 元数据 (NIP-01)
- 用途:用户个人资料信息
- 示例:名称、简介、头像URL、联系方式

- **Kind 1**: 短文本笔记 (NIP-01)
- 用途:基本的文本帖子(类似推文)
- 示例:日常动态、短评论、想法分享

- **Kind 3**: 联系人列表 (NIP-02)
- 用途:用户关注的其他用户列表
- 示例:社交图谱、关注列表

- **Kind 4**: 加密直接消息 (NIP-04)
- 用途:点对点加密通信
- 示例:私聊消息

- **Kind 5**: 事件删除 (NIP-09)
- 用途:要求中继删除之前的事件
- 示例:删除错误发送的内容

- **Kind 6**: 转发 (NIP-18)
- 用途:转发他人内容
- 示例:分享有趣的帖子

- **Kind 7**: 反应 (NIP-25)
- 用途:对事件的情感反应
- 示例:点赞、表情回应

### 特殊用途 (1000-9999)
- **Kind 1984**: 报告 (NIP-56)
- 用途:报告有害内容
- 示例:垃圾信息举报

- **Kind 9734**: 赞赏 (NIP-57)
- 用途:发送比特币闪电网络付款
- 示例:打赏创作者

### 临时事件 (10000-19999)
- **Kind 10000-19999**: 短暂内容 (NIP-16)
- 用途:暂时性信息,不需要长期存储
- 示例:在线状态、打字指示器

### 认证事件 (20000-29999)
- **Kind 22242**: 客户端认证 (NIP-42)
- 用途:向中继证明身份
- 示例:登录验证

- **Kind 27235**: HTTP认证 (NIP-98)
- 用途:向网站证明Nostr身份
- 示例:使用Nostr登录第三方网站

### 可替换事件 (30000+)
- **Kind 30000**: 通用列表 (NIP-51)
- 用途:用户创建的各种列表
- 示例:收藏夹、兴趣列表

- **Kind 30001**: 书签 (NIP-51)
- 用途:保存事件的书签列表
- 示例:收藏的帖子

- **Kind 30023**: 长文章 (NIP-23)
- 用途:发布长篇内容
- 示例:博客文章

- **Kind 30078**: 应用程序特定数据 (NIP-78)
- 用途:存储应用配置
- 示例:用户应用设置

- **Kind 40**: 频道创建 (NIP-28)
- 用途:创建公共聊天频道
- 示例:兴趣小组、社区讨论

- **Kind 41**: 频道元数据 (NIP-28)
- 用途:更新频道信息
- 示例:修改频道名称、描述

- **Kind 42**: 频道消息 (NIP-28)
- 用途:在频道中发送消息
- 示例:群组对话

- **Kind 5000**: 服务请求 (NIP-90)
- 用途:DVM计算请求
- 示例:AI生成内容请求

- **Kind 5001**: 服务响应 (NIP-90)
- 用途:DVM计算结果
- 示例:生成内容的返回

## Tag 清单及关联的 NIP

### 核心标签
- **e**: 事件引用 (NIP-01, NIP-10)
- 用途:引用其他事件
- 格式:`["e", "<event-id>", "<relay-url>", "<marker>"]`
- 示例:回复、引用、线程

- **p**: 公钥引用 (NIP-01)
- 用途:引用用户
- 格式:`["p", "<pubkey>", "<relay-url>", "<petname>"]`
- 示例:提及用户、标记联系人

- **t**: 主题标签 (NIP-12, NIP-14)
- 用途:为内容添加主题分类
- 格式:`["t", "<topic>"]`
- 示例:#nostr、#比特币

- **r**: 资源引用 (NIP-12)
- 用途:引用外部资源
- 格式:`["r", "<url>"]`
- 示例:链接到网站、媒体资源

### 特殊功能标签
- **d**: 唯一标识符 (NIP-33)
- 用途:标识可替换事件
- 格式:`["d", "<identifier>"]`
- 示例:区分同一种类型的多个可替换事件

- **a**: 坐标 (NIP-33)
- 用途:引用事件和创建者
- 格式:`["a", "<kind>:<pubkey>:<identifier>"]`
- 示例:引用参数化事件

- **i**: 身份 (NIP-90)
- 用途:DVM服务标识
- 格式:`["i", "<service-id>"]`
- 示例:指定DVM计算服务类型

- **amount**: 金额 (NIP-57)
- 用途:赞赏金额
- 格式:`["amount", "<millisats>"]`
- 示例:指定打赏数量

- **content-warning**: 内容警告 (NIP-36)
- 用途:标记敏感内容
- 格式:`["content-warning", "<reason>"]`
- 示例:标记可能令人不适的内容

- **expiration**: 过期时间 (NIP-40)
- 用途:指定内容有效期
- 格式:`["expiration", "<unix-timestamp>"]`
- 示例:临时有效的请求

- **relay**: 中继指定 (NIP-42)
- 用途:指定特定中继
- 格式:`["relay", "<relay-url>"]`
- 示例:限定内容传播的中继

- **subject**: 主题 (NIP-14)
- 用途:指定内容主题
- 格式:`["subject", "<subject-text>"]`
- 示例:帖子或文章标题

- **nonce**: 随机数 (NIP-13)
- 用途:用于工作量证明
- 格式:`["nonce", "<random-value>", "<difficulty>"]`
- 示例:防垃圾信息的PoW机制

- **delegation**: 委托 (NIP-26)
- 用途:委托发布权限
- 格式:`["delegation", "<pubkey>", "<conditions>", "<delegation-token>"]`
- 示例:允许第三方应用代表用户发布

- **challenge**: 挑战 (NIP-42)
- 用途:中继认证挑战
- 格式:`["challenge", "<challenge-string>"]`
- 示例:证明身份的随机挑战

- **title**: 标题 (NIP-23)
- 用途:指定长文章标题
- 格式:`["title", "<title-text>"]`
- 示例:博客文章标题

- **summary**: 摘要 (NIP-23)
- 用途:提供内容摘要
- 格式:`["summary", "<summary-text>"]`
- 示例:博客文章简介

- **published_at**: 发布时间 (NIP-23)
- 用途:指定发布时间
- 格式:`["published_at", "<unix-timestamp>"]`
- 示例:文章发布时间戳

- **lnurl**: 闪电网络URL (NIP-57)
- 用途:提供支付接收方式
- 格式:`["lnurl", "<lightning-url>"]`
- 示例:接收比特币闪电网络付款

## 事件示例与关联NIP

1. **用户个人资料 - Kind 0 (NIP-01)**
```json
{
"kind": 0,
"content": "{\"name\":\"Alice\",\"about\":\"Nostr爱好者\",\"picture\":\"https://example.com/avatar.jpg\",\"nip05\":\"alice@example.com\";}",
"created_at": 1685222550
}
```

2. **短文本帖子 - Kind 1 (NIP-01)**
```json
{
"kind": 1,
"content": "这是我的第一条Nostr帖子!",
"tags": [["t", "nostr"], ["t", "初学者"]],
"created_at": 1685222400
}
```

3. **联系人列表 - Kind 3 (NIP-02)**
```json
{
"kind": 3,
"tags": [
["p", "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245", "wss://relay.damus.io", "Alice"],
["p", "14aeb4d6a785b0ec1fb9a34c2a1ca35458b7986d0b5ee088816d0accf75d8891", "wss://relay.snort.social", "Bob"]
],
"content": "",
"created_at": 1685222450
}
```

4. **加密消息 - Kind 4 (NIP-04)**
```json
{
"kind": 4,
"tags": [
["p", "32e1827635450ebb3c5a7d12c1f8e7b2b514439ac10a67eef3d9fd9c5c68e245"]
],
"content": "this-is-an-encrypted-message-only-recipient-can-decrypt",
"created_at": 1685222500
}
```

5. **事件删除 - Kind 5 (NIP-09)**
```json
{
"kind": 5,
"tags": [
["e", "4376c65d2f232afbe9b882a35baa4f6fe8667c4e684749af565f981833ed6a65"]
],
"content": "删除这条帖子,因为有拼写错误",
"created_at": 1685222650
}
```

6. **反应 - Kind 7 (NIP-25)**
```json
{
"kind": 7,
"tags": [
["e", "4376c65d2f232afbe9b882a35baa4f6fe8667c4e684749af565f981833ed6a65"],
["p", "1f5fe03f2965c8801531577e5c8e6f6fdac496a002c732410760af868b6d9b45"]
],
"content": "+",
"created_at": 1685222800
}
```

7. **聊天频道 - Kind 40 (NIP-28)**
```json
{
"kind": 40,
"content": "{\"name\":\"Nostr爱好者\",\"about\":\"讨论Nostr协议和应用\",\"picture\":\"https://example.com/channel.jpg\";}",
"tags": [
["t", "nostr"],
["t", "技术"]
],
"created_at": 1685222850
}
```

8. **长文章 - Kind 30023 (NIP-23)**
```json
{
"kind": 30023,
"content": "# 我的第一篇Nostr文章\n\n这是一篇使用Markdown格式的长文章...",
"tags": [
["title", "我的第一篇Nostr文章"],
["summary", "这是我发布在Nostr上的第一篇长文"],
["published_at", "1685222750"],
["t", "nostr"],
["t", "教程"]
],
"created_at": 1685222750
}
```

9. **闪电赞赏 - Kind 9734 (NIP-57)**
```json
{
"kind": 9734,
"content": "我喜欢你的内容!这是一点赞赏。",
"tags": [
["e", "4376c65d2f232afbe9b882a35baa4f6fe8667c4e684749af565f981833ed6a65"],
["p", "1f5fe03f2965c8801531577e5c8e6f6fdac496a002c732410760af868b6d9b45"],
["amount", "10000"],
["lnurl", "lightning:lnurl1..."]
],
"created_at": 1685223050
}
```

10. **DVM请求 - Kind 5000 (NIP-90)**
```json
{
"kind": 5000,
"content": "{\"prompt\":\"一个阳光明媚的海滩场景\"}",
"tags": [
["i", "ai-image-gen"],
["amount", "1000"],
["payment_hash", "1234..."],
["expiration", "1685223150"]
],
"created_at": 1685223100
}
```

Nostr的模块化设计使得协议可以通过添加新的NIP来扩展功能,每个NIP可以定义新的事件类型(kind)和标签(tag),这样就能在保持核心简单的同时,支持各种复杂的应用场景。这种结构使Nostr既灵活又可扩展,既保持了向后兼容性,又维持了去中心化的特性。
Author Public Key
npub1d5ygkef6r0l7w29ek9l9c7hulsvdshms2qh74jp5qpfyad4g6h5s4ap6lz