進階
NIP 規範概覽
全面了解 Nostr Implementation Possibilities (NIPs),探索協議的各種擴展和標準。
20 分鐘
什麼是 NIP?
NIP(Nostr Implementation Possibilities)是 Nostr 協議的擴展標準文件。 類似於比特幣的 BIP 或以太坊的 EIP,NIP 定義了協議的各種功能和最佳實踐。 NIP 由社群提出、討論和維護。
標準化過程: NIP 通過 GitHub Pull Request 提出,經過社群討論後合併。 實現者可以選擇性地支援 NIP,中繼器通過 NIP-11 公布支援的 NIP。
NIP 分類
核心協議
| NIP | 名稱 | 描述 |
|---|---|---|
| 01 | 基本協議 | 事件格式、過濾器、訊息類型 |
| 02 | 關注列表 | kind:3 關注列表事件 |
| 09 | 事件刪除 | kind:5 刪除請求 |
| 10 | 文本注釋 | 回覆和引用的標記規範 |
| 11 | 中繼器資訊 | 中繼器元數據文件 |
身份與編碼
| NIP | 名稱 | 描述 |
|---|---|---|
| 05 | 域名驗證 | DNS 域名到公鑰的映射 |
| 19 | bech32 編碼 | npub、nsec、note 等編碼格式 |
| 21 | nostr: URI | nostr: 協議 URI 格式 |
| 39 | 外部身份 | 連結 GitHub、Twitter 等身份 |
加密與安全
| NIP | 名稱 | 描述 |
|---|---|---|
| 04 | 加密私訊(舊) | NIP-04 加密 DM(已不推薦) |
| 17 | 私訊 | 改進的私訊方案(kind:14) |
| 42 | 認證 | 中繼器認證協議 |
| 44 | 加密(新) | 改進的加密方案 |
| 46 | 遠端簽名 | Nostr Connect 遠端簽名 |
支付與經濟
| NIP | 名稱 | 描述 |
|---|---|---|
| 47 | 錢包連接 | Nostr Wallet Connect |
| 57 | Zaps | 閃電網路打賞 |
| 60 | Cashu | Cashu 電子現金錢包 |
內容與媒體
| NIP | 名稱 | 描述 |
|---|---|---|
| 23 | 長篇文章 | kind:30023 長篇內容 |
| 25 | 反應 | kind:7 反應(表情、點讚) |
| 27 | 文本格式 | 文本內容格式規範 |
| 30 | 自訂表情 | 自訂表情包 |
| 94 | 檔案元數據 | 檔案 hash 和元數據 |
| 96 | 檔案儲存 | HTTP 檔案上傳標準 |
社交功能
| NIP | 名稱 | 描述 |
|---|---|---|
| 18 | 轉發 | kind:6 轉發事件 |
| 28 | 公開聊天 | 公開聊天室 |
| 51 | 列表 | 各種列表(靜音、書籤等) |
| 56 | 檢舉 | 內容檢舉 |
| 65 | 中繼器列表 | 用戶偏好的中繼器 |
客戶端功能
| NIP | 名稱 | 描述 |
|---|---|---|
| 07 | 瀏覽器擴展 | window.nostr 介面 |
| 45 | 計數 | COUNT 訊息 |
| 50 | 搜尋 | search 過濾器 |
| 89 | 推薦應用 | 應用處理器推薦 |
重要 NIP 詳解
NIP-01:基本協議
定義事件結構、簽名驗證、過濾器格式和客戶端-中繼器通訊。 這是所有 Nostr 實現必須支援的基礎。
NIP-05:域名驗證
允許通過 DNS 域名驗證 Nostr 身份(如 [email protected])。 提供人類可讀的身份標識和額外的信任層。
NIP-19:bech32 編碼
定義 npub、nsec、note、nprofile、nevent、naddr 等人類可讀格式。 包含校驗碼防止輸入錯誤。
NIP-57:Zaps
整合閃電網路支付,允許用戶通過 LNURL 向內容打賞。 Zap 收據作為公開事件記錄在 Nostr 上。
NIP 狀態
NIP 狀態類型: FINAL(最終版) - 已穩定,不會有重大變更 - 廣泛採用 - 例如:NIP-01, NIP-19 DRAFT(草案) - 大致穩定,可能有小修改 - 可以開始實現 - 大多數 NIP 處於此狀態 PROPOSAL(提案) - 仍在討論中 - 可能有重大變更 - 實現時需謹慎 DEPRECATED(已棄用) - 不再推薦使用 - 有更好的替代方案 - 例如:NIP-04(被 NIP-44 替代) OPTIONAL(可選) - 非必要功能 - 根據需求實現 - 例如:NIP-13(工作量證明)
檢查 NIP 支援
檢查中繼器支援的 NIP:
1. 查詢 NIP-11 資訊
GET https://relay.example.com
Accept: application/nostr+json
2. 解析 supported_nips 欄位
{
"supported_nips": [1, 2, 9, 11, 12, 15, 16, 20, ...]
}
檢查客戶端功能:
- 檢查 kind 支援
- 測試特定功能
- 查閱客戶端文檔
nostr-tools 範例:
import { nip05, nip19, nip57 } from 'nostr-tools'
// 使用特定 NIP 功能
const profile = await nip05.queryProfile('[email protected]')
const npub = nip19.npubEncode(pubkey)
const zapEndpoint = await nip57.getZapEndpoint(event) 貢獻 NIP
提交新 NIP 的流程: 1. 研究現有 NIP - 確認功能不重複 - 了解相關 NIP 2. 撰寫 NIP 文件 - 使用 Markdown 格式 - 包含動機、規範、範例 - 參考現有 NIP 格式 3. 提交 Pull Request - Fork nostr-protocol/nips - 創建新的 NIP 文件 - 提交 PR 並說明 4. 社群討論 - 在 GitHub 上討論 - 在 Nostr 上徵求意見 - 根據反饋修改 5. 合併與實現 - 經過足夠討論後合併 - 開始在客戶端/中繼器實現 NIP 命名: - 使用下一個可用編號 - 或使用描述性名稱 - 由維護者分配最終編號
延伸閱讀
下一步: 深入了解 NIP-05 域名驗證 如何為你的 Nostr 身份添加人類可讀的識別符。
已複製連結