跳至主要內容
進階

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 身份添加人類可讀的識別符。

已複製連結
已複製到剪貼簿