NIP-73:Nostr事件中引用外部内容ID的规范

nostr-protocol 发布于 2026-01-31 阅读 76

NIP-73 定义了在 Nostr 事件中使用 i 标签引用外部内容 ID(如 ISBN、播客 GUID、电影 ISAN、区块链交易等)的规范,并配合 k 标签表示 ID 类型,以便客户端查询特定类型的事件。文章列出了支持的外部 ID 类型(如 URL、图书、地理哈希、国家、电影、论文、标签、播客、区块链交易和地址),提供了格式示例,并说明了可选 URL 提示。

外部内容 ID

draft optional

存在一些已建立的全局内容标识符,例如 书籍 ISBN播客 GUID电影 ISAN,这些标识符在 nostr 事件中引用非常有用,以便客户端可以查询与这些 ID 相关的所有事件。

i 标签用于引用这些外部内容 ID,而 k 标签表示外部内容 ID 的种类,以便客户端可以查询特定种类的所有事件。

支持的 ID

类型 i 标签 k 标签
URL "<URL, 规范化, 无片段>" "web"
书籍 "isbn:<id, 无连字符>" "isbn"
地理哈希 "geo:<地理哈希, 小写>" "geo"
国家 "iso3166:<代码, 大写>" "iso3166"
电影 "isan:<id, 无版本部分>" "isan"
论文 "doi:<id, 小写>" "doi"
话题标签 "#<主题, 小写>" "#"
播客 Feed "podcast:guid:<guid>" "podcast:guid"
播客剧集 "podcast:item:guid:<guid>" "podcast:item:guid"
播客发布者 "podcast:publisher:guid:<guid>" "podcast:publisher:guid"
区块链交易 "<区块链>:[<链ID>:]tx:<交易哈希, 十六进制, 小写>" "<区块链>:tx"
区块链地址 "<区块链>:[<链ID>:]address:<地址>" "<区块链>:address"

示例

网页

对于网页 "https://myblog.example.com/post/2012-03-27/hello-world","i" 和 "k" 标签如下:

[
  ["i", "https://myblog.example.com/post/2012-03-27/hello-world"],
  ["k", "web"]
]

地理哈希

地理哈希是一种将地理位置编码为由字母和数字组成的短字符串的地理编码系统。它们必须是小写。

国家

ISO 3166 代码可以引用国家(ISO 3166-1 alpha-2)或州/省等行政区划(ISO 3166-2)。

  • 国家(委内瑞拉):["i", "iso3166:VE"]
  • 行政区划(美国加利福尼亚州):["i", "iso3166:US-CA"]

ISO 3166 代码必须是大写。更多信息:https://en.wikipedia.org/wiki/ISO_3166

书籍

书籍 ISBN 在引用时必须 不包含连字符,因为许多书籍搜索 API 返回的 ISBN 不带连字符。从 ISBN 中去除连字符很简单,而重新添加连字符则需要一个库,并非易事。

播客

电影

电影 ISAN 在引用时应 不包含版本部分,因为电影的版本/剪辑不相关。更多关于 ISAN 部分的信息请见:https://support.isan.org/hc/en-us/articles/360002783131-Records-relations-and-hierarchies-in-the-ISAN-Registry

区块链

<区块链> 可以是任何第一层链(bitcoinethereumsolana……)。如有必要(例如针对以太坊),可以指定 <链ID>

比特币

bitcoin:address:<bech32, 小写 | base58, 区分大小写>
bitcoin:tx:<交易哈希, 十六进制, 小写>

例如 https://blockstream.info/tx/a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d

[
  ["i", "bitcoin:tx:a1075db55d416d3ca199f55b6084e2115b9345e16c5cf302fc80e9d5fbf5d48d"],
  ["k", "bitcoin:tx"]
]

例如 https://blockstream.info/address/1HQ3Go3ggs8pFnXuHVHRytPCq5fGG8Hbhx

[
  ["i", "bitcoin:address:1HQ3Go3ggs8pFnXuHVHRytPCq5fGG8Hbhx"],
  ["k", "bitcoin:address"]
]

以太坊(及其他 EVM 链)

ethereum:<链ID, 整数>:tx:<交易哈希, 十六进制, 小写>
ethereum:<链ID, 整数>:address:<十六进制, 小写>

例如 https://etherscan.io/address/0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045

[
  ["i", "ethereum:1:address:0xd8da6bf26964af9d7eed9e03e53415d37aa96045"],
  ["k", "ethereum:address"]
]

例如 https://gnosisscan.io/tx/0x98f7812be496f97f80e2e98d66358d1fc733cf34176a8356d171ea7fbbe97ccd

[
  ["i", "ethereum:100:tx:0x98f7812be496f97f80e2e98d66358d1fc733cf34176a8356d171ea7fbbe97ccd"],
  ["k", "ethereum:tx"]
]

可选的 URL 提示

每个 i 标签可以有一个 URL 提示作为第二个参数,用于将用户重定向到一个网站,以防客户端对如何解释该 ID 没有特定意见:

["i", "podcast:item:guid:d98d189b-dc7b-45b1-8720-d4b98690f31f", https://fountain.fm/episode/z1y9TMQRuqXl2awyrQxg]

["i", "isan:0000-0000-401A-0000-7", https://www.imdb.com/title/tt0120737]

  • 原文链接: github.com/nostr-protoco...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~

相关文章

0 条评论