<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>通讯 on Nostr Compass</title><link>https://nostrcompass.org/zh/newsletters/</link><description>Recent content in 通讯 on Nostr Compass</description><generator>Hugo</generator><language>zh</language><atom:link href="https://nostrcompass.org/zh/newsletters/feed.xml" rel="self" type="application/rss+xml"/><item><title>Nostr Compass #26</title><link>https://nostrcompass.org/zh/newsletters/2026-06-10-newsletter/</link><pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-06-10-newsletter/</guid><description>&lt;p>Marmot 协议组织为 v2 协议草案和原生 client 谱系开放了三个新的 repo：一个名为 &lt;code>darkmatter&lt;/code> 的 Rust workspace、一个 SwiftUI iOS 应用 &lt;code>darkmatter-ios&lt;/code> 以及一个 Kotlin/Compose Android 应用 &lt;code>darkmatter-android&lt;/code>。原始的 Flutter Whitenoise 被归档。Chama 在一周内压缩了十七个版本发布，在 v3.0.0 越过独立应用线，然后在 v3.1.0 中落地了完整的交易室 UI 重绘和每卖家店面，在持有者专属 Shamir 共享、仲裁者替换、全球社区路由和端到端交易通知之上。Coracle 推出了由开源 Caravel 和 zooid 栈支持的付费托管 relay 服务，计划深度 Flotilla 集成。Angor 在 v0.2.30 中默认切换到主网，并在 v0.2.29 中落地了 3 用户 UAT 资金测试。Amethyst 落地了 41 个未发布的 PR，延续上周的 NIP-32 / NIP-F4 / Tor 工作。NIP-67（EOSE 完整性提示）和 NIP-50 autocomplete 合并，关闭了核心 relay 协议中两个长期存在的正确性差距。NIP-GART 提议了紧急警报的隐私保护 wire 格式，NIP-46 增加了一个 logout 方法。&lt;/p></description><content:encoded>&lt;p>Marmot 协议组织为 v2 协议草案和原生 client 谱系开放了三个新的 repo：一个名为 &lt;code>darkmatter&lt;/code> 的 Rust workspace、一个 SwiftUI iOS 应用 &lt;code>darkmatter-ios&lt;/code> 以及一个 Kotlin/Compose Android 应用 &lt;code>darkmatter-android&lt;/code>。原始的 Flutter Whitenoise 被归档。Chama 在一周内压缩了十七个版本发布，在 v3.0.0 越过独立应用线，然后在 v3.1.0 中落地了完整的交易室 UI 重绘和每卖家店面，在持有者专属 Shamir 共享、仲裁者替换、全球社区路由和端到端交易通知之上。Coracle 推出了由开源 Caravel 和 zooid 栈支持的付费托管 relay 服务，计划深度 Flotilla 集成。Angor 在 v0.2.30 中默认切换到主网，并在 v0.2.29 中落地了 3 用户 UAT 资金测试。Amethyst 落地了 41 个未发布的 PR，延续上周的 NIP-32 / NIP-F4 / Tor 工作。NIP-67（EOSE 完整性提示）和 NIP-50 autocomplete 合并，关闭了核心 relay 协议中两个长期存在的正确性差距。NIP-GART 提议了紧急警报的隐私保护 wire 格式，NIP-46 增加了一个 logout 方法。&lt;/p>
&lt;h2 id="头条报道">头条报道&lt;/h2>
&lt;h3 id="marmot-v2dark-matter协议重新起草原生-client归档的-flutter-应用">Marmot v2（Dark Matter）：协议重新起草、原生 client、归档的 Flutter 应用&lt;/h3>
&lt;p>本周在 &lt;a href="https://github.com/marmot-protocol">marmot-protocol&lt;/a> GitHub 组织下出现了三个新的 repo，共同形成了 Marmot v2 协议草案和取代 Flutter 应用线的原生 client 谱系的早期进展形态。&lt;a href="https://github.com/marmot-protocol/darkmatter">&lt;code>darkmatter&lt;/code>&lt;/a>（Rust，5 月 13 日创建，过去七天三十四个 commits）在 &lt;code>spec/&lt;/code> 中保存 v2 协议草案、一个 OpenMLS 支持的 &lt;code>crates/cgka-engine&lt;/code> 中的 CGKA 引擎、一个带有 property 测试的一致性模拟器，以及一个用于收敛证明的 Tamarin 形式模型。&lt;a href="https://github.com/marmot-protocol/darkmatter-ios">&lt;code>darkmatter-ios&lt;/code>&lt;/a>（Swift，5 月 25 日创建）是一个 SwiftUI client，由从 Rust workspace 生成的 vendored &lt;code>MarmotKit&lt;/code> UniFFI xcframework 支持。&lt;a href="https://github.com/marmot-protocol/darkmatter-android">&lt;code>darkmatter-android&lt;/code>&lt;/a>（Kotlin/Jetpack Compose，5 月 25 日创建）位于相同的 Rust 绑定之上。原始的 Flutter Whitenoise 已被标记为 &lt;a href="https://github.com/marmot-protocol/whitenoise-archive">&lt;code>whitenoise-archive&lt;/code>&lt;/a>（&amp;ldquo;ARCHIVED: This was the original White Noise Flutter app&amp;rdquo;）；一个新的 &lt;a href="https://github.com/marmot-protocol/whitenoise">&lt;code>whitenoise&lt;/code>&lt;/a> Dart repo 并行承载活跃的 Flutter 线。&lt;/p>
&lt;p>将此视为迈向更可靠 Marmot 的早期进展，而不是完成的转向。darkmatter README 将自己标记为&amp;quot;候选 Marmot v2 协议草案、CGKA 引擎和一致性 workspace&amp;quot;，并直接说：&amp;ldquo;MDK 仍然是已部署的 Rust 协议实现，直到此草案和引擎被采用。&amp;ldquo;在 workspace 内，cgka-engine crate 标记为 &lt;code>0.1.0&lt;/code>，&amp;ldquo;单一内部消费者，非 semver 稳定&amp;rdquo;。每个规范页面都带有&amp;quot;状态：内部审查草案&amp;rdquo;。workspace repo 三颗星，iOS 和 Android 应用零颗星，确认工作处于公告前状态。方向、范围和纪律是这里的信号；生产就绪不是主张。&lt;/p>
&lt;p>协议草案将 v1 到 v2 的差异具体化。MIP-01 的整体 &lt;code>marmot_group_data&lt;/code> MLS 扩展，自 Marmot 开始以来在一个总括下承载了群组名称、描述、管理员 pubkey、Nostr 群组路由 id、relay 列表、群组图像数据和消失消息设置，被 &lt;a href="https://github.com/marmot-protocol/darkmatter/blob/master/spec/mip-coverage.md">拆分为版本化的应用组件&lt;/a>：&lt;code>marmot.group.profile.v1&lt;/code> 用于名称和描述、&lt;code>marmot.group.admin-policy.v1&lt;/code> 用于管理员 pubkey、&lt;code>marmot.transport.nostr.routing.v1&lt;/code> 用于随机 &lt;code>nostr_group_id&lt;/code> 和规范 relay 列表、&lt;code>marmot.group.blossom.image.v1&lt;/code> 用于图像 hash、加密密钥、nonce 和上传密钥，以及 &lt;code>marmot.group.message-retention.v1&lt;/code> 用于消失消息秒数。每个组件拥有其确切的字节和自己的版本控制路径，因此未来的功能可以修订一个组件，而无需强迫其他群组状态重新走 MLS 扩展共识。MIP-00 凭证也获得了一个新的基础文档 &lt;code>account-identity-proof-v1.md&lt;/code>，被称为&amp;quot;v2 中的新功能和破坏性变更&amp;rdquo;。身份证明现在存在于自己的接口上，与 KeyPackage 构造分开。&lt;/p>
&lt;p>库的差异支持了规范的重做。&lt;code>cgka-engine&lt;/code> 是新的本地群组状态机：它包装 OpenMLS，拥有 &lt;code>Stable&lt;/code>、&lt;code>PendingPublish&lt;/code>、&lt;code>Merging&lt;/code> 和 &lt;code>Recovering&lt;/code> epoch 状态，将 intents 翻译为 MLS commits，为每个入站传输封套返回类型化的 &lt;code>IngestOutcome&lt;/code> 和 &lt;code>GroupEvent&lt;/code> 值，并明确不发布传输和持久性。一个 &lt;code>TransportPeeler&lt;/code> trait 将 Nostr 与引擎分开，一个 &lt;code>StorageProvider&lt;/code> trait 将 SQLite（通过 &lt;code>storage-sqlite&lt;/code>，SQLCipher 支持）与引擎分开。今天的 MDK 将所有这些打包在一起；拆分层允许一个引擎现在位于 Nostr-relay 传输之下，稍后也可以位于 &lt;a href="https://github.com/marmot-protocol/darkmatter/blob/master/docs/quic-broker-deployment.md">QUIC 流和 broker 传输&lt;/a> 之下，而无需重写收敛模型。收敛本身在 &lt;code>distributed-convergence.md&lt;/code> 中记录，并在 Tamarin 模型中证明，涵盖确定性分支选择、策略门控资格、保留锚重放、陈旧分支拒绝、交付重新排序、重复、应用输出失效、welcome/commit 交接、提议消费和同步时的出站门控。然后 Rust property 测试检查引擎是否使用真实的 OpenMLS 对象和模拟器测试工具遵循相同的规则。这种规模的形式方法可靠性工作在当前的 Marmot 栈中缺失。&lt;/p>
&lt;p>两个原生 client 都放弃了 Flutter，转而使用平台原生的 UI 工具包。&lt;a href="https://github.com/marmot-protocol/darkmatter-ios">&lt;code>darkmatter-ios&lt;/code>&lt;/a> 是纯 SwiftUI，带有一个在设备上解密 MIP-05 推送唤醒的 Notification Service Extension，vendors 一个从 Rust workspace 构建的生成的 &lt;code>MarmotKit&lt;/code> Swift 包，并在 &lt;code>dev.ipf.darkmatter&lt;/code> bundle ID 和应用组下注册。&lt;a href="https://github.com/marmot-protocol/darkmatter-android">&lt;code>darkmatter-android&lt;/code>&lt;/a> 是 Kotlin 和 Jetpack Compose，使用 &lt;code>just&lt;/code> 驱动的构建，生成一个签名的 &lt;code>arm64-v8a&lt;/code> APK，并从 &lt;code>local.properties&lt;/code> 读取遥测端点。Android README 直接说明了架构原则：&amp;ldquo;Dark Matter 拥有协议数据并将其存储在 SQLite 中。Android 应用应渲染该数据、管理 Android 平台行为，并保持 UI 生命周期状态。Android 应用不应成为 Dark Matter 数据的第二个数据库。&amp;ldquo;这反映了 cgka-engine README 在 Rust 层强制执行的边界纪律，应用于 UI 层。&lt;/p>
&lt;p>原生 client 对 Marmot 很重要，因为该协议最常被引用的弱点是在不均匀交付条件下的移动可靠性：错过截止日期的通知唤醒、网络抖动期间的 MLS commit 竞态、使 epoch 前进搁浅的后台 fetch 限制。SwiftUI 和 Compose 让 client 直接访问 Flutter 通过插件桥接到达的平台后台处理原语，UniFFI 绑定路径将协议逻辑保留在一个 Rust workspace 中，作为两个平台上的静态库发布。Flutter Whitenoise 线在未归档的 &lt;a href="https://github.com/marmot-protocol/whitenoise">&lt;code>whitenoise&lt;/code>&lt;/a> repo 中继续，因此公告是叠加性的：一个新的原生 client 谱系与 Flutter 应用并行运行，同时 v2 规范收敛。从 MDK 或当前的 Whitenoise 应用的生产切换等待草案、引擎和 client 达到生产就绪版本。&lt;/p>
&lt;h3 id="chama-v200-到-v310一周内的独立-p2p-托管">Chama v2.0.0 到 v3.1.0：一周内的独立 P2P 托管&lt;/h3>
&lt;p>在 Newsletter #25 中以 v1.3.0 引入的 Nostr 原生 P2P 托管 client 在过去七天中发布了十七个带标签的版本，于 6 月 9 日结束于 &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.1.0">v3.1.0&lt;/a>，带有交易室 UI 重绘和每卖家店面。版本轨迹讲述了故事：&lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.0.0">v2.0.0&lt;/a> 是 BREAKING 基础，然后 &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.0.1">v2.0.1&lt;/a>、&lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.0.2">v2.0.2&lt;/a> 和 &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.0.3">v2.0.3&lt;/a> 关闭 Fedi WebView 资金轨道差距；&lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.1.0">v2.1.0&lt;/a>、&lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.2.0">v2.2.0&lt;/a>、&lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.3.0">v2.3.0&lt;/a> 和 &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.3.1">v2.3.1&lt;/a> 加固仲裁者层；&lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.4.0">v2.4.0&lt;/a>、&lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.5.0">v2.5.0&lt;/a> 和 &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.6.0">v2.6.0&lt;/a> 添加自我托管接口和全球社区路由；&lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.7.0">v2.7.0&lt;/a>、&lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.8.0">v2.8.0&lt;/a>、&lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.9.0">v2.9.0&lt;/a> 和 &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v2.10.0">v2.10.0&lt;/a> 分层加入通俗英语密钥文案、群组申请、争议截止日期仲裁和声誉。&lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.0.0">v3.0.0&lt;/a> 将包用端到端交易通知捆绑在一起，6 月 9 日的 &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v3.1.0">v3.1.0&lt;/a> 围绕 Reserved → Locked → Settled 进度主干、角色着色的操作卡以及每卖家店面列表类（精选交换、贷款簿和账单）重绘交易屏幕。&lt;/p>
&lt;p>架构转变存在于 v2.0.0 中。托管 LOCK 格式已更改，因此 2-of-3 Shamir 拆分的每个共享仅加密给其持有者（sharePolicy &lt;code>holder-only-v1&lt;/code>）。联邦的持有者 ecash 不再仅从单个参与者重构，关闭了一条路径，即拥有自己的共享和联邦持有的共享的恶意方可以在未经同意的情况下完成交易。Pre-2.0 client 会响亮地失败，显示&amp;quot;找不到你的共享&amp;rdquo;；交易无法在陈旧的 client 上完成，过程中不会丢失资金。v2.0 锁需要 v2.x 上的每一方来结算。v2.0.0 还添加了多单位店面和仅 sats 的 Market 视图。&lt;/p>
&lt;p>v2.1.0 引入了仲裁者替换：Shamir 索引 2 处的仲裁者共享现在加密到社区仲裁者池的确定性优先顺序中，因此可以在不使交易搁浅的情况下替换缺席的仲裁者。v2.2.0 在 ₿121 交易中证明了替换在野外有效，并添加了愈合替换备份。v2.3.0 通过在锁定时检查列表仲裁者社区成员身份关闭了最后一个仲裁者抢先差距，v2.3.1 关闭了兄弟竞态，其中自动分配的仲裁者插槽是预览，直到锁将他们就座。&lt;/p>
&lt;p>自我托管接口在 v2.4.0（Fedimint ecash 钱包的 BIP-39 恢复短语，在 Nostr 上加密存储）和 v2.5.0（拥有 Nostr 身份和钱包种子的主 nsec 备份）中到达。v2.6.0 围绕全球社区选择器重新设计入门，因此没有本地 Chama 的国家/地区的用户被路由到最近的联邦；较早的构建将用户弹开，没有备选。v2.7.0 用通俗英语重写了恢复密钥屏幕（&amp;ldquo;你账户的唯一密钥及其中的钱；Chama 从不看到它，也无法重置；如果你丢失它，没有人可以找回你的账户&amp;rdquo;）。v2.8.0 添加了群组申请、暗/亮主题，并添加了两个新的事件 kind（38120 名册、38121 申请）。v2.9.0 在截止日期更改了争议解决：达到到期的有争议的交易现在通过仲裁者裁决解决；先前的行为是自动退款。该版本被标记为 COORDINATED，因此争议中的所有各方都必须更新。v2.10.0 将每交易的赞成/反对评级添加为一个新的事件 kind 38123。&lt;/p>
&lt;p>v3.0.0 是应用停止需要协调社区来运营的里程碑。端到端交易通知仅在可操作的状态转换时 ping 用户：交易对手锁定了 sats、支付准备好申领、争议需要用户作为仲裁者裁决，或交易结算或过期。Me 屏幕中的一个切换开关打开或关闭通知，权限提示仅在开关启用时触发。fire-once 去重防止状态重新加载触发警报风暴。在 &lt;a href="https://github.com/jesuspirate/chama/pull/103">PR #103&lt;/a> 中还关闭了一个错误 chama 护栏 bug，早期版本可以为列表加盖一个 chama 的标签，但另一个 chama 的联邦。Windows 和 Linux 桌面 bundle 与该版本一起发布；macOS dmg 被推迟，直到签名和公证落地。&lt;/p>
&lt;p>Chama 现在与 Mostro 和 Shopstr 一起加入 Nostr 原生市场，以无服务器架构、Fedimint 支持的 2-of-3 Shamir 托管、仅持有者共享加密而与众不同，是三者中唯一发布不带协调社区的自包含桌面和移动 client 的项目。&lt;/p>
&lt;h3 id="coracle-hosting付费-relay-服务加开源-caravel-栈">Coracle Hosting：付费 relay 服务加开源 Caravel 栈&lt;/h3>
&lt;p>6 月 3 日 Hodlbod 在 &lt;a href="https://hosting.coracle.social">hosting.coracle.social&lt;/a> &lt;a href="https://nos.lol/e/f8586160cd12df479c261397353c99e6f3e4d870b616382e1b4338bad3ab498a">宣布 Coracle Hosting&lt;/a>，一个托管的社区 relay 服务，接受通过 NWC 或卡的定期 lightning 支付。该服务由 Coracle 的计费和配置前端 &lt;a href="https://gitea.coracle.social/coracle/caravel">Caravel&lt;/a> 以及在单个机器上托管多个虚拟 relay 的 relay 运行时 &lt;a href="https://gitea.coracle.social/coracle/zooid">zooid&lt;/a> 提供支持。两者都在 Coracle 的自托管 gitea 上开源。Caravel 附带可选的 &lt;a href="https://livekit.io">livekit&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 集成，运营者可以每 relay 切换。带有成员数量限制的免费层允许运营者在提交支付详细信息之前评估服务。&lt;/p>
&lt;p>Hodlbod 对商业模型很坦率：通过出售任何其他人也可以运行的栈的托管版本来将开源货币化。竞争护城河是 &lt;a href="https://flotilla.social">Flotilla&lt;/a> 集成，这是下一个计划的步骤。Flotilla 拥有用户接口，因此从 Flotilla 内部提供的托管选项成为任何喜欢管理基础设施的用户的默认路径。Hodlbod 提议如果其他 Caravel 运营者伸出援手，就将他们添加到 Flotilla 的替代托管选择器中，为联邦托管市场保留了大门。&lt;/p>
&lt;p>Caravel 加入 &lt;a href="https://relay.tools">relay.tools&lt;/a> 作为具有付费成员层的公共 Nostr relay 配置平台。relay.tools 早于 Caravel，作为今天占主导地位的 relay 创建者服务发布，具有自己的社区 relay 目录以及付费成员或版主加入流程。Caravel 的独特功能是协调栈：relay 运行时（zooid）、计费和配置前端（Caravel 本身）以及 client 端选择器（Flotilla 集成，仍在进行中）作为一个设计发布。另一个独特功能是 zooid 的多 relay 每进程密度，客户 relay 共享单个主机进程，因此运营者在许多小型社区中分摊托管成本。这是使共享 Web 托管在 2000 年代初期可行的相同密度论点，应用于 Nostr 的 relay 层。&lt;/p>
&lt;h2 id="发布">发布&lt;/h2>
&lt;h3 id="angor-v0229-和-v0230默认主网和-3-用户-uat-资金测试">Angor v0.2.29 和 v0.2.30：默认主网和 3 用户 UAT 资金测试&lt;/h3>
&lt;p>6 月 4 日的 &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.29">Angor v0.2.29&lt;/a> 和 6 月 8 日的 &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.30">v0.2.30&lt;/a> 是本周去中心化 Bitcoin 和 Nostr 资助协议的两个版本。v0.2.30 的头条变更是 &lt;a href="https://github.com/block-core/angor/pull/893">PR #893&lt;/a>，它将默认网络切换到主网。Angor 仍作为不稳定的 alpha 版本发布，但默认主网切换标志着协议对桌面和移动 client 已经超过了仅测试网阶段。v0.2.30 还落地了带有图像上传和滚动重置的单点触摸移动创建项目流程（&lt;a href="https://github.com/block-core/angor/pull/889">PR #889&lt;/a>）并解决了 lightning invoice 转轮可能挂起的竞态条件（&lt;a href="https://github.com/block-core/angor/pull/890">PR #890&lt;/a>）。&lt;/p>
&lt;p>v0.2.29 在 &lt;a href="https://github.com/block-core/angor/pull/881">PR #881&lt;/a> 中添加了端到端 UAT 测试，涵盖 10 轮 3 用户发送资金，带有未确认支出，是 Angor 测试套件中第一个多用户资金流测试。该版本还添加了 Angor CLI 和 MCP 服务器的实现计划（&lt;a href="https://github.com/block-core/angor/pull/792">PR #792&lt;/a>），并在 &lt;a href="https://github.com/block-core/angor/pull/880">PR #880&lt;/a> 中为 MCP 测试工作流程改进 CLI。DavidGershony 的 &lt;a href="https://github.com/block-core/angor/pull/885">PR #885&lt;/a> 修复了在运行时网络切换后使用错误网络的 Boltz lightning invoice，这是一个在 v0.2.30 主网默认之后将在生产中浮现的 bug。设置现在提供在数据擦除期间可选的恢复钱包文件清除（&lt;a href="https://github.com/block-core/angor/pull/883">PR #883&lt;/a>）。&lt;/p>
&lt;h3 id="sprout-v0315临时-channel-ttl-刷新和-acp-斜杠命令">Sprout v0.3.15：临时 channel TTL 刷新和 ACP 斜杠命令&lt;/h3>
&lt;p>6 月 10 日发布的 &lt;a href="https://github.com/block/sprout/releases/tag/v0.3.15">Sprout v0.3.15&lt;/a> 是从 6 月 2 日 v0.3.7 开始的一系列版本中的第八个版本。Newsletter #25 涵盖了 v0.3.1 到 v0.3.6 的运行，包括 mesh-llm 集成和 channel 部分工作；v0.3.7 到 v0.3.15 是下游的，专注于打磨和一些面向用户的新增功能。最面向用户可见的变化是 &lt;a href="https://github.com/block/sprout/pull/902">PR #902&lt;/a> 中临时 channel 的 TTL 刷新：当用户取消归档临时 channel 时，Sprout 延长 channel 的生存时间，因此取消归档不会立即在原始到期计时器下重新归档。移动自定义 emoji 在 &lt;a href="https://github.com/block/sprout/pull/906">PR #906&lt;/a> 中与设置重新设计一起到达，反应计数现在在变化时动画化（&lt;a href="https://github.com/block/sprout/pull/904">PR #904&lt;/a>）。&lt;/p>
&lt;p>&lt;a href="https://github.com/block/sprout/pull/905">PR #905&lt;/a> 修复了一个长期存在的差距，即多词显示名称被破坏，以及 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/27.md">NIP-27&lt;/a> &lt;code>nostr:npub&lt;/code> mention 提取静默丢弃。桌面的目录支持团队 UI 在 &lt;a href="https://github.com/block/sprout/pull/912">PR #912&lt;/a> 中发布，具有 install、sync 和 reveal 命令。Slash 命令现在在 &lt;a href="https://github.com/block/sprout/pull/919">PR #919&lt;/a> 中传递给 &lt;a href="https://agentclientprotocol.com">ACP&lt;/a> 连接器，让 Sprout 将 &lt;code>/help&lt;/code> 风格的命令直接转发到 agent 运行时，同时 Sprout UI 保持在路径之外。&lt;/p>
&lt;h3 id="wisp-v111spark-钱包集成和-nsec-粘贴防护">Wisp v1.1.1：Spark 钱包集成和 nsec 粘贴防护&lt;/h3>
&lt;p>6 月 5 日发布的 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.1.1">Wisp v1.1.1&lt;/a> 在 &lt;a href="https://github.com/barrydeen/wisp/pull/548">PR #548&lt;/a> 中落地了一个带有 &lt;a href="https://www.spark.money">Spark&lt;/a> 子屏幕的两层钱包 Connect 屏幕，并在 &lt;a href="https://github.com/barrydeen/wisp/pull/549">PR #549&lt;/a> 中与 iOS 钱包 UI 的仪表板对等。该版本包括一个系统范围的 &lt;a href="https://github.com/barrydeen/wisp/pull/553">nsec 粘贴防护&lt;/a>，检测应用中任何地方的 &lt;code>nsec1&lt;/code> 前缀粘贴，并阻止字段接受它，关闭了 Nostr UX 中最常被引用的坑之一。QR 扫描登录加上用于 &lt;code>npub&lt;/code> 和 &lt;code>nprofile&lt;/code> 的仅观看模式在 &lt;a href="https://github.com/barrydeen/wisp/pull/552">PR #552&lt;/a> 中发布，让用户可以只读浏览个人资料。Zap 消息现在作为迷你帖子在参与抽屉中渲染（&lt;a href="https://github.com/barrydeen/wisp/pull/559">PR #559&lt;/a>），因此 zap 笔记与 sat 金额一起承载其文本。线程回复的 web-of-trust 过滤器在 &lt;a href="https://github.com/barrydeen/wisp/pull/583">PR #583&lt;/a> 中落地，让用户可以隐藏来自其关注图之外的账户的回复垃圾邮件。&lt;/p>
&lt;h3 id="nostria-v3146-和-nospeak-113通知重做和-ice-重启">Nostria v3.1.46 和 nospeak 1.1.3：通知重做和 ICE 重启&lt;/h3>
&lt;p>6 月 7 日的 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.46">Nostria v3.1.46&lt;/a> 结束了三个版本的运行，重新设计了通知计数器，仅计算自上次查看以来的新通知，消除了长期存在的通胀，即通过滚动加载较旧的通知会增加徽章计数。&lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.45">Nostria v3.1.45&lt;/a> 修复了影响 lightning 和 QR code 支付的分成支付 bug，并放弃了以前计划的半透明 UI，因为在 Android 的合成器上不可行。&lt;/p>
&lt;p>6 月 4 日的 &lt;a href="https://github.com/psic4t/nospeak/releases/tag/v1.1.3">nospeak v1.1.3&lt;/a> 在 FAILED 状态下为 1 对 1 语音通话添加 ICE 重启。标准 WebRTC 行为在 ICE 候选超时且没有替代路径时丢弃通话；ICE 重启路径重新协商候选，因此通话从瞬态 NAT 或网络变化中恢复。Android 通话现在在视频通话期间保持屏幕开启。&lt;/p>
&lt;h2 id="未发布的更改">未发布的更改&lt;/h2>
&lt;h3 id="amethyst41-个-pr-继续-nip-32--nip-f4--tor-轨道">Amethyst：41 个 PR 继续 NIP-32 / NIP-F4 / Tor 轨道&lt;/h3>
&lt;p>Amethyst 本周合并了 41 个 PR，没有削减版本标签，在上周的 52 个 PR 以及 Newsletter #25 中涵盖的 &lt;a href="https://nostrcompass.org/zh/topics/nip-32/">NIP-32&lt;/a> hashtag 标签和 &lt;a href="https://nostrcompass.org/zh/topics/nip-f4/">NIP-F4&lt;/a> 播客工作之上。活跃分支继续为下一个带标签的版本累积功能，在上周的头条新增功能之上分层打磨：hashtag labeler 发现、播客屏幕、音乐曲目和播放列表、Tor 自愈看门狗、匿名上传的临时 signer，以及带有 NIP-05 过滤的链上 zaps。Amethyst 的 PR 吞吐量仍然是所有 Nostr client 中最高的，未发布的队列是其他 Android Nostr client 需要匹配的事实上的路线图。&lt;/p>
&lt;h3 id="damus从-ok-消息进行-relay-跟踪和-v117-变更日志">Damus：从 OK 消息进行 relay 跟踪和 v1.17 变更日志&lt;/h3>
&lt;p>6 月 3 日合并的 &lt;a href="https://github.com/damus-io/damus/pull/3786">Damus PR #3786&lt;/a> 将来自 relay 的成功 &lt;code>OK&lt;/code> 消息添加到帖子 relay 列表。较早的 Damus 构建仅在从 relay 收到通用消息时填充所见 relay 列表，这意味着确认帖子但未传回任何事件的 relay 对用户不可见。此变更对希望确认帖子已到达其首选发件箱 relay 的用户很重要。&lt;a href="https://github.com/damus-io/damus/pull/3796">PR #3796&lt;/a> 修复了 Profile View 上的 &lt;code>AttributeGraph&lt;/code> 循环，&lt;a href="https://github.com/damus-io/damus/pull/3725">PR #3725&lt;/a> 在下一个带标签的版本之前落地了 v1.17 变更日志。&lt;/p>
&lt;h3 id="shopstrnip-34-双重发布">Shopstr：NIP-34 双重发布&lt;/h3>
&lt;p>Shopstr 的 &lt;a href="https://relay.ngit.dev/npub1u350hpq840naxzkkle4gmdtvzanfxmjd9m9tytn5355aua7jh2cqgfuw39/shopstr.git">ngit 上的 shopstr repo&lt;/a> 本周在 Nostr 上被宣布为 &lt;a href="https://nostrcompass.org/zh/topics/nip-34/">NIP-34&lt;/a> git repo，加入 ngit 跟踪的 repo。shop client 的 GitHub repo 仍然是主要的开发接口；NIP-34 公告使得并行的 git-over-Nostr 协作路径可用。这是继 &lt;a href="https://relay.ngit.dev/">Mostro&lt;/a> 之后第二个双重发布到 NIP-34 的主要 Nostr 市场项目，并继续将项目元数据逐步迁移到 Nostr 的 git 传输上。&lt;/p>
&lt;h3 id="hermes-marmotmls-之上的-ai-agent-网关">Hermes-Marmot：MLS 之上的 AI agent 网关&lt;/h3>
&lt;p>&lt;a href="https://github.com/notmandatory/hermes-marmot">hermes-marmot&lt;/a> 是 &lt;a href="https://github.com/NousResearch/hermes-agent">Hermes Agent&lt;/a> 的插件，使用 &lt;a href="https://github.com/marmot-protocol/mdk-python">mdk-python&lt;/a>（Rust Marmot Development Kit 的 Python 绑定）将 AI agent 的消息接口连接到 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a>（MLS-over-Nostr）群组。该插件让用户可以从任何说 kind 445 MLS 消息的 Nostr client（包括 &lt;a href="https://whitenoise.chat">Whitenoise&lt;/a>）向 AI agent 发送 DM。入站 DM 通过 &lt;a href="https://github.com/rust-nostr/nostr">nostr-sdk&lt;/a> Python 绑定使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a> gift-wrap 解包，入站 welcomes 通过 &lt;code>UnwrappedGift.from_gift_wrap&lt;/code> 流向 &lt;code>mdk.process_welcome&lt;/code> 和 &lt;code>mdk.accept_welcome&lt;/code>。访问控制通过 &lt;code>MARMOT_ALLOWED_USERS&lt;/code>（一个逗号分隔的 npub 白名单）或用于开放开发访问的 &lt;code>MARMOT_ALLOW_ALL_USERS=true&lt;/code> 运行。&lt;/p>
&lt;p>该 repo 是新的（最近更新为 5 月 27 日）且小。其重要性是架构性的：它是 LLM agent 运行时与 MLS 加密的 Nostr 消息通道之间的第一个公共桥接，也是 mdk-python 在 Whitenoise 之外的第一个生产使用。该模式指向 agent-to-agent 通信，其中两个端点持有 MLS 密钥，relay 仅看到密文。&lt;/p>
&lt;h2 id="nip-更新和协议规范工作">NIP 更新和协议规范工作&lt;/h2>
&lt;h3 id="nip-67-eose-完整性提示pr-2317合并">NIP-67 EOSE 完整性提示（PR #2317）合并&lt;/h3>
&lt;p>mattn 的 &lt;a href="https://github.com/nostr-protocol/nips/pull/2317">PR #2317&lt;/a> 于 6 月 6 日合并，将 &lt;a href="https://nostrcompass.org/zh/topics/nip-67/">NIP-67&lt;/a> 添加到协议中。该 NIP 使用可选的第三个元素扩展 &lt;code>EOSE&lt;/code> relay 消息：&lt;code>[&amp;quot;EOSE&amp;quot;, &amp;lt;subscription_id&amp;gt;, &amp;quot;finish&amp;quot;]&lt;/code> 表示已交付匹配过滤器的每个已存储事件，而裸的 &lt;code>[&amp;quot;EOSE&amp;quot;, &amp;lt;subscription_id&amp;gt;]&lt;/code> 不携带完整性声明。省略提示的 relay 告诉 client 可能有更多；在 NIP-11 中省略 NIP-67 公告的 relay 保持当前行为，采用现有的旧启发式方法。该变化在两个方向上都向后兼容：旧 client 忽略尾随的数组元素，旧 relay 省略它。&lt;/p>
&lt;p>合并规范中的动机是双重的。首先，静默数据丢失：client 向一个内部 300 事件上限的 relay 请求最新的 500 条笔记，relay 返回 300 个事件，client（使用标准 &lt;code>received &amp;lt; limit&lt;/code> 启发式方法）得出结果完整的结论。第 201 个到第 N 个最旧的匹配笔记停留在 relay 上未读，client 对这一事实一无所知。其次，强制浪费的往返：当 relay 将响应限制在 300 个事件时，任何耗尽上限的订阅都需要第二个 &lt;code>REQ&lt;/code>，带 &lt;code>until=&amp;lt;oldest_created_at&amp;gt;&lt;/code>，纯粹用于确认完成，即使过滤器恰好匹配 300 个事件。这两种失败模式都由每个 cap-exhausted 订阅上的每个 client 支付。&lt;code>&amp;quot;finish&amp;quot;&lt;/code> 提示是一个现有消息上的一个可选字符串，消除了两个成本。&lt;/p>
&lt;h3 id="nip-50-autocomplete-扩展pr-2357合并">NIP-50 autocomplete 扩展（PR #2357）合并&lt;/h3>
&lt;p>Alex Gleason 的 &lt;a href="https://github.com/nostr-protocol/nips/pull/2357">PR #2357&lt;/a> 于 6 月 6 日合并，向 &lt;a href="https://nostrcompass.org/zh/topics/nip-50/">NIP-50&lt;/a> 搜索添加了 &lt;code>autocomplete:true/false&lt;/code> token。该扩展让 client 可以将查询标记为 typeahead 查找，因此 relay 使用前缀匹配，对于没有 token 的查询默认为全文搜索。Ditto 的 relay 为 follow packs、lists 和任何带有 &lt;code>title&lt;/code> 标签的事件实现它，返回与 title 前缀匹配的结果；默认搜索路径运行全文评分。没有此 token，autocomplete 风格的 UI 无法传达前缀搜索意图，而 relay 必须从查询形状猜测。该 token 是每搜索提示，而不是 relay 范围的能力，因此 relay 可以为一个事件类（标题）实现它，而无需声明一般的 autocomplete 支持。&lt;/p>
&lt;h3 id="nip-gart-紧急警报和位置广播pr-2374">NIP-GART 紧急警报和位置广播（PR #2374）&lt;/h3>
&lt;p>由 disinqa 于 6 月 9 日打开的 &lt;a href="https://github.com/nostr-protocol/nips/pull/2374">PR #2374&lt;/a> 定义了 Nostr 上用于紧急警报和寻址到一组可信接收者的位置广播的隐私保护 wire 格式。声明的设计目标是隐藏发送者身份、群组成员身份和 payload，使其对 relay 运营者不可见，同时保持事件在端到端上重放安全和签名可验证。NIP 编号仍待定，提议为早期草案。用例是标准的紧急警报模式：受威胁的用户广播一个位置 ping，只有预共享的可信联系人组可以解密，relay 对发送者、接收者集和 payload 视而不见。Wire 格式细节存在于 PR 中，并可能随着维护者审查而演变。&lt;/p>
&lt;h3 id="nip-46-logout-方法pr-2373">NIP-46 logout 方法（PR #2373）&lt;/h3>
&lt;p>由 hzrd149 于 6 月 8 日打开的 &lt;a href="https://github.com/nostr-protocol/nips/pull/2373">PR #2373&lt;/a> 向 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 添加了 &lt;code>logout&lt;/code> 方法，因此 client 可以明确告诉 bunker 会话已结束。到目前为止，结束 bunker 会话的唯一方法是等待会话超时或停止使用连接，两者都让 bunker 为已消失的 client 保留会话状态。该提议很短（一个新方法），是使长期 bunker 集成更清洁的那种家务整理变更。&lt;/p>
&lt;h3 id="nip-95-混合-relay-p2p-提议作为长文流传">NIP-95 混合 relay-P2P 提议作为长文流传&lt;/h3>
&lt;p>一份长文 &lt;a href="https://github.com/nostr-protocol/nips">NIP-95 规范&lt;/a> 以 6 月 4 日来自 npub &lt;code>91bea5cd9361504c409aaf459516988f68a2fcd482762fd969a7cdc71df4451c&lt;/code> 的 &lt;code>kind:30023&lt;/code> 帖子形式流传，标题为 &lt;em>Protocolo Híbrido Relay-P2P via WebRTC&lt;/em>。该葡萄牙语文档定义了一种混合 P2P relay 协议，其中 Nostr client 通过 WebRTC 直接相互连接进行实时消息传递，同时继续使用 relay 进行存储事件检索和离线交付。作者明确将规范定为&amp;quot;LLM 就绪&amp;rdquo;，提供消息定义、逻辑流程、数据模式和状态规则，其详细程度让 AI 模型能够生成工作 client 或服务器代码。该提议尚未作为 NIP PR 落地；通过 &lt;code>kind:30023&lt;/code> 流传是正式 nostr-protocol/nips pull request 的惯常前驱。&lt;/p>
&lt;h3 id="nip-44-v3-获得第二个-signerclave-移植规范">NIP-44 v3 获得第二个 signer：Clave 移植规范&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/zh/newsletters/2026-06-03-newsletter/#nip-44-v3-amber-implementation-ahead-of-spec">上周 Amber 的 v6.2.0 NIP-44 v3 推出&lt;/a> 在任何合并的 NIPs PR 之前发布，让 v3 作为 Amber 特定的扩展留下，其他 client 必须镜像才能互操作。那种单一实现的框架在本周发生了变化。&lt;a href="https://github.com/DocNR/clave">Clave&lt;/a> 是基于推送的 iOS NIP-46 远程 signer，于 6 月 3 日和 4 日在八个 commits 中落地了一个独立的 NIP-44 v3 端口。加密原语在三个 commits 中发布：&lt;a href="https://github.com/DocNR/clave/commit/99ca5a5aacb501d1666c489fcdea30187c7853fa">HKDF + ECDH 密钥层&lt;/a>、&lt;a href="https://github.com/DocNR/clave/commit/8808cdca54d32b4ae57856bd4b07ed73a45e8e5c">v3 padding 算法&lt;/a>，以及一个 &lt;a href="https://github.com/DocNR/clave/commit/ae1f506a53cb2c8aa16523540dbe790876c1839e">顶层公共 API 加加密 Context&lt;/a>。在这些之上，NIP-46 接口跟随 &lt;a href="https://github.com/DocNR/clave/commit/f37aa1afc8368862fc3ebac533408442349bfc38">LightSigner 内部的 RPC 分派布线&lt;/a> 和 &lt;a href="https://github.com/DocNR/clave/commit/e51bcb49fc61cfa89b6030d61b203e046aeddb0a">携带 v3 上下文（kind 加 scope）的 PendingRequest 模式&lt;/a>，因此 signer 可以记录 v3 payload 被批准的事件 kind 和用例。&lt;/p>
&lt;p>Clave 在面向用户的接口上与 Amber 分歧。&lt;a href="https://github.com/DocNR/clave/commit/0a8b7de63c1f2994a80a66bf139ec519fab12877">带有敏感性层的权限授予模式&lt;/a> 让用户可以在选择的敏感性级别为特定事件 kind 和 scope 授予 v3 加密。首次遇到时，&lt;a href="https://github.com/DocNR/clave/commit/2cf563cb15b0406f5e8aaa0b4e34b887ff1896a1">带有一次性解释卡的 v3 上下文感知批准提示&lt;/a> 向用户介绍 v3。该工作在 main 中，并 &lt;a href="https://github.com/DocNR/clave/commit/4bd0c26d7cf308386ef15e5d96ee5673d6db2d4a">连接到 Xcode 项目&lt;/a>，但未发布；最近的带标签构建是 5 月 12 日的 &lt;a href="https://github.com/DocNR/clave/releases/tag/v0.2.0-build79">v0.2.0-build79&lt;/a>。&lt;/p>
&lt;p>两个独立的实现在 NIPs PR 合并之前在生产路径中落地了 NIP-44 v3，这加强了协议 PR 将正式化的底层 wire 格式的案例。跨实现互操作性测试现在成为规范收敛的路径，Amber 的 Android 批准接口和 Clave 的 iOS 敏感性层模型作为两个参考点。连接 v3 的其他远程 signer（nsec.app 的 noauth 自 2025 年 5 月以来一直处于休眠状态，其他 bunker 尚未宣布 v3 工作）将进一步收紧共识。&lt;/p>
&lt;h3 id="nip-34-活动iris-采用带有新-hashtree-传输的栈">NIP-34 活动：Iris 采用带有新 hashtree 传输的栈&lt;/h3>
&lt;p>Iris 于 6 月 8 日发布了 &lt;a href="https://njump.me/nevent1qqs8kmy7a9dn5awurlp9q26lsaetl7dc4wauzdl8ww68dzmn09e074gpzfmhxue69uhhgetdwqhxjunfwvh8gmc850du0">&lt;code>hashtree&lt;/code>&lt;/a> 的 NIP-34 repo 公告，并于 6 月 9 日发布了 &lt;a href="https://njump.me/nevent1qqsq4grx000f6p0r8hdv4lqhcgn7707vmktv2j528kn0ldps4y9g49qpzfmhxue69uhhgetdwqhxjunfwvh8gmcmq47as">&lt;code>iris-apps&lt;/code>&lt;/a>、&lt;a href="https://njump.me/nevent1qqsyj5r0tyqvpp9v7qnras90u6kzqtpqx6ktntwym66m8qyngvf59vqpzfmhxue69uhhgetdwqhxjunfwvh8gmcpts6pf">&lt;code>iris-drive&lt;/code>&lt;/a> 和 &lt;a href="https://njump.me/nevent1qqs0x98hpsv8vmrxvwm2rs9exxttrue5qv5p2n2sqjeylz2kgdmd7tgpzfmhxue69uhhgetdwqhxjunfwvh8gmca8783s">&lt;code>iris-chat-rs&lt;/code>&lt;/a> 的 NIP-34 repo 公告，广告克隆 URL 使用新的 &lt;code>htree://&lt;/code> 方案，从 &lt;code>wss://temp.iris.to&lt;/code> 提供。Hashtree 传输是 GRASP 路由克隆的内容寻址替代方案，这四个公告是其首次公开使用。该 repo 携带空描述，架构细节仍在浮现，但通过 NIP-34 公告（而不是自定义 Iris 内部清单）发布的选择表明 Iris 正在承诺更广泛的 NIP-34 git-over-Nostr 栈。&lt;/p>
&lt;h2 id="nip-deep-divenip-67eose-完整性提示">NIP deep dive：NIP-67（EOSE 完整性提示）&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-67/">NIP-67&lt;/a> 关闭了 &lt;a href="https://nostrcompass.org/zh/topics/nip-01/">NIP-01&lt;/a> 中最长期存在的正确性差距之一。原始规范将 &lt;code>EOSE&lt;/code> 定义为 &lt;code>REQ&lt;/code> 的已存储事件与实时订阅事件之间的边界，但它从未指定 relay 是否已完成交付所有已存储的匹配项，或者是否由于内部上限而中途停止。每个 relay 都强制执行每订阅上限（通常为 300 到 1000 个事件），独立于 client 的 &lt;code>limit&lt;/code>，client 无法观察该上限。&lt;/p>
&lt;p>标准的解决方法是将接收的计数与请求的 &lt;code>limit&lt;/code> 进行比较。如果 &lt;code>received &amp;lt; limit&lt;/code>，将结果视为完整；否则使用 &lt;code>until=&amp;lt;oldest_created_at&amp;gt;&lt;/code> 分页。两个分支都是坏的。&lt;code>received &amp;lt; limit&lt;/code> 分支静默截断：client 向上限为 300 的 relay 请求 500 条笔记，看到 300 个事件，因为 &lt;code>300 &amp;lt; 500&lt;/code> 而得出结果完整的结论，从不获取其余部分。relay 上保留的事件无法通过任何现有消息发出&amp;quot;更多可用&amp;quot;的信号。作为第二个分支的分页是浪费的：匹配上限的过滤器需要第二个 &lt;code>REQ&lt;/code> 来确认完整性，返回零个事件，同时在 relay 上消耗完整的过滤器扫描。&lt;/p>
&lt;p>NIP-67 的修复是 &lt;code>EOSE&lt;/code> 消息上的一个可选字符串：&lt;/p>
&lt;pre tabindex="0">&lt;code>[&amp;#34;EOSE&amp;#34;, &amp;#34;&amp;lt;sub_id&amp;gt;&amp;#34;, &amp;#34;finish&amp;#34;] // 显式：所有已存储事件已交付
[&amp;#34;EOSE&amp;#34;, &amp;#34;&amp;lt;sub_id&amp;gt;&amp;#34;] // 无完整性声明
&lt;/code>&lt;/pre>&lt;p>在 &lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a> &lt;code>supported_nips&lt;/code> 中通告 NIP-67 并发出裸 &lt;code>EOSE&lt;/code> 的 relay 告诉 client 还有更多。省略公告的 relay 保持当前行为，client 回退到现有的启发式方法。旧 client 忽略尾随的数组元素。向后兼容性在两个方向上都成立，没有新的动词或事件 kind。&lt;/p>
&lt;p>使 NIP-67 值得研究的是它有意限制的范围。规范未定义 cursor 或分页 token，因此基于 &lt;code>until&lt;/code> 的分页仍然是机制。Relay 上限保持原状，NIP 不要求暴露它们。NIP-67 保留了 &lt;code>EOSE&lt;/code> 作为 stored-to-live 边界的含义，并且仅在边界添加了是或否的信号：&amp;ldquo;我还有更多给你&amp;quot;与&amp;quot;就这些了&amp;rdquo;。这个最小接口是为什么 PR 在对 NIP-01 扩展相对较短的审查期后合并的原因，也是为什么 mattn 在 PR 中明确指出英文文本使用了 AI 翻译。变化足够小，翻译不确定性无关紧要。&lt;/p>
&lt;p>client 与强制执行上限的 relay 之间的 NIP-67 感知交换示例。来自 relay 的 NIP-11 公告：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a5f87fe2d4c8b9a0e3f1c4d5e6a7b8c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1781136000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">11&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;supported_nips\&amp;#34;:[1,11,50,67]}&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1e2d3c4b5a6978869504132c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>跟随的 wire 级别交换：&lt;/p>
&lt;pre tabindex="0">&lt;code>→ [&amp;#34;REQ&amp;#34;, &amp;#34;abc&amp;#34;, {&amp;#34;kinds&amp;#34;:[1],&amp;#34;limit&amp;#34;:500}]
← [...300 EVENT 消息...]
← [&amp;#34;EOSE&amp;#34;, &amp;#34;abc&amp;#34;] // 无 &amp;#34;finish&amp;#34;: 达到上限，还有更多可用
→ [&amp;#34;REQ&amp;#34;, &amp;#34;def&amp;#34;, {&amp;#34;kinds&amp;#34;:[1],&amp;#34;limit&amp;#34;:300,&amp;#34;until&amp;#34;:1780900000}]
← [...178 EVENT 消息...]
← [&amp;#34;EOSE&amp;#34;, &amp;#34;def&amp;#34;, &amp;#34;finish&amp;#34;] // 显式完成
&lt;/code>&lt;/pre>&lt;p>178 事件响应此前会触发第三个 &lt;code>REQ&lt;/code> 来确认完成。使用 NIP-67，client 在那里停止。&lt;/p>
&lt;p>NIP-67 作为一个罕见共识落地的 NIP-01 修正案也值得注意。大多数 NIP-01 变更都吸引长期辩论线程，因为该协议的微小接口对每个实现都至关重要。NIP-67 在延长的审查期后合并（从打开到合并大约七周），表明当 NIP-01 变更足够小且失败模式足够具体时（静默数据丢失、强制浪费的往返），协议的维护者愿意扩展核心消息词汇。&lt;/p>
&lt;h2 id="nip-deep-divenip-50search">NIP deep dive：NIP-50（Search）&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-50/">NIP-50&lt;/a> 定义了 &lt;code>REQ&lt;/code> 消息中的 &lt;code>search&lt;/code> 过滤器字段，让 client 可以要求 relay 通过对查询字符串进行全文匹配来过滤事件。合并的基础规范有意最小化：&lt;code>search&lt;/code> 字段是一个字符串，每个 relay 决定自己的搜索语义（哪些字段被索引、评分如何工作、是否应用词干提取），并且 relay 在其 NIP-11 文档中通告 NIP-50 支持。client 仅通过查询字符串本身控制搜索算法。&lt;/p>
&lt;p>这种极简主义既是 NIP-50 的优势，也是其约束。优势是任何 relay 都可以在任何质量级别实现搜索：基本的子字符串扫描满足规范，运行 Elasticsearch 或 Meilisearch 的 relay 同样满足它。约束是 client 缺乏表达搜索意图的方式。个人资料 mention typeahead UI 想要针对显示名称的前缀匹配；全文内容搜索想要跨笔记正文的分词全文评分。相同的 &lt;code>search&lt;/code> 字段承载两者，relay 必须从查询形状猜测。&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2357">PR #2357&lt;/a> 添加了第一个 NIP-50 扩展 token：嵌入在搜索查询中的 &lt;code>autocomplete:true&lt;/code> 或 &lt;code>autocomplete:false&lt;/code> 表示 client 想要哪种模式。Ditto 的 relay 为 follow packs、lists 和任何带有 &lt;code>title&lt;/code> 标签的事件实现该 token，当 &lt;code>autocomplete:true&lt;/code> 存在时切换到前缀匹配。该 token 内联存在于查询中（独立的过滤器字段保持不变），因此它随搜索字符串一起传输，不需要 wire 协议凸起：&lt;/p>
&lt;pre tabindex="0">&lt;code>search: &amp;#34;fiat autocomplete:true&amp;#34;
&lt;/code>&lt;/pre>&lt;p>像这样的 token 形状提示是 NIP-50 一直处理 relay 特定方言的方式。Relay 已经支持像 &lt;code>language:en&lt;/code> 和 &lt;code>domain:example.com&lt;/code> 这样的 token。每个都保持 relay 特定，每个 relay 都记录自己的方言。NIP-50 的 PR #2357 将 &lt;code>autocomplete&lt;/code> 从 relay 私有 token 提升为规范祝福的 token，为跨 relay 的 typeahead 感知搜索铺平了道路。&lt;/p>
&lt;p>带有 autocomplete token 的 NIP-50 &lt;code>REQ&lt;/code> 示例，针对索引 kind 0 profile 标题的 relay：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;b7c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f7081a2b3c4d5e6f70819a2b3c4d5&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1781136000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;client&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;example-mention-picker&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Sent search: kinds=[0], search=\&amp;#34;fiat autocomplete:true\&amp;#34;, limit=10&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;12d3e4f5061728394a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f7081a2b3c4d5e6f70819a2b3c4d5e6f7081a2b3c4d5e6f708192&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>实际的 wire 级 REQ：&lt;/p>
&lt;pre tabindex="0">&lt;code>[&amp;#34;REQ&amp;#34;, &amp;#34;mention-picker&amp;#34;, {&amp;#34;kinds&amp;#34;:[0],&amp;#34;search&amp;#34;:&amp;#34;fiat autocomplete:true&amp;#34;,&amp;#34;limit&amp;#34;:10}]
&lt;/code>&lt;/pre>&lt;p>不识别该 token 的 relay 将 &lt;code>autocomplete:true&lt;/code> 视为字面搜索字符串的一部分，回退到全文匹配，返回正确的（如果排名不同）结果。优雅的降级使得对于喜欢在可用时使用前缀匹配的 client 无条件包含该 token 是安全的。&lt;/p>
&lt;p>下一个可能的 NIP-50 扩展是每 kind 排名控制：一个提示，表示&amp;quot;按 &lt;code>created_at&lt;/code> 降序排名&amp;quot;与默认相关性评分。几个 relay 已经接受 &lt;code>sort:newest&lt;/code> 作为 relay 私有 token，将 &lt;code>autocomplete&lt;/code> 带入规范的相同提升路径适用。搜索仍然是少数几个 relay 在结果质量上竞争的 Nostr 原语之一；交付的可靠性在所有符合规范的 relay 中相同。增量 token 让 client 可以利用该质量竞争，而无需强迫 relay 发布重量级的新规范。&lt;/p></content:encoded></item><item><title>Nostr Compass #25</title><link>https://nostrcompass.org/zh/newsletters/2026-06-03-newsletter/</link><pubDate>Wed, 03 Jun 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-06-03-newsletter/</guid><description>&lt;p>Amber 6.2.0 在规范之前发布了 NIP-44 v3 加密。Mostro 通过八个 PR 落地了 Cashu 结算托管的基础，将现有的 Cashu Development Kit 包装为与 Lightning 并列的第二个结算后端。NIP-F4 podcasts 在 27 个月的辩论后合并。fiatjaf 打开了一个有争议的 NIP-17 密钥解耦提案，重新开启了 bunker 与 Marmot 之间的架构争论。Amethyst 在 52 个未发布的 PR 中落地了 NIP-32 hashtag 标签、专用播客屏幕和链上 zaps。&lt;/p>
&lt;h2 id="头条报道">头条报道&lt;/h2>
&lt;h3 id="amber-620nip-44-v3-加密发布">Amber 6.2.0：NIP-44 v3 加密发布&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.2.0">Amber v6.2.0&lt;/a> 于 6 月 1 日发布，添加了 &lt;a href="https://github.com/greenart7c3/Amber/pull/448">NIP-44 v3 加密支持&lt;/a>，具有专用的批准屏幕、intent 预览、bunker 预览、历史记录和对无效请求的自动拒绝。该版本还注册了 &lt;a href="https://github.com/greenart7c3/Amber/commit/8b93340">NIP-44 v3 ContentProvider authorities&lt;/a>，因此其他 Android 应用可以在现有 v2 路径旁请求 v3 加密。NIP-44 本身是版本化的加密 payload 规范，由 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 私密 DM、NIP-46 bunker 流量和其他 Nostr 原语使用；Amber 中的 v3 是与 v2 并存的可选功能，通过独立的 signer 方法发出信号，因此接收方 client 可以明确协商算法。相应的 NIPs PR 尚未落地，因此 Amber 在协议共识之前推出 v3，wire 格式和 ContentProvider authority 已注册，供下游 client 集成。&lt;/p></description><content:encoded>&lt;p>Amber 6.2.0 在规范之前发布了 NIP-44 v3 加密。Mostro 通过八个 PR 落地了 Cashu 结算托管的基础，将现有的 Cashu Development Kit 包装为与 Lightning 并列的第二个结算后端。NIP-F4 podcasts 在 27 个月的辩论后合并。fiatjaf 打开了一个有争议的 NIP-17 密钥解耦提案，重新开启了 bunker 与 Marmot 之间的架构争论。Amethyst 在 52 个未发布的 PR 中落地了 NIP-32 hashtag 标签、专用播客屏幕和链上 zaps。&lt;/p>
&lt;h2 id="头条报道">头条报道&lt;/h2>
&lt;h3 id="amber-620nip-44-v3-加密发布">Amber 6.2.0：NIP-44 v3 加密发布&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.2.0">Amber v6.2.0&lt;/a> 于 6 月 1 日发布，添加了 &lt;a href="https://github.com/greenart7c3/Amber/pull/448">NIP-44 v3 加密支持&lt;/a>，具有专用的批准屏幕、intent 预览、bunker 预览、历史记录和对无效请求的自动拒绝。该版本还注册了 &lt;a href="https://github.com/greenart7c3/Amber/commit/8b93340">NIP-44 v3 ContentProvider authorities&lt;/a>，因此其他 Android 应用可以在现有 v2 路径旁请求 v3 加密。NIP-44 本身是版本化的加密 payload 规范，由 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 私密 DM、NIP-46 bunker 流量和其他 Nostr 原语使用；Amber 中的 v3 是与 v2 并存的可选功能，通过独立的 signer 方法发出信号，因此接收方 client 可以明确协商算法。相应的 NIPs PR 尚未落地，因此 Amber 在协议共识之前推出 v3，wire 格式和 ContentProvider authority 已注册，供下游 client 集成。&lt;/p>
&lt;p>NIP-46 会话现在在连接时自动接受 ping 请求，移除了配对后第一次往返的提示。&lt;code>sign_message&lt;/code> signer 方法在被弃用且未使用后被完全移除。&lt;/p>
&lt;p>由于 Amber 是主导的 Android signer，每个想要 v3 的下游 client 都必须以 Amber 的 wire 格式为目标，直到 NIPs PR 落地。这让 Amber 在协议赶上之前隐性地对最终 v3 规范有发言权。这种权衡是真实的：生产中的 v3 让 Amber 为最终的 NIP 收集实现反馈，代价是一个临时的单一实现参考点，其他 client 现在必须匹配。&lt;/p>
&lt;h3 id="mostro通过-cdk-的-cashu-托管集成">Mostro：通过 CDK 的 Cashu 托管集成&lt;/h3>
&lt;p>grunch 本周在 MostroP2P 中落地了八个 PR，将 Cashu 现有的 P2PK 多签原语（NUT-10 和 NUT-11）作为 Lightning 并列的第二个结算后端集成到 Nostr 协调的 P2P Bitcoin 交易所。加密原语是 Cashu 的；工作是集成脚手架和一个新的托管后端 trait。&lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.12.0">Mostro core v0.12.0&lt;/a> 于 5 月 30 日发布，添加了 &lt;a href="https://github.com/MostroP2P/mostro-core/pull/150">2-of-3 多签托管的协议类型&lt;/a>、每 proof P_M 签名，并允许托管事件通过响应验证。架构记录在 &lt;a href="https://github.com/MostroP2P/mostro/pull/756">PR #756&lt;/a> 中，使用 &lt;a href="https://github.com/MostroP2P/mostro/pull/757">PR #757&lt;/a> 中澄清的每订单交易密钥。&lt;/p>
&lt;p>实现在一天内通过六个后续 PR 推出。&lt;a href="https://github.com/MostroP2P/mostro/pull/758">F2 (PR #758)&lt;/a> 添加了配置、托管模式和条件启动。下一部分 &lt;a href="https://github.com/MostroP2P/mostro/pull/760">F3 (PR #760)&lt;/a> 定义了一个 &lt;code>EscrowBackend&lt;/code> trait，包含 Lightning 实现和 Cashu stub，让 Mostro 可以在不改变订单状态机的情况下切换结算后端。&lt;a href="https://github.com/MostroP2P/mostro/pull/759">F4 (PR #759)&lt;/a> 为 mint 和钱包操作包装了 &lt;a href="https://github.com/cashubtc/cdk">CDK&lt;/a>（Cashu Development Kit）。&lt;a href="https://github.com/MostroP2P/mostro/pull/761">F5 (PR #761)&lt;/a> 中的数据库工作添加了 compare-and-swap 托管锁和活动锁定查询。&lt;a href="https://github.com/MostroP2P/mostro/pull/762">F6 (PR #762)&lt;/a> 在专用 CI 作业中构建了一个容器化 mint 用于端到端托管测试。Mostro 流程已经在 relay 上使用 NIP-59 gift-wrapped DMs 进行订单协调，因此 Cashu 托管作为 Lightning 并列的第二个结算选项插入，无需触及 wire 协议。&lt;/p>
&lt;h2 id="发布">发布&lt;/h2>
&lt;h3 id="ngit-v250grasp-备选和惰性-git-fetch">ngit v2.5.0：GRASP 备选和惰性 git fetch&lt;/h3>
&lt;p>&lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.5.0">ngit v2.5.0&lt;/a> 更改了 &lt;code>git push pr/&amp;lt;branch&amp;gt;&lt;/code> 和 &lt;code>ngit send&lt;/code> 的默认行为，当仓库至少注册了一个 GRASP 服务器时，为新提案生成 PR kind。此前这仅对超过 60 KB 的过大 commits 或包含 submodules 的 commits 触发。当 PR 无法推送到仓库的 GRASP 服务器时，ngit 现在通过声明的服务器回退到 GRASP-06 路由。&lt;code>ngit send --git-server&lt;/code> 标志或 &lt;code>git push -o git-server=&amp;lt;url&amp;gt;&lt;/code> 让贡献者可以明确地针对自定义 git URL 或 GRASP 服务器。&lt;/p>
&lt;p>&lt;code>ngit init&lt;/code> 重新发布现在保留来自现有公告的未知标签，因此由未来 ngit 版本或第三方工具添加的标签在重新发布后存活。一个黄色警告列出被携带的标签，&lt;code>--clean&lt;/code> 按需移除它们。&lt;code>ngit pr apply&lt;/code>、&lt;code>ngit pr checkout&lt;/code> 和 &lt;code>ngit pr list&lt;/code> 惰性咨询 git 服务器并共享单一 fetch 辅助函数，因此当 commit 已经在本地时 checkout 不再无条件 fetch。当 repo 声明的 git 服务器不携带 PR tip 时，&lt;code>ngit pr checkout&lt;/code> 也尝试来自 PR 事件的提交者提供的克隆 URL 作为备选，匹配 &lt;code>ngit pr apply&lt;/code> 中的现有行为。ngit 是通过 Nostr 进行 git 协作的参考 &lt;a href="https://nostrcompass.org/zh/topics/nip-34/">NIP-34&lt;/a> 实现，v2.5.0 使 GRASP 成为新贡献者的一流路径。&lt;/p>
&lt;h3 id="jumble-v2657exif-剥离和已验证-zap-计数">Jumble v26.5.7：EXIF 剥离和已验证 zap 计数&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble/releases/tag/v26.5.7">Jumble v26.5.7&lt;/a> 添加了两个直接影响用户隐私和数据完整性的更改。EXIF 位置和相机标识符现在在图像上传离开 client 之前被剥离，关闭了一个长期存在的元数据泄漏面，该面影响了从 Jumble 发布的每张图像。Zap 计数现在仅从加密验证的收据计算，修复了让攻击者在笔记上夸大 zap 总数的畸形 zap 事件导致的膨胀计数。该版本还为 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> DM 添加了发送者身份验证，关闭了发送者可以在 seal 中伪造其 &lt;code>pubkey&lt;/code> 的欺骗面。&lt;/p>
&lt;h3 id="nostr-calendar-v160rsvp-和重复参与者处理">nostr-calendar v1.6.0：RSVP 和重复参与者处理&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.6.0">nostr-calendar v1.6.0&lt;/a> 落地了 Formstr 的 RSVP 流程（&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/169">PR #169&lt;/a>）并防止事件邀请中的重复参与者（&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/168">PR #168&lt;/a>）。publish 函数中的 &lt;code>waitForAll&lt;/code> 选项现在默认为 false，因此 UI 不会在慢速 relay 上阻塞（&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/170">PR #170&lt;/a>）。&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/157">PR #157&lt;/a> 发布了 Formstr 的两个用于预约调度和预订的 NIP 提案草案。&lt;/p>
&lt;h3 id="sprout-036sprout--mesh-llm-和-channel-部分">Sprout 0.3.6：Sprout × mesh-llm 和 channel 部分&lt;/h3>
&lt;p>&lt;a href="https://github.com/block/sprout/releases/tag/v0.3.6">Sprout v0.3.6&lt;/a> 是本周从 v0.3.1 到 v0.3.6 的六个版本发布的头条。进程内 Sprout × mesh-llm 集成在 &lt;a href="https://github.com/block/sprout/pull/798">PR #798&lt;/a> 中落地，让 Sprout 可以通过 relay 准入提供和消费 mesh-llm 节点。用户定义的 channel 部分通过 Nostr 在 &lt;a href="https://github.com/block/sprout/pull/792">PR #792&lt;/a> 中跨设备同步，channel 部分通过 relay 同步在 &lt;a href="https://github.com/block/sprout/pull/800">PR #800&lt;/a> 中到达移动端。带有可变关注和静音控件的线程感知通知在 &lt;a href="https://github.com/block/sprout/pull/761">PR #761&lt;/a> 中到达。&lt;/p>
&lt;p>带下载卡的任意文件类型附件在 &lt;a href="https://github.com/block/sprout/pull/810">PR #810&lt;/a> 中到达，将 Sprout 扩展到仅图像附件之外。移动端获得了 Pulse 社交信息流标签（&lt;a href="https://github.com/block/sprout/pull/772">PR #772&lt;/a>）以及跨信息流、撰写和过滤器接口的 Pulse 打磨（&lt;a href="https://github.com/block/sprout/pull/796">PR #796&lt;/a>）。&lt;/p>
&lt;h3 id="nostrbotkit-v050rust-机器人框架中的-marmot-群组聊天">NostrBotKit v0.5.0：Rust 机器人框架中的 Marmot 群组聊天&lt;/h3>
&lt;p>&lt;a href="https://codeberg.org/Tuxor/NostrBotKit/src/branch/main/CHANGELOG.md">NostrBotKit v0.5.0&lt;/a> 于 5 月 24 日在 Codeberg 上发布，为自托管的 Rust 机器人框架添加了 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a>（MLS-over-Nostr，&lt;a href="https://github.com/nostr-protocol/nips/pull/2014">NIP-104&lt;/a>）支持。当 &lt;code>marmot: true&lt;/code> 被设置时，机器人发布其 MLS key packages（kind 443、30443、10051）、自动接受群组邀请，并在加入的群组中监听消息。两个新的命令类型 &lt;code>dm_marmot&lt;/code> 和 &lt;code>dm_marmot_npub&lt;/code> 让机器人可以通过 cron 作业或 webhook 向命名的 Marmot 群组或 1:1 Marmot 聊天发送消息。为了防止与其他机器人的反馈循环，NostrBotKit 机器人仅响应通过 &lt;code>/command&lt;/code> 或 &lt;code>@botname/command&lt;/code> 明确寻址给它们的消息。使用 MIP-04 的加密附件通过 Blossom 或 NIP-96 自动解密并重新上传，MLS 状态数据库使用从机器人的私钥派生的密钥加密。NostrBotKit 是第一个发布 NIP-104 机器人支持的 Rust 框架，为 Marmot 加密的机器人部署开辟了与现有 TypeScript 路径不同的运营者配置文件。&lt;/p>
&lt;h3 id="noscrypt-v0114已签名的加密库发布">noscrypt v0.1.14：已签名的加密库发布&lt;/h3>
&lt;p>&lt;a href="https://github.com/vnuge/noscrypt/releases/tag/v0.1.14">noscrypt v0.1.14&lt;/a> 是 C 加密库的安全版本，被几个 Nostr client 用于 secp256k1、NIP-04 和 NIP-44 原语。该版本随 &lt;a href="https://www.vaughnnugent.com/resources/software/modules/noscrypt">PGP 签名的下载&lt;/a> 一起发布，可以针对维护者的公钥进行验证。捆绑 noscrypt 的下游 client 应在集成之前验证签名。&lt;/p>
&lt;h3 id="chama-v130使用-fedimint-的新-nostr-原生-p2p-托管">Chama v1.3.0：使用 Fedimint 的新 Nostr 原生 P2P 托管&lt;/h3>
&lt;p>&lt;a href="https://github.com/jesuspirate/chama/releases/tag/v1.3.0">Chama v1.3.0&lt;/a> 于 6 月 1 日发布，是四个版本发布的头条，一个新的 Nostr 原生 P2P 托管 client，使用 Fedimint ecash 和 2-of-3 Shamir 秘密共享进行结算。该项目在 &lt;a href="https://getchama.app">getchama.app&lt;/a> 发布，无需服务器运行。v1.3.0 引入了&amp;quot;heal that sticks&amp;quot;（在会话重启后仍然存活的成功重新广播和交易恢复）和支付轨道匹配，其中偏向美国的 Chamas 首先展示美国支付轨道。多单位店面基础工作在 &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v1.2.11">v1.2.11&lt;/a>（多单位模式）和 &lt;a href="https://github.com/jesuspirate/chama/releases/tag/v1.2.12">v1.2.12&lt;/a>（店面库存会计 + 原生 Fedimint 桥接恢复加固）中落地。Chama 加入 Mostro 和 Shopstr 的 Nostr 市场类别，以其无服务器架构和基于 Fedimint 的托管结算而与众不同。&lt;/p>
&lt;h2 id="未发布的更改">未发布的更改&lt;/h2>
&lt;h3 id="amethystnip-32-hashtag-标签播客屏幕音乐曲目">Amethyst：NIP-32 hashtag 标签、播客屏幕、音乐曲目&lt;/h3>
&lt;p>Amethyst 本周合并了 52 个 PR 和 411 个 commits，没有削减版本标签。最大的功能新增是 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3111">PR #3111&lt;/a>，它使用 kind 1985 事件（带有 &lt;code>L&lt;/code> 命名空间和 &lt;code>l&lt;/code> 标签）实现了 &lt;a href="https://nostrcompass.org/zh/topics/nip-32/">NIP-32&lt;/a> hashtag 标签和基于标签的 hashtag 信息流。这用一个基于 labeler 的发现模型取代了脆弱的文本匹配 &lt;code>#tag&lt;/code> 机制，用户可以像关注内容创作者一样关注特定的 labeler npubs。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3105">PR #3105&lt;/a> 添加了一个带有集数列表和内联播放器的专用播客屏幕，在 &lt;a href="https://nostrcompass.org/zh/topics/nip-f4/">NIP-F4&lt;/a> 播客规范合并后的几天内到达。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3071">PR #3071&lt;/a> 添加了带有关注列表过滤的软件应用信息流，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3067">PR #3067&lt;/a> 通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-51/">NIP-51&lt;/a> sets 添加了音乐曲目和播放列表支持。&lt;/p>
&lt;p>匿名帖子上传的临时 signer 在 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3123">PR #3123&lt;/a> 中落地，让用户可以在不向上传服务暴露其身份密钥的情况下匿名发布。带有 Arti v2.3.0 集成测试的 Tor 自愈看门狗到达 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3053">PR #3053&lt;/a>，在临时网络中断期间加强了 Amethyst 的 Tor 路由。链上 zaps 和来自 Gemini 的返回用户的 NIP-05 过滤器在 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3052">PR #3052&lt;/a> 中落地，将 zap 接口扩展到 Lightning 之外的链上 Bitcoin 支付。&lt;/p>
&lt;h3 id="shopstropengraph-预览-url-验证">Shopstr：OpenGraph 预览 URL 验证&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr/pull/504">PR #504&lt;/a> 在市场列表中渲染 OpenGraph 预览 URL 之前对其进行验证，关闭了一个潜在的 XSS 面，恶意卖家可以通过精心制作的 OG 元数据嵌入脚本化内容。Shopstr 托管的商店为外部链接显示 OG 预览，未验证的 URL 让攻击者可以将任意内容注入商店 UI。&lt;/p>
&lt;h2 id="nip-更新和协议规范工作">NIP 更新和协议规范工作&lt;/h2>
&lt;h3 id="nip-f4podcasts经过两年合并">NIP-F4（Podcasts）经过两年合并&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/1093">PR #1093&lt;/a> 于 5 月 28 日合并，距离 fiatjaf 打开原始草案两年三个月后。NIP-F4 将播客集数定义为 kind 54 事件，带有音频文件元数据的 &lt;code>imeta&lt;/code> 标签（URL、mime type、语言 ISO code、备选 URL、NIP-96 服务标志、比特率、时长）、一个 &lt;code>title&lt;/code> 标签、可选的 &lt;code>image&lt;/code> 和 &lt;code>description&lt;/code> 标签，以及主题标签的 &lt;code>t&lt;/code> 标签。该规范有意保留 RSS 作为真实来源：集数可以携带一个 &lt;code>i&lt;/code> 标签引用 RSS 播客 GUID，让 Nostr client 可以链接到现有的播客 feed 而不复制音频托管。PR 线程中的长期辩论（与 podcast-namespace 联合作者 Dave Jones、Alex Gleason 和 Mike Terenzio）确定了一个共存模型，其中 Nostr 在 RSS 之上提供社交层，而 RSS 保留分发层。Amethyst 的 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3105">PR #3105&lt;/a> 播客屏幕在规范合并后的几天内到达，Jumble 的 GIF 选择器工作也包括早期的播客附件脚手架。&lt;/p>
&lt;h3 id="nip-17-密钥解耦pr-2361">NIP-17 密钥解耦（PR #2361）&lt;/h3>
&lt;p>fiatjaf 于 6 月 1 日打开了 &lt;a href="https://github.com/nostr-protocol/nips/pull/2361">PR #2361&lt;/a>，提议 NIP-17 将身份密钥与加密密钥分离。接收者在一个新的 kind 10044 事件中广告其加密密钥，发送者使用该广告的密钥（当存在时）进行 gift-wrap 内部 seal，仅在广告不存在时回退到接收者的身份密钥。该 PR 还向 seal 添加了一个 &lt;code>n&lt;/code> 标签，携带发送者的加密 pubkey，因此接收者可以在不对每个已退役密钥进行试解密的情况下派生正确的会话密钥。声明的动机是 bunker UX：在当前设计下，bunker 用户必须通过 signer 往返每个收到的 DM 进行解密，因为加密密钥就是 signer 持有的身份密钥。解耦让 client 可以在本地持有加密密钥，同时将身份密钥保留在 bunker 中用于签名。&lt;/p>
&lt;p>该提议吸引了本周最有争议的审查。Cody Tseng（Jumble）支持它作为跨 client DM 互操作的最简单路径。Vitor Pamplona（Amethyst）在两个方面反对：它在 bunker 之外添加了一个新的长期解密秘密，不发布它的 client 将静默地无法解密来自发布它的 client 的消息，没有降级路径，因为断裂在 seal 层。Pamplona 认为这个问题已经被 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 的 key packages 和 epoch 轮换正确解决，将密钥分离改造到基本 NIP-17 规范中会产生 Marmot 花了两年时间设计来避免的那种互操作失败。fiatjaf 的反驳有三部分：解耦是每接收者可选的，n 标签修复解决了试解密的担忧，替代方案是在 Telegram 吃掉消息用例的同时保持 bunker UX 破损。该线程仍未合并决定开放，是本季度最受关注的 NIP 讨论。&lt;/p>
&lt;h3 id="nip-silent-payments-支付流程pr-2362">NIP-Silent Payments 支付流程（PR #2362）&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2362">silentius-satoshi 于 6 月 1 日打开了 PR #2362&lt;/a>，作为更广泛的 &lt;a href="https://github.com/nostr-protocol/nips/pull/2355">Nostr Silent Payments NIP 草案（PR #2355）&lt;/a> 的伴侣。支付流程 NIP 定义了 kind 8352 用于 silent payment 收据通知（通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a> gift wrap 交付，因此收据链接在公开的 relay 层不可观察），以及 kind 10353 用于跨相同 Silent Payments 钱包的设备同步的加密 UTXO 缓存。这两个一起让付款人可以使用 Nostr 原生原语向 Silent Payments 地址发出付款信号，而不在开放的 relay 层暴露链上链接。&lt;/p>
&lt;h3 id="nip-pip-perfect-ip-packetspr-2364">NIP-PIP Perfect IP Packets（PR #2364）&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2364">RandyMcMillan 于 6 月 1 日打开了 PR #2364&lt;/a> 作为草案。它引入了一个数据包树传输，具有三个新的可寻址 kind：39078 携带清单、39079 携带单个切片、39080 携带修复请求。该规范定义了一个 wire 格式，其中大文件被分成可寻址的切片，清单描述切片树，修复请求让接收者可以请求缺失的切片。适用早期草案状态，该提议尚未吸引维护者审查。&lt;/p>
&lt;h3 id="nip-29-音频视频实时空间pr-2238">NIP-29 音频/视频实时空间（PR #2238）&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2238">PR #2238&lt;/a> 于 5 月 28 日合并，扩展了 &lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a> 基于 relay 的群组，具有音频和视频实时空间支持。群组现在可以引用一个活动的实时空间会话，让 &lt;a href="https://nostrcompass.org/zh/topics/nip-53/">NIP-53&lt;/a> 风格的实时活动事件在 NIP-29 群组上下文中锚定。&lt;/p>
&lt;h3 id="nip-71-视频多音频轨道pr-2255">NIP-71 视频多音频轨道（PR #2255）&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2255">PR #2255&lt;/a> 于 5 月 28 日合并，向 NIP-71 视频事件添加了音频轨道 &lt;code>imeta&lt;/code> 标签。新格式携带 URL、hash、mime type、语言标签（带有 ISO-639-1 加上原始版本标志）、备选 URL、NIP-96 服务信号、比特率和时长。这实现了仅音频流（视频播客）、稳定音频的分辨率切换、多语言轨道，以及当服务器不将音频直接嵌入视频文件时减少存储。client 应在假设单轨道行为之前检查音频轨道可用性。&lt;/p>
&lt;h3 id="nip-59-临时-gift-wrappr-2245">NIP-59 临时 gift wrap（PR #2245）&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2245">PR #2245&lt;/a> 于 5 月 28 日合并，添加 kind 21059 作为现有 kind 1059 gift wrap 的临时对应物。语义与标准 NIP-59 wrap 匹配，但遵循 NIP-01 的临时事件规则（relay 在广播后丢弃它们，不持久化它们）。这让应用可以根据需求选择持久性：输入指示器和 presence pings 受益于临时，而 DM 历史需要持久性。&lt;/p>
&lt;h3 id="nip-78-应用特定-kindpr-2292">NIP-78 应用特定 kind（PR #2292）&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2292">PR #2292&lt;/a> 于 5 月 28 日合并，将 NIP-78 应用特定数据重新分类为普通可寻址 kind，删除了之前的独立范围。这简化了可替换性语义，并将 NIP-78 与其他应用状态 NIP 使用的可寻址事件模型保持一致。&lt;/p>
&lt;h3 id="nip-85-澄清pr-2304">NIP-85 澄清（PR #2304）&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2304">PR #2304&lt;/a> 于 5 月 28 日合并，对 &lt;a href="https://nostrcompass.org/zh/topics/nip-85/">NIP-85&lt;/a> Trusted Assertions 中关于每个服务提供商的多个密钥和 relay 的语言进行了小的改进，澄清了 relay 断言服务的运营者密钥轮换路径。&lt;/p>
&lt;h3 id="nip-01-relay-连接管理单行pr-2307">NIP-01 relay 连接管理单行（PR #2307）&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2307">PR #2307&lt;/a> 于 5 月 28 日合并，向 NIP-01 添加了一个关于 client 应如何处理 relay 连接生命周期的单一句子。该修复解决了一个长期存在的差距，即 client 对是否在 fetching 后保持 WebSocket 连接打开存在分歧，导致在丢弃空闲连接的 relay 上静默丢失消息。&lt;/p>
&lt;h3 id="nip-c7-kind-9-聊天约束pr-2310">NIP-C7 kind 9 聊天约束（PR #2310）&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2310">PR #2310&lt;/a> 于 5 月 28 日合并，将 NIP-C7 聊天视图限制为仅 kind 9 消息。这在实现 NIP-C7 风格聊天接口的 client 中将临时聊天与 kind 1 时间线帖子分开。&lt;/p>
&lt;h3 id="nip-55-简化pr-2363">NIP-55 简化（PR #2363）&lt;/h3>
&lt;p>由 greenart7c3 于 6 月 1 日打开的 &lt;a href="https://github.com/nostr-protocol/nips/pull/2363">PR #2363&lt;/a> 简化了 Android signer 应用规范。Vitor Pamplona 签署为&amp;quot;看起来不错&amp;quot;，fiatjaf 询问它是否准备好合并。该变更为 Amber 本周发布的 NIP-44 v3 ContentProvider authority 注册铺平了道路。&lt;/p>
&lt;h3 id="nip-44-v3amber-实现领先于规范">NIP-44 v3（Amber 实现领先于规范）&lt;/h3>
&lt;p>Amber 在 v6.2.0 中发布了 NIP-44 v3，八个 commits 实现了加密升级和 ContentProvider authority 注册，但 NIPs repo 规范 PR 尚未落地。NIP-44 本身定义了在已签名事件内使用的版本化加密 payload 格式；现有的 v2（自 2024 年以来在生产中）使用 secp256k1 ECDH、HKDF、padding、ChaCha20、HMAC-SHA256 和 base64。v3 wire 格式在 nonce 之前添加了一个新的版本字节（0x03），允许接收方 client 明确协商算法。Amber 的实现包括对无效 v3 请求的自动拒绝、与 v2 批准不同的专用批准屏幕，以及用于历史记录的每方向明文日志记录。在 NIPs PR 合并之前，v3 是 Amber 特定的扩展。将其视为前瞻性信号，而不是稳定的协议范围信号。&lt;/p>
&lt;h2 id="nip-deep-divenip-32labeling">NIP deep dive：NIP-32（Labeling）&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-32/">NIP-32&lt;/a> 定义了任何 Nostr 参与者使用可寻址 kind 1985 事件为事件、pubkey、relay、URL 或主题打标签的结构化方式，使用带命名空间的标签词汇。该规范引入了两个新标签：&lt;code>L&lt;/code> 表示标签命名空间，&lt;code>l&lt;/code> 表示该命名空间内的标签。标签目标标签（&lt;code>e&lt;/code>、&lt;code>p&lt;/code>、&lt;code>a&lt;/code>、&lt;code>r&lt;/code> 或 &lt;code>t&lt;/code>）指定被标记的内容。命名空间要求防止多个标签系统冲突：&lt;code>nip28.moderation&lt;/code> 中的 &lt;code>spam&lt;/code> 标签与 &lt;code>relay-report&lt;/code> 中的 &lt;code>spam&lt;/code> 标签具有不同的语义。&lt;/p>
&lt;p>使 NIP-32 在审核之外有用的设计选择是标签是断言，不是协议级真理。kind 1985 事件仅表示特定 pubkey 在特定命名空间中标记了特定目标。信任模型委托给 client：每个 client 选择尊重哪些 labelers、读取哪些命名空间，以及为每个标签提供什么 UI 承受性。同一原语承载内容警告、许可证分配、kind 1 笔记上的 ISO-639-1 语言标签、ISO-3166-2 地理标签、内容分类、分布式审核建议和声誉分数。&lt;/p>
&lt;p>Amethyst 本周的 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3111">PR #3111&lt;/a> 是迄今为止最大的部署。它通过 NIP-32 添加 hashtag 标签和基于标签的 hashtag 信息流，让用户可以按可信 labelers 分配的标签浏览。最初在 Nostr 上驱动 hashtag 发现的早期 &lt;code>#tag&lt;/code> 文本匹配机制作为未标记笔记的备选保留。hashtag 作为标签的模型意味着同一笔记可以在不同 labelers 分配的多个标签下被发现，用户可以在不影响底层笔记的情况下静音或提升特定 labelers。&lt;/p>
&lt;p>自我标签也受支持。作者可以直接将 &lt;code>L&lt;/code> 和 &lt;code>l&lt;/code> 标签附加到自己的 kind 1 笔记上以声明语言、位置和主题。带有 &lt;code>[&amp;quot;L&amp;quot;, &amp;quot;ISO-639-1&amp;quot;], [&amp;quot;l&amp;quot;, &amp;quot;en&amp;quot;, &amp;quot;ISO-639-1&amp;quot;]&lt;/code> 标签的笔记自我识别为英语，可以由语言感知的 client 过滤，无需第三方标签基础设施。&lt;/p>
&lt;p>将 kind 1 笔记标记为英语并为其分配审核标签的 NIP-32 标签事件示例：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a5f87fe2d4c8b9a0e3f1c4d5e6a7b8c9d0e1f2a3b4c5d6e7f8091a2b3c4d5e6f&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1748908800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1985&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;L&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;ISO-639-1&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;l&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;en&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;ISO-639-1&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;L&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip28.moderation&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;l&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;approve&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip28.moderation&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;8b39f4e5d6c7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Labeled as English-language content approved for NIP-28 chat moderation&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1e2d3c4b5a6978869504132c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5d6e7f80192a3b4c5&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Amethyst 的推出与最近的 Trusted Relay Assertions 工作相结合，表明 NIP-32 正在成为 Nostr 上任何&amp;quot;用户驱动的关于目标的断言&amp;quot;模式的标准基质。下一个测试是 labelers 本身是否会发展信任层级：用户是否会像关注内容创作者一样关注特定的 labeler npubs。&lt;/p>
&lt;h2 id="nip-deep-divenip-f4podcasts">NIP deep dive：NIP-F4（Podcasts）&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/F4.md">NIP-F4&lt;/a> 本周合并，距 fiatjaf 打开原始草案（PR #1093）两年三个月。F 前缀是普通的十六进制编号：NIP-F0 到 NIP-FF 使用与 NIP-0A 到 NIP-0D 相同的 1 字节十六进制空间，上部十六进制范围作为 01–99 十进制范围填满时的溢出。NIP-F4 定义了播客如何将集数和元数据作为 Nostr 事件发布，同时保留 RSS 作为音频文件本身的补充层。&lt;/p>
&lt;p>核心架构选择是每个播客是自己的 Nostr keypair。规范直接开头就说：&amp;ldquo;each podcast is its own Nostr keypair&amp;rdquo;。这让播客可以将其播客存在与正常的 kind 0 / kind 1 微博客存在结合，让播客随着时间通过密钥交接或 MuSig2 风格的共享签名改变所有权。四个事件 kind 承载发布层：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;code>kind:10154&lt;/code>&lt;/strong>：可替换的播客元数据。携带 &lt;code>title&lt;/code>、&lt;code>image&lt;/code>、&lt;code>description&lt;/code>、可选的 &lt;code>website&lt;/code> 标签，以及可选的 &lt;code>p&lt;/code> 标签，用 &lt;code>role&lt;/code> 为 &lt;code>host&lt;/code>、&lt;code>cohost&lt;/code> 或 &lt;code>editor&lt;/code> 标记作者。&lt;/li>
&lt;li>&lt;strong>&lt;code>kind:10164&lt;/code>&lt;/strong>：作者反声明。规范中的示例使用 kind &lt;code>10064&lt;/code>（这是一个开放待更正的错字），但标题和周围文本将其识别为 &lt;code>kind:10164&lt;/code>。用户列出他们撰写的播客 pubkey，以便 client 可以针对来自假定作者的等效声明验证 &lt;code>kind:10154&lt;/code> 中的 &lt;code>p&lt;/code> 标签。没有这个，播客可能会错误地将任何人标记为主持人。&lt;/li>
&lt;li>&lt;strong>&lt;code>kind:54&lt;/code>&lt;/strong>：由播客 pubkey 直接撰写的集数事件。标签包括 &lt;code>title&lt;/code>、可选的 &lt;code>image&lt;/code>、&lt;code>description&lt;/code> 和一个或多个 &lt;code>audio&lt;/code> 标签。每个 &lt;code>audio&lt;/code> 标签是 &lt;code>[&amp;quot;audio&amp;quot;, &amp;quot;&amp;lt;audio-url&amp;gt;&amp;quot;, &amp;quot;&amp;lt;optional_media_type&amp;gt;&amp;quot;]&lt;/code>。规范指出&amp;quot;更多进一步发现后要指定的重要字段&amp;quot;，合并的形式有意最小化。&lt;/li>
&lt;li>&lt;strong>&lt;code>kind:10054&lt;/code>&lt;/strong>：一个 &lt;a href="https://nostrcompass.org/zh/topics/nip-51/">NIP-51&lt;/a> 风格的收藏播客列表，让用户可以标记他们关注哪些播客。&lt;/li>
&lt;/ul>
&lt;p>合并周围的线程辩论涉及 Podcasting 2.0 联合作者 &lt;a href="https://github.com/daveajones">Dave Jones&lt;/a>、&lt;a href="https://github.com/alexgleason">Alex Gleason&lt;/a>、&lt;a href="https://github.com/mterenzio">Mike Terenzio&lt;/a>、&lt;a href="https://github.com/pablof7z">Pablo F7z&lt;/a> 和 &lt;a href="https://github.com/staab">staab&lt;/a>。Jones 强烈反对任何取代 RSS 的尝试：&amp;ldquo;It&amp;rsquo;s been tried many times and always fails&amp;rdquo;，引用了 JSONfeed、XMPP、AMP、Twitter 的 API 以及 Spotify 失败的迁移。Terenzio 将该提议重新框架为 RSS 之上的社交层，将 RSS 本身保留为分发层。fiatjaf 同意退后一步让提议成熟：&amp;ldquo;I agree with everything you said but I still think we can pull it off, let&amp;rsquo;s stop here for a while&amp;rdquo;。两年后，合并的规范落在更接近共存而不是替代的位置。&lt;/p>
&lt;p>合并规范中三个设计问题保持明确：&lt;/p>
&lt;ul>
&lt;li>&lt;code>kind:10164&lt;/code> 错字（示例显示 &lt;code>10064&lt;/code>）需要在 client 可以安全互操作之前调和。&lt;/li>
&lt;li>没有 RSS GUID 链接的集数级发现留待开放。合并的规范没有 &lt;code>i&lt;/code> 标签、没有 &lt;code>podcast:item:guid&lt;/code> 格式、没有 RSS 桥接机制。想要将现有 RSS 目录桥接到 kind 54 事件的 client 必须自己定义桥接约定。&lt;/li>
&lt;li>&lt;code>kind:54&lt;/code> 定义上的&amp;quot;更多重要字段&amp;quot;存根将比特率、时长、语言、转录指针、章节和每段元数据留作后续提案的开放领域。&lt;/li>
&lt;/ul>
&lt;p>Amethyst 的 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3105">PR #3105&lt;/a> 在合并后的几天内落地了一个带有集数列表和内联播放器的专用播客屏幕，是第一个主要的 client 实现。Jumble 在其 GIF 选择器旁发布了早期播客附件脚手架。Wavlake 仍然是最大的 Nostr 原生播客平台，需要决定是否将其现有的 kind 31337 音乐曲目事件与 NIP-F4 的 kind 54 集数模型对齐。&lt;/p>
&lt;p>匹配合并规范最小标签集的 NIP-F4 kind 54 集数事件示例：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;55807e7d5cd90d0303d7dce7397f996fdbaed8697903f326c7cf8ad999b9de3d&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1748995200&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">54&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Episode 42: Why RSS Won&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;image&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://podcast.example.com/ep42-cover.jpg&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;description&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Dave Jones and fiatjaf on protocol coexistence and the social layer.&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;audio&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://podcast.example.com/audio/ep42.mp3&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;audio/mpeg&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;In this episode we discuss the two-year journey of NIP-F4 from draft to merge, and why coexistence with RSS turned out to be the right architectural choice.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;abc123def456789012345678901234567890abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef01234567&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>PR #1093 打开了 27 个月，远高于已合并 NIPs PR 的中位数打开时间。NIP-F4 的下一个测试是 kind 10164 错字是否得到调和，集数发现和 RSS 桥接约定是否从实现者中出现，以及主要播客主持人是否按规范建议以每播客 keypair 发布。&lt;/p></content:encoded></item><item><title>Nostr Compass #24</title><link>https://nostrcompass.org/zh/newsletters/2026-05-28-newsletter/</link><pubDate>Thu, 28 May 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-05-28-newsletter/</guid><description>&lt;p>Amethyst v1.11.0 落地完整的 NIP-52 日历实现，带有提醒、链上 Bitcoin zap 分成和 Marmot 群组回复支持。White Noise v2026.5.22 通过 Notification Service Extension 发布 iOS 推送通知，还有屏蔽 UX 和&amp;quot;添加成员&amp;quot;按钮。Vector v0.4.0 落地了从零开始的 vector-core 重写、一键 Tor 带桥接、NIP-46 远程 signer、完整 negentropy MLS 群组同步，以及供 AI agent 使用的 21 工具 MCP 服务器。Applesauce v6.1.0 引入 NIP-51 查找 relay 列表（kind 10086）和完整的 NIP-34 git-cast 工厂集合。MDK 通过统一的 UniFFI 接口在 iOS 和 Android 上添加 NIP-40 消失消息，Mostro v0.17.4 通过第 3 阶段将削减的保证金支付给赢家来关闭反滥用保证金循环。Notedeck 为 giftwraps 和线程回填合并了完整的 NIP-77 negentropy 协调，Cordn 作为协调者中介的 MLS 消息应用浮出水面，以单点可用性依赖换取更紧密的 epoch 排序和更简单的运营模型，一个名为 deepmarks 的 NIP-B0 参考实现发布了策展人货币化的书签 client，Formstr 团队开放了四个协调的日历 NIP 提案，涵盖参与者自我移除、私密事件、循环和去中心化预约调度。&lt;/p></description><content:encoded>&lt;p>Amethyst v1.11.0 落地完整的 NIP-52 日历实现，带有提醒、链上 Bitcoin zap 分成和 Marmot 群组回复支持。White Noise v2026.5.22 通过 Notification Service Extension 发布 iOS 推送通知，还有屏蔽 UX 和&amp;quot;添加成员&amp;quot;按钮。Vector v0.4.0 落地了从零开始的 vector-core 重写、一键 Tor 带桥接、NIP-46 远程 signer、完整 negentropy MLS 群组同步，以及供 AI agent 使用的 21 工具 MCP 服务器。Applesauce v6.1.0 引入 NIP-51 查找 relay 列表（kind 10086）和完整的 NIP-34 git-cast 工厂集合。MDK 通过统一的 UniFFI 接口在 iOS 和 Android 上添加 NIP-40 消失消息，Mostro v0.17.4 通过第 3 阶段将削减的保证金支付给赢家来关闭反滥用保证金循环。Notedeck 为 giftwraps 和线程回填合并了完整的 NIP-77 negentropy 协调，Cordn 作为协调者中介的 MLS 消息应用浮出水面，以单点可用性依赖换取更紧密的 epoch 排序和更简单的运营模型，一个名为 deepmarks 的 NIP-B0 参考实现发布了策展人货币化的书签 client，Formstr 团队开放了四个协调的日历 NIP 提案，涵盖参与者自我移除、私密事件、循环和去中心化预约调度。&lt;/p>
&lt;h2 id="头条报道">头条报道&lt;/h2>
&lt;h3 id="amethyst-v1110日历链上-zap-分成和-marmot-回复">Amethyst v1.11.0：日历、链上 zap 分成和 Marmot 回复&lt;/h3>
&lt;p>Amethyst 是由 Vitor Pamplona 维护的 Android 版 Nostr client，发布了 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.11.0">v1.11.0&lt;/a>。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2994">PR #2994&lt;/a> 添加了带有专用 UI 和提醒系统的 &lt;a href="https://nostrcompass.org/zh/topics/nip-52/">NIP-52&lt;/a> 日历事件实现，因此日历事件现在在自己的时间线类别中渲染，与通用的 kind-30023 长文视图分开。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3018">PR #3018&lt;/a> 使用分成支持扩展了链上 Bitcoin zaps，根据现有的 zap-split 标签将一笔 Bitcoin 交易分发给多个接收者，因此链上支付与 Lightning 分成表现相同。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2974">PR #2974&lt;/a> 添加了一个带分页的链上交易历史屏幕，展示每笔已结算 zap 及其区块确认状态。&lt;/p>
&lt;p>群组消息与一对一聊天获得了对等性：&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2995">PR #2995&lt;/a> 为 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a>/MLS 群组消息添加了回复支持，因此加密群组内的线程现在以与公开笔记相同的父引用 UI 渲染。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2984">PR #2984&lt;/a> 通过检查 LNURL 提供者与接收者声明的 lud16 匹配来加固 &lt;a href="https://nostrcompass.org/zh/topics/nip-57/">NIP-57&lt;/a> zap 收据验证，关闭了一类伪造：第三方 LNURL 可能为从未到达的支付铸造收据。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2968">PR #2968&lt;/a> 接受 &lt;a href="https://nostrcompass.org/zh/topics/nip-92/">NIP-92&lt;/a> &lt;code>imeta&lt;/code> 标签中的浮点尺寸，使 Amethyst 与发布来自 iPhone Retina 显示屏等设备的分数像素密度值的 client 保持一致。该版本还接入了 Payment Targets，一个新的可替换事件多轨道打赏罐，将在下面的协议部分讨论。&lt;/p>
&lt;h3 id="white-noise-v2026522ios-推送屏蔽-ux-和添加成员">White Noise v2026.5.22：iOS 推送、屏蔽 UX 和添加成员&lt;/h3>
&lt;p>White Noise 是 Marmot 协议群组消息应用，发布了 &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.5.22%2B25">v2026.5.22&lt;/a>，头条功能是 iOS 推送通知。&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/673">PR #673&lt;/a> 实现了一个 iOS Notification Service Extension（NSE），它在扩展进程内解密 MLS 消息并将它们作为系统通知呈现，因此 iPhone 用户不再需要将应用置于前台以接收消息。Android 推送 token 布线通过相同的后端管道路由，每个平台的 NSE 将密文排除在 broker 之外。&lt;/p>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/676">PR #676&lt;/a> 添加了完整的屏蔽和取消屏蔽 UX，带有确认流程和联系人列表过滤。&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/679">PR #679&lt;/a> 在群组信息屏幕添加了期待已久的&amp;quot;添加成员&amp;quot;按钮，关闭了群组管理员不得不退而使用分享链接的 UX 缺口。&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/688">PR #688&lt;/a> 引入了专用的 iOS 通知设置屏幕，&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/687">PR #687&lt;/a> 为媒体和消息接入了长按分享。&lt;/p>
&lt;h3 id="mdk-跨平台添加-nip-40-消失消息">MDK 跨平台添加 NIP-40 消失消息&lt;/h3>
&lt;p>Marmot Development Kit 是 White Noise iOS、White Noise Android 及任何未来 Marmot client 使用的共享 Rust 核心，合并了 &lt;a href="https://github.com/marmot-protocol/mdk/pull/306">PR #306&lt;/a> 以通过 UniFFI 桥接公开消失消息验证和 &lt;a href="https://nostrcompass.org/zh/topics/nip-40/">NIP-40&lt;/a> 过期处理。该 PR 是三部分系列中的第二部分。iOS 和 Android 现在共享一个过期逻辑的 Rust 实现；时间规则存在于一个经审计的代码路径中，两个平台通过 UniFFI 消费。&lt;a href="https://github.com/marmot-protocol/mdk/pull/307">PR #307&lt;/a> 限制存储的 welcome 失败原因长度并在持久化之前清理它们，这是补充上周发布的 welcome 事件处理的单独加固工作。&lt;/p>
&lt;p>MLS 中的消失消息不仅仅是 UI 层面的功能。过期标签与加密消息封套一起发布，因此从未打开消息的接收者仍然会让底层密文在 relay 层与接收 client 中的任何缓存副本一起过期。有了 MDK 拥有验证路径，跨 client 的行为保持一致：任何符合规范的 Marmot 实现都强制执行相同的过期语义，因此一个 client 遵守过期而另一个永久缓存不再是可移植性隐患。&lt;/p>
&lt;h3 id="mostro-v0174第-3-阶段关闭削减保证金循环">Mostro v0.17.4：第 3 阶段关闭削减保证金循环&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> 是构建在 Nostr 之上的点对点 Bitcoin 交换协议，在 &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.17.4">v0.17.4&lt;/a> 中发布了其反滥用保证金推出的第 3 阶段。&lt;a href="https://github.com/MostroP2P/mostro/pull/738">PR #738&lt;/a> 落地了削减保证金的支付流程，将输家没收的抵押品拿出来支付给争议赢家。&lt;a href="https://github.com/MostroP2P/mostro/pull/743">PR #743&lt;/a> 添加了第 3.5 阶段，即向赢家发出的明确支付确认消息，让他们知道削减的 sats 已结算，确认事件到达与争议解决相同的 Nostr 会话上。上周报道的第 2 阶段将削减引入为管理员操作；第 3 阶段是威胁惩罚与执行惩罚之间的区别。&lt;/p>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro/pull/746">PR #746&lt;/a> 让守护进程可以终结缺少求解器行的争议，这是一个此前会在遗留争议上停滞解决的边缘情况。&lt;a href="https://github.com/MostroP2P/mostro/pull/748">PR #748&lt;/a> 容忍 Yadio 的 &lt;code>/exrates/BTC&lt;/code> 响应中的空 rates，因此 Yadio 的短暂中断不再破坏 Mostro 的法币转换路径。&lt;a href="https://github.com/MostroP2P/mostro/pull/745">PR #745&lt;/a> 记录了多源价格提供商的规范，为移除 Yadio 作为单点故障奠定基础。Mostro 移动 client 在 &lt;a href="https://github.com/MostroP2P/mobile/pull/596">PR #596&lt;/a> 中连接了匹配的第 3 阶段索赔路径。&lt;/p>
&lt;h3 id="applesauce-v610查找-relay-和-nip-34-git-casts">Applesauce v6.1.0：查找 relay 和 NIP-34 git casts&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/applesauce">Applesauce&lt;/a> 是模块化 Nostr 工具包，为 Coracle、noStrudel 和 Pablo F7z 的技术栈提供支持，在其包中发布了 &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-actions%406.1.0">v6.1.0&lt;/a>。该版本添加了一流的 &lt;a href="https://nostrcompass.org/zh/topics/nip-51/">NIP-51&lt;/a> 查找 relay 列表支持：kind 10086 事件让用户可以发出&amp;quot;如果你想找到我，请询问这些 relay&amp;quot;的信号，作为发现原语与 &lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a> 发件箱列表并列。构建在 &lt;code>applesauce-core&lt;/code> 之上的应用获得一个响应式的 &lt;code>User.lookupRelays$&lt;/code> observable 和 &lt;code>applesauce-relay&lt;/code> 中的匹配加载器。&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-34/">NIP-34&lt;/a> git-cast 工厂到达 &lt;code>applesauce-factory&lt;/code>，为每个基于 Applesauce 构建的 client 提供一行代码发布 repo 公告（kind 30617）、patches（kind 1617）和 issues（kind 1621）的路径。&lt;code>User.favoriteGitRepos$&lt;/code>、&lt;code>User.gitAuthors$&lt;/code> 和 &lt;code>User.graspServers$&lt;/code> 响应式属性让应用可以直接从同一个 User 对象列出用户关注的 repo、repo 维护者和配置的 GRASP 服务器。该版本还在 &lt;a href="https://github.com/hzrd149/applesauce/pull/73">PR #73&lt;/a> 中修复了静默丢弃离线 relay 的 pool 手动方法。&lt;/p>
&lt;h3 id="notedeck-合并用于-giftwraps-和线程回填的-nip-77-negentropy">Notedeck 合并用于 giftwraps 和线程回填的 NIP-77 negentropy&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> 是 Damus 的原生多列桌面 client，5 月 25 日合并了 &lt;a href="https://github.com/damus-io/notedeck/pull/1459">PR #1459&lt;/a>，将完整的 &lt;a href="https://nostrcompass.org/zh/topics/nip-77/">NIP-77&lt;/a> negentropy 协调接入共享的发件箱路径。该 PR 添加了 NIP-77 client 和 relay 帧、relay 本地的 negentropy 会话，以及驱动本地集合协调和缺失事件获取的发件箱完整历史跟踪器。消息 giftwraps 获得 negentropy 协调，因此可以从所选账户的读取 relay 恢复私密消息封套。线程视图不再受实时订阅回复限制的限制。Dave PNS 用共享发件箱路径取代其 Dave 本地的 negentropy 实现，同时保留其现有的有界历史行为。&lt;/p>
&lt;p>实时订阅和 negentropy 现在使用独立的过滤器。一个流可以保留一个小的实时请求，同时发出一个更广泛的 negentropy 过滤器以协调 relay 已有的内容。该 PR 有意不为主页或个人资料时间线启用广泛的 negentropy 同步，那样会改变冷启动的成本特征。为协调、giftwrap 交付、线程回填、Dave PNS 恢复、账户切换、relay 重定向、fetch 重试和 NIP-77 relay 行为添加了测试覆盖。&lt;/p>
&lt;h3 id="vector-v040vector-core-重写tornip-46完整-negentropy-mls-和-mcp-agent-接口">Vector v0.4.0：vector-core 重写、Tor、NIP-46、完整 negentropy MLS 和 MCP agent 接口&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> 是构建在 NIP-17 DM 和 Marmot 群组之上的隐私聚焦跨平台消息应用，发布了迄今为止规模最大的 &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.4.0">v0.4.0&lt;/a>。头条是从零开始的引擎重写：Vector 的所有逻辑现在都存在于一个解耦的 crate &lt;code>vector-core&lt;/code> 中，跨桌面、Android 和任何未来 client 共享，核心本身有 440 多个测试，应用外壳精简了数千行代码。这次重写为 Vector CLI、机器人和 SDK 奠定了基础，它们将驱动与 GUI 相同的协议代码。&lt;/p>
&lt;p>Tor 集成随一键流量路由和用于审查规避的桥接支持一起发布。多账户支持通过应用内切换器落地。远程 signer 登录通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 到达，支持通过 QR 或粘贴 URI 进行 bunker 配对，因此用户可以在不暴露其 nsec 的情况下登录。为所有人删除在 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> DM 和 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 群组聊天中都能工作，Vector 有意保留临时签名密钥，这是发布说明明确指出的规范偏差：&amp;ldquo;偏离传统的 NIP-17/Marmot 规范以增强用户隐私控制。&amp;ldquo;保留的临时密钥让 Vector client 有本地证据表明删除是由原始发送者认可的，但也意味着任何其他接触 Vector 的 client 看到的删除可验证性接口与基线的 NIP-17/Marmot client 不同。&lt;/p>
&lt;p>MLS 群组同步现在通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-77/">NIP-77&lt;/a> negentropy 完全协调，这是 Notedeck 本周为 giftwraps 和线程采取的相同方向。Blossom 上传器跨多个服务器失败切换、了解每个服务器的能力，并跨设备同步服务器列表。自定义 emoji 包由用户创建、可分享，并与其他 Nostr client 交叉兼容。SQLite 内存从约 308MB 降至 5MB。emoji 面板从磁盘缓存打开，Discord 风格的短代码（&lt;code>:smile:&lt;/code>）加上 Unicode 频率排名首先浮现正确的字形。&lt;/p>
&lt;p>最新颖的新增是 &lt;code>vector-agent&lt;/code>，一个 MCP（Model Context Protocol）服务器，公开 21 个工具，让 AI agent 可以驱动 Vector：发送 DM、管理群组、上传文件、编辑个人资料。这是本周第二个发布 MCP 接口的 Nostr 项目（与 Shopstr 并列），也是第一个这样做的消息类应用。加上 AgentNoise（上周报道），agent 控制的 Nostr client 模式正在从一次性实验转向一个有意的平台方向。&lt;/p>
&lt;h3 id="cordn-作为协调者中介的-mls-消息应用浮出水面">Cordn 作为协调者中介的 MLS 消息应用浮出水面&lt;/h3>
&lt;p>&lt;a href="https://cordn.net">Cordn&lt;/a>（Web client 位于 &lt;a href="https://cordn.net">cordn.net&lt;/a>，repo 位于 &lt;a href="https://github.com/Cordn-msg/cordn">Cordn-msg/cordn&lt;/a> 和 &lt;a href="https://github.com/Cordn-msg/cordn-web">Cordn-msg/cordn-web&lt;/a>）是一个新的 MLS 消息应用，采取与 Marmot 不同的架构策略。&lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 是完全基于 relay 的，没有特权协调者（每个群组成员直接写入 relay，任何符合规范的 relay 都可以承载流量），而 Cordn 引入了一个每群组协调者角色，作为 &lt;a href="https://nostrcompass.org/zh/topics/contextvm/">ContextVM&lt;/a> 服务实现。协调者对 MLS commits 排序并处理 welcome 分发。&lt;/p>
&lt;p>Cordn 的论据，在其 &lt;a href="https://cordn.net/why">/why&lt;/a> 页面上陈述，是在生产消息应用中部署的 MLS &amp;ldquo;不是无协调的&amp;rdquo;，&amp;ldquo;弱有序的公共传播&amp;quot;使得没有强协调点的情况下群组状态收敛&amp;quot;困难得多&amp;rdquo;。协调者中介的设计提供可预测的 epoch 前进和更简单的并发 commit 解决。参与者使用临时密钥连接到协调者，因此协调者了解群组 ID 和 commit 流量的时间，但不了解哪些长期 pubkey 是成员。任何查询 relay 获取 Marmot 群组的一方都已经可以看到相同的接口：按群组 ID 的群组活动，时间从事件到达可推断。Cordn 也承认，自托管情况下&amp;quot;可用性信任仍然存在&amp;rdquo;：自托管协调者避免了运营者层集中化的担忧，但为群组活跃度引入了单点故障。Marmot 通过将排序留给 MLS 本身（epochs 和 Commit 消息在协议内处理排序），并通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a> gift wrap 分发 Welcome 事件来避免那个单点，代价是管理员端的纪律：管理员必须等待 relay 确认 Commit 后才能发送匹配的 Welcome，而 client 必须在 relay 交付与状态转换赛跑时协调并发 commits。&lt;/p>
&lt;p>对于任何挑选私密消息栈的团队来说，这种对比值得深入研究。Marmot 用一些实现复杂性换取一个与 relay 无关的部署，路径上没有特权参与者。Cordn 用单点可用性依赖换取更紧密的排序和更简单的运营模型。两个项目都建立在 &lt;a href="https://nostrcompass.org/zh/topics/mls/">MLS&lt;/a> 之上，并使用 Nostr 作为身份和传输层。分歧在于协调成本存在于何处。cordn-msg repo 显示出稳定的 commit 节奏，协调者服务在 ContextVM 之上实现，MLS 层构建在 &lt;code>ts-mls&lt;/code> 之上。&lt;/p>
&lt;h3 id="deepmarks策展人货币化发布的-nip-b0-书签">deepmarks：策展人货币化发布的 NIP-B0 书签&lt;/h3>
&lt;p>&lt;a href="https://github.com/ostermayer/deepmarks-public">deepmarks-public&lt;/a> 是提议的 &lt;a href="https://nostrcompass.org/zh/topics/nip-b0/">NIP-B0&lt;/a> 书签规范（kind 39701）的参考 client，具有三盒架构（策展人、索引器、查看器）和一个由直接向策展人的 &lt;a href="https://nostrcompass.org/zh/topics/nip-57/">NIP-57&lt;/a> zaps 资助的分级系统。client 实现了 NIP-B0、&lt;a href="https://nostrcompass.org/zh/topics/nip-07/">NIP-07&lt;/a>、&lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a>、NIP-57、&lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a>、&lt;a href="https://nostrcompass.org/zh/topics/nip-98/">NIP-98&lt;/a>、&lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a>，以及用于文件存储的 Blossom BUD-01 和 BUD-04。一个 21,000-sat 终身分级将付费读者转变为策展人的定期 zap 接收者。策展人发布书签事件，索引器用机器可读的元数据丰富它们，查看器渲染信息流；每个角色都是一个独立的可部署服务。&lt;/p>
&lt;h2 id="发布">发布&lt;/h2>
&lt;h3 id="amber-v610-ga加密的每账户备份">Amber v6.1.0 GA：加密的每账户备份&lt;/h3>
&lt;p>&lt;strong>Amber&lt;/strong> 本周从 &lt;code>v6.1.0-pre3&lt;/code> 移至 GA &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.1.0">v6.1.0&lt;/a>。&lt;a href="https://github.com/greenart7c3/Amber/pull/444">PR #444&lt;/a> 发布了应用权限数据库的加密备份和恢复，&lt;a href="https://github.com/greenart7c3/Amber/pull/446">PR #446&lt;/a> 按账户拆分备份，因此拥有多个 Nostr 身份的用户可以独立备份和恢复每组应用授权。上周报道的 PSBT 签名工作在 GA 版本中。&lt;/p>
&lt;h3 id="citrine每-relay-订阅和-onion-url-泄漏防护">Citrine：每 relay 订阅和 onion URL 泄漏防护&lt;/h3>
&lt;p>&lt;strong>Citrine&lt;/strong> 是与 Amethyst 一起发布的设备端个人 relay，本周期发布了两个修复。&lt;a href="https://github.com/greenart7c3/Citrine/pull/157">PR #157&lt;/a> 从单一全局订阅切换到每 relay 标记订阅，因此共享 &lt;code>kinds: [1]&lt;/code> 过滤器的两个源 relay 不再在聚合器端冲突。&lt;a href="https://github.com/greenart7c3/Citrine/pull/162">PR #162&lt;/a> 在出站 Tor 代理被禁用时过滤 onion relay URL，防止 onion 地址泄漏到明网路由路径上。&lt;/p>
&lt;h3 id="angor-v0227-和-v0228relay-可靠性和-boltz-重连">Angor v0.2.27 和 v0.2.28：relay 可靠性和 Boltz 重连&lt;/h3>
&lt;p>&lt;strong>Angor&lt;/strong> 发布了 &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.27">v0.2.27&lt;/a> 和 &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.28">v0.2.28&lt;/a>。&lt;a href="https://github.com/block-core/angor/pull/874">PR #874&lt;/a> 修复了一个 relay 去重 bug，其中一次只连接一个 relay，这是一个静默降低具有多个 relay 端点的项目可靠性的回归。&lt;a href="https://github.com/block-core/angor/pull/876">PR #876&lt;/a> 为 Boltz 潜艇交换监控添加了 WebSocket 重连逻辑，因此短暂的断开不再让交换处于未知状态。&lt;/p>
&lt;h3 id="nostrord-v110nip-57-zaps-和-nip-29-角色区分">Nostrord v1.1.0：NIP-57 zaps 和 NIP-29 角色区分&lt;/h3>
&lt;p>&lt;strong>Nostrord&lt;/strong> 发布了 &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v1.1.0">v1.1.0&lt;/a>，为消息和个人资料添加了 &lt;a href="https://nostrcompass.org/zh/topics/nip-57/">NIP-57&lt;/a> Lightning zap 支持（&lt;a href="https://github.com/nostrord/nostrord/pull/98">PR #98&lt;/a>），并在活动信息流中正确区分了 &lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a> 角色变更和成员添加（&lt;a href="https://github.com/nostrord/nostrord/pull/92">PR #92&lt;/a>），此前它们渲染方式相同，遮蔽了谁被提拔与谁被邀请。&lt;/p>
&lt;h3 id="ぬるぬる-v15xsqlcipher-mls-密钥库和-epoch-追赶">ぬるぬる v1.5.x：SQLCipher MLS 密钥库和 epoch 追赶&lt;/h3>
&lt;p>&lt;strong>ぬるぬる&lt;/strong>（nurunuru，作者 tami1A84）是一个日语 Nostr client，实现了 MLS 群组消息（kind 443）以及 NIP-44、NIP-50 高级搜索、NIP-55 和 NIP-70，本周发布了五个版本。&lt;a href="https://github.com/tami1A84/null--nostr/pull/184">PR #184&lt;/a> 在 rust-engine 层为 MLS 密钥库引入 SQLCipher 加密。&lt;a href="https://github.com/tami1A84/null--nostr/pull/187">PR #187&lt;/a> 和 &lt;a href="https://github.com/tami1A84/null--nostr/pull/188">PR #188&lt;/a> 分别将 SQLCipher 扩展到 Android 和 iOS，具有遗留明文清除步骤和 CI 守卫。&lt;a href="https://github.com/tami1A84/null--nostr/pull/189">PR #189&lt;/a> 和 &lt;a href="https://github.com/tami1A84/null--nostr/pull/191">PR #191&lt;/a> 在两个平台上添加 MLS 对等 epoch 追赶，具有重放缓存和恢复横幅，因此在群组 commits 上落后的 client 可以在不丢失对话的情况下恢复。ぬるぬる 是构建在来自 &lt;code>marmot-protocol/mdk&lt;/code> 的 &lt;code>mdk-core&lt;/code>、&lt;code>mdk-sqlite-storage&lt;/code> 和 &lt;code>mdk-storage-traits&lt;/code> 之上的 Marmot client，因此 SQLCipher 和 epoch 追赶工作落在了 White Noise 使用的同一个 MDK 运行时内。&lt;/p>
&lt;h3 id="bitcredit-core-v0510nostr-根源的区块传播修复">Bitcredit Core v0.5.10：Nostr 根源的区块传播修复&lt;/h3>
&lt;p>&lt;strong>Bitcredit Core&lt;/strong> 发布了 &lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/releases/tag/v0.5.10">v0.5.10&lt;/a>，修复了区块传播期间缺少的 Nostr-node-id 字段，该字段正在破坏包括身份上传的公司创建流程。Bitcredit 是一种电子账单协议，使用 Nostr 身份作为公司和账单传播事件的信任根。&lt;/p>
&lt;h2 id="未发布的更改">未发布的更改&lt;/h2>
&lt;p>&lt;strong>Jumble&lt;/strong> 打开了 &lt;a href="https://github.com/CodyTseng/jumble/pull/797">PR #797&lt;/a>，通过 Pomegranate 门限 signer 实现 Google 登录，让用户可以将其 Nostr 密钥拆分给多方，因此没有单个 signer 持有完整的机密。这是超越 bunker 或 nsec 导入流程的有意义的一步：用户即使一个 signer 方被入侵也可以恢复其账户，而该方从未持有完整的私钥。&lt;/p>
&lt;p>&lt;strong>Shopstr&lt;/strong> 打开了 &lt;a href="https://github.com/shopstr-eng/shopstr/pull/492">PR #492&lt;/a> 初始化一个 MCP（Model Context Protocol）服务器，&lt;a href="https://github.com/shopstr-eng/shopstr/pull/494">PR #494&lt;/a> 构建支持基础设施（relay fetch、解析器、验证、错误、去重、审计日志），&lt;a href="https://github.com/shopstr-eng/shopstr/pull/472">PR #472&lt;/a> 为 MCP relay 管理器添加 relay 白名单。这使 Shopstr 成为第一个将自己公开为 MCP 服务器的 Nostr 市场，因此 AI agent 可以浏览 NIP-99 列表并作为结构化工具对其采取行动。&lt;/p>
&lt;p>&lt;strong>Keydex&lt;/strong> 是 Shamir 秘密共享保险库，在 &lt;a href="https://github.com/mplorentz/keydex/pull/226">PR #226&lt;/a> 中打开了一个重大迁移，将自定义 kind 1337-1345 移到 713-721 范围，同时 &lt;a href="https://github.com/mplorentz/keydex/pull/239">PR #239&lt;/a> 在 Shamir 共享上添加 AEAD，&lt;a href="https://github.com/mplorentz/keydex/pull/234">PR #234&lt;/a> 迁移到 GF256 算术。kind 范围迁移使 Keydex 与 NIPs repo 分配自定义 kind 的方式保持一致，远离自我声明的范围。&lt;/p>
&lt;p>&lt;strong>Mill&lt;/strong>（&lt;a href="https://github.com/0ceanSlim/nostr-mill">nostr-mill&lt;/a>）是来自 &lt;a href="https://github.com/0ceanSlim">OceanSlim&lt;/a>（&lt;a href="https://github.com/0ceanSlim/grain">grain&lt;/a> Go relay 的维护者）的新即插即用 Nostr signer UI，作为单脚本标签 Web Component 在 &lt;a href="https://www.npmjs.com/package/nostr-mill">npm&lt;/a> 和 &lt;a href="https://cdn.jsdelivr.net/npm/nostr-mill/dist/mill.umd.js">jsDelivr&lt;/a> 上发布。一个 &lt;code>&amp;lt;script&amp;gt;&lt;/code> 标签给 Web 应用一个统一 UI 下的所有六个常见 signer 入口点：&lt;a href="https://nostrcompass.org/zh/topics/nip-07/">NIP-07&lt;/a> 浏览器扩展、&lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> bunker（URL 粘贴或 QR 配对，带有用户可指定的 relay，在页面内 bunker 集成中不寻常）、通过 Android intents 的 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> Amber、通过 AES-256-GCM 与 PBKDF2 存储在 &lt;code>sessionStorage&lt;/code> 中的加密 nsec、只读 &lt;code>npub&lt;/code>，以及浏览器内 keypair 生成。该组件可通过 29 个作用域限定于 Shadow DOM 的 CSS 自定义属性进行主题化，并公开一个小的 SemVer 跟踪 API（&lt;code>MILL.open&lt;/code>、&lt;code>mill:connected&lt;/code> / &lt;code>mill:disconnected&lt;/code> 事件、命名的主题导出）。维护者的动机是 bunker 登录流程已经在 Nostr 中一个 Web 应用一个 Web 应用地被重新实现。整合到共享组件让 client 可以就 signer UX 应如何表现达成一致，并将可选流程（如通过门限 signer 的委托密钥登录，反映了上面报道的 Wisp 的基于 Pomegranate 的 Google 登录）变成任何应用都可以放入的可重用接口。Mill 处于 npm v1.5.0，单一维护者、alpha 阶段，grain 是计划中的第一个集成者。&lt;/p>
&lt;p>&lt;strong>moStard&lt;/strong> 是由 &lt;a href="https://github.com/roguehashrate">roguehashrate&lt;/a> 制作的 &lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a> 的 Monero 优先分叉，本周达到 &lt;a href="https://github.com/roguehashrate/moStard/releases">v1.0.1&lt;/a>，具有精简的功能集和分层在同一 Applesauce + worker-relay 栈上的 Monero 主题身份。本周的工作落地了 Zapstore 的 kind 32267 软件应用事件的渲染（时间线中的嵌入卡片显示应用名称、图标、截图、平台、许可证，以及指向 &lt;code>zapstore.dev/apps/&amp;lt;d-tag&amp;gt;&lt;/code> 的启动链接）、通过 kind 20 和 kind 21 的投票、基于 NIP-A3 Payment Targets 的每方法 QR code 打赏、笔记中的 markdown 渲染、外部 GIF 键盘的 GIF 选择器支持，以及 Amber signer 配对修复。Monero 框架扩展到打赏流程：&lt;code>monero&lt;/code> 地址的 NIP-A3 &lt;code>payto&lt;/code> 条目在同一 UI 中获得一流按钮，与 &lt;code>lightning&lt;/code> 和 &lt;code>bitcoin&lt;/code> 并列。该 client 是单一维护者、alpha 阶段，但 5 月 27 日的工作展示了一个构建者在几天内将本周的协议规范公告中的 NIP-A3 直接拉入一个正在发布的分叉。&lt;/p>
&lt;h2 id="nip-更新和协议规范工作">NIP 更新和协议规范工作&lt;/h2>
&lt;h3 id="日历-nip-栈来自-formstr-团队的四个提案">日历 NIP 栈：来自 Formstr 团队的四个提案&lt;/h3>
&lt;p>Ix2（&lt;a href="https://github.com/geralt-debugs">@geralt-debugs&lt;/a>）在 5 月 17 日打开了四个协调的 NIP PR，全部引用了同一作者已经发布的 &lt;a href="https://calendar.formstr.app">calendar.formstr.app&lt;/a> 实现。&lt;a href="https://github.com/nostr-protocol/nips/pull/2350">PR #2350&lt;/a> 提议 kind 84 作为一个通用的&amp;quot;参与者自我移除&amp;quot;事件：任何事件上的标记参与者都可以发布一个 kind 84，通过 &lt;code>e&lt;/code>、&lt;code>a&lt;/code> 和 &lt;code>k&lt;/code> 标签引用原始事件以表示退出。relay 必须在履行移除之前验证 kind 84 签名者出现在被引用事件的 &lt;code>p&lt;/code> 标签中，kind 5 删除始终优先。该 PR 概括了先前仅在 NIP-52 日历上下文中描述的模式，因此 kind 84 成为非作者从任何参与者事件中撤回的标准方式。&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2351">PR #2351&lt;/a> 是日历栈的基础：用于私密日历事件的 NIP-52E（kind 32678 基于时间、32681 日事件、32123 私密日历列表、31926 忙碌列表、1052 gift wrap、52 rumor）和用于循环事件的 NIP-52R。架构核心是查看密钥模式：一个随机生成的 keypair 用 NIP-44 加密事件内容，秘密部分（bech32 编码为 &lt;code>nsec&lt;/code>）被 gift-wrapped 给每个参与者。signer 只持有公开的 &lt;code>d&lt;/code> 标签；其他一切都存在于加密的 &lt;code>content&lt;/code> 中。以这种方式将内容加密与身份解耦意味着编辑事件不需要为接收者重新分发密钥。NIP-52R 在现有的 kind 31923 和 31922 上定义了两个可选标签，使用裸的 RFC 5545 RRULE 值声明循环，当 RRULE 存在时 &lt;code>D&lt;/code> 日索引变为可选。前向保密明确缺失：泄露的查看密钥会揭示同一 &lt;code>d&lt;/code> 标签下事件的所有过去和未来版本。&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2352">PR #2352&lt;/a> 建立在 NIP-52E 之上，提供了一个去中心化的预约调度规范，PR 描述称之为&amp;quot;Calendly/Cal.com 的即插即用替代品，没有中央中介&amp;rdquo;。Kind 31927 使用加密的可用性窗口宣传调度页面；kind 32680 是主机端的自加密查看密钥恢复记录；kind 1057 和 1058 是 gift-wrapped 预订请求和响应。巧妙的机制：预订者在发送请求之前为未来的私密事件生成 &lt;code>d&lt;/code> 标签和查看密钥，因此预订者可以立即用正确的密钥将预约添加到自己的日历，主机永远不必来回传递密钥。预订响应在外部包装上携带一个未加密的 &lt;code>status&lt;/code> 标签，因此 relay 可以在不解密的情况下过滤。&lt;/p>
&lt;p>参考实现已在 &lt;a href="https://calendar.formstr.app">calendar.formstr.app&lt;/a> 上线，并作为 Zapstore 上的 Calendar Android 应用。&lt;a href="https://github.com/nostr-protocol/nips/pull/2351">PR #2351&lt;/a> 关闭 &lt;a href="https://github.com/nostr-protocol/nips/pull/2027">PR #2027&lt;/a> 以支持它，整合了自年初以来一直开放的早期私密日历提案。&lt;/p>
&lt;h3 id="payment-targets-和-silent-payments">Payment Targets 和 Silent Payments&lt;/h3>
&lt;p>本周有两个 NIP 提案在 &lt;code>kind:30023&lt;/code> 长文文档中流传。&lt;/p>
&lt;p>&lt;strong>Payment Targets&lt;/strong> 提案（NIP-A3 / payto）定义了一个可替换的 kind 10133 事件，携带一个或多个 &lt;code>[&amp;quot;payto&amp;quot;, &amp;quot;&amp;lt;type&amp;gt;&amp;quot;, &amp;quot;&amp;lt;authority&amp;gt;&amp;quot;]&lt;/code> 标签，映射到 RFC 8905 &lt;code>payto:&lt;/code> URI。支持的类型包括 bitcoin、lightning、ethereum、monero、nano、cashme、revolut 和 venmo。目的是标准化一个多轨道打赏罐，补充（而不是取代）基于 lud16 的 NIP-57 zaps。Amethyst v1.11.0 是第一个实现者；合并的 PR &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2953">#2953&lt;/a> 和 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/3009">#3009&lt;/a> 发布了订阅和观察接口，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/3011">PR #3011&lt;/a> 为 &lt;code>PaymentTargetsEvent&lt;/code> 连接 UI。&lt;/p>
&lt;p>两个来自不同作者的竞争性 Silent Payments 提案出现。第一个变体通过公开的加法微调从 &lt;code>nsec&lt;/code> 派生 BIP-352 silent-payment scan 和 spend 密钥，因此任何发送者都可以从 &lt;code>npub&lt;/code> 构造一个 &lt;code>sp1q...&lt;/code> 地址，无需设置。作者警告在规范中明确：&lt;code>bscan&lt;/code> 和 &lt;code>bspend&lt;/code> 必须与 nsec 完全相同的谨慎对待，因为 scan 密钥揭示 nsec。第二个变体采取相反的方法，将一个 &lt;code>sp_address&lt;/code> 字段添加到 kind 0 个人资料元数据，包含一个标准 BIP-352 silent-payment 地址，其密钥独立于 Nostr 身份保存。变体二在结构上更安全。两个提案都引起了深思熟虑的评论线程；erskingardner（Marmot 主管）在跟踪该提案的 trbouma gist 上发布了一个详细的&lt;a href="https://gist.github.com/trbouma/77648ebe1005b181b67d1c4b42c7f31d?permalink_comment_id=6167489#gistcomment-6167489">评论&lt;/a>。他的核心担忧是变体 1 从 &lt;code>nsec&lt;/code> 加上一个可公开计算的微调派生 scan 私钥，这意味着任何持有 scan 密钥的人（包括用户实际上必须委托的第三方扫描服务）都可以通过减去该微调来恢复完整的 &lt;code>nsec&lt;/code>。让远程服务为你扫描入站付款的同一密钥也让该服务可以窃取你的身份和从中派生的任何资金。&lt;/p>
&lt;p>在 NIP-34 git-over-Nostr 方面，hzrd149 向 &lt;a href="https://gitworkshop.dev/npub1zafcms4xya5ap9zr7xxr0jlrtrattwlesytn2s42030lzu0dwlzqpd26k5/relay.ngit.dev/schemata">schemata&lt;/a> 发布了 2 个 patches。&lt;a href="https://gitworkshop.dev/">gitworkshop.dev&lt;/a> 本身收到了两个问题报告：一个标记使用 NIP-46 远程 signer 时在页面刷新时丢失登录会话，另一个要求在 README 预览中使用不同的链接样式。&lt;/p>
&lt;h2 id="六年的-nostr-五月">六年的 Nostr 五月&lt;/h2>
&lt;p>2026 年 5 月的最后一份 newsletter 从本周的发布中退后一步，走遍了 Nostr 历史上的五月。每一年都有不同的重心：2021 年只有一次 commit，2022 年是 NIPs repo 本身的形成，2023 年是协议规范的爆炸，2024 年是整合周期，2025 年是 negentropy 合并和 Damus 的 Notedeck 升级到 Beta 时，2026 年是这一期和前三期涵盖的月份。&lt;/p>
&lt;h3 id="2021-年-5-月">2021 年 5 月&lt;/h3>
&lt;p>Nostr 六个月大。唯一的 Nostr 代码存在于 &lt;a href="https://github.com/fiatjaf/nostr">fiatjaf/nostr&lt;/a> 中，整个月恰好产生了一次 commit，但那次 commit 成为了协议使用最多的部分之一。5 月 22 日，fiatjaf &lt;a href="https://github.com/fiatjaf/nostr/commit/9ee3a02">重新定位 NIP-02&lt;/a> 作为联系人列表 NIP。commit 消息写道：&amp;ldquo;repurpose NIP-02 and add NIP authorship&amp;rdquo;，明确的归功是给 arcbtc（LNbits 的 Ben Arc）的 &lt;a href="https://github.com/nostr-protocol/nostr/pull/16">PR #16&lt;/a>，在 2 月 9 日打开，fiatjaf 将该想法折叠到 NIP-02 的前一天关闭。arcbtc 的提案很小：一个&amp;quot;向 relay 发送关注者列表&amp;quot;的 kind，将&amp;quot;对恢复账户和推荐要关注的公钥有用&amp;quot;。fiatjaf 将其概括为一个单一的 &lt;code>kind:3&lt;/code> 事件，其标签同时服务于三个目的。它们是关注列表（社交图）、petname 存储（朋友的本地昵称）和 relay 推荐源（关注对象使用的 relay）。同一个事件，每个作者可替换，成为了&amp;quot;这个人关注谁&amp;quot;、&amp;ldquo;他们如何称呼他们&amp;quot;和&amp;quot;他们在哪里阅读&amp;quot;的规范答案。接下来五年中构建的每个 client 都读取 &lt;code>kind:3&lt;/code>。同一 commit 中添加的约定，即每个 NIP 都命名其作者，是为什么现在每个规范都有署名的原因。&lt;/p>
&lt;h3 id="2022-年-5-月">2022 年 5 月&lt;/h3>
&lt;p>NIPs repo 成为社区项目的月份。5 月 1 日，fiatjaf 将规范从 &lt;code>fiatjaf/nostr&lt;/code> &lt;a href="https://github.com/nostr-protocol/nips/commit/f25c7e6">迁移&lt;/a> 到专用的 &lt;a href="https://github.com/nostr-protocol/nips">&lt;code>nostr-protocol/nips&lt;/code>&lt;/a> repo，并在 5 月 2 日添加了 &lt;a href="https://github.com/nostr-protocol/nips/commit/c053670">正式的接受标准&lt;/a>。两天后，Robert C. Martin（Uncle Bob）打开了 &lt;a href="https://github.com/nostr-protocol/nips/pull/1">PR #1&lt;/a>，即第一个外部 pull request，为 &lt;code>e&lt;/code> 和 &lt;code>p&lt;/code> 标签提议线程约定。该 PR 最初编号为 NIP-13，然后 &lt;a href="https://github.com/nostr-protocol/nips/commit/bd4a81a">重命名为 NIP-10&lt;/a> 以为 proof-of-work 腾出空间。前六个 NIP 中的三个是 Uncle Bob 的：NIP-10（线程标记）、NIP-14（&lt;a href="https://github.com/nostr-protocol/nips/commit/ebacbcc">Subject 标签&lt;/a>），以及 5 月 21 日锁定 &lt;a href="https://github.com/nostr-protocol/nostr/commit/e22ea1a">&lt;code>kind:1&lt;/code> 作为规范短文本笔记 kind&lt;/a> 的 commit。5 月 5 日，William Casarin 做了他的第一个 NIP commits：&lt;a href="https://github.com/nostr-protocol/nips/commit/d7a4aad">NIP-13 Proof of Work&lt;/a> 和 &lt;a href="https://github.com/nostr-protocol/nips/commit/ad1eb96">kind:2 推荐 relay 事件&lt;/a>。第二天，fiatjaf 发布了 &lt;a href="https://github.com/nostr-protocol/nips/commit/37eb53e">NIP-07 &lt;code>window.nostr&lt;/code>&lt;/a>，二十行 markdown，定义了今天仍在使用的浏览器扩展 signer 接口。同一周，David A. Harding 的 NIP-05 &lt;a href="https://github.com/nostr-protocol/nips/commit/57b86d2">CORS 警告&lt;/a> 和 NIP-01 的 &lt;a href="https://github.com/nostr-protocol/nips/commit/a4aea53">&lt;code>filter.limit&lt;/code>&lt;/a> 落地。nostr-tools 在 5 月 8 日发布了其 &lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/dc489bf">第一个可浏览器导入的 ESM 构建&lt;/a>。Semisol 在月末起草了 &lt;a href="https://github.com/nostr-protocol/nips/commit/a787093">NIP-15（End Of Stored Events）&lt;/a> 和 &lt;a href="https://github.com/nostr-protocol/nips/commit/62fde6c">NIP-16（事件 kind 范围）&lt;/a>，这些文档仍然管理着 relay 同步语义和常规-vs-可替换-vs-临时的分类。&lt;/p>
&lt;h3 id="2023-年-5-月">2023 年 5 月&lt;/h3>
&lt;p>协议规范的爆炸。该月开放了六十四个 NIP PR，其中几个定义了 Nostr 未来两年接口的提案都在 31 天内落地，Nostr 收到的最大资金公告在 5 月 4 日到达，OpenSats 收到 &lt;a href="https://opensats.org/blog/opensats-receives-additional-funding-of-dollar10m-from-startsmall">来自 Jack Dorsey 的 #startsmall 的 1000 万美元资助&lt;/a>，这笔钱资助了此后的每一波 Nostr 资助。NIP-47（Nostr Wallet Connect）在 &lt;a href="https://github.com/nostr-protocol/nips/pull/406">5 月 2 日合并&lt;/a>，将 Alby 的 wallet-connect 规范带入主协议。两天后，Vitor Pamplona &lt;a href="https://github.com/nostr-protocol/nips/pull/498">提议 NIP-53 Live Activities&lt;/a>，具有 &lt;code>kind:30311&lt;/code> 房间和 &lt;code>kind:1311&lt;/code> 聊天消息，这是随后每个 Nostr 直播接口的基础。Pablo Fernandez 于 5 月 5 日打开 &lt;a href="https://github.com/nostr-protocol/nips/pull/501">NIP-84 Highlights&lt;/a>，并于 5 月 14 日打开 &lt;a href="https://github.com/nostr-protocol/nips/pull/530">NIP-89 Recommended Application Handlers&lt;/a>。v0l（Kieran Babich，Snort 作者）于 5 月 8 日提议 &lt;a href="https://github.com/nostr-protocol/nips/commit/29f26e7">NIP-98 HTTP Auth&lt;/a>，这是 NIP-96 和 Blossom 后来都依赖的身份验证原语。Jonathan Staab 于 5 月 15 日提议 &lt;a href="https://github.com/nostr-protocol/nips/pull/532">NIP-32 Labels&lt;/a>，&lt;a href="https://github.com/nostr-protocol/nips/pull/484">NIP-30 Custom Emoji&lt;/a> 于同一天合并。Arthur Franca 于 5 月 21 日提议 &lt;a href="https://github.com/nostr-protocol/nips/pull/547">NIP-96 HTTP File Storage Integration&lt;/a>。两天后，Vitor 添加了 &lt;a href="https://github.com/nostr-protocol/nips/commit/e4937be">NIP-57 的 zap 分成&lt;/a>，verbiricha 添加了 &lt;a href="https://github.com/nostr-protocol/nips/commit/0495931">&lt;code>kind:30024&lt;/code> 长文草稿到 NIP-23&lt;/a>，这个规范成为 Habla、YakiHonne 和 Highlighter 中现代 Nostr 长文创作工作流的基础。fiatjaf 于 5 月 28 日提议 &lt;a href="https://github.com/nostr-protocol/nips/pull/566">NIP-29 Simple Groups&lt;/a>，这是第一个涵盖 &lt;code>kind:9000&lt;/code> 到 &lt;code>kind:9020&lt;/code> 审核事件的 relay 管理群组规范。该月以 Paul Miller 于 5 月 31 日打开 &lt;a href="https://github.com/nostr-protocol/nips/pull/574">NIP-44 对话&lt;/a> 结束，这是一个基于 XChaCha20 的加密 DM 设计，旨在取代 NIP-04。client 端也移动得同样快：Damus 在 &lt;a href="https://github.com/damus-io/damus/commits/master/?since=2023-05-10&amp;amp;until=2023-05-15">5 月 10 日到 5 月 15 日&lt;/a> 发布了 NWC、zap pool 和 Pending Zaps；Snort 推出了 &lt;a href="https://github.com/v0l/snort/commit/6cbc3ae">zap pool&lt;/a> 和 &lt;a href="https://github.com/v0l/snort/commit/d5032d6">L402 付费媒体&lt;/a>；&lt;a href="https://github.com/vitorpamplona/amethyst/releases">Amethyst&lt;/a> 全月发布了大约三十个版本发布，从 5 月 1 日的 v0.40.1 到月底的 v0.55.x 范围，v0.45.0 中有 zap 分成，v0.46.0 中有 NIP-32 标签；&lt;a href="https://github.com/PrimalHQ/primal-android-app/commit/6654cf9">Primal Android repo&lt;/a> 于 5 月 16 日创建；&lt;a href="https://github.com/rust-nostr/nostr/releases/tag/v0.22.0">rust-nostr v0.22.0&lt;/a> 添加了 NIP-47 和 NIP-58。5 月 1 日，&lt;a href="https://github.com/hoytech/strfry/commit/de475c5">strfry 发布了其 negentropy 集成&lt;/a>，这是 Doug Hoyte 的集合协调协议的第一个 relay 实现，后来成为 NIP-77。该月以 &lt;a href="https://www.forbes.com/sites/digital-assets/2023/05/30/bitcoin-social-network-nostr-creator-fiatjaf-/">Forbes 于 5 月 30 日发布对 fiatjaf 的长文简介&lt;/a> 结束，这是主流媒体对 Nostr 匿名创始人首批深度报道之一。&lt;/p>
&lt;h3 id="2024-年-5-月">2024 年 5 月&lt;/h3>
&lt;p>整合周期。较少花哨的提案，更多发布。&lt;a href="https://github.com/nostr-protocol/nips/pull/787">NIP-54 Decentralized Wikis&lt;/a> 于 5 月 2 日合并，具有 &lt;code>kind:30818&lt;/code> 文章和大小写规范化的 &lt;code>d&lt;/code> 标签。三天后，&lt;a href="https://github.com/nostr-protocol/nips/pull/1213">NIP-56&lt;/a> 得到扩展，因此滥用报告可以标记数字威胁（恶意软件、网络钓鱼）与仅内容类别并列。5 月 6 日，&lt;a href="https://github.com/nostr-protocol/nips/pull/1221">NIP-25 反应被简化&lt;/a>，停止将整个回复线程作为 &lt;code>e&lt;/code> 标签包含。Arthur Franca 于 5 月 12 日 &lt;a href="https://github.com/nostr-protocol/nips/pull/1233">提议 NIP-22 Comment&lt;/a>，引入 &lt;code>kind:1111&lt;/code>，因此对非 &lt;code>kind:1&lt;/code> 事件（文章、文件、产品）的回复获得了一种结构化的线程方式。5 月 19 日，fiatjaf &lt;a href="https://github.com/nostr-protocol/nips/pull/1248">彻底改造 NIP-46&lt;/a> 以完全放弃 NIP-04，并将所有 bunker 流量切换到 NIP-44 加密，这是塑造此后每个 bunker 实现的弃用行动。5 月 20 日，&lt;a href="https://github.com/nostr-protocol/nips/pull/923">NIP-71 Video Events&lt;/a> 与 &lt;code>kind:21&lt;/code> 和 &lt;code>kind:22&lt;/code> 合并，&lt;a href="https://github.com/nostr-protocol/nips/pull/1171">NIP-10&lt;/a> 在 &lt;code>e&lt;/code> 标签上添加了可选的 pubkey 参数，因此 client 可以在不先获取被引用事件的情况下解析线程作者。Kieran Walsh 的 &lt;a href="https://github.com/nostr-protocol/nips/pull/1175">NIP-35 Torrents&lt;/a> 于 5 月 22 日合并，5 月 24 日 NIPs README 首次将 &lt;a href="https://github.com/nostr-protocol/nips/pull/1251">CIP-01&lt;/a> 引用为 repo 外提案，标志着&amp;quot;NIP 作为几个提案场所之一&amp;quot;模式的开始。5 月 25 日，一个 &lt;a href="https://github.com/nostr-protocol/nips/pull/1254">清理 PR&lt;/a> 在下游实现冻结之前从 NIP-71 中移除了 &lt;code>aes-256-gcm&lt;/code> 标签。NIP-96 于 5 月 27 日 &lt;a href="https://github.com/nostr-protocol/nips/pull/1262">添加了 &lt;code>list files&lt;/code> 并放弃了转换要求&lt;/a>。5 月 28 日，Jonathan Staab 提议 &lt;a href="https://github.com/nostr-protocol/nips/pull/1264">提高 NIP 接受门槛&lt;/a>，要求在草案能够毕业之前至少有两个互操作实现。client 端：Damus 在 5 月 9 日至 10 日标记 &lt;a href="https://github.com/damus-io/damus/releases/tag/v1.7.2">v1.7.2&lt;/a> 和 &lt;a href="https://github.com/damus-io/damus/releases/tag/v1.8">v1.8&lt;/a> 以及 &lt;a href="https://github.com/damus-io/damus/commits/v1.9">具有完整 NIP-10 标记处理的 v1.9&lt;/a>，落地了 &lt;a href="https://github.com/damus-io/damus/commit/8feb228">推送通知的 NIP-98 身份验证&lt;/a>，并发布了完整的 &lt;a href="https://github.com/damus-io/damus/commit/52aefc8">NIP-10 标记支持&lt;/a>。Amethyst 于 5 月 14 日将 &lt;a href="https://github.com/vitorpamplona/amethyst/commit/1f45a63">NIP-17 作为默认 DM 模式&lt;/a>，构建了 &lt;a href="https://github.com/vitorpamplona/amethyst/commit/aa97c7e">NIP-65 outbox 模型 relay 管理&lt;/a>，添加了 &lt;a href="https://github.com/vitorpamplona/amethyst/commit/ff94f45">NIP-96 服务器选择&lt;/a>，并发布了 &lt;a href="https://github.com/vitorpamplona/amethyst/commit/04c4490">NIP-06 BIP-32/BIP-39 密钥派生&lt;/a>。Primal Android &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/0.99.2">0.99.2&lt;/a> 于 5 月 10 日添加了用户标记和外部钱包 NWC，随后是 &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/0.99.4">0.99.4&lt;/a>。Pablo Fernandez 在 5 月 24 日至 31 日落地了一个 &lt;a href="https://github.com/nostr-dev-kit/ndk/commits/master/?since=2024-05-01&amp;amp;until=2024-06-01">NDK 乐观更新集群&lt;/a>。Snort 添加了 &lt;a href="https://github.com/v0l/snort/commit/5763d91">NIP-96 服务器选择&lt;/a>，cashu-ts &lt;a href="https://github.com/cashubtc/cashu-ts/commit/3e20f45">将其加密原语分离&lt;/a> 到 &lt;code>@cashu/crypto&lt;/code>。&lt;/p>
&lt;h3 id="2025-年-5-月">2025 年 5 月&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/1494">NIP-77（Negentropy Syncing）&lt;/a> 于 5 月 27 日合并的月份，这是 fiatjaf 和 Doug Hoyte 的规范，用于取代暴力 REQ 过滤器的对数成本差异计算的线协议。这与 strfry 两年前作为 relay 端功能发布的 negentropy 相同，现在正式确定为 client-relay 协议，&lt;a href="https://github.com/nostr-protocol/nips/pull/1939">README 条目&lt;/a> 于同一天落地。前一周，&lt;a href="https://github.com/nostr-protocol/nips/pull/1897">NIP-23 长文&lt;/a> 于 5 月 24 日定义了 HTML 文档如何通过 &lt;code>&amp;lt;link&amp;gt;&lt;/code> 标签将自己与 Nostr 实体关联，这是规范化 Web 副本原语。NIP-25 于 5 月 22 日添加了 &lt;a href="https://github.com/nostr-protocol/nips/pull/1702">反应目标 relay 提示&lt;/a>，并 &lt;a href="https://github.com/nostr-protocol/nips/pull/1486">放弃了 emoji 到 like/dislike 的推荐&lt;/a>，将 emoji 视为不同的语义单元。NIP-52 于 5 月 14 日 &lt;a href="https://github.com/nostr-protocol/nips/pull/1922">简化&lt;/a>，专注于 client 在生产中发布的 kind，这次修剪使一年后的 Formstr 日历扩展更容易嫁接。5 月 9 日，&lt;a href="https://github.com/nostr-protocol/nips/commit/873afc5fb823f58c3b7f29c5090f9c56172623f2">Follow Packs&lt;/a>（kind 39089 策展的关注列表）和 &lt;a href="https://github.com/nostr-protocol/nips/pull/1848">Favorite Relays&lt;/a>（NIP-51 下的一个新可替换列表）于同一天进入 README。Marmot 协议弧尚未开始：只有 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a> repo 存在（第一次 commit 在 2024 年 9 月 9 日），2025 年 5 月是其 Svelte+Tauri 原型阶段，&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/commit/b8e6754">5 月 14 日 commit&lt;/a> 移除了 Tauri 特定的代码，因为项目转向了其当前架构。专用的 MDK Rust 核心（2025 年 9 月 12 日）、Marmot 规范 repo（2025 年 9 月 19 日）和 Flutter UI（2025 年 12 月 2 日）都在当年晚些时候到来。在 client 端，Damus 的 &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.4.0">Notedeck v0.4.0&lt;/a> 于 5 月 5 日作为第一个 Beta 发布，从 Alpha 毕业，具有全文搜索、Dave AI 助手、通过 NWC 的 zaps、GIF、用户标记和静音列表。两天后，hodlbod 的 &lt;a href="https://github.com/coracle-social/flotilla/releases/tag/1.0.0">Flotilla 1.0.0&lt;/a> 作为基于 NIP-29 的群组聊天 client 越过公开发布边界，与 &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.12">Coracle 0.6.12&lt;/a> 并列，这是六个 Coracle 版本中的第一个，一直运行到 &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.17">5 月 14 日的 0.6.17&lt;/a>。5 月 12 日的 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v3.4.0">Amber v3.4.0&lt;/a> 摆脱了已弃用的 Android Autofill 和 ClipboardManager API，并从加密的共享首选项迁移到 DataStore。Primal Android 于 5 月 20 日发布的 &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/2.2.20">2.2.20&lt;/a> 添加了 Primal Premium 的 Redeem Code 流程和重新设计的图库。5 月 21 日的 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.14.0">nak v0.14.0&lt;/a> 在与 Coracle、Flotilla 和 Notedeck 版本相同的一周中削减了规范 CLI 的一个小版本。当 &lt;a href="https://opensats.org/blog/opensats-receives-two-million-donation-from-the-reynolds-foundation">Reynolds Foundation 于 5 月 22 日捐赠 200 万美元&lt;/a> 时，OpenSats 收到了迄今为止最大的非 Bitcoin 财库捐款。&lt;/p>
&lt;h3 id="2026-年-5-月">2026 年 5 月&lt;/h3>
&lt;p>由 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/">Newsletter #21&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/">#22&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-21-newsletter/">#23&lt;/a> 和本期涵盖的月份。定义性的主线是 MLS-on-Nostr 达到多 client 生产：&lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.8.0">MDK 0.8.0&lt;/a> 发布了 MIP-05 叶索引原语和可寻址 key packages，其后是 &lt;a href="https://github.com/marmot-protocol/mdk/pull/306">PR #306&lt;/a> 通过共享的 UniFFI 接口在 iOS 和 Android 上添加 NIP-40 消失消息验证。&lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.5.22%2B25">White Noise v2026.5.22+25&lt;/a> 通过一个 Notification Service Extension 发布了 iOS 推送，该扩展在扩展进程内解密 MLS 密文，因此 broker 从不看到明文，两个新的 Marmot client 出现：&lt;a href="https://github.com/DavidGershony/Scramble">Scramble&lt;/a>（一个 .NET/Avalonia 桌面和 Android client，具有多设备 KeyPackage 插槽）和 &lt;a href="https://cordn.net">Cordn&lt;/a>（一个使用 ContextVM 之上每群组协调者的替代 MLS 架构）。Angor 在 &lt;a href="https://github.com/block-core/angor/pull/860">PR #860&lt;/a> 中将其加密消息从 NIP-04 迁移到 NIP-44，关闭了以 &lt;a href="https://github.com/nostr-protocol/nips/pull/574">Paul Miller 于 2023 年 5 月的 NIP-44 提案&lt;/a> 开启的弃用弧。Formstr 团队于 5 月 17 日打开了近期记忆中最大的协调 NIP 提交，&lt;a href="https://github.com/nostr-protocol/nips/pull/2350">PR #2350&lt;/a> 用于参与者自我移除，&lt;a href="https://github.com/nostr-protocol/nips/pull/2351">PR #2351&lt;/a> 用于私密日历事件和循环（NIP-52E 和 NIP-52R），&lt;a href="https://github.com/nostr-protocol/nips/pull/2352">PR #2352&lt;/a> 用于去中心化预约调度，全部与 &lt;a href="https://calendar.formstr.app">calendar.formstr.app&lt;/a> 已经发布的参考实现一起。&lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.11.0">Amethyst v1.11.0&lt;/a> 将 NIP-52 日历渲染为一流的时间线类别，并将链上 Bitcoin zaps 扩展到分成分发。&lt;a href="https://github.com/nostr-protocol/nips/pull/1494">NIP-77 于 2025 年 5 月合并&lt;/a> 一年后，三个独立的实现在同一窗口内发布了 negentropy 采用：&lt;a href="https://github.com/damus-io/notedeck/pull/1459">Notedeck PR #1459&lt;/a> 将其接入 Damus 的桌面 client 用于 giftwrap 和线程回填，&lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.4.0">Vector v0.4.0&lt;/a> 使用完整 negentropy MLS 同步作为其从零开始的 &lt;code>vector-core&lt;/code> 重写的一部分，还有一键 Tor 和 21 工具 MCP agent 接口，&lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v3.0.0-pre1">Citrine v3.0.0-pre1&lt;/a> 将其添加到 Android 原生 relay，还有内置 Tor 和多 relay 聚合。&lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.17.4">Mostro v0.17.4&lt;/a> 通过 &lt;a href="https://github.com/MostroP2P/mostro/pull/738">PR #738&lt;/a> 中的第 3 阶段削减保证金支付关闭了反滥用保证金循环，执行了协议此前仅威胁的内容。从&amp;quot;我们应该替换 NIP-04 吗&amp;quot;到&amp;quot;我们应该用完整的 MLS 群组状态替换 NIP-44 吗&amp;quot;三年。&lt;/p>
&lt;hr>
&lt;p>如果你想讨论，请在 Nostr 上私信我们。&lt;/p></content:encoded></item><item><title>Nostr Compass #23</title><link>https://nostrcompass.org/zh/newsletters/2026-05-21-newsletter/</link><pubDate>Thu, 21 May 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-05-21-newsletter/</guid><description>&lt;p>Primal 3.5 发布了重建的 Android 外壳，Amethyst 添加了链上 Bitcoin zaps，White Noise 获得了 markdown 渲染和深度链接，Keycast 通过了安全审计，AgentNoise 让你可以通过 Marmot 加密聊天控制本地 AI 编码 agent。Hostr 在 Nostr 上推出了 P2P 租赁住宿平台，包含四个涵盖房源、预订和基于 EVM 的托管的 NIP 草案。Angor 将加密消息从 NIP-04 迁移到 NIP-44，Dart NDK 添加了 NIP-77 和 Web signer，Alby js-sdk v8 发布了原生 NWC 多 relay 重连，KeyChat 修补了 Signal 一次性 prekey 删除中的前向保密缺口。在协议方面，Mostro 的反滥用保证金达到第二阶段，Wisp 发布了私密回复和 gift-wrapped 反应，Namecoin NIP-05 实现浪潮在一周内影响了六个 client。&lt;/p>
&lt;h2 id="头条报道">头条报道&lt;/h2>
&lt;h3 id="primal-35-for-android">Primal 3.5 for Android&lt;/h3>
&lt;p>Primal 是一个由自有缓存 relay 基础设施支持的社交 client，本周发布了 &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.5.9">3.5.9&lt;/a>，带来重建的应用外壳。重新设计用更新的布局和新的 Explore 屏幕取代了之前的导航结构，让主要的发现界面拥有自己专用的主页。该版本为链接预览添加了音频播放，因此嵌入笔记中的音频文件可以内联播放而无需离开信息流。NIP-05 验证徽章现在内联显示在个人资料上，一眼即可看到身份确认。通知过滤经过彻底改进，让用户可以缩小哪些事件类型到达他们的通知列表。编辑器获得了更好的事件链接处理，底层的数据库层收到了稳定性修复。&lt;/p></description><content:encoded>&lt;p>Primal 3.5 发布了重建的 Android 外壳，Amethyst 添加了链上 Bitcoin zaps，White Noise 获得了 markdown 渲染和深度链接，Keycast 通过了安全审计，AgentNoise 让你可以通过 Marmot 加密聊天控制本地 AI 编码 agent。Hostr 在 Nostr 上推出了 P2P 租赁住宿平台，包含四个涵盖房源、预订和基于 EVM 的托管的 NIP 草案。Angor 将加密消息从 NIP-04 迁移到 NIP-44，Dart NDK 添加了 NIP-77 和 Web signer，Alby js-sdk v8 发布了原生 NWC 多 relay 重连，KeyChat 修补了 Signal 一次性 prekey 删除中的前向保密缺口。在协议方面，Mostro 的反滥用保证金达到第二阶段，Wisp 发布了私密回复和 gift-wrapped 反应，Namecoin NIP-05 实现浪潮在一周内影响了六个 client。&lt;/p>
&lt;h2 id="头条报道">头条报道&lt;/h2>
&lt;h3 id="primal-35-for-android">Primal 3.5 for Android&lt;/h3>
&lt;p>Primal 是一个由自有缓存 relay 基础设施支持的社交 client，本周发布了 &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.5.9">3.5.9&lt;/a>，带来重建的应用外壳。重新设计用更新的布局和新的 Explore 屏幕取代了之前的导航结构，让主要的发现界面拥有自己专用的主页。该版本为链接预览添加了音频播放，因此嵌入笔记中的音频文件可以内联播放而无需离开信息流。NIP-05 验证徽章现在内联显示在个人资料上，一眼即可看到身份确认。通知过滤经过彻底改进，让用户可以缩小哪些事件类型到达他们的通知列表。编辑器获得了更好的事件链接处理，底层的数据库层收到了稳定性修复。&lt;/p>
&lt;h3 id="white-noisemarkdown深度链接和音频元数据">White Noise：markdown、深度链接和音频元数据&lt;/h3>
&lt;p>White Noise 是构建在 Nostr 和 MLS（&lt;a href="https://www.rfc-editor.org/rfc/rfc9420">RFC 9420&lt;/a>）之上的 Marmot 加密群组消息应用，在前端和后端仓库度过了迄今最繁忙的一周之一。&lt;/p>
&lt;p>在前端，&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/665">PR #665&lt;/a> 为聊天消息添加了完整的 markdown 渲染，因此粗体、斜体、代码块和链接现在在消息视图中原生渲染。&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/675">PR #675&lt;/a> 启用了此前对非最后一个管理员被阻止的离开群组流程，&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/661">PR #661&lt;/a> 为 &lt;code>whitenoise://&lt;/code> 和 &lt;code>whitenoise-staging://&lt;/code> URI 添加了涵盖用户、聊天和设置的原生深度链接支持，无需任何 HTTP 重定向基础设施。&lt;/p>
&lt;p>在后端 whitenoise-rs 中，&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/835">PR #835&lt;/a> 通过为 kind:30443 发布重用 &lt;code>d_tag&lt;/code> 插槽使 key package 轮换正常工作，启用 NIP-33 可替换事件语义，因此连续的 key package 轮换在 relay 上替换先前的事件，只保留当前的 key package。&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/833">PR #833&lt;/a> 使用可选的 &lt;code>duration_ms&lt;/code> 和 &lt;code>waveform&lt;/code> 字段扩展 &lt;code>FileMetadata&lt;/code> 以支持音频附件，与 MDK 的 &lt;a href="https://github.com/marmot-protocol/mdk/pull/300">PR #300&lt;/a> 协调，后者为 MIP-04 媒体标签添加了相同的字段。新的 &lt;code>whitenoise-markdown&lt;/code> crate（&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/836">PR #836&lt;/a>）用专用的 markdown 渲染库取代了之前的 nostr-sdk token 解析器。&lt;/p>
&lt;p>Marmot 协议规范本身在 &lt;a href="https://github.com/marmot-protocol/marmot/pull/68">PR #68&lt;/a> 中收到了一个安全修复，它通过为 MIP-01 中的图像密钥派生明确指定 HKDF-SHA256 来关闭一个安全问题，消除了可能导致实现分歧的歧义。在 MDK 中，&lt;a href="https://github.com/marmot-protocol/mdk/pull/307">PR #307&lt;/a> 清理 welcome 失败原因并限制存储长度，关闭了一个单独的安全发现。&lt;/p>
&lt;h3 id="amethyst-v1100链上-bitcoin-zaps">Amethyst v1.10.0：链上 Bitcoin Zaps&lt;/h3>
&lt;p>Amethyst 本周发布了四个版本，以 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.10.0">v1.10.0&lt;/a> 为头条。该版本添加了对 NIP-BC 链上 Bitcoin zaps 的支持，让用户可以发送、接收和显示通过 Bitcoin 交易直接在链上结算的 zaps。系列中较早的版本修复了 Blossom blob 检测以拒绝不兼容的文件名（&lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.09.2">v1.09.2&lt;/a>），修补了桌面构建的 ProGuard 规则，并合并了 pull request &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2977">#2977&lt;/a> 以在展开的反应画廊中将链上 Bitcoin 打赏者显示为专用的 ₿ 行。带分页的进行中链上交易历史屏幕落地于 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2974">PR #2974&lt;/a>。&lt;/p>
&lt;h3 id="agentnoise通过-white-noise-控制编码-agent">AgentNoise：通过 White Noise 控制编码 agent&lt;/h3>
&lt;p>由 nvk 开发的 &lt;a href="https://github.com/nvk/agentnoise">AgentNoise&lt;/a> 是一个 Rust 原生桌面助手，让你可以使用运行 White Noise 的手机作为本地 Codex 和 Claude 编码 agent 会话的控制界面。该工具监听一个或多个 White Noise 聊天，通过首次配对 PIN 流程验证发送者，并通过配置的启动器启动本地编码 agent。从手机发送 &lt;code>/claude &amp;lt;prompt&amp;gt;&lt;/code> 会打开一个以机器主机名和简短 prompt 摘要命名的新 White Noise 工作会话，然后将进度更新和最终输出流回到该聊天。它有意采用 Rust 优先，并将 Node 排除在可信桥接路径之外。该项目本周达到 &lt;a href="https://github.com/nvk/agentnoise/releases/tag/v0.1.24">v0.1.24&lt;/a>，添加了更短的手机可读回复、按短唯一前缀的作业引用，以及可选加入的本地会话观察者。AgentNoise 将 &lt;code>marmot-protocol/whitenoise-rs&lt;/code> 的 &lt;code>wn&lt;/code> 和 &lt;code>wnd&lt;/code> CLI 作为子进程驱动，因此它与 White Noise client 本身共享其 Nostr 传输。&lt;/p>
&lt;h3 id="keycast-安全审计完成">Keycast 安全审计完成&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/keycast">Keycast&lt;/a> 是面向团队的 NIP-46 远程签名服务器，将 Nostr 私钥加密存储在 SQLite 中，于 2026 年 5 月完成了一次安全审计。加固工作解决了 auth、权限、数据完整性和依赖问题，结果记录在 &lt;a href="https://github.com/marmot-protocol/keycast/blob/master/AUDIT.md">AUDIT.md&lt;/a> 中。变更包括：NIP-98 HTTP auth 现在要求恰好一个 &lt;code>u&lt;/code> 标签和一个 &lt;code>method&lt;/code> 标签、拒绝过期时间戳并验证 &lt;code>payload&lt;/code> 哈希；&lt;code>ALLOWED_PUBKEYS&lt;/code> 白名单被精确解析并在服务器端强制执行；空策略现在默认拒绝签名/加密/解密请求；SQLite 连接启用了外键强制；诸如 &lt;code>/teams/:id&lt;/code> 之类的嵌套应用路由在服务器端受到保护。SQL 迁移在启动时规范化旧的 allowed-kinds 权限 JSON。该项目仍处于早期阶段，审计记录了在信任其真实团队密钥之前的剩余项目。&lt;/p>
&lt;h3 id="scramble桌面和-android-的-marmot-client">Scramble：桌面和 Android 的 Marmot client&lt;/h3>
&lt;p>&lt;a href="https://github.com/DavidGershony/Scramble">Scramble&lt;/a>（前称 OpenChat）是一个 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot 协议&lt;/a> 的 .NET/Avalonia 桌面和 Android client，实现了 MIPs 00-04：KeyPackage 发布（kind:30443）、带有 NostrGroupData MLS 扩展的群组元数据、NIP-59 gift-wrapped welcome 事件（kind:444）、ChaCha20-Poly1305 加密消息（kind:445），以及 Blossom 加密媒体附件。它与 White Noise 及任何其他 Marmot 兼容的 client 完全互操作。&lt;/p>
&lt;p>该项目本周发布了 13 个版本，主要功能是多设备支持。每个设备生成一个唯一的 KeyPackage 插槽（kind:30443 上的 &lt;code>d&lt;/code> 标签）。启动时，Scramble 从 relay 获取用户自己的 KeyPackages，检测对等设备插槽 ID，并使用暂存 commit 流程自动将它们添加到现有的 MLS 群组。自动添加仅限于当前用户是管理员的群组；非管理员群组会被跳过，并给出询问群组管理员的指引。前向保密披露横幅告知新链接的设备旧消息不可用。插槽 ID 协调过程（&lt;code>TryReconcileSlotId&lt;/code>）通过将 relay KeyPackage 字节与本地密钥材料匹配来采用正确的 &lt;code>d&lt;/code> 标签，处理从多设备版本之前迁移的设备。Amber 和 NIP-46 用户的外部 signer 重连也得到了修复：阻止 &lt;code>ExternalSignerService&lt;/code> 内置自动重连的 &lt;code>IsConnected&lt;/code> 守卫已在 &lt;code>NostrService&lt;/code> 中的所有九个调用点被移除。&lt;/p>
&lt;h3 id="hostrnostr-上的-p2p-租赁住宿">Hostr：Nostr 上的 P2P 租赁住宿&lt;/h3>
&lt;p>&lt;a href="https://hostr.network">Hostr&lt;/a>（&lt;a href="https://github.com/sudonym-btc/hostr">源代码&lt;/a>）是一个完全构建在 Nostr 上的点对点租赁住宿平台。它涵盖了完整的 Airbnb 式流程（搜索和列出物业、协商预订以及结算支付），使用该项目与应用并行开发的四个 NIP 草案。&lt;/p>
&lt;p>住宿 NIP 使用住宿特定的标签扩展 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/99.md">NIP-99&lt;/a> 分类列表（kind:30402 有效，kind:30403 草稿），涵盖类型（&lt;code>room&lt;/code>、&lt;code>house&lt;/code>、&lt;code>apartment&lt;/code>、&lt;code>villa&lt;/code>、&lt;code>hotel&lt;/code>、&lt;code>hostel&lt;/code>、&lt;code>resort&lt;/code>）、入住/退房时间、最少停留时间，以及用于按可配置精度进行基于位置的搜索的 H3 地理空间单元索引。预订 NIP 定义了完整的协商和生命周期协议：kind:32122 可替换预订事件携带一个 &lt;code>d&lt;/code> 交易 ID、一个列表锚 &lt;code>a&lt;/code> 标签，以及带有角色（&lt;code>buyer&lt;/code>、&lt;code>seller&lt;/code>、&lt;code>escrow&lt;/code>）的参与者 &lt;code>p&lt;/code> 标签；kind:1327 结构化消息 rumors 通过 NIP-59 gift wraps 提供私密的协商阶段反报价，因此协商停留在公共 relay 之外；kind:1326 仅追加的转换事件在预订提交后创建公共审计跟踪。买家隐私通过每次交易的临时 Nostr 密钥保留，这些密钥通过加密的 &lt;code>participant_proof&lt;/code> 标签绑定到买家的真实身份。托管 NIP 定义了 kind:30303 托管服务广告和 kind:17388 用户信任声明；参考实现使用 Rootstock 上的 EVM 智能合约，&lt;code>contractBytecodeHash&lt;/code> 允许 client 验证部署的合约与已知的经审计实现匹配。市场列表 NIP 定义了所有 NIP-99 市场配置文件共享的通用标签，包括 &lt;code>instantBook&lt;/code>、&lt;code>negotiable&lt;/code>、&lt;code>quantity&lt;/code>、&lt;code>securityDeposit&lt;/code>、&lt;code>cancellationPolicy&lt;/code> 和 &lt;code>maxDisputePeriod&lt;/code>。本周该项目准备了其应用商店提交，并合并了面向 agent 自动化的 MCP client 身份支持。&lt;/p>
&lt;p>本周 Shakespeare MiniApps 平台上出现了两个新条目：&lt;a href="https://inkpress.shakespeare.wtf">InkPress&lt;/a> 是一个 AI 杂志生成器，以 Nostr 事件形式发布结构化杂志式内容；&lt;a href="https://pressstr.shakespeare.wtf">PressStr&lt;/a> 是 Soapbox 栈的写作和发布平台。&lt;/p>
&lt;h2 id="本周发布">本周发布&lt;/h2>
&lt;h3 id="ngit-v244">ngit v2.4.4&lt;/h3>
&lt;p>&lt;strong>ngit&lt;/strong> 发布了 &lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.4">v2.4.4&lt;/a>，添加了 &lt;code>ngit sync --trust-server&lt;/code>（&lt;code>-t&lt;/code>）用于 git server 领先于 Nostr 状态的情况。检测到这种情况时，sync 会报告受影响的 refs，并要求使用该标志来签名并发布一个更新的状态事件；一个 &lt;code>nostr.trust-server-domains&lt;/code> git 配置设置提供了一个分号分隔的允许列表，用于应自动被信任而不需要该标志的服务器。&lt;/p>
&lt;h3 id="amber-v610-pre3-添加-psbt-签名">Amber v6.1.0-pre3 添加 PSBT 签名&lt;/h3>
&lt;p>&lt;strong>Amber&lt;/strong> 发布了 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.1.0-pre3">v6.1.0-pre3&lt;/a>，改进了新应用连接的布局、崩溃修复，以及权限屏幕上的全选/取消全选选项。&lt;a href="https://github.com/greenart7c3/Amber/pull/438">PR #438&lt;/a> 通过基于 Intent 和 NIP-46 relay 两个路径添加了 PSBT 签名支持，允许 Amber 签名部分签名的 Bitcoin 交易，而不向请求应用暴露 nsec。&lt;/p>
&lt;h3 id="wisp-v110-发布私密回复并放弃-amber-支持">Wisp v1.1.0 发布私密回复并放弃 Amber 支持&lt;/h3>
&lt;p>&lt;strong>Wisp&lt;/strong> 发布了 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.1.0">v1.1.0&lt;/a>，通过 NIP-17 gift wrap（&lt;a href="https://github.com/barrydeen/wisp/pull/540">PR #540&lt;/a>）实现私密回复、私密回复上的 gift-wrapped 反应和 DIP-03 zaps（&lt;a href="https://github.com/barrydeen/wisp/pull/543">PR #543&lt;/a>）、笔记的自动翻译（&lt;a href="https://github.com/barrydeen/wisp/pull/523">PR #523&lt;/a>），以及 zap 对话框上的收银机风格法币输入。&lt;a href="https://github.com/barrydeen/wisp/pull/541">PR #541&lt;/a> 将私密 zaps 从自制的 DM-relay 明文方案迁移到 DIP-03，具有正确的 DM-relay 路由。同一发布周期移除了 NIP-55 远程 signer 支持（&lt;a href="https://github.com/barrydeen/wisp/pull/531">PR #531&lt;/a>），放弃了 Amber 和其他外部 signer 集成，并移除了捆绑的本地 relay（&lt;a href="https://github.com/barrydeen/wisp/pull/533">PR #533&lt;/a>）。Wisp 是一个 Android 上的 Nostr 社交 client。&lt;/p>
&lt;h3 id="calendar-by-formstr-v154-修复了对新参与者的-gift-wrap">Calendar by Formstr v1.5.4 修复了对新参与者的 gift wrap&lt;/h3>
&lt;p>&lt;strong>Calendar by Formstr&lt;/strong> 发布了 &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.5.4">v1.5.4&lt;/a>（v1.5.2 → v1.5.4 序列中的最新版本）。&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/160">PR #160&lt;/a> 修复了一个 bug，即编辑带有新参与者的私密日历事件时，发布的更新事件在 &lt;code>p&lt;/code> 标签中包含新的 pubkeys，但从未创建或向这些参与者交付 gift wrap 邀请，破坏了最后一刻添加的邀请流程。&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/156">PR #156&lt;/a> 在私密事件解密周围添加了错误处理，因此 client 不再对无法解密的事件抛出异常，&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/138">PR #138&lt;/a> 更正了跨时区漂移的重复事件时间。&lt;/p>
&lt;h3 id="applesauce-v610-添加-nip-34-git-casts-和-nip-51-查找-relay">Applesauce v6.1.0 添加 NIP-34 git casts 和 NIP-51 查找 relay&lt;/h3>
&lt;p>&lt;strong>Applesauce&lt;/strong> 在其包中发布了 &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%406.1.0">v6.1.0&lt;/a>，具有重要的 NIP-34（git-over-Nostr）支持：applesauce-common 添加了新的 &lt;code>GitRepository&lt;/code>、&lt;code>GitGraspList&lt;/code> 和 &lt;code>FavoriteGitRepos&lt;/code> casts 以及匹配的工厂，并公开了 &lt;code>User.favoriteGitRepos$&lt;/code>、&lt;code>User.gitAuthors$&lt;/code> 和 &lt;code>User.graspServers$&lt;/code> 响应式属性，因此应用可以直接从同一个 User 对象列出用户关注的 git repo、repo 维护者和配置的 GRASP 服务器。同一版本添加了对 NIP-51 kind 10086 查找 relay 列表的支持，这是 relay 列表家族的最近新增，用于发现在哪里查找特定数据。applesauce-core 在 &lt;code>EventCast&lt;/code> 上获得了 &lt;code>replaceableAddress&lt;/code> 用于 NIP-01 可替换地址查找，加上 &lt;code>pointer&lt;/code>、&lt;code>kind&lt;/code> 和一个 &lt;code>getReplaceableAddressForEvent&lt;/code> 辅助函数，并在基础 &lt;code>User&lt;/code> cast 上添加了 &lt;code>timeline$()&lt;/code> 方法。&lt;a href="https://github.com/hzrd149/applesauce/pull/73">PR #73&lt;/a> 修复了 pool 手动方法静默丢弃离线 relay 的问题。&lt;/p>
&lt;h3 id="sprout-v0016-发布-sprig-二进制文件和-huddle-协议-v2">Sprout v0.0.16 发布 Sprig 二进制文件和 huddle 协议 v2&lt;/h3>
&lt;p>Block 的 &lt;strong>Sprout&lt;/strong> 是一个自托管的基于 Nostr relay 的团队工作区，人类和 AI agent 共享相同的房间和事件日志，本周发布了桌面应用的 &lt;a href="https://github.com/block/sprout/releases/tag/v0.0.16">v0.0.16&lt;/a>，同时发布了新的 Sprig 一体化二进制文件的滚动构建（&lt;a href="https://github.com/block/sprout/pull/605">PR #605&lt;/a>），它将 ACP 测试工具、agent 和开发者 MCP 捆绑到一个 busybox 风格的二进制文件中以便于部署。&lt;a href="https://github.com/block/sprout/pull/611">PR #611&lt;/a> 中添加的 &lt;code>--no-memory&lt;/code> 标志让运营者可以为 ACP 测试工具禁用 NIP-AE 核心内存注入。在实时方面，&lt;a href="https://github.com/block/sprout/pull/609">PR #609&lt;/a> 将 huddle 语音协议扩展到支持最多 10 个同时对等方的 v2 帧头。&lt;/p>
&lt;h3 id="nostrord-v103-添加-os-钥匙串和多账户">Nostrord v1.0.3 添加 OS 钥匙串和多账户&lt;/h3>
&lt;p>&lt;strong>Nostrord&lt;/strong> 发布了 &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v1.0.3">v1.0.3&lt;/a>，通过 OS 钥匙串和 passphrase 备选加固了本地密钥存储、多账户支持，以及在 Android 上可点击打开 signer 应用的 bunker QR code。&lt;/p>
&lt;h3 id="angor-迁移到-nip-44-并发布安全加固">Angor 迁移到 NIP-44 并发布安全加固&lt;/h3>
&lt;p>构建在 Nostr 和 Taproot 之上的 Bitcoin 众筹应用 &lt;strong>Angor&lt;/strong> 本周发布了三个不稳定版本（&lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.24">v0.2.24&lt;/a>、&lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.25">v0.2.25&lt;/a> 和 &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.26">v0.2.26&lt;/a>），带来了一组安全加固和 Nostr 集成变更。&lt;a href="https://github.com/block-core/angor/pull/860">PR #860&lt;/a> 将 Nostr 加密消息从 NIP-04 迁移到 NIP-44，用 ChaCha20-Poly1305 加密替换了已弃用的基于 XOR 的方案。&lt;a href="https://github.com/block-core/angor/pull/861">PR #861&lt;/a> 允许在没有选择钱包的情况下通过使用临时 Nostr auth 密钥进行 Blossom 媒体上传，为尚未连接钱包的用户解除上传阻塞。安全系列解决了几个加固类别：&lt;a href="https://github.com/block-core/angor/pull/854">PR #854&lt;/a> 为 AngorKey 添加了类型安全性和助记词内存保护，&lt;a href="https://github.com/block-core/angor/pull/856">PR #856&lt;/a> 为时间锁、费率、粉尘阈值和惩罚规则强制协议级验证，&lt;a href="https://github.com/block-core/angor/pull/851">PR #851&lt;/a> 在八个中低严重性类别中应用了非破坏性加固。&lt;a href="https://github.com/block-core/angor/pull/859">PR #859&lt;/a> 通过启用 AOT 编译并移除运行时代码生成修复了 GrapheneOS 兼容性，&lt;a href="https://github.com/block-core/angor/pull/855">PR #855&lt;/a> 通过在 OS 终止进程之前持久化钱包状态防止 Android 滑动强杀时的钱包丢失。&lt;/p>
&lt;h3 id="alby-js-sdk-v80-发布-nwc-多-relay-重连">Alby js-sdk v8.0 发布 NWC 多 relay 重连&lt;/h3>
&lt;p>&lt;strong>Alby js-sdk&lt;/strong> 发布了 v8.0 系列（&lt;a href="https://github.com/getAlby/js-sdk/releases/tag/v8.0.1">v8.0.1&lt;/a> 到 &lt;a href="https://github.com/getAlby/js-sdk/releases/tag/v8.0.3">v8.0.3&lt;/a>），带有 NWC 多 relay 订阅支持。&lt;a href="https://github.com/getAlby/js-sdk/pull/516">PR #516&lt;/a> 更新了 nostr-tools 依赖，并启用了跨多个 relay 的原生自动重连，用 relay 原生的重连逻辑取代了之前的轮询方法。&lt;a href="https://github.com/getAlby/js-sdk/pull/542">PR #542&lt;/a> 用一个可注入的 logger 接口替换了所有 &lt;code>console.debug&lt;/code> 调用，因此应用开发者可以将 SDK 诊断路由到他们自己的日志基础设施。该版本移除了 WebSocket polyfill，服务器端使用者需要 Node.js 22 或更高版本。v8.0.2 添加了对破坏某些打包器的 utils crypto 导入 bug 的修复。&lt;/p>
&lt;h3 id="keychat-v1411-修复前向保密">KeyChat v1.41.1 修复前向保密&lt;/h3>
&lt;p>&lt;strong>KeyChat&lt;/strong> 是一个将 Signal 协议与 Nostr relay 传输相结合的消息应用，发布了 &lt;a href="https://github.com/keychat-io/keychat-app/releases/tag/v1.41.1&amp;#43;6513">v1.41.1+6513&lt;/a>。头条修复通过在成功解密后立即删除 Signal 一次性 prekeys 来强制前向保密，关闭了一个缺口：如果设备后来被入侵，保留的 prekey 可能被用来解密过去的消息。该版本还为仅由单个链接组成的消息添加了 URL 预览，将媒体自动下载集中到一个新的 &lt;code>FileDownloadManager&lt;/code> 下，具有 20 MB 的自动阈值，并重构了 NIP-11 relay 信息获取，以在冷启动时强制刷新，因此付费 relay 费用配置总是正确加载。&lt;/p>
&lt;h2 id="开发中">开发中&lt;/h2>
&lt;p>&lt;strong>Citrine&lt;/strong> 合并了 &lt;a href="https://github.com/greenart7c3/Citrine/pull/151">PR #151&lt;/a>，实现 NIP-70 强制执行：如规范要求，Android relay 现在阻止嵌入受保护事件内容的转发。&lt;a href="https://github.com/greenart7c3/Citrine/pull/149">PR #149&lt;/a> 从 relay 设置屏幕添加多个连接地址（localhost、本地 Wi-Fi 和 Tor）的显示和复制操作。&lt;a href="https://github.com/greenart7c3/Citrine/pull/141">PR #141&lt;/a> 通过与 Amber 的外部 signer 集成添加 NIP-42 AUTH 挑战处理。&lt;/p>
&lt;p>&lt;strong>Mostro&lt;/strong> 达到其反滥用保证金推出的第 2 阶段。&lt;a href="https://github.com/MostroP2P/mostro/pull/737">PR #737&lt;/a> 落地了求解器指导的争议削减逻辑：管理员处理程序现在使用来自 mostro-core 的 &lt;code>BondResolution&lt;/code> 负载，允许管理员在解决争议时削减任一方的保证金。在 &lt;a href="https://github.com/MostroP2P/mostro/pull/736">PR #736&lt;/a> 中合并的第 1.5 阶段引入了一个专用的 &lt;code>PayBondInvoice&lt;/code> 操作和 &lt;code>WaitingTakerBond&lt;/code> 状态，将 taker 的反滥用保证金支付与买方的交易支付分开。移动 client 在 &lt;a href="https://github.com/MostroP2P/mobile/pull/592">PR #592&lt;/a> 中添加了完整的第 1.5 阶段 UX。Mostro 是一个建立在 Nostr 上的点对点 Bitcoin 交换协议。&lt;/p>
&lt;p>&lt;strong>Damus&lt;/strong> 合并了 &lt;a href="https://github.com/damus-io/damus/pull/3773">PR #3773&lt;/a> 恢复 relay 信号指示器，&lt;a href="https://github.com/damus-io/damus/pull/3775">PR #3775&lt;/a> 修复了在初始连接失败后拒绝重新连接的 relay。&lt;/p>
&lt;p>&lt;strong>rust-nostr&lt;/strong> 合并了 &lt;a href="https://github.com/rust-nostr/nostr/pull/1358">PR #1358&lt;/a>，添加了事件终结特征和 NIP 特定的事件构建器，使得为特定协议函数构造正确类型的事件更容易。&lt;a href="https://github.com/rust-nostr/nostr/pull/1363">PR #1363&lt;/a> 反向移植了一个修复，确保 NIP-46 signer 在发送连接响应之前订阅通知，关闭了紧接在连接后到达的 client 消息可能被错过的竞态条件。&lt;/p>
&lt;p>&lt;strong>dart-nostr&lt;/strong> 合并了 &lt;a href="https://github.com/ethicnology/dart-nostr/pull/44">PR #44&lt;/a>，添加了 Namecoin &lt;code>.bit&lt;/code> relay 解析器和 TLSA 引脚记录，让 Flutter 应用能够通过 Namecoin DNS 将 &lt;code>wss://example.bit/&lt;/code> relay URL 解析到它们的实际 WebSocket 地址。&lt;/p>
&lt;p>&lt;strong>Dart NDK&lt;/strong>（Dart/Flutter Nostr 开发套件，现在在 &lt;code>relaystr/ndk&lt;/code>）合并了 &lt;a href="https://github.com/relaystr/ndk/pull/464">PR #464&lt;/a>，实现 NIP-77，即离线事件签名协议。在 signer 方面，&lt;a href="https://github.com/relaystr/ndk/pull/602">PR #602&lt;/a> 和 &lt;a href="https://github.com/relaystr/ndk/pull/601">PR #601&lt;/a> 添加了 Web 特定的事件 signer 和 &lt;code>PlatformEventVerifier&lt;/code> 抽象，让 Flutter Web 应用可以使用平台 signer 而无需单独的代码路径；&lt;a href="https://github.com/relaystr/ndk/pull/604">PR #604&lt;/a> 引入了用于运行时 signer 选择的事件 signer 工厂。&lt;a href="https://github.com/relaystr/ndk/pull/608">PR #608&lt;/a> 添加了 &lt;code>getDmRelays()&lt;/code> 以获取用户的 NIP-17 DM relay 列表（kind:10050），&lt;a href="https://github.com/relaystr/ndk/pull/600">PR #600&lt;/a> 修复了 NIP-46 签名字段保留，因此远程 signer 不会在往返中丢失字段。&lt;/p>
&lt;p>&lt;strong>Pages by Form*&lt;/strong>（&lt;a href="https://github.com/formstr-hq/nostr-docs">repo&lt;/a>）是 Formstr 的 Nostr 原生协作文档应用，托管在 &lt;a href="https://pages.formstr.app">pages.formstr.app&lt;/a>，本周合并了四个 PR，加强了加密附件和文档管理流程。&lt;a href="https://github.com/formstr-hq/nostr-docs/pull/37">PR #37&lt;/a> 通过内联加密附件修复了 DOCX、HTML 和 PDF 导出中缺失的图像：它从 Blossom 服务器获取 &lt;code>&amp;lt;encrypted-file&amp;gt;&lt;/code> blob，使用存储的密钥和 nonce 通过 AES-GCM 256 位解密，验证图像 MIME 类型，并将它们转换为 base64 数据 URL，因此导出保留了只以加密形式存在于 Blossom 上的图像。&lt;a href="https://github.com/formstr-hq/nostr-docs/pull/39">PR #39&lt;/a> 添加了本地文档搜索机制，&lt;a href="https://github.com/formstr-hq/nostr-docs/pull/38">PR #38&lt;/a> 清理了重命名流程，&lt;a href="https://github.com/formstr-hq/nostr-docs/pull/40">PR #40&lt;/a> 修复了共享备份处理。&lt;/p>
&lt;p>&lt;strong>Zap Cooking&lt;/strong> 合并了 &lt;a href="https://github.com/zapcooking/frontend/pull/396">PR #396&lt;/a>，这是信息流全面改造的第一阶段，奠定了信息流渲染原语，尚未有任何用户可见的变化。该 PR 引入了一个 NIP-92 &lt;code>imeta&lt;/code> 标签解析器，读取 &lt;code>url&lt;/code>、&lt;code>m&lt;/code>（MIME）、&lt;code>dim&lt;/code>（尺寸）、&lt;code>blurhash&lt;/code>、&lt;code>alt&lt;/code>、&lt;code>x&lt;/code>（文件哈希）和 &lt;code>fallback&lt;/code> 插槽，加上一个手工移植的规范 blurhash 解码器（约 200 LOC），通过 canvas 生成 PNG 数据 URL，具有 SSR 安全的 null 备选。当 &lt;code>imeta&lt;/code> 标签不存在时，解析器回退到使用当前信息流已使用的相同启发式方法从事件内容中提取原始图像和视频 URL。&lt;/p>
&lt;p>&lt;strong>Nurunuru&lt;/strong>（ぬるぬる、&lt;code>tami1A84/null--nostr&lt;/code>）是一个具有原生 Android、iOS 和 Web 变体的 Nostr client，共享 Rust FFI 引擎，在 &lt;a href="https://github.com/tami1A84/null--nostr/pull/176">PR #176&lt;/a> 中合并了其 v1.5.0 Native → Web 同步。此同步为 Web 构建带来了 Android v1.4.9 和 iOS 1.0.4 上已经发布的几个功能添加：&lt;a href="https://github.com/tami1A84/null--nostr/pull/176">NotificationModal&lt;/a> 现在浮现生日通知、互相关注 zap 检测和自定义 emoji 反应通知；反应选择器放弃了 Unicode 默认反应快速行，并将 UX 集中在自定义 emoji 上；&lt;code>lib/recommendation.js&lt;/code> 中的推荐引擎过滤掉没有图标或显示名称的用户，并优先处理 Following 条目，Recommended 在后台加载。语音输入是一个反方向的功能：Web 构建已经使用 ElevenLabs Scribe 流式传输，v1.5.0 将 Native 端部分同步到 OS 标准的 &lt;code>SpeechRecognizer&lt;/code>（Android）和 &lt;code>SFSpeechRecognizer&lt;/code> + &lt;code>AVAudioEngine&lt;/code>（iOS），而完整的 Native Scribe 集成推迟到 v1.6。&lt;/p>
&lt;h2 id="协议和规范工作">协议和规范工作&lt;/h2>
&lt;p>&lt;strong>PR &lt;a href="https://github.com/nostr-protocol/nips/pull/2251">#2251&lt;/a>&lt;/strong> 收紧了 NIP-70 受保护事件规范：它现在明确指出，嵌入受保护事件完整内容的转发必须被 relay 拒绝。NIP-70 定义了 &lt;code>-&lt;/code> 标签，表示笔记作者不同意其笔记被重新发布。原始规范涵盖了 relay 过滤行为，但对转发情况留下了歧义。此 PR 关闭了该缺口。Citrine 的 &lt;a href="https://github.com/greenart7c3/Citrine/pull/151">PR #151&lt;/a> 在同一周在 relay 端实现了强制执行。&lt;/p>
&lt;p>&lt;strong>PR &lt;a href="https://github.com/nostr-protocol/nips/pull/1653">#1653&lt;/a>&lt;/strong> 提议一个 Drafts NIP，用于保存和同步私密草稿事件。该提议使用具有 &lt;code>draft&lt;/code> 状态的可替换事件和 NIP-44 加密（加密给作者自己的密钥），让 client 可以将进行中的工作保存到 relay 而不让这些事件对任何其他人可见。草稿事件将完整的预期发布事件作为加密内容携带，包括其最终的 kind 和 tags。&lt;/p>
&lt;p>&lt;strong>Snapshots（&lt;a href="https://github.com/nostr-protocol/nips/pull/2279">PR #2279&lt;/a>）&lt;/strong> 是一个开放提议，用于定义一个不可变的快照事件，以保留可替换 Nostr 事件的一个精确版本。快照事件在给定时间点携带可替换事件的完整内容，具有一个 &lt;code>a&lt;/code> 标签链接回可替换事件的地址，因此所有历史版本可以一起查询。这使得观察者即使在 relay 停止保留旧版本后也能检查历史状态。&lt;/p>
&lt;p>&lt;strong>Namecoin NIP-05 浪潮：&lt;/strong> 本周看到了一次协调努力，将 &lt;code>.bit&lt;/code> NIP-05 解析添加到 Nostr client。NIP 讨论信息流捕获了针对 Aegis（&lt;a href="https://github.com/ZharlieW/Aegis/pull/14">#14&lt;/a>，它在 signer 处添加签名时验证）、nostter（&lt;a href="https://github.com/SnowCait/nostter/pull/2128">#2128&lt;/a>）和 dart-nostr（&lt;a href="https://github.com/ethicnology/dart-nostr/pull/44">#44&lt;/a>）的开源 PR，以及一个上游 NIP 草案（&lt;a href="https://github.com/nostr-protocol/nips/pull/2349">PR #2349&lt;/a>）。Aegis PR 值得注意的是将验证放在生产者端：signer 在签名任何声称 &lt;code>.bit&lt;/code> 身份的 kind:0 事件之前检查 Namecoin 链，并在不匹配时警告用户，在事件到达任何 relay 之前捕获问题。&lt;/p>
&lt;h2 id="nip-deep-divenip-07用于-web-浏览器的-windownostr">NIP Deep Dive：NIP-07（用于 Web 浏览器的 window.nostr）&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/07.md">NIP-07&lt;/a> 定义了浏览器扩展向 Web 应用暴露的 &lt;code>window.nostr&lt;/code> 接口。它是 Web 上部署最广泛的 signer 接口，由包括 Alby、nos2x、Flamingo 和 horse 在内的扩展实现。&lt;/p>
&lt;p>该接口有两个必需方法和几个可选方法。&lt;code>window.nostr.getPublicKey()&lt;/code> 以十六进制字符串形式返回用户的公钥，而不会将私钥暴露给调用页面。&lt;code>window.nostr.signEvent(event)&lt;/code> 接受一个带有 &lt;code>created_at&lt;/code>、&lt;code>kind&lt;/code>、&lt;code>tags&lt;/code> 和 &lt;code>content&lt;/code> 的部分事件，并返回添加了 &lt;code>id&lt;/code>、&lt;code>pubkey&lt;/code> 和 &lt;code>sig&lt;/code> 的完整签名事件。关键点是私钥永远不会离开扩展的隔离上下文；Web 应用提交一个未签名事件，并收到一个已签名的事件。&lt;/p>
&lt;p>可选方法涵盖加密：用于旧的 NIP-04 方案（现已弃用）的 &lt;code>window.nostr.nip04.encrypt&lt;/code> 和 &lt;code>window.nostr.nip04.decrypt&lt;/code>，以及用于当前 NIP-44 方案的 &lt;code>window.nostr.nip44.encrypt&lt;/code> 和 &lt;code>window.nostr.nip44.decrypt&lt;/code>。因此，支持 NIP-44 的扩展可以处理直接消息加密和任何其他需要 pubkey-keyed 加密的应用，而无需调用页面看到 nsec。&lt;/p>
&lt;p>规范还包括对扩展作者的建议：在扩展 manifest 中使用 &lt;code>&amp;quot;run_at&amp;quot;: &amp;quot;document_end&amp;quot;&lt;/code> 加载脚本，以便 &lt;code>window.nostr&lt;/code> 在页面加载时同步可用，避免 client 在扩展注入之前检查 &lt;code>window.nostr&lt;/code> 的竞态条件。&lt;/p>
&lt;p>NIP-07 实际应用的一个关键示例是上面介绍的 Keycast 项目。Keycast Web 前端使用 NIP-07 签名 NIP-98 HTTP auth 事件：SvelteKit 应用从不直接处理用户的 nsec。它调用 &lt;code>window.nostr.signEvent&lt;/code> 来生成 auth 头，然后将该头发送到 Keycast API。这种架构意味着密钥材料在整个团队密钥管理流程中保留在浏览器扩展中。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4e5f6a1b2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;7f8e9d0c1b2a3e4f5d6c7b8a9f0e1d2c3b4a5f6e7d8c9b0a1f2e3d4c5b6a7f8a&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1747785600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Hello from a NIP-07 signed event&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2cdd&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h2 id="nip-deep-divenip-39个人资料中的外部身份">NIP Deep Dive：NIP-39（个人资料中的外部身份）&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/39.md">NIP-39&lt;/a> 定义了 Nostr 用户如何在其个人资料中声明对外部平台身份的控制权。每个声明使用 kind:10011 事件内的一个 &lt;code>i&lt;/code> 标签，断言对另一个平台上的特定账户的所有权，以及一个可以独立验证的证明。&lt;/p>
&lt;p>每个标签遵循 &lt;code>[&amp;quot;i&amp;quot;, &amp;quot;platform:identity&amp;quot;, &amp;quot;proof&amp;quot;]&lt;/code> 格式，其中 &lt;code>platform:identity&lt;/code> 用冒号分隔符组合平台名称和用户名（&lt;code>github:semisol&lt;/code>、&lt;code>twitter:semisol_public&lt;/code>）。&lt;code>proof&lt;/code> 指向平台本身上的可验证工件。&lt;/p>
&lt;p>对于 GitHub，证明是一个 Gist ID。用户从其 GitHub 账户创建一个公开的 Gist，其中包含文本 &lt;code>Verifying that I control the following Nostr public key: npub1...&lt;/code>。验证声明的 client 获取 &lt;code>https://gist.github.com/&amp;lt;identity&amp;gt;/&amp;lt;proof&amp;gt;&lt;/code>，并检查该 Gist 是由声称的 GitHub 用户名撰写的，并包含预期的 pubkey。对于 Twitter，证明是一个 tweet ID；对于 Mastodon，是一个帖子 ID；对于 Telegram，是公共群组中的一个消息引用。&lt;/p>
&lt;p>身份提供者名称只能包含 &lt;code>a-z&lt;/code>、&lt;code>0-9&lt;/code> 和字符 &lt;code>._-/&lt;/code>，并且不能包含 &lt;code>:&lt;/code>。身份名称应规范化为小写，当存在多个别名时使用主别名。&lt;/p>
&lt;p>本周正在进行的 Namecoin &lt;code>.bit&lt;/code> NIP-05 讨论显示了 NIP-39 在更广泛的身份栈中的作用：它提供了一种标准化、与 relay 无关的方式，将 Nostr 密钥与其他地方已建立的身份交叉引用，而不需要任何中央验证权威机构。client 可以通过在命名平台上获取一个公共工件来独立验证证明，并且证明绑定到 Gist 或 tweet 文本中的特定 Nostr pubkey，而不是通用的平台凭据。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;7f8e9d0c1b2a3e4f5d6c7b8a9f0e1d2c3b4a5f6e7d8c9b0a1f2e3d4c5b6a7f8a&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1747785600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">10011&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;i&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;github:semisol&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;9721ce4ee4fceb91c9711ca2a6c9a5ab&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;i&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;twitter:semisol_public&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1619358434134196225&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;i&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;mastodon:bitcoinhackers.org/@semisol&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;109775066355589974&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1c2d3eff&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;hr>
&lt;p>本周就到这里。如果你正在构建什么或有消息要分享，请在 Nostr 上私信我们，或访问 &lt;a href="https://nostrcompass.org">nostrcompass.org&lt;/a>。&lt;/p></content:encoded></item><item><title>Nostr Compass #22</title><link>https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/</link><pubDate>Wed, 13 May 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您每周的 Nostr 协议开发指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a> 在七天内&lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#nostr-vpn-%e5%8f%91%e5%b8%83%e5%85%ab%e4%b8%aa%e7%89%88%e6%9c%ac%e6%9c%80%e7%bb%88%e8%be%be%e5%88%b0-v4010">发布了八个版本&lt;/a>，从重新设计的设备配对流程到将 TCP 吞吐量大约翻倍的 FIPS AEAD 交换。&lt;a href="https://github.com/marmot-protocol">Marmot Protocol&lt;/a>（&lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> 的基础）发布了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#marmotwhite-noise-%e5%8f%91%e5%b8%83%e5%ae%8c%e6%88%90%e7%94%a8%e6%88%b7%e5%b1%8f%e8%94%bd%e7%9a%84%e5%89%8d%e7%ab%af%e7%89%88%e6%9c%ac%e4%bb%a5%e5%8f%8a-mdk-%e5%92%8c%e5%90%8e%e7%ab%af%e7%9a%84-31-%e4%b8%aa-pr">完成用户屏蔽功能的前端版本&lt;/a>以及 MDK 和后端的 31 个 PR。&lt;a href="https://github.com/0ceanSlim/grain">Grain&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#grain-v060-%e6%96%b0%e5%a2%9e-nip-40nip-50nip-70-%e5%92%8c-nip-45">v0.6.0&lt;/a>，在一个里程碑中实现了四个新的 NIP。&lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#citrine-v300-pre1-%e5%86%85%e7%bd%ae-tor-%e5%92%8c-relay-%e8%81%9a%e5%90%88">v3.0.0-pre1&lt;/a>，带有内置 Tor 和 relay 聚合。&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#amber-v610-pre2-%e6%94%b9%e5%96%84%e6%96%b0%e5%ba%94%e7%94%a8%e8%bf%9e%e6%8e%a5%e6%b5%81%e7%a8%8b">v6.1.0-pre2&lt;/a>，改善了连接流程和签名。&lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#alby-hub-v1222-%e6%96%b0%e5%a2%9e-ai-%e5%92%8c%e4%bb%a3%e7%90%86%e9%a1%b5%e9%9d%a2%e4%bb%a5%e5%8f%8a-core-lightning-%e6%94%af%e6%8c%81">v1.22.2&lt;/a>，带有 AI 和代理页面以及 Core Lightning 集成。&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> 发布了并发 taker bond 和 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#mostro-%e5%8f%91%e5%b8%83%e5%b9%b6%e5%8f%91-taker-bond-%e5%92%8c-mostro-core-v0110">mostro-core v0.11.0&lt;/a>。&lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a> 发布了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#jumble-%e5%8f%91%e5%b8%83%e4%ba%94%e4%b8%aa%e7%89%88%e6%9c%ac%e5%8c%85%e5%90%ab%e6%9c%80%e8%bf%91%e6%90%9c%e7%b4%a2%e5%92%8c%e8%b4%a6%e6%88%b7%e6%8c%81%e4%b9%85%e5%8c%96">五个版本&lt;/a>，带有最近搜索历史和账户数据持久化修复。&lt;a href="https://github.com/nostrord/nostrord">Nostrord&lt;/a> 发布了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#nostrord-%e5%8f%91%e5%b8%83%e7%be%a4%e7%bb%84%e5%88%86%e4%ba%ab%e5%bc%b9%e7%aa%97%e5%aa%92%e4%bd%93%e4%b8%8a%e4%bc%a0%e5%92%8c-arch-linux-%e5%8c%85">三个版本&lt;/a>，带有群组分享弹窗和 Arch Linux 包。&lt;a href="https://flotilla.social">Flotilla&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#flotilla-180-%e5%8f%91%e5%b8%83%e8%a7%86%e9%a2%91%e9%80%9a%e8%af%9d%e9%82%ae%e4%bb%b6%e6%b8%b2%e6%9f%93%e5%92%8c%e6%88%bf%e9%97%b4%e6%8f%90%e5%8f%8a">1.8.0&lt;/a>，带有视频通话、邮件渲染和房间提及。&lt;a href="https://calendar.formstr.app">Calendar by Formstr&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#calendar-by-formstr-%e5%8f%91%e5%b8%83-v151-%e5%8c%85%e5%90%ab%e9%a2%84%e7%ba%a6%e8%b0%83%e5%ba%a6%e5%92%8c-android-%e6%97%a5%e5%8e%86%e5%90%8c%e6%ad%a5">v1.5.1&lt;/a>，带有预约调度和 Android 日历同步。&lt;a href="https://github.com/Negr087/tamagostrich">Tamagostrich&lt;/a> 推出了去中心化的 NIP-78 虚拟宠物游戏，带有 sats 奖励。NIP 讨论涉及预约、托管服务、住宿列表、链上 Zap 和可验证社区规则。两个 NIP 深度解析涵盖 NIP-78（应用特定数据）和 NIP-98（HTTP 认证）。&lt;/p>
&lt;h2 id="头条故事">头条故事&lt;/h2>
&lt;h3 id="nostr-vpn-发布八个版本最终达到-v4010">Nostr VPN 发布八个版本最终达到 v4.0.10&lt;/h3>
&lt;p>&lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a>，基于 Rust 的去中心化网状 VPN，使用 Nostr 进行对等发现并使用 FIPS 支持的 noise 协议作为数据平面，本周在 macOS、Linux、Windows 和 Android 上发布了从 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.1">v4.0.1&lt;/a> 到 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.10">v4.0.10&lt;/a> 的八个版本。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您每周的 Nostr 协议开发指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a> 在七天内&lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#nostr-vpn-%e5%8f%91%e5%b8%83%e5%85%ab%e4%b8%aa%e7%89%88%e6%9c%ac%e6%9c%80%e7%bb%88%e8%be%be%e5%88%b0-v4010">发布了八个版本&lt;/a>，从重新设计的设备配对流程到将 TCP 吞吐量大约翻倍的 FIPS AEAD 交换。&lt;a href="https://github.com/marmot-protocol">Marmot Protocol&lt;/a>（&lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> 的基础）发布了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#marmotwhite-noise-%e5%8f%91%e5%b8%83%e5%ae%8c%e6%88%90%e7%94%a8%e6%88%b7%e5%b1%8f%e8%94%bd%e7%9a%84%e5%89%8d%e7%ab%af%e7%89%88%e6%9c%ac%e4%bb%a5%e5%8f%8a-mdk-%e5%92%8c%e5%90%8e%e7%ab%af%e7%9a%84-31-%e4%b8%aa-pr">完成用户屏蔽功能的前端版本&lt;/a>以及 MDK 和后端的 31 个 PR。&lt;a href="https://github.com/0ceanSlim/grain">Grain&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#grain-v060-%e6%96%b0%e5%a2%9e-nip-40nip-50nip-70-%e5%92%8c-nip-45">v0.6.0&lt;/a>，在一个里程碑中实现了四个新的 NIP。&lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#citrine-v300-pre1-%e5%86%85%e7%bd%ae-tor-%e5%92%8c-relay-%e8%81%9a%e5%90%88">v3.0.0-pre1&lt;/a>，带有内置 Tor 和 relay 聚合。&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#amber-v610-pre2-%e6%94%b9%e5%96%84%e6%96%b0%e5%ba%94%e7%94%a8%e8%bf%9e%e6%8e%a5%e6%b5%81%e7%a8%8b">v6.1.0-pre2&lt;/a>，改善了连接流程和签名。&lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#alby-hub-v1222-%e6%96%b0%e5%a2%9e-ai-%e5%92%8c%e4%bb%a3%e7%90%86%e9%a1%b5%e9%9d%a2%e4%bb%a5%e5%8f%8a-core-lightning-%e6%94%af%e6%8c%81">v1.22.2&lt;/a>，带有 AI 和代理页面以及 Core Lightning 集成。&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> 发布了并发 taker bond 和 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#mostro-%e5%8f%91%e5%b8%83%e5%b9%b6%e5%8f%91-taker-bond-%e5%92%8c-mostro-core-v0110">mostro-core v0.11.0&lt;/a>。&lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a> 发布了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#jumble-%e5%8f%91%e5%b8%83%e4%ba%94%e4%b8%aa%e7%89%88%e6%9c%ac%e5%8c%85%e5%90%ab%e6%9c%80%e8%bf%91%e6%90%9c%e7%b4%a2%e5%92%8c%e8%b4%a6%e6%88%b7%e6%8c%81%e4%b9%85%e5%8c%96">五个版本&lt;/a>，带有最近搜索历史和账户数据持久化修复。&lt;a href="https://github.com/nostrord/nostrord">Nostrord&lt;/a> 发布了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#nostrord-%e5%8f%91%e5%b8%83%e7%be%a4%e7%bb%84%e5%88%86%e4%ba%ab%e5%bc%b9%e7%aa%97%e5%aa%92%e4%bd%93%e4%b8%8a%e4%bc%a0%e5%92%8c-arch-linux-%e5%8c%85">三个版本&lt;/a>，带有群组分享弹窗和 Arch Linux 包。&lt;a href="https://flotilla.social">Flotilla&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#flotilla-180-%e5%8f%91%e5%b8%83%e8%a7%86%e9%a2%91%e9%80%9a%e8%af%9d%e9%82%ae%e4%bb%b6%e6%b8%b2%e6%9f%93%e5%92%8c%e6%88%bf%e9%97%b4%e6%8f%90%e5%8f%8a">1.8.0&lt;/a>，带有视频通话、邮件渲染和房间提及。&lt;a href="https://calendar.formstr.app">Calendar by Formstr&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-13-newsletter/#calendar-by-formstr-%e5%8f%91%e5%b8%83-v151-%e5%8c%85%e5%90%ab%e9%a2%84%e7%ba%a6%e8%b0%83%e5%ba%a6%e5%92%8c-android-%e6%97%a5%e5%8e%86%e5%90%8c%e6%ad%a5">v1.5.1&lt;/a>，带有预约调度和 Android 日历同步。&lt;a href="https://github.com/Negr087/tamagostrich">Tamagostrich&lt;/a> 推出了去中心化的 NIP-78 虚拟宠物游戏，带有 sats 奖励。NIP 讨论涉及预约、托管服务、住宿列表、链上 Zap 和可验证社区规则。两个 NIP 深度解析涵盖 NIP-78（应用特定数据）和 NIP-98（HTTP 认证）。&lt;/p>
&lt;h2 id="头条故事">头条故事&lt;/h2>
&lt;h3 id="nostr-vpn-发布八个版本最终达到-v4010">Nostr VPN 发布八个版本最终达到 v4.0.10&lt;/h3>
&lt;p>&lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a>，基于 Rust 的去中心化网状 VPN，使用 Nostr 进行对等发现并使用 FIPS 支持的 noise 协议作为数据平面，本周在 macOS、Linux、Windows 和 Android 上发布了从 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.1">v4.0.1&lt;/a> 到 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.10">v4.0.10&lt;/a> 的八个版本。&lt;/p>
&lt;p>主要变化在 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.8">v4.0.8&lt;/a>：AEAD 从 RustCrypto 的 &lt;code>chacha20poly1305&lt;/code> 软件后端换为 &lt;code>ring&lt;/code> 0.17 中 BoringSSL 的 ChaCha20-Poly1305，在 aarch64 上使用手工调优的 NEON，在 x86_64 上使用 AVX2/AVX-512。相同硬件上的 Docker 基准测试显示 2 节点直接 TCP 吞吐量从 437 跳升至 1097 Mbps。线格式不变。&lt;/p>
&lt;p>本周早些时候，&lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.1">v4.0.1&lt;/a> 重建了设备配对流程，带有出口节点泄漏保护、出口节点下统一的 WireGuard 配置块以及签名/公证的 macOS 构件。&lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.2">v4.0.2&lt;/a> 通过可重用多播套接字改善了 LAN 发现。&lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.9">v4.0.9&lt;/a> 在 UDP 发送路径上添加了 &lt;code>sendmmsg(2)&lt;/code> 批处理，在 8 包批次中分摊每包 &lt;code>sendto&lt;/code> 系统调用，将 TCP 单流推至 1548 Mbps（1.45×）。&lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v4.0.10">v4.0.10&lt;/a> 发布了设备配对的完整 UX 改版：&amp;ldquo;邀请设备&amp;quot;和&amp;quot;加入网络&amp;quot;现在是独立的卡片，粘贴 &lt;code>nvpn://invite/&lt;/code> 字符串时自动导入触发，附近配对分为两个独立的 15 分钟开关。&lt;/p>
&lt;h3 id="marmotwhite-noise-发布完成用户屏蔽的前端版本以及-mdk-和后端的-31-个-pr">Marmot/White Noise 发布完成用户屏蔽的前端版本以及 MDK 和后端的 31 个 PR&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>，基于 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> MLS 协议构建的私人群组消息应用，于 5 月 7 日发布了 &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.5.7&amp;#43;24">v2026.5.7+24&lt;/a>，这是完成屏蔽功能集的前端版本。上一个版本发布了静音、搜索和归档；这个版本完成了屏蔽。被屏蔽的用户现在从邀请、聊天预览、消息时间线、搜索结果和通知中隐藏，其消息不再计入未读徽章。视频附件在所有设备上端到端运行。离线通知现在覆盖每个屏幕。&lt;/p>
&lt;p>支持工作跨越 MDK 和后端的 31 个 PR。MDK 落地了 &lt;a href="https://github.com/marmot-protocol/mdk/pull/258">PR #258&lt;/a>，带有扩展 v3 线格式和 &lt;code>disappearing_message_secs&lt;/code> 架构，为消息自动删除奠定基础。&lt;/p>
&lt;p>前端工作包括 &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/653">PR #653&lt;/a> 通过切换到点查询修复了归档聊天摘要，&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/644">PR #644&lt;/a> 向 Dart 暴露了 &lt;code>subscribe_to_group_state&lt;/code> 流用于响应式 UI 更新，&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/635">PR #635&lt;/a> 修复了签名应用冷启动时的 Android 外部签名通知恢复。&lt;/p>
&lt;h3 id="grain-v060-新增-nip-40nip-50nip-70-和-nip-45">Grain v0.6.0 新增 NIP-40、NIP-50、NIP-70 和 NIP-45&lt;/h3>
&lt;p>&lt;a href="https://github.com/0ceanSlim/grain">Grain&lt;/a>，基于 Go 的 Nostr relay 和客户端库，于 5 月 6 日发布了 &lt;a href="https://github.com/0ceanSlim/grain/releases/tag/v0.6.0">v0.6.0&lt;/a>，包含四个新的 NIP 实现和一次生产加固。v0.6 里程碑新增了 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/40.md">NIP-40&lt;/a> 事件过期、&lt;a href="https://github.com/nostr-protocol/nips/blob/master/50.md">NIP-50&lt;/a> 全文搜索、&lt;a href="https://github.com/nostr-protocol/nips/blob/master/70.md">NIP-70&lt;/a> 受保护事件和 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/45.md">NIP-45&lt;/a> 事件计数。&lt;/p>
&lt;p>通过 NIP-40 的事件过期允许发布者设置过期时间戳，relay 在过期后丢弃事件，实际上用于临时存在事件和有时限的公告。NIP-50 全文搜索允许客户端在 REQ 消息中发出 &lt;code>search&lt;/code> 过滤器并让 relay 完成匹配工作。通过 NIP-70 的受保护事件防止 relay 在未经作者明确许可的情况下重新分享事件。NIP-45 计数查询允许客户端请求 relay 返回匹配事件的计数，降低&amp;quot;这个用户有多少条笔记&amp;quot;类查询的带宽。&lt;/p>
&lt;p>该版本还发布了生产加固：更安全的默认配置、更正的 NIP-01 拒绝响应以及对慢速消费者的更好背压。&lt;/p>
&lt;h2 id="本周发布">本周发布&lt;/h2>
&lt;h3 id="citrine-v300-pre1-内置-tor-和-relay-聚合">Citrine v3.0.0-pre1 内置 Tor 和 relay 聚合&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a>，将手机变成 Nostr relay 节点的 Android 应用，本周以预发布形式发布了 &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v3.0.0-pre1">v3.0.0-pre1&lt;/a>。主要新增内容是用于隐私保护 relay 访问的内置 Tor 支持和 relay 聚合，Citrine 可以从多个上游 relay 拉取事件并向本地客户端提供服务。&lt;a href="https://github.com/greenart7c3/Citrine/pull/139">PR #139&lt;/a> 为高效的基于集合对账的事件同步添加了 &lt;a href="https://nostrcompass.org/zh/topics/nip-77/">NIP-77（熵减对账）&lt;/a> 支持。&lt;a href="https://github.com/greenart7c3/Citrine/pull/137">PR #137&lt;/a> 通过 Tor 代理路由所有 URL，&lt;a href="https://github.com/greenart7c3/Citrine/pull/133">PR #133&lt;/a> 缓解了事件接收路径上的 UI 线程压力，&lt;a href="https://github.com/greenart7c3/Citrine/pull/132">PR #132&lt;/a> 降低了 relay 聚合器的电池消耗。该版本还添加了一个事件分析视图，带有按 kind 分解存储事件的饼图。&lt;/p>
&lt;h3 id="amber-v610-pre2-改善新应用连接流程">Amber v6.1.0-pre2 改善新应用连接流程&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>，用于 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55（Android 签名应用）&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 的 Android 签名应用，发布了 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.1.0-pre2">v6.1.0-pre2&lt;/a>。主要修复：签名对话框现在在接受 bunker 请求后正确关闭，格式错误的 bunker 请求显示无效请求屏幕，并为基于 intent 的签名请求添加了速率限制。&lt;a href="https://github.com/greenart7c3/Amber/pull/430">PR #430&lt;/a> 修复了签名流程中的内存泄漏和热路径低效问题。&lt;/p>
&lt;h3 id="alby-hub-v1222-新增-ai-和代理页面以及-core-lightning-支持">Alby Hub v1.22.2 新增 AI 和代理页面以及 Core Lightning 支持&lt;/h3>
&lt;p>&lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a>，自托管 Lightning 节点和 Nostr Wallet Connect 服务器，发布了 &lt;a href="https://github.com/getAlby/hub/releases/tag/v1.22.2">v1.22.2&lt;/a>，带有多项重要新增内容。新的 AI 和代理页面向 AI 代理和兼容 MCP 的工具暴露了 Alby Hub 的 Lightning 和 NWC 功能。集成的链上钱包模式让用户可以直接从 Alby Hub 接收和发送链上比特币。交易的自定义用户标签改善了记账。设置页面重新设计以提高清晰度，创建应用连接时的预算选择也得到改善。自发布以来最受欢迎的功能终于来了：Core Lightning（CLN）现在是与 LND 和 LDK 并列的支持后端。&lt;/p>
&lt;h3 id="mostro-发布并发-taker-bond-和-mostro-core-v0110">Mostro 发布并发 taker bond 和 mostro-core v0.11.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>，Nostr 上的点对点比特币交易协议，本周合并了 11 个 PR，推进了 taker bond 功能，该功能通过要求双方在交易进行前锁定资金来防止扰乱。&lt;a href="https://github.com/MostroP2P/mostro/pull/733">PR #733&lt;/a> 实现了并发 taker bond，多个 taker 可以同时提交 bond 发票，第一个锁定的获胜，其他的被丢弃。&lt;a href="https://github.com/MostroP2P/mostro/pull/735">PR #735&lt;/a> 将 bond 发票备注与规范第 6.1 节对齐。&lt;/p>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro-core">mostro-core&lt;/a> 发布了 &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.11.0">v0.11.0&lt;/a>，带有匹配的库新增内容：&lt;a href="https://github.com/MostroP2P/mostro-core/pull/144">PR #144&lt;/a> 添加了 &lt;code>Action::PayBondInvoice&lt;/code> 和 &lt;code>Status::WaitingTakerBond&lt;/code>，&lt;a href="https://github.com/MostroP2P/mostro-core/pull/143">PR #143&lt;/a> 添加了用于管理员结算和取消操作的 &lt;code>BondResolution&lt;/code> 负载。&lt;a href="https://github.com/MostroP2P/mostro-cli">mostro-cli&lt;/a> 发布了 &lt;a href="https://github.com/MostroP2P/mostro-cli/releases/tag/v0.15.0">v0.15.0&lt;/a>，更新至 mostro-core 0.11.0 并处理反滥用 bond 流程。&lt;/p>
&lt;h3 id="jumble-发布五个版本包含最近搜索和账户持久化">Jumble 发布五个版本包含最近搜索和账户持久化&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a>，以 relay 为中心的 Nostr 客户端，可作为 Web 应用和 Electron 桌面应用使用，本周发布了五个版本：&lt;a href="https://github.com/CodyTseng/jumble/releases/tag/v26.5.2">v26.5.2&lt;/a> 到 &lt;a href="https://github.com/CodyTseng/jumble/releases/tag/v26.5.6">v26.5.6&lt;/a>。v26.5.2 按今天/本周/本月/更早分组通知，带有固定日期标题，并用原生组件替换了第三方下拉刷新库。v26.5.3 在 &lt;code>.dmg&lt;/code> 旁边发布 macOS &lt;code>.zip&lt;/code> 以便 Electron 桌面构建可以应用原地自动更新。v26.5.4 添加了自实现的 emoji 选择器，带有 emoji 包标签。v26.5.5 添加了最近搜索历史。v26.5.6 修复了一个关键持久化错误：账户和缓存数据现在在渲染器移至稳定的 &lt;code>app://&lt;/code> 来源后可以在完整应用重启后存活。&lt;/p>
&lt;h3 id="nostrord-发布群组分享弹窗媒体上传和-arch-linux-包">Nostrord 发布群组分享弹窗、媒体上传和 Arch Linux 包&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrord/nostrord">Nostrord&lt;/a>，面向 NIP-29 基于 relay 的群组的 Nostr 客户端，本周发布了 &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v1.0.0">v1.0.0&lt;/a>、&lt;a href="https://github.com/nostrord/nostrord/releases/tag/v1.0.1">v1.0.1&lt;/a> 和 &lt;a href="https://github.com/nostrord/nostrord/releases/tag/v1.0.2">v1.0.2&lt;/a>。v1.0.1 通过 AUR 以 &lt;code>nostrord-bin&lt;/code> 发布 Arch Linux 包，带有 PGP 签名的 &lt;code>.pkg.tar.zst&lt;/code> 构件（&lt;a href="https://github.com/nostrord/nostrord/pull/44">PR #44&lt;/a>），在忙碌频道中向上滚动时的跳转到最新按钮（&lt;a href="https://github.com/nostrord/nostrord/pull/45">PR #45&lt;/a>），以及直接在聊天输入中粘贴图片和媒体（&lt;a href="https://github.com/nostrord/nostrord/pull/46">PR #46&lt;/a>）。v1.0.2 通过 &lt;a href="https://github.com/nostrord/nostrord/pull/49">PR #49&lt;/a> 添加了群组分享，带有分享弹窗，生成 &lt;code>nostr:naddr&lt;/code> URI（kind 39000，NIP-19 + NIP-21）和 Web 友好的 &lt;code>nostrord.com/open/&lt;/code> 链接。&lt;/p>
&lt;h3 id="fips-v030-发布跨平台覆盖nostr-对等发现和未修改-lan-网关">FIPS v0.3.0 发布跨平台覆盖、Nostr 对等发现和未修改 LAN 网关&lt;/h3>
&lt;p>&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a>（自由互联网互联系统），在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#fips-%E6%96%B0%E5%A2%9E%E5%9F%BA%E4%BA%8E-nostr-%E7%9A%84-udpnat-%E5%BC%95%E5%AF%BC">#20&lt;/a> 中介绍的 Nostr 原生网状网络项目，本周发布了 &lt;a href="https://github.com/jmcorgan/fips/releases/tag/v0.3.0">v0.3.0&lt;/a>，这是一个将项目从仅 Linux 扩展到 Linux、macOS、Windows 和 OpenWrt 的重要里程碑。&lt;/p>
&lt;p>主要新增内容是带有 STUN 辅助 UDP NAT 穿透的 Nostr 媒介对等发现。节点现在在公共 Nostr relay 上将签名的覆盖广告发布为 kind:37195 参数化可替换事件。当两个对等节点都在 NAT 后面时，守护进程使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59（礼物包装）&lt;/a> 信令进行提议/应答交换来协调打洞。&lt;/p>
&lt;p>新的 &lt;code>fips-gateway&lt;/code> 二进制文件允许未修改的 LAN 主机在不运行 FIPS 守护进程的情况下访问网状目标。本周为 Nostr VPN 吞吐量跳升提供动力的相同 ring 0.17 ChaCha20-Poly1305 交换也落地于 FIPS v0.3.0。aarch64 上的基准测试显示两节点 TCP 单流从 437 提升至 1097 Mbps，三节点中继路径 ping 延迟从平均 7.68 ms 下降至 0.72 ms。&lt;/p>
&lt;h3 id="camelus-v1101-发布桌面版本">Camelus v1.10.1 发布桌面版本&lt;/h3>
&lt;p>&lt;a href="https://github.com/leo-lox/camelus">Camelus&lt;/a>，面向 Android 和桌面的 Nostr 客户端，发布了 &lt;a href="https://github.com/leo-lox/camelus/releases/tag/v1.10.1">v1.10.1&lt;/a>，带有 Windows 和 Linux 桌面构建，从仅移动分发扩展。&lt;/p>
&lt;h3 id="flotilla-180-发布视频通话邮件渲染和房间提及">Flotilla 1.8.0 发布视频通话、邮件渲染和房间提及&lt;/h3>
&lt;p>&lt;a href="https://flotilla.social">Flotilla&lt;/a>，hodlbod 的 &lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a> 基于 relay 的群组聊天应用，本周发布了 &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.8.0">1.8.0&lt;/a>，带有多项值得关注的新增内容。语音房间现在支持视频：参与者可以在通话中打开摄像头或共享屏幕，带有切换到可固定单源视图的网格布局用于屏幕共享。邮件渲染通过 welshman 库更新到来：Flotilla 现在可以接收嵌入 HTML 邮件内容的消息，并内联渲染 HTML，保留格式、图片和链接。房间提及允许用户引用其他房间和 relay，带有可点击的内联链接。空间搜索现在包含消息内容和本地匹配，以及频道名称。iOS 和 Android 上的原生分享表单现在可用于空间邀请链接。聊天中嵌入的日历事件始终显示日期。&lt;/p>
&lt;h3 id="calendar-by-formstr-发布-v151-包含预约调度和-android-日历同步">Calendar by Formstr 发布 v1.5.1 包含预约调度和 Android 日历同步&lt;/h3>
&lt;p>&lt;a href="https://calendar.formstr.app">Calendar by Formstr&lt;/a>（&lt;a href="https://github.com/formstr-hq/nostr-calendar">github.com/formstr-hq/nostr-calendar&lt;/a>），面向公共和私人事件的 Nostr 原生日历应用，于 5 月 10 日发布了 &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.5.0">v1.5.0&lt;/a>，于 5 月 11 日发布了 &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.5.1">v1.5.1&lt;/a>。&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/89">PR #89&lt;/a> 带来了预约调度，允许用户在其日历上创建可预订的时间段。&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/123">PR #123&lt;/a> 中的只读 Android 日历集成将 Nostr 事件同步到设备日历，使其与其他日历应用一起显示。&lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/130">PR #130&lt;/a> 发布了事件通知。v1.5.1 跟进了 URL 错误修复和 ZSP 元数据更新。&lt;/p>
&lt;h2 id="开发中">开发中&lt;/h2>
&lt;h3 id="amethyst-新增定时帖子nip-9a-社区规则和桌面本地-relay">Amethyst 新增定时帖子、NIP-9A 社区规则和桌面本地 relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>，功能丰富的 Android 客户端，本周在多个重要功能领域合并了 78 个 PR。&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2765">PR #2765&lt;/a> 中的定时帖子落地 Android：用户可以撰写笔记并设置未来的发布时间，队列在设备本地管理。桌面构建在 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2841">PR #2841&lt;/a> 中获得了带有 SQLite 事件持久化的嵌入式本地 relay，允许桌面客户端充当自己的 relay 节点。&lt;/p>
&lt;p>三个 PR 直接在客户端实现了 NIP-9A 社区规则：&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2798">PR #2798&lt;/a> 在发送前在编辑器中根据社区规则验证帖子，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2799">PR #2799&lt;/a> 在新社区流程中添加了结构化 NIP-9A 规则编辑器，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2800">PR #2800&lt;/a> 添加了可选的 NIP-9A 订阅源过滤器，使社区成员可以隐藏违反已发布规则的帖子。这是本周在 NIPs 存储库中提出的 NIP-9A 草案的首个客户端实现。&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2812">PR #2812&lt;/a> 在 Quartz 和 Amethyst 的调试日志中编辑了机密和敏感负载，这是对分享崩溃报告的用户的安全修复。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2821">PR #2821&lt;/a> 为每个发布的 HLS 事件添加了丰富的 &lt;a href="https://nostrcompass.org/zh/topics/nip-92/">NIP-92（imeta）&lt;/a> 标签，并自动发布一个 kind:1 辅助笔记，使直播流出现在标准订阅源中，可被不支持 &lt;a href="https://nostrcompass.org/zh/topics/nip-53/">NIP-53（直播活动）&lt;/a> 的客户端发现。&lt;/p>
&lt;h3 id="shopstr-新增-mcp-审计日志和会话安全">Shopstr 新增 MCP 审计日志和会话安全&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a>，Nostr 上的去中心化市场，本周合并了五个 PR。&lt;a href="https://github.com/shopstr-eng/shopstr/pull/456">PR #456&lt;/a> 中的 MCP 工具层审计日志落地，使市场运营者可以追踪代理操作。&lt;a href="https://github.com/shopstr-eng/shopstr/pull/477">PR #477&lt;/a> 中的会话安全收紧，将 MCP 会话固定到其原始 API 密钥并添加 TTL 驱逐以防止会话劫持。&lt;/p>
&lt;h3 id="dart-ndk-新增-web-支持和-seal-签名验证">Dart NDK 新增 Web 支持和 seal 签名验证&lt;/h3>
&lt;p>&lt;a href="https://github.com/relaystr/dart_ndk">Dart NDK&lt;/a>，Flutter 应用中使用的 Dart Nostr 协议开发库，本周合并了六个 PR。&lt;a href="https://github.com/relaystr/dart_ndk/pull/571">PR #571&lt;/a> 中的 Web 支持通过 &lt;code>SembastCacheManager&lt;/code> 到来，使 Web 构建可以将缓存事件持久化到浏览器存储。&lt;a href="https://github.com/relaystr/dart_ndk/pull/595">PR #595&lt;/a> 中的 seal 签名验证为 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59（礼物包装）&lt;/a> 流落地，使客户端可以确认内部 seal 是由预期发送者创建的。&lt;/p>
&lt;h3 id="rust-nostr-重构标签和代理连接">rust-nostr 重构标签和代理连接&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a>，带有 Python、Kotlin、Swift 和 JavaScript 绑定的 Rust SDK，本周合并了三个 PR。&lt;a href="https://github.com/rust-nostr/nostr/pull/1347">PR #1347&lt;/a> 是一个大型标签返工，规范化了整个 SDK 的标签访问。&lt;a href="https://github.com/rust-nostr/nostr/pull/1351">PR #1351&lt;/a> 在 SDK 层用 &lt;code>Proxy&lt;/code> 替换了 &lt;code>Connection&lt;/code> 类型，&lt;a href="https://github.com/rust-nostr/nostr/pull/1349">PR #1349&lt;/a> 修复了多过滤器 REQ 的订阅验证。&lt;/p>
&lt;h3 id="sprout-发布-v0010-和-v0011">Sprout 发布 v0.0.10 和 v0.0.11&lt;/h3>
&lt;p>&lt;a href="https://github.com/block/sprout">Sprout&lt;/a>，在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/#sprout-%E5%8F%91%E5%B8%83-desktop-v004-%E5%92%8C-v005-%E4%BB%A5%E5%8F%8A-nip-oa-%E4%BB%A3%E7%90%86%E8%AE%A4%E8%AF%81%E5%92%8C%E9%85%8D%E5%AF%B9%E4%B8%AD%E7%BB%A7%E8%BE%B9%E8%BD%A6">#21&lt;/a> 中介绍的 Block 的 Nostr 客户端和 relay，发布了 &lt;a href="https://github.com/block/sprout/releases/tag/v0.0.10">v0.0.10&lt;/a> 和 &lt;a href="https://github.com/block/sprout/releases/tag/v0.0.11">v0.0.11&lt;/a>，带有提及自动补全改进、图片下载支持和代理错误处理修复。&lt;/p>
&lt;h3 id="clave-继续多账户-nostrconnect-推出">Clave 继续多账户 NostrConnect 推出&lt;/h3>
&lt;p>&lt;a href="https://github.com/DocNR/clave">Clave&lt;/a>，在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/#clave-v020-%E5%9C%A8-ios-%E4%B8%8A%E6%8E%A8%E5%87%BA-nip-46-nostr-connect-%E7%AD%BE%E5%90%8D%E7%9A%84%E5%A4%9A%E8%B4%A6%E6%88%B7%E5%8A%9F%E8%83%BD">#21&lt;/a> 中介绍的 iOS NIP-46 远程签名者，本周发布了进一步的构建，推进其多账户 NostrConnect 工作。&lt;a href="https://github.com/DocNR/clave/pull/52">PR #52&lt;/a> 将 Connect 从主页视图呈现的表单提升为顶级跨账户标签，所有配对流程的账户绑定都通过统一选择器进行。build 71 中的安全修复关闭了由于 bunker 流程中的时序错误而存在的每账户 5 连接上限绕过，现在在三个层面强制执行：入口门、表单内轮换门和 NSE 侧检查。&lt;/p>
&lt;h2 id="新项目">新项目&lt;/h2>
&lt;h3 id="tamagostrich-推出去中心化-nip-78-虚拟宠物游戏带-sats-奖励">Tamagostrich 推出去中心化 NIP-78 虚拟宠物游戏，带 sats 奖励&lt;/h3>
&lt;p>&lt;a href="https://github.com/Negr087/tamagostrich">Tamagostrich&lt;/a> 是在 IDENTITY Hackathon 2026 上推出的基于浏览器的虚拟宠物游戏，一只名为 Nori 的雏鸵鸟通过你的 Nostr 社交活动进化。宠物状态存储在 &lt;a href="https://nostrcompass.org/zh/topics/nip-78/">NIP-78&lt;/a> kind:30078 事件中，因此它可以在共享相同密钥对的每台设备上同步。Zap、反应、转发和新粉丝授予 XP；没有活动，幸福感和能量每 24 小时衰减 100 点。里程碑奖励通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47（Nostr Wallet Connect）&lt;/a> 自动以 sats 支付：5 级 50 sats，10 级 210 sats，最高 21 级 420 sats，发送到用户的 &lt;code>lud16&lt;/code> 地址，索赔状态记录在 NIP-78 事件中以防止重复支付。&lt;/p>
&lt;h2 id="协议和规范工作">协议和规范工作&lt;/h2>
&lt;p>NIPs 存储库合并了 &lt;a href="https://github.com/nostr-protocol/nips/pull/2338">PR #2338&lt;/a>，修复了 Marmot 事件 kind 和地理缓存 kind 37516 的 README 参考链接。本周开放了五个新提案：&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2331">PR #2331&lt;/a> 提出了 &lt;strong>NIP-9A：可验证社区规则&lt;/strong>，引入 kind:34551，一个参数化可替换事件，允许社区所有者发布机器可读、密码学签名的规则文档。客户端在用户提交帖子前获取规则，如果违反任何规则则在本地拒绝草稿。配套的 &lt;a href="https://github.com/nostr-protocol/nips/pull/2337">PR #2337&lt;/a> 在 NIP-11 relay 信息文档中添加了可选的 &lt;code>nip9a&lt;/code> 字段。&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2335">PR #2335&lt;/a> 提出了 &lt;strong>Nostr 市场的预约事件&lt;/strong>，定义 kind:32122（参数化可替换预约事件）、kind:1326（仅追加过渡审计记录）和 kind:32124（交易后评价）。谈判是私下进行的：草案提案作为 NIP-59 礼物包装的结构化消息子事件在买卖双方之间发送，因此它们不会进入公共 relay。&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2334">PR #2334&lt;/a> 提出了 &lt;strong>Nostr 市场的托管服务&lt;/strong>，使用 kind:30303 供托管运营者声明其 EVM 合约地址、字节码哈希、支持的链、费用表和接受的代币。买卖双方发布 kind:17388 可替换事件声明其信任的托管提供商和接受的支付形式。&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2333">PR #2333&lt;/a> 提出了 &lt;strong>NIP-99 市场列表的住宿列表档案&lt;/strong>，用 H3 地理空间索引 &lt;code>g&lt;/code> 标签和针对短期租赁的住宿特定推广字段扩展 NIP-99 分类列表。&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2332">PR #2332&lt;/a> 提出了 &lt;strong>NIP-BC：链上 Zap（kind 8333）&lt;/strong>，利用 Nostr 密钥和比特币 Taproot 地址之间的直接同一性：Nostr 公钥是 32 字节的 x-only secp256k1 密钥，BIP-341 P2TR 内部密钥也是如此，这意味着任何 Nostr 用户已经拥有一个可从其公钥确定性派生的比特币主网地址，无需 LNURL、托管方或 Lightning 地址。kind 号码反映了 NIP-57 的惯例：9735 是 Lightning P2P 端口；8333 是比特币主网的 P2P 端口。&lt;/p>
&lt;h2 id="nip-深度解析nip-78应用特定数据">NIP 深度解析：NIP-78（应用特定数据）&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-78/">NIP-78&lt;/a> 定义了应用程序使用 Nostr 事件代表用户存储任意私有或公共数据的标准方式。核心事件 kind 是 30078，一个参数化可替换事件，其中 &lt;code>d&lt;/code> 标签是应用程序定义的标识符字符串。应用程序给其存储槽一个唯一的 &lt;code>d&lt;/code> 标签（例如 &lt;code>tamagostrich-pet-state&lt;/code> 或 &lt;code>amethyst-settings&lt;/code>）并发布带有其需要持久化的 JSON 或文本内容的 30078 事件。由于 30078 是可替换的并按 &lt;code>d&lt;/code> 标签限定范围，应用程序可以通过发布具有相同 &lt;code>d&lt;/code> 标签的新事件来更新存储的状态，relay 只保留最新版本。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;64字符十六进制&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;64字符十六进制&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1747180800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30078&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;tamagostrich-pet-state&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;level\&amp;#34;:7,\&amp;#34;xp\&amp;#34;:1420,\&amp;#34;happiness\&amp;#34;:82,\&amp;#34;energy\&amp;#34;:61}&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;128字符十六进制&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>主要动机是无需集中式服务器的跨设备同步。任何知道用户公钥和应用程序 &lt;code>d&lt;/code> 标签的客户端都可以从用户的 relay 集获取当前状态，并在任何设备上重建应用程序状态。用户拥有数据，因为它存储在由其密钥对签名的事件中，他们可以根据 &lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65（Relay 列表元数据）&lt;/a> 中的 relay 列表选择发布到哪些 relay。&lt;/p>
&lt;p>对于私有应用程序数据，NIP-78 事件可以在发布前使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44（版本化加密）&lt;/a> 或较旧的 &lt;a href="https://nostrcompass.org/zh/topics/nip-04/">NIP-04&lt;/a> 加密内容字段，使 relay 存储只有密钥持有者才能解密的密文。对于公共应用程序数据，如 Tamagostrich 在用户档案上显示的成就徽章，可以不加密存储，使其他客户端可以读取和显示。&lt;/p>
&lt;p>该规范故意将内容格式留为开放。应用程序选择自己的架构；NIP-78 只标准化事件 kind 和 &lt;code>d&lt;/code> 标签范围机制。NIP-78 的当前用户包括 Tamagostrich（宠物状态同步）、Wisp（kind:30078 钱包备份和跨设备安全设置同步）、NosPress（CMS 编排状态）以及多个 Nostr 客户端设置同步实现。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>主要来源：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/78.md">NIP-78 规范&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/Negr087/tamagostrich">Tamagostrich&lt;/a>：本周的生产实现&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>另见：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://nostrcompass.org/zh/topics/nip-51/">NIP-51：列表&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65：Relay 列表元数据&lt;/a>&lt;/li>
&lt;/ul>
&lt;h2 id="nip-深度解析nip-98http-认证">NIP 深度解析：NIP-98（HTTP 认证）&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-98/">NIP-98&lt;/a> 定义了一种 HTTP 认证方案，允许 Nostr 密钥对授权对 HTTP 服务器的请求，无需用户名、密码或 OAuth 令牌进行服务器端 API 访问。客户端构造一个短期的 kind 27235 Nostr 事件，用其私钥签名，将 JSON base64 编码，并在 &lt;code>Authorization: Nostr &amp;lt;base64&amp;gt;&lt;/code> HTTP 头中发送。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;64字符十六进制&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;64字符十六进制&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1747180800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">27235&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;u&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://files.example.com/upload&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;method&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;POST&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;payload&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;请求体的sha256哈希&amp;gt;&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;128字符十六进制&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>kind 27235 事件在 &lt;code>method&lt;/code> 标签中包含 HTTP 方法，在 &lt;code>u&lt;/code> 标签中包含完整的请求 URL，以及 &lt;code>created_at&lt;/code> 时间戳。服务器验证签名，检查方法和 URL 与实际请求匹配，并验证时间戳是最近的（几分钟内）以防止重放攻击。如果验证通过，服务器将请求公钥视为已验证身份。&lt;/p>
&lt;p>该设计意味着任何实现 NIP-98 的服务器都可以在没有任何事先注册、账户创建或共享密钥的情况下验证 Nostr 用户身份。从用户的角度来看，认证是透明的：他们的 Nostr 签名密钥也是其 API 凭据。&lt;/p>
&lt;p>NIP-98 用于 Blossom（&lt;a href="https://github.com/hzrd149/blossom/blob/master/buds/01.md">BUD-01&lt;/a>）的 blob 上传和下载认证。Routstr 将其用于 npub 级 RBAC 的每请求 HTTP API 访问控制。Sprout 将其用于 git 传输认证和 REST relay 访问，在最近的重构中完全替换了 Bearer 令牌认证。Clave 将其用于代理配对调用。Alby Hub 将 NIP-98 派生的认证用于其管理 API，Nostr.build 将其用于上传授权。&lt;/p>
&lt;p>该规范定义了一个可选扩展：包含请求体 SHA-256 哈希的 &lt;code>payload&lt;/code> 标签，允许服务器验证签名事件和请求体是一起创建的，防止中间人在客户端签署认证事件后替换不同的体。&lt;/p>
&lt;hr>
&lt;p>&lt;strong>主要来源：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/98.md">NIP-98 规范&lt;/a>&lt;/li>
&lt;li>&lt;a href="https://github.com/hzrd149/blossom/blob/master/buds/01.md">BUD-01：Blossom 上传认证&lt;/a>&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>另见：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://nostrcompass.org/zh/topics/nip-96/">NIP-96：HTTP 文件存储集成&lt;/a>&lt;/li>
&lt;/ul></content:encoded></item><item><title>Nostr Compass #21</title><link>https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/</link><pubDate>Wed, 06 May 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您每周的 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/marmot-protocol">Marmot Protocol&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/#mdk-080-%e6%96%b0%e5%a2%9e-mip-05-%e9%80%9a%e7%9f%a5%e5%8e%9f%e8%af%ad%e5%92%8c%e5%8f%af%e5%af%bb%e5%9d%80%e5%af%86%e9%92%a5%e5%8c%85">MDK 0.8.0&lt;/a>，包含首批 MIP-05 通知原语、可寻址 &lt;a href="https://nostrcompass.org/zh/topics/nip-51/">NIP-51（列表）&lt;/a> 密钥包以及强化的安全审查。&lt;a href="https://github.com/lawalletio/lawallet-nwc">LaWallet NWC&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/#lawallet-nwc-v0100-%e5%8f%91%e5%b8%83%e5%ae%8c%e6%95%b4-monorepo-%e5%92%8c%e7%94%a8%e6%88%b7%e7%ab%af%e9%92%b1%e5%8c%85">v0.10.0&lt;/a>，这是自获得 OpenSats 资助以来最大的版本，带来了完整的管理控制台、用户端钱包、端到端活动日志以及新的 &lt;code>LightningAddress 1→N&lt;/code> 和 &lt;code>NWCConnection&lt;/code> 架构。&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 完成了一次 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/#amethyst-%e9%80%9a%e8%bf%87-keep-alive%e3%80%81jwt-%e5%bc%b9%e6%80%a7%e5%92%8c%e7%94%9f%e5%91%bd%e5%91%a8%e6%9c%9f%e8%ae%a2%e9%98%85%e7%a8%b3%e5%ae%9a-nests">Nests 稳定性冲刺&lt;/a>，消除了 JWT 刷新时的音频中断，引入了生命周期感知密钥数据订阅、relay keep-alive 重连以及动画发言参与者指示器。&lt;a href="https://github.com/DanConwayDev/ngit-cli">ngit&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/#ngit-v242-%e5%92%8c-v243-%e4%bf%ae%e5%a4%8d-grasp-%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%a3%80%e6%b5%8b%e5%92%8c%e5%a4%9a%e8%bf%9c%e7%a8%8b%e7%8a%b6%e6%80%81%e4%ba%8b%e4%bb%b6">v2.4.2&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/#ngit-v242-%e5%92%8c-v243-%e4%bf%ae%e5%a4%8d-grasp-%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%a3%80%e6%b5%8b%e5%92%8c%e5%a4%9a%e8%bf%9c%e7%a8%8b%e7%8a%b6%e6%80%81%e4%ba%8b%e4%bb%b6">v2.4.3&lt;/a>，修复了 PR 提交的 GRASP 服务器检测和多远程状态事件过滤问题。&lt;a href="https://github.com/0ceanSlim/grain">GRAIN&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/#grain-v054-%e5%ae%8c%e6%88%90%e7%94%9f%e4%ba%a7%e5%8a%a0%e5%9b%ba%e5%92%8c%e9%9d%99%e9%bb%98%e6%95%b0%e6%8d%ae%e4%b8%a2%e5%a4%b1%e4%bf%ae%e5%a4%8d">v0.5.4&lt;/a>，包含生产加固和 Docker 快速启动中的静默数据丢失修复。&lt;a href="https://github.com/MostroP2P/mostro-core">Mostro Core&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/#mostro-core-v0101-%e6%96%b0%e5%a2%9e-pgp-%e7%ad%be%e5%90%8d%e5%8f%91%e5%b8%83%e6%9e%84%e4%bb%b6">v0.10.1&lt;/a>，作为上周 v0.10.0 P2P 聊天协议模块的后续，包含 PGP 签名发布构件。&lt;a href="https://github.com/clave-mobile">Clave&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/#clave-v020-%e5%9c%a8-ios-%e4%b8%8a%e6%8e%a8%e5%87%ba-nip-46-nostr-connect-%e7%ad%be%e5%90%8d%e7%9a%84%e5%a4%9a%e8%b4%a6%e6%88%b7%e5%8a%9f%e8%83%bd">v0.2.0&lt;/a>，在 iOS 上支持多账户。&lt;/p>
&lt;h2 id="头条故事">头条故事&lt;/h2>
&lt;h3 id="mdk-080-新增-mip-05-通知原语和可寻址密钥包">MDK 0.8.0 新增 MIP-05 通知原语和可寻址密钥包&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a>，&lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 协议的 Rust 核心库，于 5 月 4 日发布了 &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.8.0">v0.8.0&lt;/a>。此版本发布了首批 MIP-05 通知构建块，将 MIP-00 密钥包移至可寻址事件，使用户的密钥包可以原地替换，改善了混合版本组兼容性，扩展了移动绑定的 UniFFI 覆盖范围，并收紧了围绕管理操作、提交、存储、加密边界和重放处理的验证路径。MIP-05 原语包括在 &lt;a href="https://github.com/marmot-protocol/mdk/pull/235">PR #235&lt;/a> 中添加的叶子索引助手，这些助手为下游客户端提供足够的信息以在不泄露组结构的情况下投递每个收件人的推送通知。运营修复也已落地：&lt;a href="https://github.com/marmot-protocol/mdk/pull/273">PR #273&lt;/a> 恢复了 mdk-core 在 crates.io 上的发布，&lt;a href="https://github.com/marmot-protocol/mdk/pull/269">PR #269&lt;/a> 在 &lt;code>test-utils&lt;/code> Cargo feature 后面暴露了 test_util 模块，使外部客户端测试套件可以共享 Marmot 的测试工具。对于客户端团队，最重要的实际变化是可寻址密钥包：用户的 MIP-00 公告现在是一种可原地替换的 kind，因此轮换到新的密钥包不再会在 relay 上留下陈旧的事件。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您每周的 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/marmot-protocol">Marmot Protocol&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/#mdk-080-%e6%96%b0%e5%a2%9e-mip-05-%e9%80%9a%e7%9f%a5%e5%8e%9f%e8%af%ad%e5%92%8c%e5%8f%af%e5%af%bb%e5%9d%80%e5%af%86%e9%92%a5%e5%8c%85">MDK 0.8.0&lt;/a>，包含首批 MIP-05 通知原语、可寻址 &lt;a href="https://nostrcompass.org/zh/topics/nip-51/">NIP-51（列表）&lt;/a> 密钥包以及强化的安全审查。&lt;a href="https://github.com/lawalletio/lawallet-nwc">LaWallet NWC&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/#lawallet-nwc-v0100-%e5%8f%91%e5%b8%83%e5%ae%8c%e6%95%b4-monorepo-%e5%92%8c%e7%94%a8%e6%88%b7%e7%ab%af%e9%92%b1%e5%8c%85">v0.10.0&lt;/a>，这是自获得 OpenSats 资助以来最大的版本，带来了完整的管理控制台、用户端钱包、端到端活动日志以及新的 &lt;code>LightningAddress 1→N&lt;/code> 和 &lt;code>NWCConnection&lt;/code> 架构。&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 完成了一次 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/#amethyst-%e9%80%9a%e8%bf%87-keep-alive%e3%80%81jwt-%e5%bc%b9%e6%80%a7%e5%92%8c%e7%94%9f%e5%91%bd%e5%91%a8%e6%9c%9f%e8%ae%a2%e9%98%85%e7%a8%b3%e5%ae%9a-nests">Nests 稳定性冲刺&lt;/a>，消除了 JWT 刷新时的音频中断，引入了生命周期感知密钥数据订阅、relay keep-alive 重连以及动画发言参与者指示器。&lt;a href="https://github.com/DanConwayDev/ngit-cli">ngit&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/#ngit-v242-%e5%92%8c-v243-%e4%bf%ae%e5%a4%8d-grasp-%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%a3%80%e6%b5%8b%e5%92%8c%e5%a4%9a%e8%bf%9c%e7%a8%8b%e7%8a%b6%e6%80%81%e4%ba%8b%e4%bb%b6">v2.4.2&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/#ngit-v242-%e5%92%8c-v243-%e4%bf%ae%e5%a4%8d-grasp-%e6%9c%8d%e5%8a%a1%e5%99%a8%e6%a3%80%e6%b5%8b%e5%92%8c%e5%a4%9a%e8%bf%9c%e7%a8%8b%e7%8a%b6%e6%80%81%e4%ba%8b%e4%bb%b6">v2.4.3&lt;/a>，修复了 PR 提交的 GRASP 服务器检测和多远程状态事件过滤问题。&lt;a href="https://github.com/0ceanSlim/grain">GRAIN&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/#grain-v054-%e5%ae%8c%e6%88%90%e7%94%9f%e4%ba%a7%e5%8a%a0%e5%9b%ba%e5%92%8c%e9%9d%99%e9%bb%98%e6%95%b0%e6%8d%ae%e4%b8%a2%e5%a4%b1%e4%bf%ae%e5%a4%8d">v0.5.4&lt;/a>，包含生产加固和 Docker 快速启动中的静默数据丢失修复。&lt;a href="https://github.com/MostroP2P/mostro-core">Mostro Core&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/#mostro-core-v0101-%e6%96%b0%e5%a2%9e-pgp-%e7%ad%be%e5%90%8d%e5%8f%91%e5%b8%83%e6%9e%84%e4%bb%b6">v0.10.1&lt;/a>，作为上周 v0.10.0 P2P 聊天协议模块的后续，包含 PGP 签名发布构件。&lt;a href="https://github.com/clave-mobile">Clave&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-05-06-newsletter/#clave-v020-%e5%9c%a8-ios-%e4%b8%8a%e6%8e%a8%e5%87%ba-nip-46-nostr-connect-%e7%ad%be%e5%90%8d%e7%9a%84%e5%a4%9a%e8%b4%a6%e6%88%b7%e5%8a%9f%e8%83%bd">v0.2.0&lt;/a>，在 iOS 上支持多账户。&lt;/p>
&lt;h2 id="头条故事">头条故事&lt;/h2>
&lt;h3 id="mdk-080-新增-mip-05-通知原语和可寻址密钥包">MDK 0.8.0 新增 MIP-05 通知原语和可寻址密钥包&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a>，&lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 协议的 Rust 核心库，于 5 月 4 日发布了 &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.8.0">v0.8.0&lt;/a>。此版本发布了首批 MIP-05 通知构建块，将 MIP-00 密钥包移至可寻址事件，使用户的密钥包可以原地替换，改善了混合版本组兼容性，扩展了移动绑定的 UniFFI 覆盖范围，并收紧了围绕管理操作、提交、存储、加密边界和重放处理的验证路径。MIP-05 原语包括在 &lt;a href="https://github.com/marmot-protocol/mdk/pull/235">PR #235&lt;/a> 中添加的叶子索引助手，这些助手为下游客户端提供足够的信息以在不泄露组结构的情况下投递每个收件人的推送通知。运营修复也已落地：&lt;a href="https://github.com/marmot-protocol/mdk/pull/273">PR #273&lt;/a> 恢复了 mdk-core 在 crates.io 上的发布，&lt;a href="https://github.com/marmot-protocol/mdk/pull/269">PR #269&lt;/a> 在 &lt;code>test-utils&lt;/code> Cargo feature 后面暴露了 test_util 模块，使外部客户端测试套件可以共享 Marmot 的测试工具。对于客户端团队，最重要的实际变化是可寻址密钥包：用户的 MIP-00 公告现在是一种可原地替换的 kind，因此轮换到新的密钥包不再会在 relay 上留下陈旧的事件。&lt;/p>
&lt;h3 id="lawallet-nwc-v0100-发布完整-monorepo-和用户端钱包">LaWallet NWC v0.10.0 发布完整 monorepo 和用户端钱包&lt;/h3>
&lt;p>&lt;a href="https://github.com/lawalletio/lawallet-nwc">LaWallet NWC&lt;/a>，LaWallet 团队的 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a> Nostr Wallet Connect 实现，于 4 月 30 日发布了 &lt;a href="https://github.com/lawalletio/lawallet-nwc/releases/tag/v0.10.0">v0.10.0&lt;/a>。这是自项目获得 OpenSats 资助以来最大的版本。它发布了完整的 monorepo、完整的管理控制台、用户端钱包、端到端活动日志、动态品牌以及新的 &lt;code>LightningAddress 1→N&lt;/code> 和 &lt;code>NWCConnection&lt;/code> 架构，解锁了按地址的 NWC 路由，其中一个 Lightning 地址可以在不同的 RBAC 角色下扇出到多个 NWC 连接。在 &lt;a href="https://github.com/lawalletio/lawallet-nwc/pull/191">PR #191&lt;/a> 中发布的面向用户的钱包涵盖了入门、主页、收发款、扫描、货币、活动摘要和离线缓存。&lt;a href="https://github.com/lawalletio/lawallet-nwc/pull/196">PR #196&lt;/a> 添加了通过 Scalar 渲染的实时 OpenAPI 3.1 参考，包含基于角色的访问控制文档。&lt;/p>
&lt;h3 id="amethyst-通过-keep-alivejwt-弹性和生命周期订阅稳定-nests">Amethyst 通过 keep-alive、JWT 弹性和生命周期订阅稳定 Nests&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>，功能丰富的 Android 客户端，继续了在通讯 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#amethyst-%E9%80%9A%E8%BF%87-moq-%E4%BA%92%E6%93%8D%E4%BD%9C%E6%B5%8B%E8%AF%95%E6%8E%A8%E8%BF%9B-nests-%E9%9F%B3%E9%A2%91%E5%AE%A4">#20&lt;/a> 中涵盖的 &lt;a href="https://nostrcompass.org/zh/topics/nip-53/">NIP-53&lt;/a> Nests 音频室工作，进行了一次稳定性冲刺，专注于在生产环境中破坏通话的故障模式。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2733">PR #2733&lt;/a> 中的音频中断修复在 JWT 刷新期间将新凭据获取与活动流重叠，使监听者在令牌轮换时不会听到中断。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2730">PR #2730&lt;/a> 中的新 keep-alive 机制在不需要用户手动操作的情况下重新连接断开的 relay，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2728">PR #2728&lt;/a> 将旧版 &lt;code>KeyDataSourceSubscription&lt;/code> 替换为 &lt;code>LifecycleAwareKeyDataSourceSubscription&lt;/code>，将订阅生命周期绑定到 Android Activity 生命周期。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2724">PR #2724&lt;/a> 为监听者添加了一个动画外环指示器，在多发言者会话中突出显示正在发言的参与者。&lt;/p>
&lt;h3 id="ngit-v242-和-v243-修复-grasp-服务器检测和多远程状态事件">ngit v2.4.2 和 v2.4.3 修复 GRASP 服务器检测和多远程状态事件&lt;/h3>
&lt;p>&lt;a href="https://github.com/DanConwayDev/ngit-cli">ngit&lt;/a>，用于 &lt;a href="https://nostrcompass.org/zh/topics/nip-34/">NIP-34&lt;/a> 协作的命令行工具和 &lt;code>git&lt;/code> 插件，于 4 月 28 日发布了 &lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.2">v2.4.2&lt;/a>，于 5 月 1 日发布了 &lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.3">v2.4.3&lt;/a>。v2.4.2 修复了一个 URL 规范化不匹配问题，其中 &lt;code>repo_grasps&lt;/code> 保存了规范化的主机名，但比较时却使用了完整的克隆 URL。v2.4.3 修复了当仓库有多个共享相同标识符的 &lt;code>nostr://&lt;/code> 远程时出现的状态事件歧义：relay 可能返回由其他远程的维护者编写的状态事件，&lt;code>run_list&lt;/code> 中的状态事件候选者现在过滤为当前远程仓库公告的维护者。&lt;/p>
&lt;h3 id="grain-v054-完成生产加固和静默数据丢失修复">GRAIN v0.5.4 完成生产加固和静默数据丢失修复&lt;/h3>
&lt;p>&lt;a href="https://github.com/0ceanSlim/grain">GRAIN&lt;/a>，基于 Go 的 Nostr relay 和客户端库，于 4 月 30 日发布了 &lt;a href="https://github.com/0ceanSlim/grain/releases/tag/v0.5.4">v0.5.4&lt;/a>。该版本汇集了自 v0.5.3 以来积累的六个修复，包括 Docker 快速启动中的静默数据丢失错误（之前在容器重启时会丢弃事件）、可寻址事件读取中的存储层正确性错误以及两个连接跟踪错误。v0.5.3 最初针对的生产加固对：每 IP 速率限制和 IP 黑名单，现均已到位并可配置。&lt;/p>
&lt;h3 id="mostro-core-v0101-新增-pgp-签名发布构件">Mostro Core v0.10.1 新增 PGP 签名发布构件&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro-core">Mostro Core&lt;/a>，为 Mostro 守护进程和其他下游应用程序提供点对点功能的 Rust 库，于 4 月 28 日发布了 &lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.10.1">v0.10.1&lt;/a>，作为&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#mostro-core-v0100-%E5%92%8C-mostro-mobile-v125-%E9%87%87%E7%94%A8-nip-59-%E5%8F%8C%E5%AF%86%E9%92%A5%E7%A4%BC%E7%89%A9%E5%8C%85%E8%A3%85">上周 v0.10.0 P2P 聊天协议模块&lt;/a>的后续。新版本添加了 PGP 签名发布构件和 &lt;code>verify-release&lt;/code> 流程，使下游打包者可以在分发库之前确认构件来源。&lt;/p>
&lt;h2 id="版本发布">版本发布&lt;/h2>
&lt;h3 id="clave-v020-在-ios-上推出-nip-46-nostr-connect-签名的多账户功能">Clave v0.2.0 在 iOS 上推出 NIP-46 (Nostr Connect) 签名的多账户功能&lt;/h3>
&lt;p>&lt;a href="https://github.com/clave-mobile">Clave&lt;/a>，使用 APNs 进行推送投递的 iOS &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 远程签名应用（在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#clave-%E9%80%9A%E8%BF%87-apns-%E5%B0%86-nip-46-%E8%BF%9C%E7%A8%8B%E7%AD%BE%E5%90%8D%E5%B8%A6%E5%88%B0-ios">#20&lt;/a> 中介绍），于 5 月 5 日发布了 &lt;a href="https://github.com/clave-mobile/clave/releases">v0.2.0&lt;/a>。这是迄今为止最大的更新，引入了多账户支持：Clave 现在可以在一台设备上持有最多四个账户，带有一键切换器和按账户隔离。&lt;a href="https://github.com/clave-mobile/clave/pull/22">PR #22&lt;/a> 在 APNs 负载中添加了 &lt;code>signer_pubkey&lt;/code> 字段，使设备在显示提示之前知道远程签名请求属于哪个账户。&lt;/p>
&lt;h3 id="wisp-发布-v103--v105-稳定性工作">Wisp 发布 v1.0.3 → v1.0.5 稳定性工作&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a>，&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#wisp-v100-%E4%BB%8E-beta-%E6%AF%95%E4%B8%9A">在 #20 中从 beta 毕业&lt;/a>的 Android 客户端，于 5 月 4 日发布了 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.0.3">v1.0.3&lt;/a>、&lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.0.4">v1.0.4&lt;/a> 和 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.0.5">v1.0.5&lt;/a>，包含稳定性工作。&lt;a href="https://github.com/barrydeen/wisp/pull/506">PR #506&lt;/a> 为完整媒体加载时添加了 Thumbhash 模糊图像预览，&lt;a href="https://github.com/barrydeen/wisp/pull/514">PR #514&lt;/a> 减少了底部标签切换时的卡顿。&lt;/p>
&lt;h3 id="amber-610-pre1-发布布局和稳定性修复">Amber 6.1.0-pre1 发布布局和稳定性修复&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>，用于 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55（Android 签名应用）&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 的 Android 签名应用，发布了 &lt;a href="https://github.com/greenart7c3/Amber/releases">v6.1.0-pre1&lt;/a>，对新应用连接流程进行了布局改进并修复了多个崩溃问题。&lt;a href="https://github.com/greenart7c3/Amber/pull/416">PR #416&lt;/a> 修复了 &lt;code>ActivityStatsBar&lt;/code> 布局和文本溢出问题，&lt;a href="https://github.com/greenart7c3/Amber/pull/411">PR #411&lt;/a> 确保 &lt;code>SignerActivity&lt;/code> 在处理请求后始终关闭。&lt;/p>
&lt;h3 id="routstr-core-v043-改善支付退款和使用报告">Routstr Core v0.4.3 改善支付、退款和使用报告&lt;/h3>
&lt;p>&lt;a href="https://github.com/Routstr/routstr-core">Routstr Core&lt;/a>，将 Nostr 用于服务发现并将 &lt;a href="https://nostrcompass.org/zh/topics/cashu/">Cashu（Nostr 上的 Chaumian 电子现金）&lt;/a> 微支付用于私人使用计费的去中心化推理层，于 5 月 1 日以预发布形式发布了 &lt;a href="https://github.com/Routstr/routstr-core/releases">v0.4.3&lt;/a>。该版本改善了支付和退款处理，优化了成本跟踪和使用报告。&lt;/p>
&lt;h3 id="nostria-v3137-到-v3141-新增-web-书签和自动主题">Nostria v3.1.37 到 v3.1.41 新增 Web 书签和自动主题&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>，多平台 Nostr 客户端，于 4 月 30 日和 5 月 4 日发布了 &lt;a href="https://github.com/nostria-app/nostria/releases">v3.1.37 到 v3.1.41&lt;/a>。这些版本添加了 &lt;a href="https://nostrcompass.org/zh/topics/nip-b0/">NIP-B0（Web 书签）&lt;/a> 支持、跟随设备设置的&amp;quot;自动&amp;quot;主题、应用内 PDF 查看以及改进的文章和笔记编辑器。&lt;/p>
&lt;h3 id="noornote-v089-修复桌面首次启动空白屏幕">NoorNote v0.8.9 修复桌面首次启动空白屏幕&lt;/h3>
&lt;p>&lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a>，跨平台 Nostr 客户端，于 4 月 28 日发布了 &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.8.9">v0.8.9&lt;/a>，修复了桌面应用首次启动时欢迎和登录屏幕无法渲染的空白屏幕错误。&lt;/p>
&lt;h3 id="kubo-v034-到-v041-发布带家长控制和信任网络订阅源管理的儿童安全-nostr-视频平台">Kubo v0.3.4 到 v0.4.1 发布带家长控制和信任网络订阅源管理的儿童安全 Nostr 视频平台&lt;/h3>
&lt;p>&lt;a href="https://github.com/JeroenOnNostr/kubo">Kubo&lt;/a>，Nostr 上的儿童安全视频平台，让家长通过信任网络过滤器管理孩子的内容世界，于 5 月 4 日和 5 日发布了 &lt;a href="https://github.com/JeroenOnNostr/kubo/releases/tag/kubo-v0.3.4">v0.3.4&lt;/a>、&lt;a href="https://github.com/JeroenOnNostr/kubo/releases/tag/kubo-v0.3.5">v0.3.5&lt;/a>、&lt;a href="https://github.com/JeroenOnNostr/kubo/releases/tag/kubo-v0.4.0">v0.4.0&lt;/a> 和 &lt;a href="https://github.com/JeroenOnNostr/kubo/releases/tag/kubo-v0.4.1">v0.4.1&lt;/a>。每个孩子获得一个独立的 Nostr 密钥对和一个以视频为主的订阅源，家长可以控制时间限制（每天 15 到 180 分钟）、允许的时间窗口、发布操作可见性，以及可选的滚动上限。信任分配分三个级别（查看、互动、扩展）。&lt;/p>
&lt;h2 id="未发布的变更">未发布的变更&lt;/h2>
&lt;h3 id="sprout-发布-desktop-v004-和-v005-以及-nip-oa-代理认证和配对中继边车">Sprout 发布 Desktop v0.0.4 和 v0.0.5 以及 NIP-OA 代理认证和配对中继边车&lt;/h3>
&lt;p>&lt;a href="https://github.com/block/sprout">Sprout&lt;/a>，Block 的内置 relay 的 Nostr 客户端，于 5 月 5 日发布了 &lt;a href="https://github.com/block/sprout/releases">Sprout Desktop v0.0.4&lt;/a>，于 5 月 6 日发布了 &lt;a href="https://github.com/block/sprout/releases">v0.0.5&lt;/a>，同时合并了约 80 个 PR。&lt;a href="https://github.com/block/sprout/pull/471">PR #471&lt;/a> 中的旗舰变更将 NIP-OA 代理认证连接到 relay 的 NIP-43 成员资格流程，使自主代理可以在 relay 授予访问权限之前证明特定的人类公钥授权了其操作。&lt;a href="https://github.com/block/sprout/pull/467">PR #467&lt;/a> 中新增了用于 NIP-AB 设备配对的临时边车 relay &lt;code>sprout-pair-relay&lt;/code>。&lt;/p>
&lt;h3 id="nostream-新增-marmot-relay-支持和-nip-25-反应">nostream 新增 Marmot relay 支持和 NIP-25 反应&lt;/h3>
&lt;p>&lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a>，Node.js relay 实现，合并了一周的协议新增内容。&lt;a href="https://github.com/Cameri/nostream/pull/602">PR #602&lt;/a> 中的 Marmot Protocol relay 支持涵盖 MIP 00 到 03，为 relay 提供了 Marmot 加密消息事件的一级存储和转发。&lt;a href="https://github.com/Cameri/nostream/pull/589">PR #589&lt;/a> 中的 &lt;a href="https://nostrcompass.org/zh/topics/nip-25/">NIP-25&lt;/a> 反应支持、&lt;a href="https://github.com/Cameri/nostream/pull/586">PR #586&lt;/a> 中的 &lt;code>#g&lt;/code> 过滤器地理哈希前缀匹配也已落地。&lt;/p>
&lt;h3 id="strfry-新增每连接可观测性并降低-nofiles-上限">strfry 新增每连接可观测性并降低 nofiles 上限&lt;/h3>
&lt;p>&lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a>，C++ Nostr relay，合并了 14 个针对可观测性和运营卫生的 PR。&lt;a href="https://github.com/hoytech/strfry/pull/218">PR #218&lt;/a> 新增了每连接待发出站可观测性和可配置的背压上限。&lt;a href="https://github.com/hoytech/strfry/pull/224">PR #224&lt;/a> 从每事件监视器扇出中移除了 &lt;code>std::function&lt;/code> 堆分配，切换到直接 &lt;code>map.find()&lt;/code> 查找，降低了繁忙 relay 上的分配器压力。&lt;a href="https://github.com/hoytech/strfry/pull/235">PR #235&lt;/a> 将 &lt;code>nofiles&lt;/code> 上限从 1,000,000 降至 524,288 以适应内核默认范围。&lt;/p>
&lt;h3 id="damus-用-purple-代理替换-tenor-gif-并发布压缩-ux">Damus 用 Purple 代理替换 Tenor GIF 并发布压缩 UX&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>，iOS Nostr 客户端，合并了 &lt;a href="https://github.com/damus-io/damus/pull/3737">PR #3737&lt;/a>，将 Tenor GIF 集成替换为 &lt;a href="https://damus.io/purple/">Damus Purple&lt;/a> 代理，由 Damus 的托管订阅服务代表客户端中继 GIF 请求，使个人用户不再直接查询 Tenor 的服务器。&lt;a href="https://github.com/damus-io/damus/pull/3733">PR #3733&lt;/a> 改善了大型数据库压缩 UX。&lt;/p>
&lt;h3 id="primal-android-改善探索提醒和-nip-05-验证徽章">Primal Android 改善探索、提醒和 NIP-05 验证徽章&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> 合并了 &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1043">PR #1043&lt;/a>，修复了 &lt;code>_@domain&lt;/code> 标识符用户的 &lt;a href="https://nostrcompass.org/zh/topics/nip-05/">NIP-05（域名验证）&lt;/a> 验证徽章闪烁问题，&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1041">PR #1041&lt;/a> 实现了带有最近用户和最近搜索的探索落地标签，&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1045">PR #1045&lt;/a> 实现了提醒过滤器。&lt;/p>
&lt;h3 id="alby-hub-从应用连接新增-nwc-支付">Alby Hub 从应用连接新增 NWC 支付&lt;/h3>
&lt;p>&lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a> 合并了 &lt;a href="https://github.com/getAlby/hub/pull/2267">PR #2267&lt;/a>，允许从应用连接进行支付，两者均通过 Alby Hub 的 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47（Nostr Wallet Connect）&lt;/a> 接口发布。&lt;/p>
&lt;h3 id="routstrd-auth面向团队的-dockerized-routstrd带-nip-98-认证和-npub-rbac">routstrd-auth：面向团队的 Dockerized Routstrd，带 NIP-98 认证和 npub RBAC&lt;/h3>
&lt;p>&lt;a href="https://github.com/Routstr/routstrd-auth">routstrd-auth&lt;/a>，由 Routstr 团队于 4 月 27 日创建，是专为多用户团队部署设计的 Routstrd Docker 化变体，个人运营者无需各自运行守护进程。客户端端点采用 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/98.md">NIP-98&lt;/a> HTTP 认证和所有权跟踪，因此经 Nostr 签名的 HTTP 请求可以验证调用者身份并确认客户端属于该 npub。&lt;/p>
&lt;h3 id="routstrd-集成-hermes-用于守护进程客户端和远程模式">Routstrd 集成 Hermes 用于守护进程客户端和远程模式&lt;/h3>
&lt;p>&lt;a href="https://github.com/routstr/routstrd">Routstrd&lt;/a>，协调 Routstr 推理客户端的本地守护进程，合并了 &lt;a href="https://github.com/routstr/routstrd/pull/22">PR #22&lt;/a>，添加了与 &lt;a href="https://github.com/NousResearch/hermes-agent">Hermes Agent&lt;/a>（Nous Research 的开源 AI 代理）的集成，使代理的配置文件自动填充 Routstrd 通过 Nostr 发现的模型提供商和 API 密钥。&lt;/p>
&lt;h3 id="whitenoise-rs-发布按账户数据库隔离和提案升级">whitenoise-rs 发布按账户数据库隔离和提案升级&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a>，White Noise 通讯器的 Rust 核心库，合并了 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/796">PR #796&lt;/a>（&amp;ldquo;Phase 18e&amp;rdquo;），将消息投影表移至按账户数据库，&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/791">PR #791&lt;/a> 添加了提案升级，使群组可以在所有成员支持时用新的提案类型扩展其功能。&lt;/p>
&lt;h3 id="whitenoise-flutter-ui-新增离开群组术语一致性和-fastlane-发布脚手架">whitenoise Flutter UI 新增离开群组、术语一致性和 Fastlane 发布脚手架&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise">whitenoise&lt;/a>，White Noise 通讯器的 Flutter 移动 UI，合并了 &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/604">PR #604&lt;/a>，从聊天列表 UI 添加了离开群组操作，&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/595">PR #595&lt;/a> 在所有语言环境中将联系人操作重命名为关注和取消关注，&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/601">PR #601&lt;/a> 为移动构建管道添加了 Fastlane 发布脚手架。&lt;/p>
&lt;h3 id="angor-0221-发布紧凑应用流程以及密钥提供商和网络切换加固">Angor 0.2.21 发布紧凑应用流程以及密钥提供商和网络切换加固&lt;/h3>
&lt;p>&lt;a href="https://github.com/block-core/angor">Angor&lt;/a>，带有 Nostr 发布的创始人档案和项目公告的比特币众筹平台，于 5 月 6 日发布了 &lt;a href="https://github.com/block-core/angor/releases">Angor 0.2.21&lt;/a>。&lt;a href="https://github.com/block-core/angor/pull/804">PR #804&lt;/a> 添加了安全密钥提供商，&lt;a href="https://github.com/block-core/angor/pull/806">PR #806&lt;/a> 确保网络切换正确清除所有缓存数据并重置 UI 状态，&lt;a href="https://github.com/block-core/angor/pull/822">PR #822&lt;/a> 在&amp;quot;查找项目&amp;quot;中添加了按 ID 搜索项目的功能。&lt;/p>
&lt;h2 id="新追踪和发现的项目">新追踪和发现的项目&lt;/h2>
&lt;h3 id="bitmacro-signer带客户端密钥加密的可自托管-nip-46-bunker">BitMacro Signer：带客户端密钥加密的可自托管 NIP-46 bunker&lt;/h3>
&lt;p>&lt;a href="https://github.com/bitmacro/bitmacro-signer">BitMacro Signer&lt;/a> 是一个使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> bunker 模型管理私钥的可自托管 Nostr 签名工具。签名者在存储之前在客户端加密密钥，使服务器端永远不持有明文，并通过 relay 使用轻量级守护进程签名事件。&lt;/p>
&lt;p>本周的 &lt;a href="https://nostrcompass.org/zh/topics/nip-34/">NIP-34&lt;/a> 仓库发现浮现了 26 个新的仓库公告，其中四个值得关注。&lt;/p>
&lt;h3 id="gnostr直接构建在-nostr-上的-git-实现">gnostr：直接构建在 Nostr 上的 git 实现&lt;/h3>
&lt;p>&lt;a href="https://github.com/gnostr-org/gnostr">gnostr&lt;/a> 是直接构建在 Nostr 上的 git 实现，与 &lt;code>git-remote-nostr&lt;/code> 不同，它将自己的工作树命令作为从头开始的 Nostr 原生版本控制客户端提供。&lt;/p>
&lt;h3 id="nostr-archivenostr-和-blossom-上的内容寻址归档规范">nostr-archive：Nostr 和 Blossom 上的内容寻址归档规范&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev/nostr-archive/nostr-archive">nostr-archive&lt;/a> 是 Nostr 和 Blossom 上的内容寻址归档的草案规范和参考实现，作为 NIP-34 仓库托管，使规范讨论与参考代码在同一地方进行。&lt;/p>
&lt;h3 id="flower-cache本地-blossom-缓存服务器">flower-cache：本地 Blossom 缓存服务器&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev/flower-cache/flower-cache">flower-cache&lt;/a> 是一个本地 Blossom 缓存服务器，对于想要远程 Blossom 服务器 blob 集的热本地镜像而无需每次 blob 获取都往返上游的客户端很有用。&lt;/p>
&lt;h3 id="micro-vpn-ansible通过-nip-34-部署-vpn-的-ansible-playbook">micro-vpn-ansible：通过 NIP-34 部署 VPN 的 Ansible playbook&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev/npub1mu9fsh42uh48trncevdpju8cyv3mxmj9qj3rdjqc46zc324c6hys9ctsnc/relay.ngit.dev/micro-vpn-ansible">micro-vpn-ansible&lt;/a> 是一个用于部署微型 VPN 的小型 Ansible playbook 集合，作为 NIP-34 仓库托管在 &lt;code>relay.ngit.dev&lt;/code> 上并在 &lt;code>gitnostr.com&lt;/code> 上镜像。&lt;/p>
&lt;h2 id="协议工作">协议工作&lt;/h2>
&lt;h3 id="nip-更新">NIP 更新&lt;/h3>
&lt;ul>
&lt;li>&lt;strong>Nostr 上的无经纪人算力市场&lt;/strong>（&lt;a href="https://njump.me/nevent1qqsqd2478wqugjh9ur9lenw9la0wd987h6jcc0tma4kkuat4xceymvszypxxmj0zcqtwqm34f48gzulrg99daaczllhtqun7xsldkh8neua2jhr32rf">草案提案&lt;/a>）：匿名 NIP 草案，来自 Nostr 长文帖子，认为当前算力市场参与者（Braiins、Nicehash、Mining Rig Rentals）都是对用户进行 KYC 且可被审查的托管经纪商。该提案勾勒出一个点对点算力市场，其中 Stratum 端点、算力列表和合约托管通过 Nostr 事件运作，路径中没有经纪商控制的 Web 应用。&lt;/li>
&lt;li>&lt;strong>精选订阅源：DVM 订阅源的更简单替代方案&lt;/strong>（&lt;a href="https://njump.me/nevent1qqsqj55kvu28uyq2jr6nfwx20mv7c0vkm0vxkgx0zzrnanfp4wwv8nczyzm7669svt0xkjsju50a22zurc0qa589z2xd4yatzx6p2z64a5e0cyxz3e3">草案提案&lt;/a>）：草案认为 &lt;a href="https://nostrcompass.org/zh/topics/nip-90/">NIP-90&lt;/a> 数据自动售货机被设计为通用计算市场，当客户端只需要一个可寻址的事件 ID 列表时，请求/响应模型过于繁重。该提案建议将精选订阅源发布为一个薄的可寻址事件，内容只是一个有序的事件引用列表，无需 DVM 往返。&lt;/li>
&lt;li>&lt;strong>个人资料颜色：确定性视觉身份&lt;/strong>（&lt;a href="https://njump.me/nevent1qqsy3tj7mn3r7wczmc52aknf5ym43lj3rrhd3sfprzvc6qydsq62wrgzyzjk8j56zmt5fwv088l5y84hqq4gags3grvuznlu4zmyt54w34cccyxenp3">草案提案&lt;/a>）：从 Nostr 公钥派生确定性、可读颜色的新草案 NIP，使用户头像、提及芯片和其他 UI 界面在各客户端看起来相同。&lt;/li>
&lt;li>&lt;strong>Namecoin-Track NIPs：锚定身份、relay、TLS 和声誉&lt;/strong>（&lt;a href="https://njump.me/nevent1qqsydpjnaj2netmv0h5mlm2j6zpk8u50yvc9pqth3ly8pzuwy22720szypp3shk7edn43y5zfvdr0ftl8eq8l00zaknjqx3c9xuv7ja8ck60q7uupzs">草案集群&lt;/a>）：将现有 Nostr 栈的各部分移入 Namecoin 锚定记录的可分离草案 NIP 集群。集群中的每个 NIP 针对单一关注点：身份、relay 元数据、TLS 证书固定和声誉断言。&lt;/li>
&lt;/ul>
&lt;h2 id="nip-深度解析nip-34git-相关">NIP 深度解析：NIP-34（git 相关）&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-34/">NIP-34&lt;/a> 定义了在 Nostr relay 上托管 git 仓库、补丁、拉取请求、议题和合并状态的事件 kind。它是将 Nostr 变为代码协作协调层的标准：仓库数据仍然存储在 git 服务器上（GitHub、自托管的 forge 或 GRASP 服务器），而公告事件、补丁、PR、议题和状态更新则在 relay 上传播。&lt;/p>
&lt;p>仓库作为 kind &lt;code>30617&lt;/code> 可寻址事件公告，其 &lt;code>d&lt;/code> 标签是一个 kebab-case 标识符（通常是项目名称），正文包括 &lt;code>name&lt;/code>、&lt;code>description&lt;/code>、一个或多个 &lt;code>clone&lt;/code> URL、可选的 &lt;code>web&lt;/code> URL、列出维护者监控的 relay 的 &lt;code>relays&lt;/code> 标签，以及带有允许管理项目的额外公钥的 &lt;code>maintainers&lt;/code> 标签。带有 &lt;code>euc&lt;/code>（&amp;ldquo;最早唯一提交&amp;rdquo;）标记的 &lt;code>r&lt;/code> 标签携带此仓库唯一的第一个提交的提交 ID，让客户端可以将同一项目跨不同主机的镜像和分支归为一组。&lt;/p>
&lt;p>典型的 ngit 仓库公告如下所示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;08bb929a05fd9bbb5e1b227a3850269f2f9615e9e830bd34e664b72df14dead6&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1758124128&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30617&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;ngit&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;r&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;26689f97810fc656c7134c76e2a37d33b2e40ce7&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;euc&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;name&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;ngit&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;description&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;cli and git plugin for code collaboration over nostr&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;clone&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://codeberg.org/DanConwayDev/ngit-cli.git&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://relay.ngit.dev/npub15qydau2hjma6ngxkl2cyar74wzyjshvl65za5k5rl69264ar2exs5cyejr/ngit.git&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;web&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://gitworkshop.dev/danconwaydev.com/ngit&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;relays&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.damus.io&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nos.lol&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.nostr.band&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;maintainers&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;a008def15796fba9a0d6fab04e8fd57089285d9fd505da5a83fe8aad57a3564d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;alt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;git repository: ngit&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;ad571d2ec44fcdb5d684281deb8aea3862b6660d73e66f1c921f381f2fec6869f4b9444414b4ffdafccd414f3489502af193401b35edcebd8f50dcebbbc0b37a&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>补丁使用 kind &lt;code>1617&lt;/code>，在内容正文中携带 &lt;code>git format-patch&lt;/code> 输出，通过格式为 &lt;code>30617:&amp;lt;维护者公钥&amp;gt;:&amp;lt;d 标签&amp;gt;&lt;/code> 的 &lt;code>a&lt;/code> 标签引用目标仓库。拉取请求使用 kind &lt;code>1618&lt;/code>，议题使用带有 markdown 内容的 kind &lt;code>1621&lt;/code>。状态事件将线程在 Open（&lt;code>1630&lt;/code>）、Applied/Merged 或 Resolved（&lt;code>1631&lt;/code>）、Closed（&lt;code>1632&lt;/code>）和 Draft（&lt;code>1633&lt;/code>）之间移动。&lt;/p>
&lt;p>本周的 NIP-34 故事与上周的 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#gitworkshop-%E5%8F%91%E5%B8%83%E6%B5%8F%E8%A7%88%E5%99%A8%E5%86%85-pr-%E5%90%88%E5%B9%B6%E4%BB%93%E5%BA%93%E5%85%B3%E6%B3%A8%E5%92%8C%E5%B8%A6%E5%AE%BD%E9%AB%98%E6%95%88%E7%9A%84-git-%E6%B5%8F%E8%A7%88%E5%99%A8">GitWorkshop v2 发布&lt;/a>相同：浏览器内 PR 合并按钮之所以有效，是因为 GRASP 服务器、ngit 和 &lt;code>nostr://&lt;/code> 克隆 URL 方案共同关闭了完全去中心化 forge 的循环。完整的实现名册、主要来源和事件 kind 参考在 &lt;a href="https://nostrcompass.org/zh/topics/nip-34/">NIP-34 主题页&lt;/a> 上。&lt;/p>
&lt;h2 id="nip-深度解析nip-53直播活动">NIP 深度解析：NIP-53（直播活动）&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-53/">NIP-53&lt;/a> 定义了 Nostr 上直播活动的标准事件界面：直播流、持久会议空间、预定会议活动、听众存在状态以及将聊天消息绑定到特定直播活动记录的直播聊天频道。五种事件 kind 协同工作，广告正在直播的内容、谁在参与以及音频或视频在哪里提供。&lt;/p>
&lt;p>直播流作为 kind &lt;code>30311&lt;/code> 可寻址事件公告。其 &lt;code>d&lt;/code> 标签是稳定标识符，&lt;code>streaming&lt;/code> 标签指向播放 URL，&lt;code>status&lt;/code> 标签携带 &lt;code>planned&lt;/code>、&lt;code>live&lt;/code> 或 &lt;code>ended&lt;/code> 之一。每个 &lt;code>p&lt;/code> 标签携带公钥、relay 提示、可显示的角色标记（&lt;code>Host&lt;/code>、&lt;code>Speaker&lt;/code>、&lt;code>Participant&lt;/code>）以及可选的第五项：活动完整 &lt;code>a&lt;/code> 标签经参与者私钥签名的 SHA-256。没有该证明，客户端可以仅将参与者显示为&amp;quot;受邀&amp;quot;，这可以防止恶意事件所有者列出知名账户来吸引粉丝进入虚假活动。&lt;/p>
&lt;p>代表性的 Nests 风格音频室公告如下所示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;8c1e6d7b3f2e9a4d5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;82341f882b6eabcd2ba7f1ef90aad961cf074af15b9ef44a09f9d2a8fbfbe6a2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1746540000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30311&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nests-room-2026-05-05-protocol-discussion&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Protocol discussion: NIP-34 git workflows&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;summary&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Open call for ngit, GitWorkshop, and joinmarket-ng maintainers&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;streaming&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://moq.amethyst.social/rooms/protocol-discussion-2026-05-05&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;starts&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1746543600&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;status&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;live&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;current_participants&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;12&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;service&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nests.amethyst.social/&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;a34b99f22c790c4e36b2b3c2c35a36db06226e41c692fc82b8b56ac1c540c5bd&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.damus.io&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Host&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;f1e0d7a8b3c2d1e0f9a8b7c6d5e4f3a2b1c0d9e8f7a6b5c4d3e2f1a0b9c8d7e6&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;266815e0c9210dfa324c6cba3573b14bee49da4209a9456f9484e5106cd408a5&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nos.lol&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Speaker&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;0057059046164d2238bbdbdf45fa2e106f59188289f6842d6bf362218ef4a58c&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Participant&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;relays&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.damus.io&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nos.lol&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nostr&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip-34&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;5a3e8b7c1d2f4a6b9e8d7c6b5a4f3e2d1c0b9a8f7e6d5c4b3a2f1e0d9c8b7a6f5e4d3c2b1a0f9e8d7c6b5a4f3e2d1c0b9a8f7e6d5c4b3a2f1e0d9c8b7a6f5e4d3&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>NIP-53 将持久房间与在其中举行的预定活动分开。kind &lt;code>30312&lt;/code> 会议空间定义了一个带 &lt;code>d&lt;/code> 标识符的房间，kind &lt;code>30313&lt;/code> 会议活动表示该房间内的预定或正在进行的会议。听众存在状态是单独的 kind &lt;code>10312&lt;/code> 常规可替换事件。直播聊天使用 kind &lt;code>1311&lt;/code>，每条聊天消息必须包含一个指向活动记录的 &lt;code>a&lt;/code> 标签。&lt;/p>
&lt;p>Nostr 直播活动界面故意保持精简：NIP-53 广告活动，而其他 NIP 处理相邻关注点。对直播流的 zap 使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-57/">NIP-57（Zaps）&lt;/a> zap 收据（kind &lt;code>9735&lt;/code>），视频录制可以作为 &lt;a href="https://nostrcompass.org/zh/topics/nip-71/">NIP-71（视频事件）&lt;/a> 视频事件重新发布。完整的实现名册、参与者证明门控建议以及房间/活动分离原理在 &lt;a href="https://nostrcompass.org/zh/topics/nip-53/">NIP-53 主题页&lt;/a> 上。&lt;/p>
&lt;hr>
&lt;p>本周就到这里。如果您正在构建什么或有新闻分享，请在 Nostr 上给我们发 DM 或在 &lt;a href="https://nostrcompass.org">nostrcompass.org&lt;/a> 找到我们。&lt;/p></content:encoded></item><item><title>Nostr Compass #20</title><link>https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/</link><pubDate>Wed, 29 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，你的 Nostr 每周指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong>&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#gitworkshop-ships-in-browser-pr-merge-repository-following-and-a-bandwidth-efficient-git-explorer">GitWorkshop&lt;/a> 将 git-over-Nostr 转变为一个更完整的代码审查界面，带来浏览器内 PR 合并按钮、Stars 和仓库关注功能、带宽高效的 git 浏览器、kind &lt;code>1111&lt;/code> 内联审查评论，以及加密的多设备通知状态。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#routstrd-launches-a-local-router-for-inference-over-nostr">Routstrd&lt;/a> 推出了一个本地守护进程，通过 Nostr kind &lt;code>38421&lt;/code> 公告发现模型提供商，并使用 Cashu 支付。带标签的发布包括 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#ngit-v242-fixes-grasp-relay-detection-for-pr-submissions">ngit v2.4.2&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#wisp-v100-graduates-from-beta">Wisp v1.0.0&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#grain-v052-fixes-websocket-lockup-v053-continues-polish">grain v0.5.2 和 v0.5.3&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#mostro-core-v0100-and-mostro-mobile-v125-adopt-nip-59-dual-key-gift-wrap">Mostro Core v0.10.0 和 Mostro Mobile v1.2.5&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#marmot-ts-v050-ships-addressable-keypackages">marmot-ts v0.5.0&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#cruxcoach-v013-ships-encrypted-climbing-data-backup-with-nostr-and-blossom">CruxCoach v0.1.3&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#meiso-v130-adds-subtasks-blossom-attachments-and-nip-89-tagging">Meiso v1.3.0&lt;/a>、NoorNote、Nostria、Nostr Calendar、nos2x-fox、applesauce、nostr-double-ratchet 等。未发布的更改涵盖 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#amethyst-advances-nests-audio-rooms-with-moq-interop-testing">Amethyst Nests&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#nostream-adds-nip-65-relay-list-support-and-nwc-payments">nostream 的 NIP-65 和 NWC&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#fips-adds-nostr-based-udpnat-bootstrap">FIPS 基于 Nostr 的 udp:nat 引导&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#strfry-adds-per-connection-observability">strfry 可观测性&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#sprout-adds-owner-attestation-and-multi-workspace-support">Sprout 所有者证明&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#zap-cooking-adds-recipe-packs-delete-requests-and-bunker-login">Zap Cooking 食谱包&lt;/a>。新纳入跟踪的项目包括 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#nostrord-a-nip-29-client-built-with-kotlin-multiplatform-and-wasm">Nostrord&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#clave-brings-nip-46-remote-signing-to-ios-via-apns">Clave&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#treasures-decentralized-geocaching-on-nostr">Treasures&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#smesh-v051-self-hosted-nostr-relay-client-and-signer-in-one-stack">smesh&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#surveil-a-magic-the-gathering-deck-builder-on-nostr">Surveil&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#smaller-additions-fundstr-nod-city-deploy-nsite-to-pages-and-null-nostr">Fundstr、Nod City、deploy-nsite-to-pages 和 null&amp;ndash;nostr&lt;/a>。月末回顾涵盖了 2021 年至 2026 年的 Nostr 四月。&lt;/p>
&lt;h2 id="头条报道">头条报道&lt;/h2>
&lt;h3 id="gitworkshop-推出浏览器内-pr-合并仓库关注和带宽高效的-git-浏览器">GitWorkshop 推出浏览器内 PR 合并、仓库关注和带宽高效的 git 浏览器&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev">GitWorkshop&lt;/a> 是 Dan Conway 为 &lt;a href="https://nostrcompass.org/zh/topics/nip-34/">NIP-34&lt;/a> git-over-Nostr 打造的基于 Web 的协作层，本周发布了一次重大更新，让工作流程更接近开发者对 GitHub 或 GitLab 的期望，同时将评论、仓库列表和通知保留在已签名的 Nostr 事件中。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，你的 Nostr 每周指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong>&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#gitworkshop-ships-in-browser-pr-merge-repository-following-and-a-bandwidth-efficient-git-explorer">GitWorkshop&lt;/a> 将 git-over-Nostr 转变为一个更完整的代码审查界面，带来浏览器内 PR 合并按钮、Stars 和仓库关注功能、带宽高效的 git 浏览器、kind &lt;code>1111&lt;/code> 内联审查评论，以及加密的多设备通知状态。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#routstrd-launches-a-local-router-for-inference-over-nostr">Routstrd&lt;/a> 推出了一个本地守护进程，通过 Nostr kind &lt;code>38421&lt;/code> 公告发现模型提供商，并使用 Cashu 支付。带标签的发布包括 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#ngit-v242-fixes-grasp-relay-detection-for-pr-submissions">ngit v2.4.2&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#wisp-v100-graduates-from-beta">Wisp v1.0.0&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#grain-v052-fixes-websocket-lockup-v053-continues-polish">grain v0.5.2 和 v0.5.3&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#mostro-core-v0100-and-mostro-mobile-v125-adopt-nip-59-dual-key-gift-wrap">Mostro Core v0.10.0 和 Mostro Mobile v1.2.5&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#marmot-ts-v050-ships-addressable-keypackages">marmot-ts v0.5.0&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#cruxcoach-v013-ships-encrypted-climbing-data-backup-with-nostr-and-blossom">CruxCoach v0.1.3&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#meiso-v130-adds-subtasks-blossom-attachments-and-nip-89-tagging">Meiso v1.3.0&lt;/a>、NoorNote、Nostria、Nostr Calendar、nos2x-fox、applesauce、nostr-double-ratchet 等。未发布的更改涵盖 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#amethyst-advances-nests-audio-rooms-with-moq-interop-testing">Amethyst Nests&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#nostream-adds-nip-65-relay-list-support-and-nwc-payments">nostream 的 NIP-65 和 NWC&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#fips-adds-nostr-based-udpnat-bootstrap">FIPS 基于 Nostr 的 udp:nat 引导&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#strfry-adds-per-connection-observability">strfry 可观测性&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#sprout-adds-owner-attestation-and-multi-workspace-support">Sprout 所有者证明&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#zap-cooking-adds-recipe-packs-delete-requests-and-bunker-login">Zap Cooking 食谱包&lt;/a>。新纳入跟踪的项目包括 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#nostrord-a-nip-29-client-built-with-kotlin-multiplatform-and-wasm">Nostrord&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#clave-brings-nip-46-remote-signing-to-ios-via-apns">Clave&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#treasures-decentralized-geocaching-on-nostr">Treasures&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#smesh-v051-self-hosted-nostr-relay-client-and-signer-in-one-stack">smesh&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#surveil-a-magic-the-gathering-deck-builder-on-nostr">Surveil&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#smaller-additions-fundstr-nod-city-deploy-nsite-to-pages-and-null-nostr">Fundstr、Nod City、deploy-nsite-to-pages 和 null&amp;ndash;nostr&lt;/a>。月末回顾涵盖了 2021 年至 2026 年的 Nostr 四月。&lt;/p>
&lt;h2 id="头条报道">头条报道&lt;/h2>
&lt;h3 id="gitworkshop-推出浏览器内-pr-合并仓库关注和带宽高效的-git-浏览器">GitWorkshop 推出浏览器内 PR 合并、仓库关注和带宽高效的 git 浏览器&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev">GitWorkshop&lt;/a> 是 Dan Conway 为 &lt;a href="https://nostrcompass.org/zh/topics/nip-34/">NIP-34&lt;/a> git-over-Nostr 打造的基于 Web 的协作层，本周发布了一次重大更新，让工作流程更接近开发者对 GitHub 或 GitLab 的期望，同时将评论、仓库列表和通知保留在已签名的 Nostr 事件中。&lt;/p>
&lt;p>最引人注目的新增功能是期待已久的浏览器内 PR 合并按钮，适用于使用 GRASP relay 的仓库。此版本还添加了基于反应和 &lt;a href="https://nostrcompass.org/zh/topics/nip-51/">NIP-51&lt;/a> 列表构建的 Stars 和仓库关注功能，固定的仓库集合以 kind &lt;code>10617&lt;/code> 事件发布，通过有序的 &lt;code>a&lt;/code> 标签指向 kind &lt;code>30617&lt;/code> 仓库公告。个人资料页面现在可以展示一个可移植的仓库列表。&lt;/p>
&lt;p>带宽高效的 git 浏览器取代了之前的浏览器内浅克隆。新的浏览器依赖 GRASP 底层的 git client/server 协议，因此可以处理大型仓库，无需强制浏览器获取完整的 pack。搜索现在覆盖用户名和仓库元数据，由 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/50.md">NIP-50&lt;/a> 和一个 &lt;code>ngit-indexer&lt;/code> relay 实现提供支持，该实现在网络中发现并同步仓库公告。浏览器内的仓库创建工作流程完善了发现和入门路径。&lt;/p>
&lt;p>审查工具围绕 Files Changed 标签页、每个 patch 的 diff 查看器以及一套实验性新原语进行了重建。内联代码审查评论使用 kind &lt;code>1111&lt;/code>，基于 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/22.md">NIP-22&lt;/a> 构建：每条评论指向一个文件路径（&lt;code>f&lt;/code> 标签）、一个 commit SHA（&lt;code>c&lt;/code> 标签）和一个选定的行范围（&lt;code>line&lt;/code> 标签），以便 client 可以在 diff 中的正确位置渲染评论。第二层实验性原语由作者和 repo 维护者授权，并使用 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/32.md">NIP-32&lt;/a> 标签：提交后重命名 Issue 或 PR 主题、提交后添加话题标签、将版本控制的 CoverNote 固定在 PR 或 Issue 顶部作为可编辑摘要，以及将内联代码讨论子线程标记为已解决。Verdict 事件和 &lt;code>suggestion&lt;/code> 块仍处于草稿阶段，尚未发布。&lt;/p>
&lt;p>跨设备的通知状态也通过 Nostr 同步，但带有一个保护隐私的巧妙设计。GitWorkshop 生成一个专用的通知 keypair，加密该 nsec，并将其存储在 kind &lt;code>30078&lt;/code> 事件中。通知 nsec 随后签名实际的通知状态事件。这种间接方式防止了用户的主 signer 在每次读取或存档操作时被频繁的加密和解密请求淹没，同时也阻止了外部观察者轻易看到用户何时操作其通知状态。用户可以跨设备同步已读和存档状态；relay 只能看到加密的 blob。&lt;/p>
&lt;h3 id="routstrd-推出面向-nostr-上推理的本地路由器">Routstrd 推出面向 Nostr 上推理的本地路由器&lt;/h3>
&lt;p>&lt;a href="https://github.com/routstr/routstrd">Routstrd&lt;/a> 是一个新的 TypeScript 守护进程，它为本地工具提供一个与 OpenAI 兼容的端点，并将每个请求路由到相互竞争的 &lt;a href="https://routstr.com">Routstr&lt;/a> 提供商。该守护进程通过 Routstr 的 RIP-02 规范中定义的 Nostr kind &lt;code>38421&lt;/code> 公告发现提供商。然后根据 RIP-06 按价格、信任度和近期性能对提供商进行评分，并将每个请求发送到当前最佳选项。&lt;/p>
&lt;p>支付通过由 cocod 管理并由 Lightning 充值的本地 Cashu 钱包运行。这为 client 提供了一个以 sats 计价的结算路径，同时通过 Nostr relay 保持提供商发现的公开和无需许可。如果提供商在会话期间失败，Routstrd 可以回退到下一个排名的节点。安装路径是 &lt;code>bun install -g routstrd&lt;/code>，然后运行 &lt;code>routstrd onboard&lt;/code> 进行钱包和 relay 设置。&lt;/p>
&lt;p>更广泛的 &lt;a href="https://github.com/routstr">Routstr 组织&lt;/a> 维护该守护进程、Python 节点软件（&lt;code>routstr-core&lt;/code>）、一个聊天 UI 和协议规范。对用户而言，本地端口成为稳定的接口：现有的 OpenAI 兼容工具指向 Routstrd，而守护进程处理提供商发现、路由和支付。&lt;/p>
&lt;h2 id="带标签的发布">带标签的发布&lt;/h2>
&lt;h3 id="ngit-v242-修复了-pr-提交的-grasp-server-检测">ngit v2.4.2 修复了 PR 提交的 GRASP server 检测&lt;/h3>
&lt;p>&lt;a href="https://codeberg.org/DanConwayDev/ngit-cli">ngit&lt;/a> 发布了 &lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.2">v2.4.2&lt;/a>，修复了仓库 GRASP server 检测问题，当提议使用 PR kind 时使 PR 提交保持在正常路径上。请注意，ngit 目前对大多数更改默认使用 &lt;code>Patch&lt;/code> kind，除非它们很大；维护者正在努力更改这个默认值。本周早些时候发布的 &lt;a href="https://github.com/DanConwayDev/ngit-cli/releases/tag/v2.4.1">v2.4.1&lt;/a> 修复了当开放 PR 的 git 数据在仓库指定的 git server 上不可用时，clone 和 fetch 期间出现的 &lt;code>fatal&lt;/code> 错误。&lt;/p>
&lt;h3 id="wisp-v100-从-beta-毕业">Wisp v1.0.0 从 beta 毕业&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a> 是一个专注于 relay 路由、隐私和小型原生 UI 的 Kotlin 和 Jetpack Compose Android client，发布了 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.0.0">v1.0.0&lt;/a> 并接着发布了 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v1.0.2">v1.0.2&lt;/a>。1.0.0 里程碑汇集了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-22-newsletter/#wisp-v0180-beta-adds-normie-mode-for-you-feed-and-nip-29-group-config">Newsletter #19&lt;/a> 中报道的 Normie Mode 法币计价切换、For You 信息流、&lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a> 基于 relay 的群组配置，以及 &lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a> relay 列表广播。v1.0.2 增加了 Android 15 16 KB 页面大小支持、抽屉页中的 QR 扫描标签页、内联视频控件的下载按钮，以及通知列表性能修复。&lt;/p>
&lt;h3 id="grain-v052-修复-websocket-锁死v053-继续打磨">grain v0.5.2 修复 WebSocket 锁死，v0.5.3 继续打磨&lt;/h3>
&lt;p>&lt;a href="https://github.com/0ceanSlim/grain">grain&lt;/a> 是来自 0ceanSlim 的 Go relay，发布了 &lt;a href="https://github.com/0ceanSlim/grain/releases/tag/v0.5.2">v0.5.2&lt;/a> 作为对 v0.5.0 引入的 WebSocket 锁死问题的关键热修复，然后发布了 &lt;a href="https://github.com/0ceanSlim/grain/releases/tag/v0.5.3">v0.5.3&lt;/a>。该锁死会导致连接在某些过滤器和 WebSocket 路径下挂起，因此 v0.5.1 或 v0.5.0 上的运营者应该升级。grain 跟踪所有主要的 Nostr 事件类别，公开 NIP-11 relay 信息，支持白名单/黑名单访问控制、按 kind 限速、Web 仪表板，以及在 v0.5.x 系列中添加的 Go client 库。&lt;/p>
&lt;h3 id="mostro-core-v0100-和-mostro-mobile-v125-采用-nip-59-双密钥-gift-wrap">Mostro Core v0.10.0 和 Mostro Mobile v1.2.5 采用 NIP-59 双密钥 gift wrap&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro-core/releases/tag/v0.10.0">Mostro Core v0.10.0&lt;/a> 添加了新的 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a> gift-wrap 模块，具有分离的身份和交易密钥。早期的传输代码使用单个身份密钥同时用于交易身份和 gift wrapping。v0.10.0 将稳定的交易身份与临时的 wrapping 密钥分离，因此每次交易可以使用新的传输密钥，同时保留交易协议所需的身份。守护进程集成通过 &lt;a href="https://github.com/MostroP2P/mostro/pull/718">Mostro PR #718&lt;/a> 落地，&lt;a href="https://github.com/MostroP2P/mostro-cli/pull/165">mostro-cli PR #165&lt;/a> 将相同的迁移带入命令行 client。&lt;/p>
&lt;p>&lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.5">Mostro Mobile v1.2.5&lt;/a> 与协议工作一同发布。&lt;a href="https://github.com/MostroP2P/mobile/pull/581">PR #581&lt;/a> 让 takers 可以按 maker 的账户年龄过滤订单，为用户提供了一种避免订单簿中新创建 maker 账户的方式。&lt;a href="https://github.com/MostroP2P/mobile/pull/580">PR #580&lt;/a> 修复了已取消订单详情上的角色标签，&lt;a href="https://github.com/MostroP2P/mobile/pull/576">PR #576&lt;/a> 清理了协作取消按钮。&lt;/p>
&lt;h3 id="marmot-ts-v050-推出可寻址-keypackages">marmot-ts v0.5.0 推出可寻址 KeyPackages&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/marmot-ts">marmot-ts&lt;/a> 发布了 &lt;a href="https://github.com/marmot-protocol/marmot-ts/releases/tag/%40internet-privacy%2Fmarmot-ts%400.5.0">@internet-privacy/marmot-ts@0.5.0&lt;/a>，这是 TypeScript &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> client 的第一个计划中的破坏性变更版本。&lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/68">PR #68&lt;/a> 添加了可寻址 KeyPackage 支持：&lt;code>KeyPackageManager&lt;/code> 现在可以同时处理旧的 kind &lt;code>443&lt;/code> 和新的 kind &lt;code>30443&lt;/code> KeyPackage 事件。该版本移除了 &lt;code>KeyPackageStore&lt;/code> 和 group-state 存储类，将其替换为传入 &lt;code>KeyPackageManager&lt;/code> 和 &lt;code>MarmotGroup&lt;/code> 的通用键值存储。它还将邀请和群组管理移到了 &lt;code>MarmotClient.invites&lt;/code> 和 &lt;code>MarmotClient.groups&lt;/code> 上，因此直接嵌入者在升级前需要进行构造函数和存储更改。&lt;/p>
&lt;h3 id="cruxcoach-v013-推出使用-nostr-和-blossom-的加密攀登数据备份">CruxCoach v0.1.3 推出使用 Nostr 和 Blossom 的加密攀登数据备份&lt;/h3>
&lt;p>&lt;a href="https://codeberg.org/CruxCoach/CruxCoach">CruxCoach&lt;/a> 是一款面向 Kilter Board 攀登者的新开源 Android 应用。Kilter Board 是一个交互式训练墙，其把手通过 Bluetooth 亮起以显示路线。该应用于 4 月 14 日推出，并在 4 月 26 日达到 &lt;a href="https://codeberg.org/CruxCoach/CruxCoach/releases/tag/v0.1.3">v0.1.3&lt;/a>。&lt;/p>
&lt;p>v0.1.3 添加了可选的加密云备份。用户的 CruxCoach 账户是一个 Nostr keypair，私钥同时作为本地备份加密密钥的输入。该应用在设备上加密攀登数据，并将密文镜像到 Blossom 存储服务器（&lt;code>blossom.primal.net&lt;/code> 和 &lt;code>nostr.download&lt;/code>）。删除远程操作会调用 Blossom 清理路径。除了备份，CruxCoach 使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 远程签名以支持 Amber、&lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 私密 DM 用于应用内开发者联系、&lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a> relay 列表用于 relay 发现，以及 Vitor Pamplona 的 &lt;a href="https://github.com/vitorpamplona/quartz">Quartz&lt;/a> 库用于 Nostr 底层管道。用户可以通过 Zapstore 或直接从 Codeberg APK 安装它。&lt;/p>
&lt;h3 id="meiso-v130-添加子任务blossom-附件和-nip-89-标签">Meiso v1.3.0 添加子任务、Blossom 附件和 NIP-89 标签&lt;/h3>
&lt;p>&lt;a href="https://github.com/higedamc/meiso">Meiso&lt;/a> 是一个极简的 Flutter 任务管理器 for Android，将任务作为 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密的 kind &lt;code>30078&lt;/code> 应用数据存储在 Nostr relay 上。4 月 6 日发布的 &lt;a href="https://github.com/higedamc/meiso/releases/tag/v1.3.0">v1.3.0&lt;/a> 添加了带有父子关系的子任务、用于 blocks/blocked-by/related-to/duplicate-of 的任务链接、通过 Blossom 和 &lt;a href="https://nostrcompass.org/zh/topics/nip-96/">NIP-96&lt;/a> HTTP 文件上传端点的图片附件、在已发布事件上的 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/89.md">NIP-89&lt;/a> 推荐应用 &lt;code>client&lt;/code> 标签，以及一个 Go 命令行同步工具。v1.3.0 还修复了冷启动 relay 行为和 Amber client 复用问题。&lt;/p>
&lt;h3 id="noornotenostrianostr-calendarnos2x-fox-和库发布">NoorNote、Nostria、Nostr Calendar、nos2x-fox 和库发布&lt;/h3>
&lt;p>&lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a> 发布了 &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.8.7">v0.8.7&lt;/a>、&lt;a href="https://github.com/77elements/noornote/releases/tag/v0.8.8">v0.8.8&lt;/a> 和 &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.8.9">v0.8.9&lt;/a>。这些版本修复了引用转发中的图片和视频点击处理、为长文文章图片添加了灯箱支持，并修复了空白的桌面启动屏幕。&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> 发布了 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.29">v3.1.29&lt;/a>、&lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.30">v3.1.30&lt;/a> 和 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.31">v3.1.31&lt;/a>，添加了文章编辑器图片压缩、钱包 USD 切换、推广卡片控件、PDF 支持和移动布局打磨。&lt;/p>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.4.1">Nostr Calendar v1.4.1&lt;/a> 将日历事件发布与日历列表管理解耦，并修复了邀请跟踪。&lt;a href="https://github.com/diegogurpegui/nos2x-fox/releases/tag/v1.19.0">nos2x-fox v1.19.0&lt;/a> 为 Firefox NIP-07 浏览器签名授权添加了自定义授权时间范围。&lt;a href="https://github.com/mmalmi/nostr-double-ratchet/releases/tag/v0.0.97">nostr-double-ratchet v0.0.97&lt;/a> 发布了新的二进制文件。&lt;a href="https://github.com/nostr-wot/nostr-wot-sdk/releases/tag/nostr-wot-sdk%400.9.0">nostr-wot-sdk 0.9.0&lt;/a> 默认挂载 &lt;code>NostrSessionProvider&lt;/code>，&lt;a href="https://github.com/nbd-wtf/nostr-tools/pull/535">nostr-tools PR #535&lt;/a> 为 NIP-47 wallet-connect 字符串添加了多 relay 解析支持。&lt;/p>
&lt;p>本周晚些时候，&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.1.0-pre1">Amber v6.1.0-pre1&lt;/a> 发布了一个预发布版，改进了 connect-new-app 布局、signer 对话框修复、改进的通知权限处理和重构的账户选择。&lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.14">nostr-vpn v0.3.14&lt;/a> 发布了新的构建，包含 macOS Apple Silicon、Linux 和 Windows 制品。&lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/releases/tag/v0.5.8">Bitcredit Core v0.5.7-hotfix-1 和 v0.5.8&lt;/a> 连续发布了对孤立区块验证问题的修复。&lt;a href="https://gitlab.com/chad.curtis/surveil/-/tags/v0.1.6">Surveil v0.1.6&lt;/a> 带来了移动 UI 打磨和全面改版的 About 页面；项目本身在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-29-newsletter/#surveil-a-magic-the-gathering-deck-builder-on-nostr">下文&lt;/a> 中介绍。&lt;/p>
&lt;h3 id="applesauce-600-移除遗留事件工厂并添加-blossom-uri-解析">applesauce 6.0.0 移除遗留事件工厂并添加 Blossom URI 解析&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/applesauce">applesauce&lt;/a> 是 hzrd149 的 TypeScript Nostr 工具包，在 monorepo 中发布了 6.0.0 版本系列。&lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%406.0.0">applesauce-core@6.0.0&lt;/a> 移除了遗留的 &lt;code>EventFactory&lt;/code> 类和旧的 &lt;code>buildEvent&lt;/code>、&lt;code>modifyEvent&lt;/code> 和 &lt;code>createEvent&lt;/code> 辅助函数，推动调用者使用 &lt;code>applesauce-core/factories&lt;/code> 和 &lt;code>applesauce-common&lt;/code> 中较新的工厂类。它还为链接解析添加了 IP 地址和 localhost 处理、BUD-10 Blossom URI 正则表达式，以及新的 observable 辅助函数，如 &lt;code>timeoutWithIgnore&lt;/code>、&lt;code>combineLatestBy&lt;/code>、&lt;code>combineLatestByIndex&lt;/code> 和 &lt;code>combineLatestByKey&lt;/code>。&lt;/p>
&lt;p>包级别的发布填补了 Nostr 特定的部分。&lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-content%406.0.0">applesauce-content@6.0.0&lt;/a> 为文本和 Markdown 添加了 BUD-10 Blossom URI 节点，为渲染器提供了在内容中解析 Blossom 引用的一流方式。&lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-actions%406.0.0">applesauce-actions@6.0.0&lt;/a> 为覆盖 relay、用户和项目的 NIP-51 列表添加了基础工厂类，让列表构造不再临时拼凑。&lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-wallet-connect%406.0.0">applesauce-wallet-connect@6.0.0&lt;/a> 暴露了 &lt;code>WalletConnect.connectURI&lt;/code>，因此应用可以直接访问现有的 NIP-47 wallet-connect URI。&lt;/p>
&lt;h2 id="未发布的更改">未发布的更改&lt;/h2>
&lt;h3 id="amethyst-推进-nests-音频室并进行-moq-互操作测试">Amethyst 推进 Nests 音频室并进行 MoQ 互操作测试&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 本周合并了几个专注于 Nests 的 PR，在上周的 &lt;a href="https://datatracker.ietf.org/group/moq/about/">Media over QUIC&lt;/a> 音频室栈的基础上继续构建。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2622">PR #2622&lt;/a> 添加了一个跨 client 互操作测试工具，将 Amethyst MoQ client 与参考 Web 实现进行对比测试。目标是在用户遇到问题之前捕捉 Android/浏览器的线级差异。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2625">PR #2625&lt;/a> 改进了画中画的发言者焦点和连接状态，而 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2620">PR #2620&lt;/a> 澄清了参与者网格中的头像、静音状态和发言状态。本周晚些时候，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2634">PR #2634&lt;/a> 修复了全屏 Nest 视图中的 IME 内边距和窗口 insets，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2635">PR #2635&lt;/a> 为 Nests 信息流添加了基于在场状态的新鲜度过滤。另外，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2627">PR #2627&lt;/a> 移除了 Amethyst 的自定义 C secp256k1 实现，迁移到 &lt;code>libschnorr256k1&lt;/code>。&lt;/p>
&lt;h3 id="nostream-添加-nip-65-relay-列表支持和-nwc-支付">nostream 添加 NIP-65 relay 列表支持和 NWC 支付&lt;/h3>
&lt;p>&lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a> 在上周 53 个 PR 的 relay 冲刺之后合并了三个值得关注的 PR。&lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a> relay 列表元数据支持在 &lt;a href="https://github.com/Cameri/nostream/pull/585">PR #585&lt;/a> 中落地，因此 relay 可以索引和提供 kind &lt;code>10002&lt;/code> relay 列表事件。Nostr Wallet Connect 支付处理器在 &lt;a href="https://github.com/Cameri/nostream/pull/539">PR #539&lt;/a> 中跟进，添加了 pay-to-relay 路径。连接清理在 &lt;a href="https://github.com/Cameri/nostream/pull/438">PR #438&lt;/a> 中得到改进，该 PR 关闭了一个死连接 bug，即具有活动订阅的 socket 没有被回收，导致长时间运行的实例上订阅计数漂移。&lt;/p>
&lt;h3 id="fips-添加基于-nostr-的-udpnat-引导">FIPS 添加基于 Nostr 的 udp:nat 引导&lt;/h3>
&lt;p>&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> 是 Free Internetworking Peering System，此前在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-25-newsletter/#fips-nostr-native-mesh-networking">Newsletter #6&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#fips-v020-ships-tor-transport-reproducible-builds-and-sidecar-examples">Newsletter #10&lt;/a> 中有报道，合并了 &lt;a href="https://github.com/jmcorgan/fips/pull/53">PR #53&lt;/a>，带来基于 Nostr 的 &lt;code>udp:nat&lt;/code> 引导。该变更让节点可以发布 Nostr 广告、交换加密的 offer/answer 信令、通过 STUN 发现公共地址、执行 UDP 打洞，并将打通的 socket 交给正常的 FIPS 传输栈。该实现将信令 payload 身份绑定到实际的 Nostr 发送者，查询已配置的 DM 和广告 relay 用于收件箱查找，并回滚失败的采纳穿越交接，以防孤立的 UDP 传输保持活动。这是要在规范仓库 &lt;code>jmcorgan/fips&lt;/code> 中跟踪的 Nostr 公告和 NAT 穿越工作。&lt;/p>
&lt;h3 id="strfry-添加每连接可观测性">strfry 添加每连接可观测性&lt;/h3>
&lt;p>&lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a> 合并了 &lt;a href="https://github.com/hoytech/strfry/pull/214">PR #214&lt;/a>，添加了每连接可观测性和可通过 Prometheus 导出的连接级指标。&lt;a href="https://github.com/hoytech/strfry/pull/204">PR #204&lt;/a> 规范化了 Prometheus 标签，&lt;a href="https://github.com/hoytech/strfry/pull/215">PR #215&lt;/a> 在文档中添加了 Community Integrations 章节，涵盖构建在 strfry 之上的 Namecoin 身份项目。&lt;/p>
&lt;h3 id="sprout-添加所有者证明和多工作区支持">Sprout 添加所有者证明和多工作区支持&lt;/h3>
&lt;p>&lt;a href="https://github.com/block/sprout">Sprout&lt;/a> 是 Block 的 Nostr client，合并了 &lt;a href="https://github.com/block/sprout/pull/406">PR #406&lt;/a>，实现了 NIP-OA（所有者证明）。该功能为自主 agent 提供了一个加密证明，证明特定的人类 pubkey 授权了它的操作。&lt;a href="https://github.com/block/sprout/pull/409">PR #409&lt;/a> 为桌面应用添加了多工作区支持，&lt;a href="https://github.com/block/sprout/pull/411">PR #411&lt;/a> 为移动编辑添加了 &lt;code>#channel&lt;/code> 自动完成，&lt;a href="https://github.com/block/sprout/pull/410">PR #410&lt;/a> 关闭了一个可能丢弃活动 channel 消息的竞态窗口。&lt;a href="https://github.com/block/sprout/pull/413">PR #413&lt;/a> 引入了用于跨设备已读状态同步的 NIP-RS，后续的 &lt;a href="https://github.com/block/sprout/pull/420">PR #420&lt;/a> 和 &lt;a href="https://github.com/block/sprout/pull/422">PR #422&lt;/a> 将该已读状态连接到移动端的未读徽章。&lt;/p>
&lt;h3 id="zap-cooking-添加食谱包删除请求和-bunker-登录">Zap Cooking 添加食谱包、删除请求和 bunker 登录&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a> 合并了一周富有成效的食谱发布工作。用于用户自己食谱包的 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/09.md">NIP-09&lt;/a> 删除请求在 &lt;a href="https://github.com/zapcooking/frontend/pull/367">PR #367&lt;/a> 中落地。发布可靠性通过 &lt;a href="https://github.com/zapcooking/frontend/pull/366">PR #366&lt;/a> 得到改进，该 PR 强制每个新食谱使用 garden relay，并为共享食谱集添加了重试队列。一键式已授权包发布在 &lt;a href="https://github.com/zapcooking/frontend/pull/365">PR #365&lt;/a> 中落地，&lt;a href="https://github.com/zapcooking/frontend/pull/331">PR #331&lt;/a> 添加了 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> bunker 登录支持。&lt;/p>
&lt;h3 id="whitenoise-rs-加密其本地数据库">Whitenoise-rs 加密其本地数据库&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a> 合并了 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/758">PR #758&lt;/a>，为磁盘上的 Whitenoise 数据库添加了 SQLCipher 加密。这弥补了 Marmot 守护进程栈长期存在的静态数据安全缺口。&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/775">PR #775&lt;/a> 暴露了群组所需的能力，&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/772">PR #772&lt;/a> 将群组媒体操作迁移到会话拥有的 &lt;code>MediaOps&lt;/code>，&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/773">PR #773&lt;/a> 作为会话操作重构的一部分提取了一个 &lt;code>SharedServices&lt;/code> 持有者。在移动端，&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/577">whitenoise PR #577&lt;/a> 为 Android 前台服务启用了启动自动重启，修复了守护进程在设备重启后无法恢复的情况。&lt;/p>
&lt;h2 id="新纳入跟踪和发现">新纳入跟踪和发现&lt;/h2>
&lt;h3 id="nostrord使用-kotlin-multiplatform-和-wasm-构建的-nip-29-client">Nostrord：使用 Kotlin Multiplatform 和 WASM 构建的 NIP-29 client&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrord/nostrord">Nostrord&lt;/a> 是一个针对 Discord 替代用例的新 &lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a> 群组聊天 client。群组存在于 Nostr relay 上，具有 relay 强制的成员资格、角色、审核和访问控制，因此群组状态由所选的 NIP-29 relay 托管。client 开发者不控制这些群组的独立应用数据库。Web 应用运行在 &lt;a href="https://web.nostrord.com">web.nostrord.com&lt;/a>，使用 Kotlin Multiplatform 编译为 WebAssembly 构建，原生 Android、iOS 和桌面构建正在开发中。Nostrord 是 &lt;a href="https://opensats.org">OpenSats&lt;/a> 资助的获得者，并与 Flotilla、Chachi 和 0xChat 使用的相同 NIP-29 relay 互操作。&lt;/p>
&lt;h3 id="clave-通过-apns-将-nip-46-远程签名带到-ios">Clave 通过 APNs 将 NIP-46 远程签名带到 iOS&lt;/h3>
&lt;p>&lt;a href="https://github.com/DocNR/clave">Clave&lt;/a> 是一个处于 beta 阶段的 iOS 远程 signer，在应用未打开时签名 Nostr 事件。私钥保留在 iPhone Keychain 中。当 client 发送 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 远程签名请求时，服务器端代理传递一个 Apple Push Notification，唤醒一个 Notification Service Extension 最多 30 秒。该扩展使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密解密请求，使用 Keychain 密钥签名，并发布响应。设备 token 注册使用 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/98.md">NIP-98&lt;/a> HTTP Auth 防止 token 劫持。Clave 支持 &lt;code>bunker://&lt;/code> 和 &lt;code>nostrconnect://&lt;/code> 配对、每 client 信任级别、每 kind 覆盖，并已使用 Nostur 和 noStrudel 进行测试。&lt;/p>
&lt;h3 id="treasuresnostr-上的去中心化地理藏宝">Treasures：Nostr 上的去中心化地理藏宝&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/chad.curtis/treasures">Treasures&lt;/a> 是一个地理藏宝平台，其中藏宝点和发现是已签名的 Nostr 事件。藏宝点创建者发布带有 GPS 坐标的 kind &lt;code>37516&lt;/code> 可寻址事件。发现者通过扫描附加在实体藏宝点上的 QR code 记录发现；该 code 编码了创建者 pubkey、藏宝点 &lt;code>d&lt;/code> 标签，以及一个用作实体访问证明的验证私钥。&lt;a href="https://nostrcompass.org/zh/topics/nip-57/">NIP-57&lt;/a> zaps 可以从发现者流向藏宝点创建者，实时应用位于 &lt;a href="https://treasures.to">treasures.to&lt;/a>。&lt;/p>
&lt;h3 id="smesh-v051一个栈中的自托管-nostr-relayclient-和-signer">smesh v0.5.1：一个栈中的自托管 Nostr relay、client 和 signer&lt;/h3>
&lt;p>&lt;a href="https://git.smesh.lol/smesh/smesh">smesh&lt;/a> 是一个用 Moxie 编写的自托管 Nostr 栈，Moxie 是 mleku 从 Go 和 TinyGo 派生的自定义语言。该栈提供一个原生 relay 二进制文件，支持 HTTP、WebSocket、AUTH、search 和 Blossom；&lt;code>sm3sh&lt;/code>，一个编译为 ES 模块的 Web client；以及一个具有 NIP-07 浏览器签名以及 NIP-04 和 NIP-44 加密支持的浏览器 signer 扩展。最近的工作包括 v0.5.0 中的 MLS（RFC 9420）群组消息、用于 relay 同步的 negentropy 集合协调，以及一个 Web of Trust 图引擎。代码位于 mleku 的自托管 forge &lt;code>git.smesh.lol&lt;/code> 上，使用他自己的 &lt;code>git-web&lt;/code> 工具构建。相关的 &lt;a href="https://git.smesh.lol/smesh/gitea-nostr-auth">gitea-nostr-auth&lt;/a> 仓库是 Gitea 的 OAuth2/OIDC 桥接：用户使用 NIP-07 浏览器 signer 进行身份验证，桥接通过 NIP-65 发现 relay，Gitea 接收标准 OIDC 身份声明。&lt;/p>
&lt;h3 id="surveilnostr-上的万智牌套牌构建器">Surveil：Nostr 上的《万智牌》套牌构建器&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/chad.curtis/surveil">Surveil&lt;/a> 是一个面向《万智牌》玩家的 Nostr client，让用户可以搜索卡牌、构建套牌、在 Android 上使用设备端 ML Kit OCR 扫描纸质卡牌，并在网络上分享套牌。套牌作为 kind &lt;code>37381&lt;/code> 可寻址事件发布，套牌事件规范记录在项目的 &lt;code>NIP.md&lt;/code> 中。社交层由标准 Nostr 原语构建：NIP-22（kind &lt;code>1111&lt;/code>）针对每个套牌范围的线程评论、NIP-25（kind &lt;code>7&lt;/code>）反应、&lt;a href="https://github.com/nostr-protocol/nips/blob/master/78.md">NIP-78&lt;/a>（kind &lt;code>30078&lt;/code>）用于玩家主页的个人资料数据、kind &lt;code>3&lt;/code> 关注信息流，以及带回原始套牌的 &lt;code>a&lt;/code> 标签的分叉。&lt;a href="https://gitlab.com/chad.curtis/surveil/-/tags/v0.1.6">v0.1.6&lt;/a> 本周发布，带来了移动 UI 打磨、生命计数器改进、全面改版的 About 页面，以及套牌头图横幅上的 relay 药丸。Web 应用在任何提供静态 HTML 的地方运行，Android 构建通过 &lt;a href="https://zapstore.dev">Zapstore&lt;/a> 发布，kind &lt;code>37381&lt;/code> 事件也由 &lt;a href="https://about.ditto.pub/reference">Ditto&lt;/a> 原生索引为 Magic 套牌。仓库在 GitLab 上，位于 &lt;a href="https://gitlab.com/chad.curtis/surveil">chad.curtis/surveil&lt;/a>。&lt;/p>
&lt;h3 id="较小的新增fundstrnod-citydeploy-nsite-to-pages-和-null--nostr">较小的新增：Fundstr、Nod City、deploy-nsite-to-pages 和 null&amp;ndash;nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/ritty65/Fundstr">Fundstr&lt;/a> 是一个 Nostr 上的创作者资助平台，使用 Cashu ecash 进行一次性和定期捐款，具有创作者等级定义和 Nostr DM。&lt;a href="https://nod.city">Nod City&lt;/a> 是一个 Bitcoin 服务评论网站，评论是已签名的 Nostr 事件，评论者可以接收 zaps；未找到公开源仓库。&lt;a href="https://github.com/Origami74/deploy-nsite-to-pages">deploy-nsite-to-pages&lt;/a> 是一个 GitHub Action，通过使用 &lt;code>nsyte download&lt;/code> 将 nsite 镜像到 GitHub Pages，支持根 kind &lt;code>15128&lt;/code> 和命名 kind &lt;code>35128&lt;/code> 的 nsite。本周 NIP-34 数据中也发现的 &lt;a href="https://github.com/tami1A84/null--nostr">null&amp;ndash;nostr&lt;/a> 是最近的 OpenSats 波中作为 Nurunuru 涵盖的 client；它支持 MLS 群组消息、Amber、NIP-50 搜索、NIP-70 保护帖子、ProofMode 徽章和 Zapstore 分发。&lt;/p>
&lt;p>FIPS 对 Compass 来说不是新项目。它在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-25-newsletter/#fips-nostr-native-mesh-networking">Newsletter #6&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#fips-v020-ships-tor-transport-reproducible-builds-and-sidecar-examples">Newsletter #10&lt;/a> 中报道过。数据库现在指向正确的规范仓库 &lt;a href="https://github.com/jmcorgan/fips">jmcorgan/fips&lt;/a>，本周的 NIP-34 发现也浮现了相关的 git-over-Nostr 镜像，如 &lt;code>fips&lt;/code> 和 &lt;code>awesome-fips&lt;/code>。&lt;/p>
&lt;h2 id="协议工作">协议工作&lt;/h2>
&lt;h3 id="nip-更新">NIP 更新&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a> 中的近期提议和讨论：&lt;/p>
&lt;p>&lt;strong>本周合并：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>NIP-34 git 仓库：移除未使用的 refs 标签扩展&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2325">PR #2325&lt;/a>）：从 &lt;a href="https://nostrcompass.org/zh/topics/nip-34/">NIP-34&lt;/a> 中移除了一个已定义但未使用的 &lt;code>refs&lt;/code> 标签扩展。此清理减少了 git-over-Nostr 工具的实现歧义。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-34 git 仓库：移除不正确的 NIP-09 声明&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2326">PR #2326&lt;/a>）：移除了一个不正确的声明，即 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/09.md">NIP-09&lt;/a> 删除事件可以重置仓库状态。NIP-09 删除是 client 端的事件删除请求，不是仓库状态机。此更正防止 NIP-34 实现者将删除提示视为权威的仓库重置。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>开放和实现驱动的工作：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>GitWorkshop kind &lt;code>1111&lt;/code> 内联审查评论&lt;/strong>：内联代码审查评论 kind 记录在 GitWorkshop 的 &lt;code>NIP.md&lt;/code> 中，现在正在积极使用，但尚未作为正式 NIP 提议。Verdict 事件（kind &lt;code>7321&lt;/code>）和 &lt;code>suggestion&lt;/code> 块仍处于草稿阶段，尚未发布。来自 GitWorkshop 和 ngit 的实现反馈将决定这些形状是成为独立的 git-review NIP，还是仍作为叠加在 NIP-34 之上的应用约定。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Nostr mail core 和 Nostrmon&lt;/strong>：本周有两个新的自定义 NIP 草案在流传。&lt;a href="https://njump.me/57d11cdf2f9ed73f7f39d6a7a6012ee3d642584ab11887f96a031f7d00fd9697">Nostr mail core&lt;/a> 提议 kind &lt;code>1301&lt;/code> 用于 RFC 2822 电子邮件内容，使用 NIP-59 包装以进行私密传递，并通过 NIP-05 解析的桥接 pubkey 桥接到旧电子邮件。&lt;a href="https://njump.me/5e9a8cee19d464f5f0322518ac9ccaf2399c69da6572346b4fb12d36acb17a27">Nostrmon&lt;/a> 勾勒了区域、地图、生物、NPC、玩家存档和物品的可寻址事件 kind。两者仍是自定义草案，不是合并的 NIP。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-67：EOSE 完整性提示&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2317">PR #2317&lt;/a>）：该提议继续迭代，为 &lt;code>EOSE&lt;/code> 添加一个正向完整性标记，允许 relay 区分&amp;quot;已存储事件已完全交付&amp;quot;与旧的 &lt;code>EOSE&lt;/code> 情况，在后者中 relay 不做完整性声明。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="六个-nostr-四月">六个 Nostr 四月&lt;/h2>
&lt;p>四月给出了 Nostr 发展路径的清晰横截面：2021 年的协议文档、2022 年的早期 client 工作、2023 年的后 Damus 应用浪潮、2024 年的私密消息和 git-over-Nostr 工作、2025 年的 Blossom 和 relay 列表清理，以及 2026 年的以采用为重点的 client 资助。&lt;/p>
&lt;h3 id="2021-年-4-月nips-仓库之前的协议文档">2021 年 4 月：NIPs 仓库之前的协议文档&lt;/h3>
&lt;p>Fiatjaf 于 2020 年 11 月 20 日发布了最初的 Nostr 文章 &lt;a href="https://fiatjaf.com/nostr.html">&amp;ldquo;Notes and Other Stuff Transmitted by Relays&amp;rdquo;&lt;/a>。那第一份文本已经包含了至今仍定义该协议的核心形态：用户用密钥签名事件，将它们发布到 relay，并从他们选择的 relay 读取。&lt;a href="https://github.com/nostr-protocol/nostr/commits?since=2021-04-01&amp;amp;until=2021-04-30">&lt;code>nostr-protocol/nostr&lt;/code> 提交日志&lt;/a> 显示 4 月 1 日至 4 月 30 日之间没有提交。活动位于两侧：2021 年 3 月的提交添加了早期的&amp;quot;nostwitter&amp;quot;链接和一个 &lt;code>kind&lt;/code> 过滤器，而 2021 年 5 月重新调整了 NIP-02 的用途并添加了 NIP 作者身份。&lt;/p>
&lt;p>2021 年 4 月，没有公开的 client 市场，没有可见的 relay 网络，也没有 NIPs 仓库。该协议仍作为一份小文档和一些实验存在。Nostr 尚未成为社交网络或开发平台。它仍是一个 relay/key/event 模型，等待着它的第一波持续贡献者浪潮。&lt;/p>
&lt;h3 id="2022-年-4-月nips-仍在主仓库中">2022 年 4 月：NIPs 仍在主仓库中&lt;/h3>
&lt;p>2022 年 4 月是 NIPs 从主 &lt;code>nostr-protocol/nostr&lt;/code> 仓库中移出之前的最后一个月。由于拆分尚未发生，专用的 &lt;a href="https://github.com/nostr-protocol/nips">&lt;code>nostr-protocol/nips&lt;/code>&lt;/a> 仓库没有 4 月的 pull request 历史。在主仓库中，落地了三个 4 月提交：4 月 8 日 goswami1999 的 &lt;a href="https://github.com/nostr-protocol/nostr/commit/bae286312a233b971bee5429adda7aff41747eb8">&amp;ldquo;Update readme to add nip12&amp;rdquo;&lt;/a>、4 月 25 日 jb55 的 &lt;a href="https://github.com/nostr-protocol/nostr/commit/4b9e9d123273ba8a5c70d77df46922070c11c11d">&amp;ldquo;add kinds list&amp;rdquo;&lt;/a> 和 4 月 28 日 steliosrammos 的 &lt;a href="https://github.com/nostr-protocol/nostr/commit/759997657f07e0344064228ffe5e93febe85d367">&amp;ldquo;add js formatting to sample code&amp;rdquo;&lt;/a>。&lt;/p>
&lt;p>Client 工作也开始成形。2022 年 4 月的 Damus 提交添加了早期的聊天室行为、个人资料处理和应用图标，而 nostr-tools 正在成为早期 client 和实验的 JavaScript 库路径。在协议方面，NIP-12 通用标签查询为标签搜索提供了一个有文档的地方，kinds 列表将 Nostr 移向注册表模型，更好的 JavaScript 示例使规范更容易被 client 和库作者实现。5 月 1 日，fiatjaf 将 NIPs 移到了专用仓库。2022 年 4 月是原始单仓库时代的最后一个月。&lt;/p>
&lt;h3 id="2023-年-4-月后-damus-应用扩张">2023 年 4 月：后 Damus 应用扩张&lt;/h3>
&lt;p>2023 年 4 月是在 2023 年 1 月 31 日 Damus 在 iOS App Store 上线三个月之后，也是在 Jack Dorsey 发布他的 Nostr 公钥之后。网络刚刚吸收了它的第一次主要公众增长浪潮。Damus、Snort、Iris、Coracle 和 Amethyst 等 client 处于活跃状态，而 relay 运营者正在了解更大的社交图对带宽、垃圾信息、搜索和审核假设的影响。&lt;/p>
&lt;p>2023 年 4 月有一个合并的 NIPs PR：&lt;a href="https://github.com/nostr-protocol/nips/pull/456">PR #456&lt;/a>，于 4 月 17 日合并，将 NIP-19 bech32 实体链接添加到 NIP-21 URI 处理。周围的提交显示了协议工作背后的应用压力。2023 年 4 月看到了 &lt;a href="https://github.com/nostr-protocol/nips/commit/8b39976e78f90fe766ad7149e250777cddacbb5e">NIP-45 COUNT&lt;/a>、事件特定 zap 标记、&lt;a href="https://github.com/nostr-protocol/nips/commit/bf0a0da6a48b96467172414d8e41dc72b0ca379c">NIP-15 marketplace&lt;/a>、NIP-26 删除委托语义、NIP-94 文件元数据、NIP-47 wallet-connect 错误处理，以及 &lt;a href="https://github.com/nostr-protocol/nips/commit/e91ce3409e1ce8267fc07a21784d2538621267c3">NIP-30 自定义 emoji&lt;/a> 的工作。贡献者列表已扩展到包括 fiatjaf、staab、pablof7z、Semisol、CodyTseng、sethforprivacy、mikedilger、AsaiToshiya、alexgleason、martindsq、frbittencourt 和 arkin0x。&lt;/p>
&lt;p>Damus、Snort、Iris、Coracle 和 Amethyst 不再是围绕规范的演示；它们是生产 client，处理入门、信息流、垃圾信息、zaps、媒体和 relay 选择。2023 年 4 月的协议工作读起来就像这些 client 创建的待办事项：zaps、marketplace、文件元数据、计数、emoji 和身份链接都将规范推向了简单笔记和关注之外。&lt;/p>
&lt;h3 id="2024-年-4-月私密消息git-over-nostr-和维护者支持">2024 年 4 月：私密消息、git-over-Nostr 和维护者支持&lt;/h3>
&lt;p>2024 年 4 月有两个 NIP PR 合并。4 月 10 日合并的 &lt;a href="https://github.com/nostr-protocol/nips/pull/1167">PR #1167&lt;/a> 修复了 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 远程签名中令人困惑的术语，其中 client 和 signer 需要对请求和授权的操作使用精确的语言。4 月 17 日合并的 &lt;a href="https://github.com/nostr-protocol/nips/pull/1108">PR #1108&lt;/a> 扩展了 &lt;a href="https://nostrcompass.org/zh/topics/nip-34/">NIP-34&lt;/a> git 仓库，加入了状态事件、澄清、可选的维护者、repo 标识符和可发现性标签。这一步让 git-over-Nostr 对 ngit 以及后来的 GitWorkshop 更实用。&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/commit/df30012430c88d49fb5b124992b04d5c61b6338b">NIP-17&lt;/a>，原为 NIP-24，于 4 月 24 日作为密封的 gift-wrapped 消息落地，用于私密 DM 和小型群组聊天。Client 和库工作并行进行：Amethyst、Primal、Gossip、nostr-tools、NDK 和 rust-nostr 在同一时期都很活跃。&lt;/p>
&lt;p>OpenSats 也在 2024 年 4 月宣布了对 Nostr 开发者的长期支持：4 月 9 日的 &lt;a href="https://opensats.org/blog/pablofz7-receives-lts-grant">PabloF7z&lt;/a>、4 月 12 日的 &lt;a href="https://opensats.org/blog/stuart-bowman-receives-lts-grant">Stuart Bowman&lt;/a> 和 4 月 15 日的 &lt;a href="https://opensats.org/blog/hzrd149-receives-lts-grant">hzrd149&lt;/a>。这些资助将资金从孤立的项目资助转向 relay、库和 client 基础设施的持续维护。&lt;/p>
&lt;h3 id="2025-年-4-月密集的-nip-清理和-blossom-正式化">2025 年 4 月：密集的 NIP 清理和 Blossom 正式化&lt;/h3>
&lt;p>2025 年 4 月是本回顾中最密集的协议月份，有十六个合并的 NIPs PR。该月始于 &lt;a href="https://github.com/nostr-protocol/nips/pull/1846">PR #1846&lt;/a>，为 NIP-73 添加了区块链交易和地址，以及 &lt;a href="https://github.com/nostr-protocol/nips/pull/1865">PR #1865&lt;/a>，将 NIP-C0 标签添加到标准化标签表。它继续以 &lt;a href="https://github.com/nostr-protocol/nips/pull/1801">PR #1801&lt;/a> 和 &lt;a href="https://github.com/nostr-protocol/nips/pull/1889">PR #1889&lt;/a>，两者都改进了 kind &lt;code>10002&lt;/code> relay 列表重新发布指导，以及 &lt;a href="https://github.com/nostr-protocol/nips/pull/1879">PR #1879&lt;/a>，缩小并澄清了 &lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a>。&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/1822">PR #1822&lt;/a> 为 Blossom 交互添加了 NIP-B7，在超过一年的非正式实践后，为 Nostr client 和 Blossom 服务器提供了一个规范的协调层。&lt;a href="https://github.com/nostr-protocol/nips/pull/1051">PR #1051&lt;/a> 弃用了 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/26.md">NIP-26&lt;/a>，即委托事件签名规范。NIP-26 一直难以安全实现，并且随着 NIP-46 和其他 signer 模式的成熟而变得不那么有吸引力。&lt;/p>
&lt;p>该月剩余的时间将清理与应用扩展相结合：&lt;a href="https://github.com/nostr-protocol/nips/pull/1882">PR #1882&lt;/a> 为 &lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a> 添加了隐私政策和服务条款字段，&lt;a href="https://github.com/nostr-protocol/nips/pull/1849">PR #1849&lt;/a> 在 NIP-B0 下扩展了 kind &lt;code>39701&lt;/code> Web 书签，&lt;a href="https://github.com/nostr-protocol/nips/pull/1891">PR #1891&lt;/a> 将该书签 kind 添加到 README，&lt;a href="https://github.com/nostr-protocol/nips/pull/1895">PR #1895&lt;/a> 添加了 NIP-B0 标准化标签。OpenSats 于 4 月 16 日宣布了其 &lt;a href="https://opensats.org/blog/eleventh-wave-of-nostr-grants">第十一波 Nostr 资助&lt;/a>，资助了 Swae、HAMSTR、Vertex、Nostr Double Ratchet 和 Nostr Game Engine。Primal、Coracle、noStrudel、nostr-tools、NDK 和 rust-nostr 在此期间也在发布，因此协议清理与活跃的 client 和库工作并存。&lt;/p>
&lt;h3 id="2026-年-4-月nip-34-加固徽章和以采用为重点的资助">2026 年 4 月：NIP-34 加固、徽章和以采用为重点的资助&lt;/h3>
&lt;p>本期收官的 2026 年 4 月有四个合并的 NIPs PR。第一个是 4 月 1 日合并的 &lt;a href="https://github.com/nostr-protocol/nips/pull/2276">PR #2276&lt;/a>，将 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/58.md">NIP-58&lt;/a> 个人资料徽章更改为 kind &lt;code>10008&lt;/code>，并添加了 kind &lt;code>30008&lt;/code> 徽章集，使徽章分配和徽章集合更具组合性。第二次 git-over-Nostr 可用性更改到达 4 月 10 日合并的 &lt;a href="https://github.com/nostr-protocol/nips/pull/2312">PR #2312&lt;/a>，为 &lt;a href="https://nostrcompass.org/zh/topics/nip-34/">NIP-34&lt;/a> 添加了 &lt;code>nostr://&lt;/code> clone URL 语义。4 月 25 日的清理，&lt;a href="https://github.com/nostr-protocol/nips/pull/2325">PR #2325&lt;/a> 和 &lt;a href="https://github.com/nostr-protocol/nips/pull/2326">PR #2326&lt;/a>，移除了未使用和不正确的 NIP-34 语言。&lt;/p>
&lt;p>相关的提交锐化了同样的表面。4 月 22 日，fiatjaf 为 NIP-51 添加了一个 Blossom 服务器列表，并调整了 NIP-29 元数据编辑以匹配 Flotilla 的 PUT 式行为。4 月 26 日，他重命名了 NIP-5A 以求清晰。2026 年 4 月专注于使已在使用的协议表面更易于实现，更难被误读。&lt;/p>
&lt;p>OpenSats 于 4 月 8 日宣布了其 &lt;a href="https://opensats.org/blog/sixteenth-wave-of-nostr-grants">第十六波 Nostr 资助&lt;/a>，支持 Amethyst Desktop、Nostr Mail、Nostrord、Nurunuru（null&amp;ndash;nostr）和 HAMSTR 续期：桌面 client、类电子邮件消息、群组 UX、日语入门和离网连接。&lt;/p>
&lt;hr>
&lt;p>&lt;em>感谢阅读 Nostr Compass #20。&lt;a href="https://nostr.com">通过 Nostr 私信我们&lt;/a>，提供提示、更正或要报道的新项目。&lt;/em>&lt;/p></content:encoded></item><item><title>Nostr Compass #19</title><link>https://nostrcompass.org/zh/newsletters/2026-04-22-newsletter/</link><pubDate>Wed, 22 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-04-22-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 落地了一轮大规模的 Marmot 兼容、社区和 MoQ 音频房间工作；&lt;a href="https://github.com/OpenTollGate/tollgate">TollGate&lt;/a> 在 &lt;a href="https://github.com/OpenTollGate/tollgate/releases/tag/v0.1.0">v0.1.0&lt;/a> 中稳定了基于 Nostr 与 Cashu 的按量付费互联网接入；&lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a> 则围绕 &lt;a href="https://nostrcompass.org/zh/topics/nip-45/">NIP-45&lt;/a>、&lt;a href="https://nostrcompass.org/zh/topics/nip-62/">NIP-62&lt;/a>、压缩、查询加固和完整的 &lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a> 对齐完成了一周的 relay 工作。&lt;a href="https://github.com/forgesworn">Forgesworn&lt;/a> 一次性发布了完整的 Nostr 签名、身份和付费 API 工具栈。&lt;a href="https://github.com/shocknet/wallet2">ShockWallet&lt;/a> 继续推进 Nostr 原生 Lightning wallet 工作流。Formstr 套件、&lt;a href="https://github.com/ChadFarrow/stablekraft-app">StableKraft&lt;/a>、&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a>、&lt;a href="https://github.com/fiatjaf/topaz">topaz&lt;/a>、&lt;a href="https://github.com/bitvora/wot-relay">WoT Relay&lt;/a>、&lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a> 和 &lt;a href="https://gitworkshop.dev/npub1z5jf78uhd68znuwwwu926th55rzd0wy8nd9clkr03cx22mwme0jqazk56h/relay.ngit.dev/passwd">NipLock&lt;/a> 也都带来了值得注意的发布。本期两篇 NIP 深度解析分别是 &lt;a href="https://nostrcompass.org/zh/topics/nip-72/">NIP-72&lt;/a>（审核社区）和 &lt;a href="https://nostrcompass.org/zh/topics/nip-57/">NIP-57&lt;/a>（zaps）。&lt;/p>
&lt;h2 id="头条">头条&lt;/h2>
&lt;h3 id="amethyst-发布-marmot-mip-兼容nip-72-社区zap-goals-和-moq-音频房间">Amethyst 发布 Marmot MIP 兼容、NIP-72 社区、zap goals 和 MoQ 音频房间&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 本周合并了 57 个 PR，重点围绕 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 加密群聊兼容、原生审核社区、直播 zap goals，以及基于 Media over QUIC 的新音频房间栈。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2462">PR #2462&lt;/a> 让内嵌 &lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a> 与 MIP-01、MIP-05 wire formats 对齐，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2435">PR #2435&lt;/a> 增加 MIP-00 KeyPackage Relay List 支持，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2466">PR #2466&lt;/a>、&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2471">PR #2471&lt;/a>、&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2477">PR #2477&lt;/a> 和 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2493">PR #2493&lt;/a> 则继续补齐 commit framing、外层解密和密码学验证路径。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2488">PR #2488&lt;/a> 还发布了命令行工具 &lt;code>amy&lt;/code>。在产品层，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2468">PR #2468&lt;/a> 带来了第一等 &lt;a href="https://nostrcompass.org/zh/topics/nip-72/">NIP-72&lt;/a> 社区创建与管理，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2469">PR #2469&lt;/a> 把 &lt;a href="https://nostrcompass.org/zh/topics/nip-75/">NIP-75&lt;/a> zap goals 接到 &lt;a href="https://nostrcompass.org/zh/topics/nip-53/">NIP-53&lt;/a> 直播页面，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2494">PR #2494&lt;/a> 则新增 Media over QUIC 客户端和音频房间支持。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 落地了一轮大规模的 Marmot 兼容、社区和 MoQ 音频房间工作；&lt;a href="https://github.com/OpenTollGate/tollgate">TollGate&lt;/a> 在 &lt;a href="https://github.com/OpenTollGate/tollgate/releases/tag/v0.1.0">v0.1.0&lt;/a> 中稳定了基于 Nostr 与 Cashu 的按量付费互联网接入；&lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a> 则围绕 &lt;a href="https://nostrcompass.org/zh/topics/nip-45/">NIP-45&lt;/a>、&lt;a href="https://nostrcompass.org/zh/topics/nip-62/">NIP-62&lt;/a>、压缩、查询加固和完整的 &lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a> 对齐完成了一周的 relay 工作。&lt;a href="https://github.com/forgesworn">Forgesworn&lt;/a> 一次性发布了完整的 Nostr 签名、身份和付费 API 工具栈。&lt;a href="https://github.com/shocknet/wallet2">ShockWallet&lt;/a> 继续推进 Nostr 原生 Lightning wallet 工作流。Formstr 套件、&lt;a href="https://github.com/ChadFarrow/stablekraft-app">StableKraft&lt;/a>、&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a>、&lt;a href="https://github.com/fiatjaf/topaz">topaz&lt;/a>、&lt;a href="https://github.com/bitvora/wot-relay">WoT Relay&lt;/a>、&lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a> 和 &lt;a href="https://gitworkshop.dev/npub1z5jf78uhd68znuwwwu926th55rzd0wy8nd9clkr03cx22mwme0jqazk56h/relay.ngit.dev/passwd">NipLock&lt;/a> 也都带来了值得注意的发布。本期两篇 NIP 深度解析分别是 &lt;a href="https://nostrcompass.org/zh/topics/nip-72/">NIP-72&lt;/a>（审核社区）和 &lt;a href="https://nostrcompass.org/zh/topics/nip-57/">NIP-57&lt;/a>（zaps）。&lt;/p>
&lt;h2 id="头条">头条&lt;/h2>
&lt;h3 id="amethyst-发布-marmot-mip-兼容nip-72-社区zap-goals-和-moq-音频房间">Amethyst 发布 Marmot MIP 兼容、NIP-72 社区、zap goals 和 MoQ 音频房间&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 本周合并了 57 个 PR，重点围绕 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 加密群聊兼容、原生审核社区、直播 zap goals，以及基于 Media over QUIC 的新音频房间栈。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2462">PR #2462&lt;/a> 让内嵌 &lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a> 与 MIP-01、MIP-05 wire formats 对齐，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2435">PR #2435&lt;/a> 增加 MIP-00 KeyPackage Relay List 支持，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2466">PR #2466&lt;/a>、&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2471">PR #2471&lt;/a>、&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2477">PR #2477&lt;/a> 和 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2493">PR #2493&lt;/a> 则继续补齐 commit framing、外层解密和密码学验证路径。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2488">PR #2488&lt;/a> 还发布了命令行工具 &lt;code>amy&lt;/code>。在产品层，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2468">PR #2468&lt;/a> 带来了第一等 &lt;a href="https://nostrcompass.org/zh/topics/nip-72/">NIP-72&lt;/a> 社区创建与管理，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2469">PR #2469&lt;/a> 把 &lt;a href="https://nostrcompass.org/zh/topics/nip-75/">NIP-75&lt;/a> zap goals 接到 &lt;a href="https://nostrcompass.org/zh/topics/nip-53/">NIP-53&lt;/a> 直播页面，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2494">PR #2494&lt;/a> 则新增 Media over QUIC 客户端和音频房间支持。&lt;/p>
&lt;h3 id="tollgate-v010-让基于-nostr-和-cashu-的按量付费互联网更稳定">TollGate v0.1.0 让基于 Nostr 和 Cashu 的按量付费互联网更稳定&lt;/h3>
&lt;p>&lt;a href="https://github.com/OpenTollGate/tollgate">TollGate&lt;/a> 于 4 月 21 日发布 &lt;a href="https://github.com/OpenTollGate/tollgate/releases/tag/v0.1.0">v0.1.0&lt;/a>，这是其“按量付费网络接入”规范集合的首个带 tag 快照。该协议允许任何能够控制连接的设备，例如 WiFi 路由器、以太网交换机或 Bluetooth tether，发布价格、接受 &lt;a href="https://nostrcompass.org/zh/topics/cashu/">Cashu&lt;/a> ecash tokens，并通过预付本地 token 管理会话。这个版本固定了三层架构：协议层由 &lt;a href="https://github.com/OpenTollGate/tollgate/blob/v0.1.0/TIP-01.md">TIP-01&lt;/a> 和 &lt;a href="https://github.com/OpenTollGate/tollgate/blob/v0.1.0/TIP-02.md">TIP-02&lt;/a> 定义，接口层由 &lt;a href="https://github.com/OpenTollGate/tollgate/blob/v0.1.0/HTTP-01.md">HTTP-01&lt;/a> 到 HTTP-03 及 &lt;a href="https://github.com/OpenTollGate/tollgate/blob/v0.1.0/NOSTR-01.md">NOSTR-01&lt;/a> 组成，介质层则由 &lt;a href="https://github.com/OpenTollGate/tollgate/blob/v0.1.0/WIFI-01.md">WIFI-01&lt;/a> 描述 captive portal 场景下的路由方式。由于支付资产是不记名 bearer token，用户只要本地 Cashu wallet 里已有 token，就可以直接买下第一分钟网络接入。&lt;/p>
&lt;h3 id="nostream-合并-53-个-pr覆盖-nip-45nip-62压缩和查询加固">nostream 合并 53 个 PR，覆盖 NIP-45、NIP-62、压缩和查询加固&lt;/h3>
&lt;p>&lt;a href="https://github.com/Cameri/nostream">nostream&lt;/a> 这套 TypeScript relay 实现，在一周内合并了 53 个 PR，覆盖新 NIP 支持、查询性能、安全加固和运维细节。&lt;a href="https://github.com/Cameri/nostream/pull/522">PR #522&lt;/a> 增加 &lt;a href="https://nostrcompass.org/zh/topics/nip-45/">NIP-45&lt;/a> &lt;code>COUNT&lt;/code> 支持，&lt;a href="https://github.com/Cameri/nostream/pull/544">PR #544&lt;/a> 把 &lt;a href="https://nostrcompass.org/zh/topics/nip-62/">NIP-62&lt;/a> right-to-vanish 加入其广告的能力列表，&lt;a href="https://github.com/Cameri/nostream/pull/548">PR #548&lt;/a> 扩展 filter schema 支持大写 tag filters，而 &lt;a href="https://github.com/Cameri/nostream/pull/514">PR #514&lt;/a> 则为 event import/export 增加 gzip 和 xz 压缩。性能与正确性方面，&lt;a href="https://github.com/Cameri/nostream/pull/534">PR #534&lt;/a> 引入 benchmark harness 并优化了 filter-to-SQL 转换，&lt;a href="https://github.com/Cameri/nostream/pull/524">PR #524&lt;/a> 修复了 pubkey whitelist/blacklist 的前缀匹配 bug，&lt;a href="https://github.com/Cameri/nostream/pull/553">PR #553&lt;/a> 让 &lt;code>upsertMany&lt;/code> 在并发插入时加入确定性的 tie-breaker，&lt;a href="https://github.com/Cameri/nostream/pull/493">PR #493&lt;/a> 只信任来自已配置 trusted proxies 的 &lt;code>X-Forwarded-For&lt;/code>，而 &lt;a href="https://github.com/Cameri/nostream/pull/557">PR #557&lt;/a> 使其达到完整 &lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a> 对齐。&lt;/p>
&lt;h2 id="本周发布">本周发布&lt;/h2>
&lt;h3 id="primal-android-增加-explore-tabnip-05-验证和音频播放器">Primal Android 增加 Explore tab、NIP-05 验证和音频播放器&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> 在上周信息流重做的基础上，又合并了 11 个 PR。&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1021">PR #1021&lt;/a> 增加新的 Explore tab，&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1015">PR #1015&lt;/a> 增加 feed editor，&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/994">PR #994&lt;/a> 带来 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/05.md">NIP-05&lt;/a> 资料验证 UI，&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/997">PR #997&lt;/a> 在信息流中嵌入音频播放器，而 &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1018">PR #1018&lt;/a> 则把钱包二维码扫描路径复用于 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> pairing。&lt;/p>
&lt;h3 id="strfry-增加-prometheus-写路径指标并修复-nip-42-auth-envelope">strfry 增加 Prometheus 写路径指标并修复 NIP-42 AUTH envelope&lt;/h3>
&lt;p>&lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a> 发布了一组面向运营者的改进。&lt;a href="https://github.com/hoytech/strfry/pull/194">PR #194&lt;/a> 增加了专门的 Prometheus 写路径指标导出器，&lt;a href="https://github.com/hoytech/strfry/pull/197">PR #197&lt;/a> 记录每连接上下行字节与压缩率，&lt;a href="https://github.com/hoytech/strfry/pull/192">PR #192&lt;/a> 把过滤器 tag 限制改成运行时可配置，而 &lt;a href="https://github.com/hoytech/strfry/pull/201">PR #201&lt;/a> 则把 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/42.md">NIP-42&lt;/a> AUTH 失败响应从 &lt;code>NOTICE&lt;/code> 改为规范要求的 &lt;code>OK&lt;/code> envelope。&lt;/p>
&lt;h3 id="shopstr-通过-13-个-pr-加固店铺安全">Shopstr 通过 13 个 PR 加固店铺安全&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> 本周合并 13 个 PR，重点几乎全在安全修复。&lt;a href="https://github.com/shopstr-eng/shopstr/pull/434">PR #434&lt;/a> 修复店铺链接中的存储型 JavaScript 漏洞，&lt;a href="https://github.com/shopstr-eng/shopstr/pull/417">PR #417&lt;/a> 处理店铺政策 HTML 渲染，阻断反射型 XSS，&lt;a href="https://github.com/shopstr-eng/shopstr/pull/418">PR #418&lt;/a> 关闭未认证的缓存 event 删除 API。&lt;a href="https://github.com/shopstr-eng/shopstr/pull/433">PR #433&lt;/a>、&lt;a href="https://github.com/shopstr-eng/shopstr/pull/419">PR #419&lt;/a>、&lt;a href="https://github.com/shopstr-eng/shopstr/pull/435">PR #435&lt;/a> 和 &lt;a href="https://github.com/shopstr-eng/shopstr/pull/414">PR #414&lt;/a> 也分别修复了缓存消息读取认证、受保护端点访问与 SSRF 问题。&lt;/p>
&lt;h3 id="nostria-v3126-到-v3128-为-android-增加后台音乐播放">Nostria v3.1.26 到 v3.1.28 为 Android 增加后台音乐播放&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> 本周发布了 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.22">v3.1.22&lt;/a> 到 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.28">v3.1.28&lt;/a> 的六个版本。头条变化出现在 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.26">v3.1.26&lt;/a>：应用在播放音频时会保持自身存活，并在通知栏和锁屏上提供媒体控制。&lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.27">v3.1.27&lt;/a> 与 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.28">v3.1.28&lt;/a> 继续加固这一新的媒体服务表面。&lt;/p>
&lt;h3 id="wisp-v0180-beta-增加-normie-modefor-you-feed-和-nip-29-群组配置">Wisp v0.18.0-beta 增加 Normie Mode、For You feed 和 NIP-29 群组配置&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a> 于 4 月 16 日发布 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.18.0-beta">v0.18.0-beta&lt;/a>，面向来自非 Bitcoin 原生环境的新用户。&lt;a href="https://github.com/barrydeen/wisp/pull/462">PR #462&lt;/a> 增加了在应用中全面显示法币金额的 Normie Mode，&lt;a href="https://github.com/barrydeen/wisp/pull/464">PR #464&lt;/a> 重做 onboarding，&lt;a href="https://github.com/barrydeen/wisp/pull/469">PR #469&lt;/a> 增加 For You feed。协议层面，&lt;a href="https://github.com/barrydeen/wisp/pull/471">PR #471&lt;/a> 增加 &lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a> 的 flags、invites、roles 和 AUTH prompts，而 &lt;a href="https://github.com/barrydeen/wisp/pull/481">PR #481&lt;/a> 则会把 note 广播到被 mention pubkeys 的 &lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a> inbox relays。&lt;/p>
&lt;h3 id="noornote-v084-增加定时发布和直播-zap">NoorNote v0.8.4 增加定时发布和直播 zap&lt;/h3>
&lt;p>&lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a> 发布了 &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.8.4">v0.8.4&lt;/a> 和 &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.8.5">v0.8.5&lt;/a>。v0.8.4 的核心新增功能是 Scheduled Posts：应用会把已签名 event 交给 NoorNote 运营的 relay，在计划时间代为发布，因此私钥始终留在设备端。该版本还增加了直播卡片的一键 zap，通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-53/">NIP-53&lt;/a> 把 sats 显示在直播聊天覆盖层内，而 v0.8.5 则修复了长列表滚动时出现的重复帖子问题。&lt;/p>
&lt;h3 id="topaz-v002-发布一个可在-android-上运行的-nostr-relay">topaz v0.0.2 发布一个可在 Android 上运行的 Nostr relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/topaz">topaz&lt;/a> 于 2026-04-17 发布 &lt;a href="https://github.com/fiatjaf/topaz/releases/tag/v0.0.2">v0.0.2&lt;/a>。这个由 fiatjaf 构建的新 relay 以 Kotlin 为主，目标是把手机本身变成一个随时可用的个人 relay。当前阶段它的范围仍较窄，重点是先提供一个可安装的 Android 包和一个可运行 relay。&lt;/p>
&lt;h3 id="stablekraft-v100-发布首个稳定版音乐与播客-pwa">StableKraft v1.0.0 发布首个稳定版音乐与播客 PWA&lt;/h3>
&lt;p>&lt;a href="https://github.com/ChadFarrow/stablekraft-app">StableKraft&lt;/a> 是一个使用 Next.js 构建的 PWA，用于从 podcast feeds 中发现、整理和播放音乐，同时通过 Nostr 实现登录与社交，通过 Lightning 完成 V4V 支付。它在 2026-04-18 达到 &lt;a href="https://github.com/ChadFarrow/stablekraft-app/releases/tag/v1.0.0">v1.0.0&lt;/a>。同一周里，项目还通过 &lt;a href="https://github.com/ChadFarrow/stablekraft-app/commit/7ac90f6">15 分钟 OPML cache 和非法 XML 清理&lt;/a> 收紧了 feed ingestion，并通过一个&lt;a href="https://github.com/ChadFarrow/stablekraft-app/commit/fbf337b">后续修复&lt;/a> 把 nightly reparse 窗口从 720 小时缩短到 24 小时。&lt;/p>
&lt;h3 id="niplock-发布基于-nip-17-的密码管理器">NipLock 发布基于 NIP-17 的密码管理器&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev/npub1z5jf78uhd68znuwwwu926th55rzd0wy8nd9clkr03cx22mwme0jqazk56h/relay.ngit.dev/passwd">NipLock&lt;/a> 是一个使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> gift-wrapped 私信，在多设备之间存储和同步凭证的密码管理器。每条密码记录都是用户发给自己的 NIP-17 DM，因此只要设备使用同一个 key 认证，就能复现同一组 events。签名既可以使用原始 &lt;code>nsec&lt;/code>，也可以通过 &lt;a href="https://github.com/fiatjaf/nos2x">nos2x&lt;/a> 或 &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 配合 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 完成。&lt;/p>
&lt;h3 id="flotilla-budabit-打磨其-nip-34-仓库界面">flotilla-budabit 打磨其 NIP-34 仓库界面&lt;/h3>
&lt;p>Budabit 社区的 &lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a> 分支 &lt;a href="https://github.com/Pleb5/flotilla-budabit">flotilla-budabit&lt;/a> 本周发布了一组围绕 NIP-34 git-over-nostr 工作流的修复，包括恢复仓库讨论控制、在详情页保持 sticky repo tabs 可见、从保存的 GRASP relays 加载仓库公告，以及保持维护者应用的 patch 状态同步。&lt;/p>
&lt;h3 id="rx-nostr-372-到-374-增加默认验证器和可选构造参数">rx-nostr 3.7.2 到 3.7.4 增加默认验证器和可选构造参数&lt;/h3>
&lt;p>&lt;a href="https://github.com/penpenpng/rx-nostr">rx-nostr&lt;/a> 发布了 &lt;a href="https://github.com/penpenpng/rx-nostr/releases/tag/rx-nostr%403.7.2">3.7.2&lt;/a>、&lt;a href="https://github.com/penpenpng/rx-nostr/releases/tag/rx-nostr%403.7.3">3.7.3&lt;/a> 和 &lt;a href="https://github.com/penpenpng/rx-nostr/releases/tag/rx-nostr%403.7.4">3.7.4&lt;/a>。&lt;a href="https://github.com/penpenpng/rx-nostr/pull/192">PR #192&lt;/a> 加入默认 Schnorr signature verifier，并通过配套的 &lt;a href="https://github.com/penpenpng/rx-nostr/releases/tag/crypto%403.1.6">crypto@3.1.6&lt;/a> 修复 &lt;code>@noble/curves&lt;/code> 用法问题。&lt;a href="https://github.com/penpenpng/rx-nostr/pull/195">PR #195&lt;/a> 则让 &lt;code>createRxNostr()&lt;/code> 的参数变为可选。&lt;/p>
&lt;h3 id="keep-android-v100-在可复现构建和零追踪器下发布">Keep Android v1.0.0 在可复现构建和零追踪器下发布&lt;/h3>
&lt;p>&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a> 于 4 月 21 日发布 &lt;a href="https://github.com/privkeyio/keep-android/releases/tag/v1.0.0">v1.0.0&lt;/a>。&lt;a href="https://github.com/privkeyio/keep-android/pull/241">PR #241&lt;/a> 提供可复现构建配方，&lt;a href="https://github.com/privkeyio/keep-android/pull/248">PR #248&lt;/a> 用 ZXing 替换 Google ML Kit，以去除 Google Play Services 依赖，而 &lt;a href="https://github.com/privkeyio/keep-android/pull/252">PR #252&lt;/a> 发布了 &lt;a href="https://reports.exodus-privacy.eu.org/en/">Exodus Privacy scan&lt;/a>，显示 v1.0.0 构建零追踪器。&lt;a href="https://github.com/privkeyio/keep-android/pull/256">PR #256&lt;/a> 则增加了 &lt;code>zapstore.yaml&lt;/code>，让 APK 能直接通过 &lt;a href="https://zapstore.dev">zapstore&lt;/a> 分发。&lt;/p>
&lt;h3 id="flotilla-173-和-174-通过-kind-9-wrapping-丰富-nip-29-房间">Flotilla 1.7.3 和 1.7.4 通过 kind-9 wrapping 丰富 NIP-29 房间&lt;/h3>
&lt;p>&lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a> 发布了 &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.3">1.7.3&lt;/a> 和 &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.4">1.7.4&lt;/a>。最核心的协议变化，是把非聊天内容类型包裹进 kind &lt;code>9&lt;/code> 中，再送入房间，这样客户端在渲染 calendar events、polls 等对象时，就不会丢失它们来自哪个房间的上下文。该版本线还加入了 polls、Aegis URL scheme 的 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 登录、space invites 原生分享、room mentions、草稿和通话中的视频支持。&lt;/p>
&lt;h3 id="wot-relay-v021-把-eventstore-迁移到-lmdb">WoT Relay v0.2.1 把 eventstore 迁移到 LMDB&lt;/h3>
&lt;p>&lt;a href="https://github.com/bitvora/wot-relay">WoT Relay&lt;/a> 于 2026-04-22 发布 &lt;a href="https://github.com/bitvora/wot-relay/releases/tag/v0.2.1">v0.2.1&lt;/a>。&lt;a href="https://github.com/bitvora/wot-relay/pull/97">PR #97&lt;/a> 把 eventstore 迁移到 &lt;a href="http://www.lmdb.tech/">LMDB&lt;/a>，并调优 bootstrap 获取逻辑，避免初始 trust graph 构建时耗尽上游读取预算。&lt;a href="https://github.com/bitvora/wot-relay/pull/99">PR #99&lt;/a> 更新 &lt;code>golang.org/x/crypto&lt;/code> 到 v0.45.0，&lt;a href="https://github.com/bitvora/wot-relay/pull/100">PR #100&lt;/a> 则更新了对外广告的 &lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a> software URL 和版本字符串。&lt;/p>
&lt;h3 id="formstr-套件pollerama-安全加固forms-i18ncalendar-rrule-支持">Formstr 套件：Pollerama 安全加固、Forms i18n、Calendar RRULE 支持&lt;/h3>
&lt;p>Formstr 套件本周在 Pollerama、Formstr forms 和 Nostr Calendar 三个项目中一共合并了 26 个 PR。Pollerama 重点做了安全工作，包括退出登录时清理缓存 DM、把本地 key 移入安全浏览器存储、在登录路径中防御恶意 kind &lt;code>0&lt;/code> profile 的 &lt;code>JSON.parse&lt;/code> 崩溃。Formstr 本体则增加了音视频 URL 支持、Web app i18n，以及 Google Forms 导入功能，并移除了浏览器控制台中的敏感 key logs。Nostr Calendar by Formstr 同日发布 &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.3.0">v1.3.0&lt;/a> 和 &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.4.0">v1.4.0&lt;/a>，带来多个与自定义 RRULE 规则、UTC 解释和共享事件加入有关的改进。&lt;/p>
&lt;h3 id="另外发布notedecknostrbluecliprelaycaptains-log">另外发布：notedeck、nostr.blue、cliprelay、Captain&amp;rsquo;s Log&lt;/h3>
&lt;p>本周还有一些客户端发布了没有单独头条的大版本：Damus 团队的 &lt;a href="https://github.com/damus-io/notedeck">notedeck&lt;/a> 发布 &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.10.0-beta.4">v0.10.0-beta.4&lt;/a>，修复 column 渲染和 relay pool；Dioxus 构建的 Rust 客户端 &lt;a href="https://github.com/patrickulrich/nostr.blue/releases/tag/v0.8.6">nostr.blue v0.8.6&lt;/a> 引入 Dioxus 0.7.5，并通过把原生音频 bridge 改写为 &lt;code>manganis::ffi&lt;/code> plugin 恢复 Android 构建；&lt;a href="https://github.com/tajava2006/cliprelay">cliprelay&lt;/a> 发布桌面版 v0.0.3 和 Android 版 v0.0.4，继续收紧跨设备剪贴板同步循环；&lt;a href="https://github.com/nodetec/comet">Captain&amp;rsquo;s Log&lt;/a> 则连续发布三版 alpha，增加 sync-relay liveness detection。&lt;/p>
&lt;h2 id="开发中">开发中&lt;/h2>
&lt;h3 id="whitenoise-rs-重构为按-session-划分的账户视图">whitenoise-rs 重构为按 session 划分的账户视图&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a> 是 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 客户端背后的 Rust daemon，本周合并 15 个 PR，把架构从全局单例重构到按账户划分的 &lt;code>AccountSession&lt;/code> 视图。&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/743">PR #743&lt;/a> 建立了 &lt;code>AccountSession&lt;/code> 与 &lt;code>AccountManager&lt;/code> 骨架，后续阶段则陆续把 relay handles、草稿和设置、消息操作、群组读写、成员关系、push notifications、key-package 读取、群组创建，以及在 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/770">PR #770&lt;/a> 中完成的 session 级 event dispatch 迁移到新结构中。&lt;/p>
&lt;h3 id="white-noise-增加拉黑取消拉黑-ui退群和离线提示">White Noise 增加拉黑/取消拉黑 UI、退群和离线提示&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> 本周补齐了缺失的群组生命周期控制。&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/578">PR #578&lt;/a> 在 &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/573">PR #573&lt;/a> 的 block hook 之上增加拉黑与取消拉黑 UI，&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/571">PR #571&lt;/a> 与 &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/572">PR #572&lt;/a> 把 Rust 侧的 &lt;code>clear_chat&lt;/code>、&lt;code>delete_chat&lt;/code> 和 &lt;code>leave_and_delete_group&lt;/code> 串接进 app。&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/569">PR #569&lt;/a> 与 &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/576">PR #576&lt;/a> 还在聊天与设置页增加离线提示。&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/585">PR #585&lt;/a> 则把“删除所有 key packages”收窄为“删除 legacy key packages”。&lt;/p>
&lt;h3 id="mdk-增加混合版本邀请支持和-selfupdate-wire-format-收敛">MDK 增加混合版本邀请支持和 SelfUpdate wire format 收敛&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a> 本周合并了 7 个 PR，主线是兼容性。&lt;a href="https://github.com/marmot-protocol/mdk/pull/261">PR #261&lt;/a> 通过将群组 &lt;code>RequiredCapabilities&lt;/code> 计算为被邀请者能力的 LCD，打通了 &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 与 &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> 之间的混合版本邀请。&lt;a href="https://github.com/marmot-protocol/mdk/pull/264">PR #264&lt;/a> 统一了 SelfUpdate wire format，&lt;a href="https://github.com/marmot-protocol/mdk/pull/262">PR #262&lt;/a>、&lt;a href="https://github.com/marmot-protocol/mdk/pull/256">PR #256&lt;/a>、&lt;a href="https://github.com/marmot-protocol/mdk/pull/259">PR #259&lt;/a> 和 &lt;a href="https://github.com/marmot-protocol/mdk/pull/265">PR #265&lt;/a> 则分别针对 malformed invitees、admin depletion validation、内存后端下关键状态被驱逐，以及 &lt;code>group_required_proposals&lt;/code> 访问器做了修复与暴露。&lt;/p>
&lt;h3 id="nostter-把-nip-44-加到-people-listsbookmarks-和-mutes">nostter 把 NIP-44 加到 people lists、bookmarks 和 mutes&lt;/h3>
&lt;p>&lt;a href="https://github.com/SnowCait/nostter">nostter&lt;/a> 本周合并 10 个 PR。&lt;a href="https://github.com/SnowCait/nostter/pull/2088">PR #2088&lt;/a> 为 mute lists 增加 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密，&lt;a href="https://github.com/SnowCait/nostter/pull/2089">PR #2089&lt;/a> 把同样逻辑加到 bookmarks，&lt;a href="https://github.com/SnowCait/nostter/pull/2090">PR #2090&lt;/a> 加到 people lists，并通过 &lt;a href="https://github.com/SnowCait/nostter/pull/2087">PR #2087&lt;/a> 删除了遗留的 kind-30000 mute migration 路径。&lt;/p>
&lt;h3 id="zapcooking-发布-nourish-评分和可复用评论线程">zap.cooking 发布 Nourish 评分和可复用评论线程&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">zap.cooking&lt;/a> 本周合并了 20 个 PR。头条功能是新的 Nourish 配方评分模块（&lt;a href="https://github.com/zapcooking/frontend/pull/317">PR #317&lt;/a>、&lt;a href="https://github.com/zapcooking/frontend/pull/319">PR #319&lt;/a>），同时 &lt;a href="https://github.com/zapcooking/frontend/pull/299">PR #299&lt;/a> 到 &lt;a href="https://github.com/zapcooking/frontend/pull/302">PR #302&lt;/a> 还把 Comments 模块抽成可复用的 &lt;code>CommentThread&lt;/code>。&lt;/p>
&lt;h3 id="ridestr-抽出共享-rider-coordinator">ridestr 抽出共享 rider coordinator&lt;/h3>
&lt;p>&lt;a href="https://github.com/variablefate/ridestr">ridestr&lt;/a> 本周合并 10 个 PR，把其 Compose screens 拆成更聚焦的组件，并通过 &lt;a href="https://github.com/variablefate/ridestr/pull/70">PR #70&lt;/a> 把 rider 与 driver 协议逻辑提取到共享的 &lt;code>:common&lt;/code> coordinator 模块中。&lt;a href="https://github.com/variablefate/ridestr/pull/60">PR #60&lt;/a> 还为 Roadflare 侧加入了 kind &lt;code>3189&lt;/code> 的 driver-ping receiver。&lt;/p>
&lt;h3 id="blossom-起草用于-blob-过期的-bud-01-sunset-header">Blossom 起草用于 blob 过期的 BUD-01 Sunset header&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/blossom">Blossom&lt;/a> 打开了 &lt;a href="https://github.com/hzrd149/blossom/pull/99">PR #99&lt;/a>，希望为 BUD-01 增加 &lt;code>Sunset&lt;/code> header。服务器可以通过这个 header 广告某个未来时间戳，说明 blob 将在那时停止被服务，从而让客户端在遇到 404 之前，就能围绕有限保留期做规划。&lt;/p>
&lt;h2 id="新项目">新项目&lt;/h2>
&lt;h3 id="forgesworn-发布一个包含-29-个仓库的-nostr-密码学工具栈">Forgesworn 发布一个包含 29 个仓库的 Nostr 密码学工具栈&lt;/h3>
&lt;p>&lt;a href="https://github.com/forgesworn">Forgesworn&lt;/a> 在五天内一口气发布了 29 个开源仓库，覆盖签名、身份、证明、web-of-trust 和基于 Lightning 的付费 API 发现。签名栈以 &lt;a href="https://github.com/forgesworn/nsec-tree">nsec-tree&lt;/a> 和 &lt;a href="https://github.com/forgesworn/heartwood">Heartwood&lt;/a> 为核心，前者可从一个主密钥导出无限多个不可关联的 Nostr 身份，后者是一个默认开启 Tor 的 NIP-46 远程 signer。身份与信任栈则围绕 &lt;a href="https://github.com/forgesworn/signet">Signet&lt;/a>、&lt;a href="https://github.com/forgesworn/nostr-attestations">nostr-attestations&lt;/a> 和 &lt;a href="https://github.com/forgesworn/nostr-veil">nostr-veil&lt;/a> 展开；货币化方向则有 &lt;a href="https://github.com/forgesworn/toll-booth">toll-booth&lt;/a>、&lt;a href="https://github.com/forgesworn/toll-booth-dvm">toll-booth-dvm&lt;/a>、&lt;a href="https://github.com/forgesworn/toll-booth-announce">toll-booth-announce&lt;/a> 和 &lt;a href="https://github.com/forgesworn/402-indexer">402-indexer&lt;/a>，将付费 API 暴露为 &lt;a href="https://nostrcompass.org/zh/topics/nip-90/">NIP-90&lt;/a> DVM 和可发现的 kind &lt;code>31402&lt;/code> announcements。整个组织全部使用 TypeScript，并通过新的 bash-only 工具 &lt;a href="https://github.com/forgesworn/anvil">anvil&lt;/a> 做供应链加固型发布。&lt;/p>
&lt;h3 id="shockwallet-发布-nostr-原生-lightning-wallet-同步和多节点连接">ShockWallet 发布 Nostr 原生 Lightning wallet 同步和多节点连接&lt;/h3>
&lt;p>&lt;a href="https://github.com/shocknet/wallet2">ShockWallet&lt;/a> 是一个使用 Nostr 作为传输层、连接自托管 Lightning 节点的 wallet。应用通过 &lt;code>nprofile&lt;/code> 与一个或多个 &lt;a href="https://github.com/shocknet/Lightning.Pub">Lightning.Pub&lt;/a> 节点进行 Nostr 配对，并在 wallet 与节点之间端到端签署支付授权。本周团队发布 &lt;a href="https://github.com/shocknet/wallet2/pull/608">PR #608&lt;/a>，增加了 channels dashboard UI，并与管理员邀请 QR 链路和 metrics dashboard 可读性改进一同落地。ShockWallet 还使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-01/">NIP-78&lt;/a> 风格的应用专用数据事件来完成多设备 wallet 状态同步，这使它与 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a> 的“应用调用现有 wallet”模型有所区分。&lt;/p>
&lt;h3 id="nostrability-issues-在-github-审查后迁移到-git-over-nostr">Nostrability issues 在 GitHub 审查后迁移到 git over Nostr&lt;/h3>
&lt;p>&lt;a href="https://gitworkshop.dev/elsat@habla.news/nostrability/issues">Nostrability&lt;/a> 是 elsat 维护的 Nostr 客户端与 relay 互操作性问题追踪器。在 GitHub 上的组织被下线且两周未获回应后，这个问题流转工作流正在迁移到 git over Nostr，新的 issue tracker 现已运行在 GitWorkshop/ngit 上。&lt;/p>
&lt;h3 id="nowhere-把完整网站编码进-url-fragments并通过-nostr-路由订单">nowhere 把完整网站编码进 URL fragments，并通过 Nostr 路由订单&lt;/h3>
&lt;p>&lt;a href="https://github.com/5t34k/nowhere">nowhere&lt;/a> 是 &lt;a href="https://github.com/5t34k">5t34k&lt;/a> 发布的一个 AGPL-3.0 项目，它把完整网站序列化进 &lt;code>#&lt;/code> 之后的 URL fragment，并通过字典替换、原始 DEFLATE 和 base64url 编码进行压缩。由于浏览器不会把 fragment 发给服务器，提供页面的主机看不到内容，网站本身也无需存储在服务器上。其八种站点类型中，有五种完全静态，而 store、forum 和 petition 等三类需要动态通信的流量，则通过带临时 keys 与 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密的 Nostr relays 路由。&lt;/p>
&lt;h3 id="小而新的界面relaykit-和-brainstorm-search">小而新的界面：relayk.it 和 Brainstorm Search&lt;/h3>
&lt;p>还有两个小项目值得一提：&lt;a href="https://relayk.it">relayk.it&lt;/a> 是由 Soapbox 团队的 &lt;a href="https://nostr.com/sam@relayk.it">sam&lt;/a> 构建、基于 &lt;a href="https://shakespeare.diy">Shakespeare&lt;/a> 的 relay 发现客户端，完全在浏览器中运行；&lt;a href="https://brainstorm.world">Brainstorm Search&lt;/a> 则是一个单页 Nostr 搜索 UI，专注于从整个网络中显露内容。&lt;/p>
&lt;h2 id="协议与规范工作">协议与规范工作&lt;/h2>
&lt;h3 id="nip-更新">NIP 更新&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>中的最新提案与讨论：&lt;/p>
&lt;p>&lt;strong>开放 PR 和讨论：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-67/">NIP-67&lt;/a>：EOSE Completeness Hint&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2317">PR #2317&lt;/a>）：提议为 &lt;a href="https://nostrcompass.org/zh/topics/nip-01/">NIP-01&lt;/a> 的 &lt;code>EOSE&lt;/code> 消息增加一个可选第三元素，让 relay 能告诉客户端“我已经把所有匹配的已存储 events 都发完了”。&lt;/li>
&lt;li>&lt;strong>NIP-5D：Nostr Applets&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2303">PR #2303&lt;/a>）：为通过 Nostr 分发、运行在客户端沙箱 iframe 或 WebView 中的交互式 applets 定义新 kind。&lt;/li>
&lt;li>&lt;strong>NIP-29：Subgroups spec&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2319">PR #2319&lt;/a>）：为 &lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a> 群组增加 subgroup 层级，使单个群组能够承载多个并行频道。&lt;/li>
&lt;li>&lt;strong>NIP-29：Explicit role permissions on kind 39003&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2316">PR #2316&lt;/a>）：为 kind &lt;code>39003&lt;/code> 角色事件定义显式权限模式，让客户端能够知道具体角色到底拥有何种能力。&lt;/li>
&lt;li>&lt;strong>NIP-11：&lt;code>access_control&lt;/code> 字段用于受限 relay 发现&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2318">PR #2318&lt;/a>）：在 &lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a> relay 信息文档中增加一个可选对象，列出 gating mode 以及申请访问的 endpoint。&lt;/li>
&lt;li>&lt;strong>NIP-63a：Minimal Payment Gateway Descriptor&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2315">PR #2315&lt;/a>）：继续围绕 kind &lt;code>10164&lt;/code> 的 payment-gateway-descriptor 形状与 per-tier subscription rules 做迭代。&lt;/li>
&lt;li>&lt;strong>NIP-XX：Agent Reputation Attestations (Kind 30085)&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2320">PR #2320&lt;/a>）：提议为 Nostr 上的自治 agent 和服务定义带签名的信誉证明 event，用于在 &lt;a href="https://nostrcompass.org/zh/topics/nip-90/">NIP-90&lt;/a> 等服务市场中发布可验证反馈。&lt;/li>
&lt;li>&lt;strong>NIP-TPLD：Transient Private Location Data&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2309">PR #2309&lt;/a>）：继续推进 kind &lt;code>20411&lt;/code>、按接收者加密的 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 载荷，以及 &lt;code>ttl&lt;/code> tag 的 relay 保留语义。&lt;/li>
&lt;li>&lt;strong>marmot-ts 0.5.0 release PR&lt;/strong>（&lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/70">PR #70&lt;/a>）：计划中的 &lt;code>@internet-privacy/marmot-ts@0.5.0&lt;/code> 会引入第一批 breaking changes，改造 KeyPackage 处理和邀请/群组管理接口。&lt;/li>
&lt;/ul>
&lt;h2 id="nip-深度解析nip-72审核社区">NIP 深度解析：NIP-72（审核社区）&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/72.md">NIP-72&lt;/a> 定义了一种围绕主题组织社区的模型，其中审核员通过批准机制，策展出一个基于公开 Nostr events 的“可读视图”。与由 relay 同时掌控成员与审核的 &lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a> 不同，NIP-72 社区存在于普通 Nostr events 中，任何承载相关 kinds 的 relay 都可以服务它。任何人都可以发帖，而只有被认可审核员批准过的帖子，才会出现在社区信息流中。社区由 kind &lt;code>34550&lt;/code> 可寻址 event 定义，帖子通过 &lt;code>a&lt;/code> tag 指向该社区坐标，审核员再通过 kind &lt;code>4549&lt;/code> approval event 发布批准。由于批准 event 自身就是可验证的 Nostr event，审核决策是透明、可审计、可分叉的。与 NIP-29 相比，它的优势是无需特殊 relay 支持、写路径天然可移植；它的代价则是未被批准的帖子其实已经公开写入，只是在客户端渲染层被隐藏。&lt;/p>
&lt;h2 id="nip-深度解析nip-57zaps">NIP 深度解析：NIP-57（Zaps）&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/57.md">NIP-57&lt;/a> 定义了 zaps，也就是把 Lightning 支付附着到 Nostr 身份与内容之上的方式，并规定了支付完成后如何把可验证 receipt 再发布回 relays。zap 的流程跨越 LNURL、Lightning 和 Nostr 三个系统：发送者客户端通过接收者 profile 或目标 event 上的 &lt;code>zap&lt;/code> tag 发现 LNURL endpoint，构造并签名 kind &lt;code>9734&lt;/code> zap request，把它发给接收者的 LNURL callback，而不是 relays；对端服务器验证请求、返回与该请求 description hash 绑定的 Lightning invoice，付款完成后，再把 kind &lt;code>9735&lt;/code> zap receipt 发布到发送者指定的 relay 集合。一个有效的 zap receipt 必须能通过四项验证：receipt 签名对应 LNURL 响应中的 &lt;code>nostrPubkey&lt;/code>、&lt;code>bolt11&lt;/code> 金额匹配请求中的 &lt;code>amount&lt;/code>、invoice description hash 绑定到字符串化的 zap request、&lt;code>preimage&lt;/code> 能映射回 invoice 的 &lt;code>payment_hash&lt;/code>。NIP-57 还为 private zaps、anonymous zaps、zap splits 以及 &lt;a href="https://nostrcompass.org/zh/topics/nip-75/">NIP-75&lt;/a> 的 zap goals 提供了底层基础。&lt;/p>
&lt;hr>
&lt;p>本周就到这里。如果您正在构建项目，或有新闻想分享，欢迎在 Nostr 上私信我们，或访问 &lt;a href="https://nostrcompass.org">nostrcompass.org&lt;/a>。&lt;/p></content:encoded></item><item><title>Nostr Compass #18</title><link>https://nostrcompass.org/zh/newsletters/2026-04-15-newsletter/</link><pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-04-15-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 合并了 29 个 PR，涵盖桌面端 Tor、自定义 C secp256k1、面向 &lt;a href="https://nostrcompass.org/zh/topics/nip-ac/">NIP-AC&lt;/a> 的 WebRTC 通话、面向 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 的 RFC 9420 MLS 兼容，以及多钱包 NWC。&lt;a href="https://github.com/vcavallo/nstrfy-android">nstrfy&lt;/a> 发布，作为一个使用 kind &lt;code>7741&lt;/code> events 和 Nostr relays 取代 Firebase 的 Android 推送通知应用。&lt;a href="https://github.com/LibertyFarmer/hamstr">HAMSTR&lt;/a> 加入 Reticulum，从而可以在没有互联网的情况下通过 LoRa mesh 传递 Nostr events。&lt;a href="https://github.com/nostrnative/bloom">Bloom&lt;/a> 发布 &lt;a href="https://github.com/nostrnative/bloom/releases/tag/v0.1.0">v0.1.0&lt;/a>，把完整的 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 媒体服务器和 Nostr relay 封装进桌面应用。&lt;a href="https://github.com/zeSchlausKwab/wavefunc">WaveFunc&lt;/a> 以 &lt;a href="https://github.com/zeSchlausKwab/wavefunc/releases/tag/v0.1.0">v0.1.0&lt;/a> 首次亮相，提供基于 Nostr 的互联网广播目录与播放器。&lt;a href="https://github.com/marmot-protocol/botburrow">Botburrow&lt;/a> 开始开发，目标是为 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 群聊提供自托管 bot 平台。&lt;a href="https://github.com/v0l/snort">Snort&lt;/a> 连续发布 &lt;a href="https://github.com/v0l/snort/releases/tag/v0.5.0">v0.5.0&lt;/a> 到 &lt;a href="https://github.com/v0l/snort/releases/tag/v0.5.3">v0.5.3&lt;/a>，加入安全审计成果、批量 WASM 验签和重写后的消息系统，而 &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> 也重新设计了信息流布局。&lt;/p>
&lt;h2 id="头条">头条&lt;/h2>
&lt;h3 id="amethyst-合并桌面-torc-secp256k1webrtc-通话和多钱包-nwc">Amethyst 合并桌面 Tor、C secp256k1、WebRTC 通话和多钱包 NWC&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 这个由 vitorpamplona 维护的 Android 客户端，本周跨密码学、网络、通话和钱包基础设施一共合并了 29 个 PR。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2381">PR #2381&lt;/a> 是其中最大的改动，它通过嵌入 kmp-tor daemon 为桌面端加入了 fail-closed 的 Tor 支持，若 Tor 无法启动，应用就会拒绝建立连接。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2374">PR #2374&lt;/a> 增加了带 JNI 绑定的自定义 C secp256k1 实现，并结合 GLV decomposition、wNAF 点编码以及 x86_64 和 ARM64 上的硬件加速 SHA-256，把 Schnorr 签名验证速度提升到此前纯 Kotlin 路径的 2 到 3 倍。围绕 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 的 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2202">PR #2202&lt;/a> 让其纯 Kotlin MLS 实现符合 RFC 9420，而 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2203">PR #2203&lt;/a> 到 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2211">PR #2211&lt;/a> 则构建了完整的 &lt;a href="https://nostrcompass.org/zh/topics/nip-ac/">NIP-AC&lt;/a> 语音视频通话栈。与此同时，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1988">PR #1988&lt;/a> 带来了多钱包 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a> 支持，而 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2189">PR #2189&lt;/a> 还加入了 GIF 转 MP4 和质量滑块。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 合并了 29 个 PR，涵盖桌面端 Tor、自定义 C secp256k1、面向 &lt;a href="https://nostrcompass.org/zh/topics/nip-ac/">NIP-AC&lt;/a> 的 WebRTC 通话、面向 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 的 RFC 9420 MLS 兼容，以及多钱包 NWC。&lt;a href="https://github.com/vcavallo/nstrfy-android">nstrfy&lt;/a> 发布，作为一个使用 kind &lt;code>7741&lt;/code> events 和 Nostr relays 取代 Firebase 的 Android 推送通知应用。&lt;a href="https://github.com/LibertyFarmer/hamstr">HAMSTR&lt;/a> 加入 Reticulum，从而可以在没有互联网的情况下通过 LoRa mesh 传递 Nostr events。&lt;a href="https://github.com/nostrnative/bloom">Bloom&lt;/a> 发布 &lt;a href="https://github.com/nostrnative/bloom/releases/tag/v0.1.0">v0.1.0&lt;/a>，把完整的 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 媒体服务器和 Nostr relay 封装进桌面应用。&lt;a href="https://github.com/zeSchlausKwab/wavefunc">WaveFunc&lt;/a> 以 &lt;a href="https://github.com/zeSchlausKwab/wavefunc/releases/tag/v0.1.0">v0.1.0&lt;/a> 首次亮相，提供基于 Nostr 的互联网广播目录与播放器。&lt;a href="https://github.com/marmot-protocol/botburrow">Botburrow&lt;/a> 开始开发，目标是为 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 群聊提供自托管 bot 平台。&lt;a href="https://github.com/v0l/snort">Snort&lt;/a> 连续发布 &lt;a href="https://github.com/v0l/snort/releases/tag/v0.5.0">v0.5.0&lt;/a> 到 &lt;a href="https://github.com/v0l/snort/releases/tag/v0.5.3">v0.5.3&lt;/a>，加入安全审计成果、批量 WASM 验签和重写后的消息系统，而 &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> 也重新设计了信息流布局。&lt;/p>
&lt;h2 id="头条">头条&lt;/h2>
&lt;h3 id="amethyst-合并桌面-torc-secp256k1webrtc-通话和多钱包-nwc">Amethyst 合并桌面 Tor、C secp256k1、WebRTC 通话和多钱包 NWC&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 这个由 vitorpamplona 维护的 Android 客户端，本周跨密码学、网络、通话和钱包基础设施一共合并了 29 个 PR。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2381">PR #2381&lt;/a> 是其中最大的改动，它通过嵌入 kmp-tor daemon 为桌面端加入了 fail-closed 的 Tor 支持，若 Tor 无法启动，应用就会拒绝建立连接。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2374">PR #2374&lt;/a> 增加了带 JNI 绑定的自定义 C secp256k1 实现，并结合 GLV decomposition、wNAF 点编码以及 x86_64 和 ARM64 上的硬件加速 SHA-256，把 Schnorr 签名验证速度提升到此前纯 Kotlin 路径的 2 到 3 倍。围绕 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 的 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2202">PR #2202&lt;/a> 让其纯 Kotlin MLS 实现符合 RFC 9420，而 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2203">PR #2203&lt;/a> 到 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2211">PR #2211&lt;/a> 则构建了完整的 &lt;a href="https://nostrcompass.org/zh/topics/nip-ac/">NIP-AC&lt;/a> 语音视频通话栈。与此同时，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1988">PR #1988&lt;/a> 带来了多钱包 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a> 支持，而 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/2189">PR #2189&lt;/a> 还加入了 GIF 转 MP4 和质量滑块。&lt;/p>
&lt;h3 id="nstrfy-为-android-带来-nostr-原生推送通知">nstrfy 为 Android 带来 Nostr 原生推送通知&lt;/h3>
&lt;p>&lt;a href="https://github.com/vcavallo/nstrfy-android">nstrfy&lt;/a> 于 4 月 13 日发布，并在 &lt;a href="https://github.com/vcavallo/nstrfy-android/releases/tag/v1.0.0">v1.0.0&lt;/a> 到 &lt;a href="https://github.com/vcavallo/nstrfy-android/releases/tag/v1.2.0">v1.2.0&lt;/a> 之间快速迭代。这个应用是 ntfy-android 的分支，但把 HTTP 传输层替换为 Nostr：它不再轮询服务器，而是订阅可配置 relays 上的 kind &lt;code>7741&lt;/code> events，并将它们显示为原生 Android 通知。它既支持明文载荷，也支持 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密载荷；启用加密时，可通过 &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 结合 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 或本地 nsec 完成签名。应用还能从用户 profile 导入 &lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a> relay 列表，尊重 &lt;a href="https://nostrcompass.org/zh/topics/nip-40/">NIP-40&lt;/a> 过期语义，并通过 topic 和 npub allowlist 控制谁可以触发通知。&lt;/p>
&lt;h3 id="hamstr-加入-reticulum实现经由-lora-mesh-的-nostr">HAMSTR 加入 Reticulum，实现经由 LoRa mesh 的 Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/LibertyFarmer/hamstr">HAMSTR&lt;/a> 这个通过业余无线电发送 Nostr events 与 Lightning zaps 的项目，于 4 月 12 日合并了 &lt;a href="https://github.com/LibertyFarmer/hamstr/pull/10">PR #10&lt;/a>，为其传输后端加入 &lt;a href="https://reticulum.network/">Reticulum&lt;/a> mesh 网络。Reticulum 是一种运行在 LoRa、HF、VHF/UHF、串口链路和 TCP/IP 之上的加密 mesh 协议，因此 HAMSTR 现在可以在完全没有互联网基础设施的情况下，借助一组 RNode 设备中继 Nostr events。既有的 AX.25 Packet Radio 和 VARA HF 传输仍然可用，而其 zero-knowledge server 架构也意味着 relay 看不到私钥。&lt;a href="https://nostrcompass.org/zh/topics/nip-57/">NIP-57&lt;/a> zap 兼容性则确保离线 Lightning zaps 仍能在 Amethyst 和 Primal 等客户端里正确显示。&lt;/p>
&lt;h2 id="本周发布">本周发布&lt;/h2>
&lt;h3 id="bloom-v010-发布自托管-blossom-服务器和-relay">Bloom v0.1.0 发布自托管 Blossom 服务器和 relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrnative/bloom">Bloom&lt;/a> 于 4 月 9 日发布首个版本 &lt;a href="https://github.com/nostrnative/bloom/releases/tag/v0.1.0">v0.1.0&lt;/a>。它使用 Tauri v2 和 React 19 构建，把完整的 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 协议媒体服务器（BUD-00 到 BUD-10）以及一个 Nostr relay 打包成单个桌面应用，覆盖 macOS、Windows 和 Linux，并计划支持 Android 与 iOS。用户可以获得带 SHA-256 内容寻址、&lt;a href="https://nostrcompass.org/zh/topics/nip-94/">NIP-94&lt;/a> 文件元数据支持，以及 &lt;code>blossom://&lt;/code> URI 解析能力的主权文件存储，而无需自己运维服务器基础设施。&lt;/p>
&lt;h3 id="wavefunc-v010-和-v011-发布-nostr-互联网广播">WaveFunc v0.1.0 和 v0.1.1 发布 Nostr 互联网广播&lt;/h3>
&lt;p>&lt;a href="https://github.com/zeSchlausKwab/wavefunc">WaveFunc&lt;/a> 于 4 月 13 日发布 &lt;a href="https://github.com/zeSchlausKwab/wavefunc/releases/tag/v0.1.0">v0.1.0&lt;/a> 与 &lt;a href="https://github.com/zeSchlausKwab/wavefunc/releases/tag/v0.1.1">v0.1.1&lt;/a>，作为一个基于 Nostr 的互联网广播目录与播放器上线。它使用自定义 kinds 定义数据模型：kind &lt;code>31237&lt;/code> 用于电台条目、kind &lt;code>30078&lt;/code> 用于收藏列表、kind &lt;code>1311&lt;/code> 用于实时聊天、kind &lt;code>1111&lt;/code> 用于电台评论。项目同时集成了 &lt;a href="https://nostrcompass.org/zh/topics/nip-60/">NIP-60&lt;/a> Cashu wallet 与 nutzap 支持，并在 v0.1.1 中加入流派轮播、Lightning 捐赠弹层、认证用户的电台管理以及 Zapstore 上架信息。&lt;/p>
&lt;h3 id="snort-发布-v050-到-v053加强安全并重做性能路径">Snort 发布 v0.5.0 到 v0.5.3，加强安全并重做性能路径&lt;/h3>
&lt;p>&lt;a href="https://github.com/v0l/snort">Snort&lt;/a> 这个基于 React 的 Nostr Web 客户端，从 &lt;a href="https://github.com/v0l/snort/releases/tag/v0.5.0">v0.5.0&lt;/a> 连续发布到 &lt;a href="https://github.com/v0l/snort/releases/tag/v0.5.3">v0.5.3&lt;/a>。最大的 v0.5.0 发布带来了一次全面的安全审计成果，包括真实 Schnorr 签名验证、对伪造 relay 消息的 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 防护、更强的 PIN 加密，以及移除对未经验证的 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/26.md">NIP-26&lt;/a> delegation 的信任。性能方面，它引入批量 WASM 验签、lazy-loaded routes、重写后的优先级 profile 加载器，以及 worker-relay 优化。该系列还加入了面向 &lt;a href="https://nostrcompass.org/zh/topics/nip-90/">NIP-90&lt;/a> DVM 的 kind &lt;code>7000&lt;/code> payment-required 发票显示，而 &lt;a href="https://github.com/v0l/snort/pull/620">PR #620&lt;/a> 则重做了消息系统。&lt;/p>
&lt;h3 id="primal-android-发布-3021并重新设计信息流布局">Primal Android 发布 3.0.21，并重新设计信息流布局&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> 发布了 &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.21">v3.0.21&lt;/a>，修复了投票 zap 投票、多账户共享钱包和 remote signer 自动重连等问题。随后的七个已合并 PR 对主界面布局、feed card 设计、媒体卡片、快速回复输入框和 app bars 做了整体重构。&lt;/p>
&lt;h3 id="nostria-v3119-到-v3121-增加本地图像生成">Nostria v3.1.19 到 v3.1.21 增加本地图像生成&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> 在 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.19">v3.1.19&lt;/a> 到 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.21">v3.1.21&lt;/a> 之间发布了三个版本，核心新增能力是在 WebGPU 加速下使用 Janus Pro 进行本地图像生成，让用户无需外部 API 就能在设备上生成图片。该系列还增加了云端图像生成、多模态聊天、ONNX runtime 支持、AI prompt 库与 AI cache 管理，并对对话框系统、笔记编辑器和音乐嵌入做了改进。&lt;/p>
&lt;h3 id="tubestr-v103-发布信息流与-studio-更新">TubeStr v1.0.3 发布信息流与 studio 更新&lt;/h3>
&lt;p>&lt;a href="https://github.com/Tubestr/tubestr-v2">TubeStr&lt;/a> 于 4 月 13 日发布 &lt;a href="https://github.com/Tubestr/tubestr-v2/releases/tag/v1.0.3">v1.0.3&lt;/a>。此次更新聚焦信息流与 studio 体验，&lt;a href="https://github.com/Tubestr/tubestr-v2/pull/3">PR #3&lt;/a> 重做了 onboarding，&lt;a href="https://github.com/Tubestr/tubestr-v2/pull/2">PR #2&lt;/a> 修复了视频导出错误。这个面向家庭私密视频分享的应用使用 NDK 与 MDK（&lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> Development Kit）来完成加密媒体共享，并计划加入 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 作为媒体存储层。&lt;/p>
&lt;h2 id="开发中">开发中&lt;/h2>
&lt;h3 id="botburrow-作为-marmot-bot-平台启动开发">Botburrow 作为 Marmot bot 平台启动开发&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/botburrow">Botburrow&lt;/a> 是 Marmot 团队从 4 月 3 日开始的新项目。它是一个自托管 bot 管理平台，每个 bot 都拥有独立的 Nostr 身份，通过 Welcome 消息加入 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 的 MLS 加密群聊，并收发端到端加密消息。其基于 Rails 8.1 的 dashboard 通过 Unix socket 与单个 whitenoise-rs daemon（&lt;code>wnd&lt;/code>）通信，同时还提供脚本、触发器、计划任务、群内实时聊天视图，以及面向 Umbrel 和 Start9 的多架构 Docker 镜像。&lt;/p>
&lt;h3 id="nostr-archives-增加-trending-feeds-relay-和实体解析">Nostr Archives 增加 trending feeds relay 和实体解析&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/nostrarchives-api">Nostr Archives&lt;/a> 在其 Rust API 与 Next.js 16 前端上继续稳定开发。API 侧的 &lt;a href="https://github.com/barrydeen/nostrarchives-api/pull/118">PR #118&lt;/a> 增加了 client leaderboard 的时间范围过滤，&lt;a href="https://github.com/barrydeen/nostrarchives-api/pull/117">PR #117&lt;/a> 则为 reply events 增加了参与度计数。前端的 &lt;a href="https://github.com/barrydeen/nostrarchives-frontend/pull/85">PR #85&lt;/a> 让站点能够直接从 URL path 解析 Nostr 实体，&lt;a href="https://github.com/barrydeen/nostrarchives-frontend/pull/86">PR #86&lt;/a> 增加了 API 文档页面。整个平台目前运行四类 relay 服务，包括 NIP-50 搜索 relay、trending feeds relay、scheduler relay 和 indexer relay。&lt;/p>
&lt;h3 id="damus-修复-favorites-timeline">Damus 修复 favorites timeline&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> 合并了 &lt;a href="https://github.com/damus-io/damus/pull/3708">PR #3708&lt;/a>，重写 &lt;code>subscribe_to_favorites()&lt;/code>，加入原地过滤、去重重建和持久化 tab 选择逻辑。&lt;/p>
&lt;h3 id="nostur-增加-private-zaps-和自定义-emoji-查看">Nostur 增加 private zaps 和自定义 emoji 查看&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a> 本周推送了 10 个 commits，增加了 private zap 支持、自定义 emoji 查看、动画 &lt;code>.webp&lt;/code> 渲染修复，以及语音消息音频格式检测。&lt;/p>
&lt;h3 id="amber-发布-v601-到-v603加入-webdav-备份和-relay-重连修复">Amber 发布 v6.0.1 到 v6.0.3，加入 WebDAV 备份和 relay 重连修复&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 这个 Android &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> signer 在本周连续发布三个版本。&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.0.1">v6.0.1&lt;/a> 增加了 WebDAV 和分享至 Google Drive 两种备份方式、relay 指数退避重连、Quartz 1.08.0 更新，以及 app update 与 profile event 校验修复。&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.0.2">v6.0.2&lt;/a> 增加了 seed words 模式的 account index 选项，并修复了 relay 在启动时离线时的重连问题。&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.0.3">v6.0.3&lt;/a> 则继续修复接收 intents 时空 request ID 的问题。&lt;/p>
&lt;h3 id="plektos-v060-使用-ditto-主题重新设计">Plektos v0.6.0 使用 Ditto 主题重新设计&lt;/h3>
&lt;p>&lt;a href="https://github.com/derekross/plektos">Plektos&lt;/a> 这个构建在 &lt;a href="https://nostrcompass.org/zh/topics/nip-52/">NIP-52&lt;/a> 上、带交互地图的去中心化 meetup 与 events 平台，于 4 月 14 日发布了 &lt;a href="https://github.com/derekross/plektos/commit/7a691cdf089ceb7a8582dd5c0ee026830f2cdc77">v0.6.0&lt;/a> 和 &lt;a href="https://github.com/derekross/plektos/commit/3a6474ae380522d8ee1b3526423fcfc3328fd879">v0.6.1&lt;/a>。这次更新引入了 Ditto 风格社区主题、自定义背景图上传、头像形状配置以及整体 UI 重做。&lt;a href="https://github.com/derekross/plektos/pull/6">PR #6&lt;/a> 还解决了一次覆盖安全、架构和 UX 的代码审查发现。&lt;/p>
&lt;h3 id="shadow-增加-nostr-os-api-和-cashu-wallet-应用">Shadow 增加 Nostr OS API 和 Cashu wallet 应用&lt;/h3>
&lt;p>&lt;a href="https://github.com/justinmoon/shadow">Shadow&lt;/a> 在两天内推送了 30 多个 commits。&lt;a href="https://github.com/justinmoon/shadow/commit/88cbda5131814d2730a2d892029932136db005df">Commit 88cbda5&lt;/a> 增加了一个运行在 Shadow runtime 内的 Cashu wallet app，&lt;a href="https://github.com/justinmoon/shadow/commit/865c415">Commit 865c415&lt;/a> 增加了播客播放器 demo。该 runtime 把 &lt;code>Shadow.os.nostr&lt;/code> 和 &lt;code>Shadow.os.audio&lt;/code> 暴露为一等 OS 级 API，而 Pixel runtime 通道则在 root 过的 Android 设备上运行 Wayland compositor。&lt;/p>
&lt;h3 id="lief-修复-amber-登录并加入-zapstore">Lief 修复 Amber 登录并加入 Zapstore&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/chad.curtis/lief">Lief&lt;/a> 于 4 月 12 日发布 build &lt;code>v2026.04.12&lt;/code>，修复了 Android 上 &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> signer 登录问题，简化了 signer 引导流程，升级了 nostrify 依赖，并加入 Zapstore 集成。&lt;/p>
&lt;h3 id="espy-重做颜色选择器并修复-amber-登录">Espy 重做颜色选择器并修复 Amber 登录&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/chad.curtis/espy">Espy&lt;/a> 于 4 月 12 日发布 build &lt;code>v2026.04.12&lt;/code>，重做了颜色选择器，用弯曲的饱和度弧线替代灰度切换，修复了 hue ring 闪烁，并加入 Easter egg 角色。该版本也修复了 &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 登录问题，简化 signer 引导，并加入 Zapstore 集成。&lt;/p>
&lt;h3 id="jumble-增加按-feed-的-kind-过滤和-articles-tab">Jumble 增加按 feed 的 kind 过滤和 Articles tab&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a> 本周推送了 13 个 commits，加入按 feed 的 kind 过滤、Articles tab、通知已读状态同步（带隐私保护选项）、头像隐藏模式，以及账号切换竞态条件修复。&lt;/p>
&lt;h3 id="primal-web-一周内发布-8-次版本更新">Primal Web 一周内发布 8 次版本更新&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-web-app">Primal Web&lt;/a> 一周内发布了 3.0.93 到 3.0.101，共 21 个 commits，工作重点是直播聊天改进、mention 边界修复、bookmark 分页、重复点赞防护和 relay proxy 修复。&lt;/p>
&lt;h2 id="协议与规范工作">协议与规范工作&lt;/h2>
&lt;h3 id="nip-更新">NIP 更新&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>最近的变更：&lt;/p>
&lt;p>&lt;strong>已合并：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-34/">NIP-34&lt;/a>（Git Stuff）：增加 &lt;code>nostr://&lt;/code> clone URLs&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2312">PR #2312&lt;/a>）：该 PR 为基于 Nostr 托管 git 仓库增加了正式的 &lt;code>nostr://&lt;/code> clone URL 方案，覆盖直接引用可寻址 event、用 &lt;code>npub|nip05&lt;/code> 加人类可读仓库标识符，以及带 relay hint 的格式。它已被 Shakespeare、ngit 的 git-remote-nostr helper、GitWorkshop.dev 和 NostrHub.io 采用，并收紧了仓库 &lt;code>d&lt;/code> tag 的格式。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>开放 PR 和讨论：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>NIP-63a：Minimal Payment Gateway Descriptor&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2315">PR #2315&lt;/a>）：提议一种新的 kind &lt;code>10164&lt;/code> 可替换 event，让内容创作者声明支付网关、定价模型和订阅规则。&lt;/li>
&lt;li>&lt;strong>NIP-XX：Relay Self-Declaration Manifest and Retention Horizon&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2314">PR #2314&lt;/a>）：提议通过 kind &lt;code>10100&lt;/code> manifest 和新的 &lt;code>HORIZON&lt;/code> relay-to-client 消息，让 relay 透明地声明端点、保留窗口、写入策略和支持的 NIPs。&lt;/li>
&lt;li>&lt;strong>NIP-TPLD：Transient Private Location Data&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2309">PR #2309&lt;/a>）：提议用临时 kind &lt;code>20411&lt;/code> 向特定接收方共享经过 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密的地理位置数据，并通过 &lt;code>ttl&lt;/code> tag 暗示 relay 的保留时间。&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-5c/">NIP-5C&lt;/a>（Scrolls）：WASM 程序更新&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2281">PR #2281&lt;/a>）：继续推进 WebAssembly 程序发布和执行规范，并扩展 &lt;a href="https://nostrcompass.org/zh/topics/nip-5a/">NIP-5A&lt;/a> 从静态网站走向可执行程序分发。&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 大载荷支持&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/1907">PR #1907&lt;/a>）：提议把 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 的最大载荷限制从当前 65,535 字节扩展出去，以解决远程签名大型 kind &lt;code>3&lt;/code> 联系人列表时的瓶颈。&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-c7/">NIP-C7&lt;/a>：将 kind 9 限制在聊天视图中&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2310">PR #2310&lt;/a>）：要求客户端在渲染“聊天视图”时只抓取 kind &lt;code>9&lt;/code> events，避免其他内容类型混入聊天时间线导致上下文丢失。&lt;/li>
&lt;/ul>
&lt;h2 id="nip-深度解析nip-29基于-relay-的群组">NIP 深度解析：NIP-29（基于 Relay 的群组）&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/29.md">NIP-29&lt;/a> 定义了一种由 relay 直接管理群组成员关系和审核的消息模型。群组存在于某个特定 relay 上，通过随机字符串 ID 标识，relay 负责决定谁能写入、谁能加入、哪些内容可见。这与 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 的客户端侧 MLS 加密群聊，以及 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 的 gift-wrapped 群聊不同：在 NIP-29 里，relay 是权威，relay 运营者可读消息内容，审核也发生在 relay 层。&lt;/p>
&lt;p>群组使用 &lt;code>&amp;lt;host&amp;gt;'&amp;lt;group-id&amp;gt;&lt;/code> 这样的格式标识，例如 &lt;code>groups.nostr.com'abcdef&lt;/code>。所有发往群组的用户 events 都带有 &lt;code>h&lt;/code> tag，而 &lt;code>previous&lt;/code> tag 则用于做时间线篡改检测，防止消息被脱离上下文地重放到另一个 fork 出来的 relay 副本中。成员关系通过 &lt;code>9000-9020&lt;/code> 范围的审核 event kinds 管理，管理员可以添加用户、移除用户、编辑元数据、删除事件，也可以通过邀请码机制控制加入流程。群组既可以是公开读写、只读开放，也可以完全封闭和隐藏，具体由元数据中的访问标志组合决定。&lt;/p>
&lt;p>NIP-29 的重要特点，是它允许任何 event kind 出现在群组中，而不仅仅是聊天消息。&lt;a href="https://nostrcompass.org/zh/topics/nip-23/">NIP-23&lt;/a> 长文、&lt;a href="https://nostrcompass.org/zh/topics/nip-52/">NIP-52&lt;/a> 日历事件、&lt;a href="https://nostrcompass.org/zh/topics/nip-53/">NIP-53&lt;/a> 直播和市场条目都可以带着 &lt;code>h&lt;/code> tag 参与群组上下文。因此它更像 Discord server 或 Slack workspace，而不是单一聊天协议。代价也同样清晰：relay 可以看到内容，没有端到端加密，也没有前向保密。对于公共社区和开放讨论空间，这样的 relay-trust 模型通常是可以接受的；对于真正私密的群消息，&lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 或 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 更合适。&lt;/p>
&lt;h2 id="nip-深度解析nip-90data-vending-machines">NIP 深度解析：NIP-90（Data Vending Machines）&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/90.md">NIP-90&lt;/a> 定义了一套“按需计算”协议。客户发布工作请求，服务提供者竞争性地返回结果，而结果和支付反馈都以 Nostr events 的形式流动。规范把它概括为“money in, data out”，其核心思想是把 Nostr 当作一个面向计算和数据处理的市场。&lt;/p>
&lt;p>该协议保留 kinds &lt;code>5000-5999&lt;/code> 用于工作请求、&lt;code>6000-6999&lt;/code> 用于工作结果，kind &lt;code>7000&lt;/code> 用于工作反馈。结果 kind 总是比请求 kind 高 1000。请求可带有 &lt;code>i&lt;/code> tags 指定输入、&lt;code>param&lt;/code> tags 指定参数、&lt;code>output&lt;/code> tag 指定输出格式，以及 &lt;code>bid&lt;/code> 指定可接受的最高支付额。服务提供者返回结果时，会附带原始请求、客户 pubkey，以及可选的 &lt;code>amount&lt;/code> tag 或 Lightning invoice。kind &lt;code>7000&lt;/code> 反馈 events 则允许在长任务执行过程中向客户端发出 &lt;code>payment-required&lt;/code>、&lt;code>processing&lt;/code>、&lt;code>error&lt;/code>、&lt;code>success&lt;/code> 等状态。&lt;/p>
&lt;p>NIP-90 的灵活之处，在于它允许工作链式组合。一个请求可以把某个旧 job 的输出当作新的输入，因此像“先转录音频，再总结文本，再翻译摘要”这样的多步流程可以由多个不同的提供者依次完成。若输入敏感，客户还可以把 &lt;code>i&lt;/code> 和 &lt;code>param&lt;/code> 数据移入加密 &lt;code>content&lt;/code> 字段，并用 &lt;code>encrypted&lt;/code> tag 和提供者 &lt;code>p&lt;/code> tag 来隐藏 prompts 或源材料。当前生态里，像 &lt;a href="https://github.com/v0l/snort">Snort&lt;/a> 这样的客户端已经能显示 DVM 的 &lt;code>payment-required&lt;/code> 发票，而 &lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a> 和 &lt;a href="https://github.com/dtdannen/dvmdash">DVMDash&lt;/a> 之类工具也在推进服务发现与网络观测。&lt;/p>
&lt;hr>
&lt;p>本周就到这里。如果您正在构建新项目，或者有新闻想分享，欢迎在 Nostr 上私信我们，或访问 &lt;a href="https://nostrcompass.org">nostrcompass.org&lt;/a>。&lt;/p></content:encoded></item><item><title>Nostr Compass #17</title><link>https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/</link><pubDate>Wed, 08 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/#amethyst-%e5%8f%91%e5%b8%83-arti-tor%e5%b9%b6%e5%90%88%e5%b9%b6%e7%ba%af-kotlin-%e7%89%88-mls-%e5%92%8c-marmot">v1.08.0&lt;/a> 中加入 Arti Tor 集成，并重新设计了 Shorts UI，同时还将纯 Kotlin 实现的 &lt;a href="https://nostrcompass.org/zh/topics/mls/">MLS&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 合并进其 &lt;a href="https://nostrcompass.org/zh/topics/quartz/">Quartz&lt;/a> 库。&lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a> 在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/#nostur-v1270-%e5%a2%9e%e5%8a%a0%e8%a7%86%e9%a2%91%e5%bd%95%e5%88%b6%e5%92%8c%e7%a7%81%e5%af%86%e5%9b%9e%e5%a4%8d">v1.27.0&lt;/a> 中加入视频录制、动画 GIF 资料图以及私密回复。&lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a> 在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/#shosho-v0150-%e6%8e%a8%e5%87%ba-shows-%e5%92%8c%e7%ab%96%e5%b1%8f%e8%a7%86%e9%a2%91%e8%bd%ae%e6%92%ad">v0.15.0&lt;/a> 中推出 Shows（与 OBS 连接的自定义直播信息）以及类似 TikTok 的竖屏视频轮播。&lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a> &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/#nymchat-%e5%9b%9e%e9%80%80-marmot%e5%b9%b6%e5%8f%91%e5%b8%83%e5%a2%9e%e5%bc%ba%e7%89%88-nip-17-%e7%be%a4%e8%81%8a">回退 Marmot 并发布增强版 NIP-17 群聊&lt;/a>，使用轮换的临时密钥。&lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a> 在六个版本中发布了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/#nostr-vpn-%e5%8f%91%e5%b8%83%e5%87%ba%e5%8f%a3%e8%8a%82%e7%82%b9%e6%94%af%e6%8c%81%e5%92%8c-umbrel-%e6%89%93%e5%8c%85">出口节点支持和 Umbrel 打包&lt;/a>。&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 跳升至 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/#amber-v600-pre1-%e5%a2%9e%e5%8a%a0%e6%8c%89%e8%bf%9e%e6%8e%a5%e9%9a%94%e7%a6%bb%e7%9a%84-nip-46-%e7%ad%be%e5%90%8d%e5%af%86%e9%92%a5">v6.0.0-pre1&lt;/a>，加入按连接隔离的 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 签名密钥和 Zapstore 应用内更新。&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> 达到 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/#notedeck-v0100-beta-%e5%8f%91%e5%b8%83-zapstore-%e8%87%aa%e6%9b%b4%e6%96%b0">v0.10.0-beta&lt;/a>，支持通过 Zapstore 进行 APK 自更新，而 &lt;a href="https://nostrcompass.org/zh/topics/nip-58/">NIP-58&lt;/a>（Badges）则在本周发生了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/#nip-%e6%9b%b4%e6%96%b0">kind 迁移&lt;/a>。本期的两篇 NIP 深度解析分别是 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a>（Private Direct Messages）和 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a>（Nostr Remote Signing）。&lt;/p>
&lt;h2 id="头条">头条&lt;/h2>
&lt;h3 id="amethyst-发布-arti-tor并合并纯-kotlin-版-mls-和-marmot">Amethyst 发布 Arti Tor，并合并纯 Kotlin 版 MLS 和 Marmot&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 这个由 vitorpamplona 维护的 Android 客户端，发布了从 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.07.3">v1.07.3&lt;/a> 到 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.08.0">v1.08.0&lt;/a> 的四个版本，并将一大批尚未正式发布的工作合并进其 &lt;a href="https://nostrcompass.org/zh/topics/quartz/">Quartz&lt;/a> 库，也就是共享的 Kotlin Multiplatform Nostr 模块。最重要的发布是 v1.08.0 “Arti Tor”，它将应用的 Tor 连接从基于 C 的 Tor 库迁移到 &lt;a href="https://gitlab.torproject.org/tpo/core/arti">Arti&lt;/a>，也就是 Tor Project 的 Rust 实现。这次迁移解决了此前 C Tor 绑定下出现的随机崩溃问题。Arti 是 Tor Project 面向长期的 C 代码库替代方案，从零开始以 Rust 编写，以获得内存安全和 async I/O。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/#amethyst-%e5%8f%91%e5%b8%83-arti-tor%e5%b9%b6%e5%90%88%e5%b9%b6%e7%ba%af-kotlin-%e7%89%88-mls-%e5%92%8c-marmot">v1.08.0&lt;/a> 中加入 Arti Tor 集成，并重新设计了 Shorts UI，同时还将纯 Kotlin 实现的 &lt;a href="https://nostrcompass.org/zh/topics/mls/">MLS&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 合并进其 &lt;a href="https://nostrcompass.org/zh/topics/quartz/">Quartz&lt;/a> 库。&lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a> 在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/#nostur-v1270-%e5%a2%9e%e5%8a%a0%e8%a7%86%e9%a2%91%e5%bd%95%e5%88%b6%e5%92%8c%e7%a7%81%e5%af%86%e5%9b%9e%e5%a4%8d">v1.27.0&lt;/a> 中加入视频录制、动画 GIF 资料图以及私密回复。&lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a> 在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/#shosho-v0150-%e6%8e%a8%e5%87%ba-shows-%e5%92%8c%e7%ab%96%e5%b1%8f%e8%a7%86%e9%a2%91%e8%bd%ae%e6%92%ad">v0.15.0&lt;/a> 中推出 Shows（与 OBS 连接的自定义直播信息）以及类似 TikTok 的竖屏视频轮播。&lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a> &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/#nymchat-%e5%9b%9e%e9%80%80-marmot%e5%b9%b6%e5%8f%91%e5%b8%83%e5%a2%9e%e5%bc%ba%e7%89%88-nip-17-%e7%be%a4%e8%81%8a">回退 Marmot 并发布增强版 NIP-17 群聊&lt;/a>，使用轮换的临时密钥。&lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a> 在六个版本中发布了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/#nostr-vpn-%e5%8f%91%e5%b8%83%e5%87%ba%e5%8f%a3%e8%8a%82%e7%82%b9%e6%94%af%e6%8c%81%e5%92%8c-umbrel-%e6%89%93%e5%8c%85">出口节点支持和 Umbrel 打包&lt;/a>。&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 跳升至 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/#amber-v600-pre1-%e5%a2%9e%e5%8a%a0%e6%8c%89%e8%bf%9e%e6%8e%a5%e9%9a%94%e7%a6%bb%e7%9a%84-nip-46-%e7%ad%be%e5%90%8d%e5%af%86%e9%92%a5">v6.0.0-pre1&lt;/a>，加入按连接隔离的 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 签名密钥和 Zapstore 应用内更新。&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> 达到 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/#notedeck-v0100-beta-%e5%8f%91%e5%b8%83-zapstore-%e8%87%aa%e6%9b%b4%e6%96%b0">v0.10.0-beta&lt;/a>，支持通过 Zapstore 进行 APK 自更新，而 &lt;a href="https://nostrcompass.org/zh/topics/nip-58/">NIP-58&lt;/a>（Badges）则在本周发生了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/#nip-%e6%9b%b4%e6%96%b0">kind 迁移&lt;/a>。本期的两篇 NIP 深度解析分别是 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a>（Private Direct Messages）和 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a>（Nostr Remote Signing）。&lt;/p>
&lt;h2 id="头条">头条&lt;/h2>
&lt;h3 id="amethyst-发布-arti-tor并合并纯-kotlin-版-mls-和-marmot">Amethyst 发布 Arti Tor，并合并纯 Kotlin 版 MLS 和 Marmot&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 这个由 vitorpamplona 维护的 Android 客户端，发布了从 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.07.3">v1.07.3&lt;/a> 到 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.08.0">v1.08.0&lt;/a> 的四个版本，并将一大批尚未正式发布的工作合并进其 &lt;a href="https://nostrcompass.org/zh/topics/quartz/">Quartz&lt;/a> 库，也就是共享的 Kotlin Multiplatform Nostr 模块。最重要的发布是 v1.08.0 “Arti Tor”，它将应用的 Tor 连接从基于 C 的 Tor 库迁移到 &lt;a href="https://gitlab.torproject.org/tpo/core/arti">Arti&lt;/a>，也就是 Tor Project 的 Rust 实现。这次迁移解决了此前 C Tor 绑定下出现的随机崩溃问题。Arti 是 Tor Project 面向长期的 C 代码库替代方案，从零开始以 Rust 编写，以获得内存安全和 async I/O。&lt;/p>
&lt;p>v1.07.3 重新设计了 Shorts UI，用 edge-to-edge 信息流替代了原先的分页设计，用于图片、短视频和长视频的浏览。这个版本还将 badges 迁移到 kind &lt;code>10008&lt;/code>，将 bookmarks 迁移到 kind &lt;code>10003&lt;/code>，与本周&lt;a href="https://nostrcompass.org/zh/topics/nip-58/">合并的 NIP-58&lt;/a> kind 迁移保持一致。v1.07.4 修复了一个 Nostr Wallet Connect secret 处理问题，v1.07.5 则修复了图片上传崩溃。&lt;/p>
&lt;p>在主分支上但尚未进入正式 tag 版本的工作中，团队用 Kotlin 完整实现了 &lt;a href="https://nostrcompass.org/zh/topics/mls/">MLS&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 协议，不再需要依赖原生 C/Rust 库绑定。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2147">PR #2147&lt;/a> 增加了核心的 Marmot MLS 群消息层，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2149">PR #2149&lt;/a> 增加了群聊 UI，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2146">PR #2146&lt;/a> 增加了入站和出站消息处理器以及订阅管理器，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2141">PR #2141&lt;/a> 增加了 MLS 群状态持久化和 KeyPackage 轮换管理，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2150">PR #2150&lt;/a> 增加了完整的 MLS 测试套件并改进了 GroupInfo 签名，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2158">PR #2158&lt;/a> 增加了 KeyPackage 发布状态跟踪。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2166">PR #2166&lt;/a> 则为 Nostr 加密操作增加了纯 Kotlin 的 secp256k1 实现，替代原生 C 库依赖。结合 Kotlin 版 MLS 实现之后，&lt;a href="https://nostrcompass.org/zh/topics/quartz/">Quartz&lt;/a> 已经可以在没有任何原生绑定的情况下运行 Nostr 签名和 Marmot 群消息，这为包括 iOS 在内的 Kotlin Multiplatform 目标打开了空间。&lt;/p>
&lt;p>团队也在构建 &lt;a href="https://nostrcompass.org/en/topics/nip-ac/">NIP-AC&lt;/a>（P2P Voice and Video Calls）支持：&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2143">PR #2143&lt;/a> 为 NIP-AC 通话状态机增加了完整测试套件，&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2164">PR #2164&lt;/a> 则防止应用重启后过期的 call offer 被再次触发。&lt;/p>
&lt;h3 id="nostur-v1270-增加视频录制和私密回复">Nostur v1.27.0 增加视频录制和私密回复&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a> 这个 iOS Nostr 客户端，于 4 月 2 日发布了 &lt;a href="https://github.com/nostur-com/nostur-ios-public/releases/tag/v1.27.0">v1.27.0&lt;/a>。这个版本增加了应用内视频录制和上传前裁剪，用户可以直接拍摄短片、剪到合适长度，然后不离开客户端就发布出去。动画 GIF 支持扩展到了头像和横幅图片，同时也增加了动画 WebP 渲染。新的 Shortcuts 集成允许用户从 Apple Shortcuts 自动化中发送 Nostr 帖子。该版本还增加了私密回复，并修复了影响 Nostur 与其他客户端之间消息送达的 DM 兼容性问题。&lt;/p>
&lt;h3 id="shosho-v0150-推出-shows-和竖屏视频轮播">Shosho v0.15.0 推出 Shows 和竖屏视频轮播&lt;/h3>
&lt;p>&lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a> 这个 Nostr 直播应用，于 4 月 7 日发布了 &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.15.0">v0.15.0&lt;/a> 和 &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.15.1">v0.15.1&lt;/a>。这轮发布的核心功能是 Shows：主播可以在开播前先设置自定义节目资料，并将节目连接到 OBS 或任何外部编码器。这把“我正在播什么”的元数据与真正开播的动作分离开来，因此主播可以在开始直播前先准备好标题、描述和商品。同一版本还增加了类似 TikTok 的竖屏视频轮播，可以在全屏信息流中滑动浏览直播、片段和回放，并增加了 Quick Add，允许用户直接从个人资料页发布视频片段和添加商品。v0.15.1 修复了键盘遮住直播聊天输入框的 bug。&lt;/p>
&lt;h2 id="本周发布">本周发布&lt;/h2>
&lt;h3 id="notedeck-v0100-beta-发布-zapstore-自更新">Notedeck v0.10.0-beta 发布 Zapstore 自更新&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> 这个来自 Damus 团队的桌面和移动客户端，发布了 &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.10.0-beta.1">v0.10.0-beta.1&lt;/a> 和 &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.10.0-beta.2">v0.10.0-beta.2&lt;/a>，作为 APK 自更新功能的测试预发布版本。&lt;a href="https://github.com/damus-io/notedeck/pull/1417">PR #1417&lt;/a> 在 Android 上通过 Nostr/Zapstore updater 增加了 APK 自更新，延续了&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-18-newsletter/#notedeck-moves-release-discovery-onto-nostr">周刊 #14 中报道的 Nostr 原生版本发现工作&lt;/a>。这套更新流程通过发布到 relay 的 Nostr event 发现新版本，然后从开发者托管 APK 的位置下载文件，无论是 GitHub releases、Blossom CDN 还是其他来源，接着将 SHA-256 哈希与已签名的 Nostr event 进行校验，再完成安装。&lt;a href="https://github.com/damus-io/notedeck/pull/1438">PR #1438&lt;/a> 修复了欢迎页中 Login 和 CreateAccount 按钮立即跳回上一页的问题，&lt;a href="https://github.com/damus-io/notedeck/pull/1424">PR #1424&lt;/a> 则修复了 Agentium AI 会话视图中的文本溢出。&lt;/p>
&lt;h3 id="amber-v600-pre1-增加按连接隔离的-nip-46-签名密钥">Amber v6.0.0-pre1 增加按连接隔离的 NIP-46 签名密钥&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 这个 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a>（Android Signer Application）签名器应用，于 4 月 4 日发布了 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v6.0.0-pre1">v6.0.0-pre1&lt;/a>。这次最重要的变化，是为 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a>（Nostr Remote Signing）bunker 协议增加了按连接隔离的签名密钥。Amber 现在不再为所有 bunker 连接共用同一个 keypair，而是为每个已连接客户端生成独立的密钥。如果某一个客户端连接被攻破，攻击者也无法冒充该 signer 去影响其他客户端。&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/pull/377">PR #377&lt;/a> 增加了通过 Zapstore 进行应用内更新检查与安装，使 Amber 与 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/#notedeck-v0100-beta-%e5%8f%91%e5%b8%83-zapstore-%e8%87%aa%e6%9b%b4%e6%96%b0">Notedeck&lt;/a> 一起采用 Nostr 原生应用分发。&lt;a href="https://github.com/greenart7c3/Amber/pull/375">PR #375&lt;/a> 通过向用户显示警告而不是直接崩溃的方式，优雅处理 AndroidKeyStore 失败。&lt;a href="https://github.com/greenart7c3/Amber/pull/371">PR #371&lt;/a> 则通过大小限制和内容截断增加数据库清理，防止存储无界增长。这个预发布版本还包含了&lt;a href="https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#amber-v502-through-v504">上周报道的 v5.0.x 周期&lt;/a>中的 &lt;a href="https://nostrcompass.org/zh/topics/nip-42/">NIP-42&lt;/a> relay auth 白名单和助记词恢复短语登录。&lt;/p>
&lt;h3 id="nostria-发布原生移动应用">Nostria 发布原生移动应用&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> 这个由 SondreB 维护的跨平台 Nostr 客户端，发布了原生 Android 移动应用，并连续发布了从 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.11">v3.1.11&lt;/a> 到 &lt;a href="https://github.com/nostria-app/nostria/releases/tag/v3.1.18">v3.1.18&lt;/a> 的八个版本。最重要的新能力是对 &lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 和 Aegis 这类 signer 的原生本地 signer 支持。项目也提供了适用于 Linux、macOS 和 Windows 的&lt;a href="https://www.nostria.app/download">桌面安装包&lt;/a>。&lt;a href="https://github.com/nostria-app/nostria/pull/610">PR #610&lt;/a> 通过自适应运行时限制和 preview URL 清理降低了信息流内存压力。v3.1.14 修复了与 &lt;a href="https://nostrcompass.org/zh/topics/web-of-trust/">Web of Trust&lt;/a> 提供方 Brainstorm 的集成。v3.1.15 则聚焦于音乐相关改进。新的 Android 应用已在 &lt;a href="https://zapstore.dev/apps/app.nostria">Zapstore&lt;/a> 上提供。&lt;/p>
&lt;h3 id="divine-108-发布可恢复上传和-dms">diVine 1.0.8 发布可恢复上传和 DMs&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a> 这个短视频客户端发布了 &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.8">1.0.8&lt;/a>，其中包含 87 个已合并 PR。可恢复上传让创作者在不稳定网络下可以按 chunk 继续中断的上传，而不必从头开始。该版本还加入了视频质量和 bitrate 设置、双击点赞，以及 DM 改进。&lt;a href="https://github.com/divinevideo/divine-mobile/pull/2722">PR #2722&lt;/a> 为桌面视频采集加入了 macOS camera plugin，&lt;a href="https://github.com/divinevideo/divine-mobile/pull/2820">PR #2820&lt;/a> 则将通知系统迁移到带 enrichment 和 grouping 的 BLoC 架构。团队还用 OpenMoji SVG 替换了 AI 生成的贴纸和分类插图（&lt;a href="https://github.com/divinevideo/divine-mobile/pull/2844">PR #2844&lt;/a>、&lt;a href="https://github.com/divinevideo/divine-mobile/pull/2842">PR #2842&lt;/a>）。&lt;/p>
&lt;h3 id="manent-v130-增加敏感笔记模糊和-nip-42-认证">Manent v1.3.0 增加敏感笔记模糊和 NIP-42 认证&lt;/h3>
&lt;p>&lt;a href="https://github.com/dtonon/manent">Manent&lt;/a> 这个私密加密笔记与文件存储应用，于 4 月 2 日发布了 &lt;a href="https://github.com/dtonon/manent/releases/tag/v1.3.0">v1.3.0&lt;/a>。用户现在可以将笔记标记为敏感内容，在列表视图中将其模糊显示，从而在日常滚动浏览时隐藏私密内容。该版本还增加了 &lt;a href="https://nostrcompass.org/zh/topics/nip-42/">NIP-42&lt;/a>（Authentication of Clients to Relays）支持，使 Manent 能在 relay 要求认证时先完成认证再发送 event。Manent 使用用户的 keypair 将所有数据加密后存储在 Nostr relay 上，因此 NIP-42 支持扩大了它可用于存储的 relay 范围。&lt;/p>
&lt;h3 id="wisp-v0170-到-v0173-增加直播-zaps-和钱包备份">Wisp v0.17.0 到 v0.17.3 增加直播 zaps 和钱包备份&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a> 这个 Android Nostr 客户端，连续发布了从 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.16.2-beta">v0.16.2-beta&lt;/a> 到 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.17.3-beta">v0.17.3-beta&lt;/a> 的六个版本，合并了 44 个 PR。v0.17.0 增加了钱包备份安全提示和 zap UX 改进。&lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.17.1-beta">v0.17.1&lt;/a> 增加了跨平台直播聊天可见性以及直播 zap 功能。&lt;a href="https://github.com/barrydeen/wisp/pull/423">PR #423&lt;/a> 增加了自动搜索资料、zap 成功动画和用户状态改进。&lt;a href="https://github.com/barrydeen/wisp/pull/426">PR #426&lt;/a> 修复了带大型 tag 列表 event 在 &lt;code>computeId&lt;/code> 中触发的 out-of-memory 崩溃。v0.16.x 系列则增加了 emoji shortcode 自动补全、群聊 UI 改进，以及贯穿所有通知路径的已屏蔽用户过滤。&lt;/p>
&lt;h3 id="mostro-发布深层链接nostr-汇率和重复付款修复">Mostro 发布深层链接、Nostr 汇率和重复付款修复&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> 这个构建在 Nostr 上的点对点 Bitcoin 交易所，本周在服务器守护进程和移动客户端两侧都有更新。服务器端方面，&lt;a href="https://github.com/MostroP2P/mostro/pull/692">PR #692&lt;/a> 防止过期订单写入导致重复付款，这个 bug 可能让卖家在同一笔交易中被支付两次。&lt;a href="https://github.com/MostroP2P/mostro/pull/693">PR #693&lt;/a> 则对 dev_fee 写入使用定向更新，而不是整单覆盖。&lt;/p>
&lt;p>&lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a> 这个 Flutter 客户端，于 4 月 3 日发布了 &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.3">v1.2.3&lt;/a>。该版本可以处理来自不同 Mostro 实例的深层链接，因此用户点开链接时会被正确路由到相应的交易服务器。&lt;a href="https://github.com/MostroP2P/mobile/pull/498">PR #498&lt;/a> 在后台通知管线中检测管理员和 dispute DMs，应用现在还会优先通过 Nostr 获取汇率，并在失败时回退到 HTTP/cache。&lt;a href="https://github.com/MostroP2P/mobile/pull/560">PR #560&lt;/a> 修复了一个 relay 连接阻塞 bug，该问题会在某些网络条件下阻止应用连上 relay。&lt;/p>
&lt;h3 id="unfiltered-v1012-增加-hashtags-和-comments">Unfiltered v1.0.12 增加 hashtags 和 comments&lt;/h3>
&lt;p>&lt;a href="https://github.com/dmcarrington/unfiltered">Unfiltered&lt;/a> 这个偏重图片内容的 Nostr 客户端，发布了 &lt;a href="https://github.com/dmcarrington/unfiltered/releases/tag/v1.0.12">v1.0.12&lt;/a>。&lt;a href="https://github.com/dmcarrington/unfiltered/pull/69">PR #69&lt;/a> 增加了 hashtag 支持，&lt;a href="https://github.com/dmcarrington/unfiltered/pull/72">PR #72&lt;/a> 增加了在帖子上撰写和显示 comments 的能力。&lt;a href="https://github.com/dmcarrington/unfiltered/pull/71">PR #71&lt;/a> 修复了单帖多图时的导航问题。&lt;/p>
&lt;h3 id="primal-android-发布钱包多账户共享和-remote-signer-自动重连">Primal Android 发布钱包多账户共享和 remote signer 自动重连&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal&lt;/a> 这个 Android Nostr 客户端，于 4 月 7 日发布了一个版本更新。新版本增加了钱包多账户共享，以及 Dev Tools 中带删除钱包功能的 overflow menu。remote signer 现在会在连接断开时自动重连，钱包服务也获得了自己的自动重连逻辑。修复内容包括：投票 zap 票不再显示为 Top Zaps、空投票选项不再触发崩溃、未配置钱包时隐藏钱包余额，以及将 WalletException 类型映射为 NWC 响应中的错误码。&lt;/p>
&lt;h3 id="titan-v010-推出原生-nsite-浏览器和-bitcoin-名称注册">Titan v0.1.0 推出原生 nsite:// 浏览器和 Bitcoin 名称注册&lt;/h3>
&lt;p>&lt;a href="https://github.com/btcjt/titan">Titan&lt;/a> 这个面向 Nostr Web 的原生桌面浏览器，于 4 月 7 日发布了 &lt;a href="https://github.com/btcjt/titan/releases/tag/v0.1.0">v0.1.0&lt;/a>。Titan 通过查询注册在 Bitcoin 上的人类可读名称来解析 &lt;code>nsite://&lt;/code> URL，随后从 Nostr relay 获取站点内容 event，并渲染从 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 服务器取回的页面。最终得到的是一种不依赖 DNS、不依赖 TLS 证书、也不依赖托管服务商的 Web 浏览体验。名称通过一个与 Bitcoin 交易绑定的&lt;a href="https://npub1hmq6xuqnplk5lw0h3700cujmx5gymqn5wrn42u6432r6ntzumezqc3marw.nsite.lol/register">网页界面&lt;/a>进行注册。首个版本以 macOS &lt;code>.dmg&lt;/code> 形式发布（ARM，并通过 Rosetta 2 支持 Intel），同时也包含 Nix 开发环境支持。&lt;/p>
&lt;h3 id="bikel-v150-为去-google-化手机加入原生前台服务">Bikel v1.5.0 为去 Google 化手机加入原生前台服务&lt;/h3>
&lt;p>&lt;a href="https://github.com/Mnpezz/bikel">Bikel&lt;/a> 这个将骑行活动转化为公共基础设施数据的去中心化骑行追踪器，于 4 月 4 日发布了 &lt;a href="https://github.com/Mnpezz/bikel/releases/tag/v1.5.0">v1.5.0&lt;/a>。该版本从依赖 GMS 的 Expo TaskManager 迁移到自定义原生前台服务，以确保在 LineageOS、GrapheneOS 和其他去 Google 化 Android 变体上也能可靠进行后台骑行追踪。Bikel Bot 还获得了 dual-pocket 架构，并通过 Cashu nutzaps 实现自动 eCash 收取。v1.4.3 和 v1.4.2 修复了非标准 Android 环境中的后台追踪同步问题，应用还增加了 OSM 自行车停放点地图开关。&lt;/p>
&lt;h3 id="sprout-增加-nip-01nip-23-和-nip-33-支持">Sprout 增加 NIP-01、NIP-23 和 NIP-33 支持&lt;/h3>
&lt;p>&lt;a href="https://github.com/block/sprout">Sprout&lt;/a> 这个由 Block 构建并内置 Nostr relay 的通信平台，于 4 月 6 日发布了 &lt;a href="https://github.com/block/sprout/releases/tag/desktop/v0.1.0-rc7">desktop/v0.1.0-rc7&lt;/a>。本周团队增加了对 &lt;a href="https://nostrcompass.org/en/topics/nip-23/">NIP-23&lt;/a>（Long-form Content）kind &lt;code>30023&lt;/code> 文章、&lt;a href="https://nostrcompass.org/en/topics/nip-33/">NIP-33&lt;/a> 参数化可替换 event 及其以 &lt;code>d&lt;/code> tag 为键的替换机制，以及 &lt;a href="https://nostrcompass.org/zh/topics/nip-01/">NIP-01&lt;/a>/&lt;a href="https://nostrcompass.org/en/topics/nip-02/">NIP-02&lt;/a> kind &lt;code>1&lt;/code> 文本笔记和 kind &lt;code>3&lt;/code> follow list 的支持。该版本还增加了带 54 个主题的自适应 IDE 主题系统、workflow 和 agent run history 的 UX 打磨，以及成员侧边栏清理。&lt;/p>
&lt;h3 id="mesh-llm-v0560-发布分布式配置协议">mesh-llm v0.56.0 发布分布式配置协议&lt;/h3>
&lt;p>&lt;a href="https://github.com/michaelneale/mesh-llm">mesh-llm&lt;/a> 这个使用 Nostr keypair 作为节点身份的分布式 LLM 推理系统，于 4 月 7 日发布了 &lt;a href="https://github.com/michaelneale/mesh-llm/releases/tag/v0.56.0">v0.56.0&lt;/a>。该版本增加了带所有权语义的分布式配置协议、非对称 KV cache 量化（Q8_0 keys 搭配 Q4 values）以降低内存占用、用于身份 keystore 的 OS keychain 存储、带消息排队的平滑聊天流，以及对全屏布局和使用 flash attention 时 KV cache 拆分问题的修复。&lt;/p>
&lt;h3 id="nostr-vpn-发布出口节点支持和-umbrel-打包">Nostr VPN 发布出口节点支持和 Umbrel 打包&lt;/h3>
&lt;p>&lt;a href="https://github.com/mmalmi/nostr-vpn">Nostr VPN&lt;/a> 这个使用 Nostr relay 进行信令、使用 WireGuard 建立加密隧道的点对点 VPN，本周连续发布了从 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.0">v0.3.0&lt;/a> 到 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.6">v0.3.6&lt;/a> 的六个版本。v0.3.x 周期在 Windows 和 macOS 上增加了出口节点支持，使 peer 可以通过网络中的其他节点转发互联网流量。invite 和 alias 传播现在也通过 Nostr 同步，因此用户可以在不依赖带外协调的情况下共享网络访问。该系列版本还增加了面向自托管部署的 Umbrel 打包、利用记忆的公网 endpoint 进行 NAT punch-through、自动清理过期出口节点，以及已发布的协议规范。项目同时稳定了 macOS 的 route 处理，加入自愈默认路由和 underlay 修复，并通过 Tauri 增加了 Android 构建。当前可提供的构建包括 macOS（Apple Silicon 和 Intel）、Linux（AppImage 和 .deb）、Windows 和 Android。&lt;/p>
&lt;h3 id="nymchat-回退-marmot并发布增强版-nip-17-群聊">Nymchat 回退 Marmot，并发布增强版 NIP-17 群聊&lt;/h3>
&lt;p>&lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a> 这个具备 MLS 能力的聊天客户端，连续发布了从 &lt;a href="https://github.com/Spl0itable/NYM/releases/tag/3.56.261">v3.56.261&lt;/a> 到 &lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.58.274">v3.58.274&lt;/a> 的 14 个版本。最重要的变化是协议方向调整：&lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.57.261">v3.57.261&lt;/a> 增加了 Marmot MLS 群聊，但 &lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.58.268">v3.58.268&lt;/a> 又回退到 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a>，因为 Marmot 的多设备支持尚未完成，这导致群聊状态在多设备之间同步时出现问题。v3.58.271 引入了增强版 NIP-17 群聊，为所有消息使用轮换的临时密钥，目标是防止时序和关联攻击。这一周的更新还带来了对设置具备细粒度控制的 friend system（&lt;a href="https://github.com/Spl0itable/NYM/releases/tag/v3.58.262">v3.58.262&lt;/a>）、加密应用设置中的 MLS 群聊消息同步，以及多项 relay 连接修复。&lt;/p>
&lt;h3 id="nak-v0195-增加-blossom-多服务器和-outbox-发布">nak v0.19.5 增加 Blossom 多服务器和 outbox 发布&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a> 这个 fiatjaf 的命令行 Nostr 工具包，发布了 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.5">v0.19.5&lt;/a>。&lt;code>blossom&lt;/code> 命令现在接受多个 &lt;code>--server&lt;/code> 参数，可以在一次调用中上传到多个 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 服务器。新的 &lt;code>key&lt;/code> 命令可以通过左侧补零来扩展不完整的 key。&lt;code>event&lt;/code> 命令增加了 &lt;code>--outbox&lt;/code> 标志，用于通过 outbox model 发布 event，而 &lt;code>fetch&lt;/code> 在没有返回 event 时现在会以错误码退出。&lt;/p>
&lt;h2 id="开发中">开发中&lt;/h2>
&lt;h3 id="white-noise-增加-thumbhash-预览和-push-registration-bridge">White Noise 增加 thumbhash 预览和 push registration bridge&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> 这个基于 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 协议的私密信使，本周合并了五个 PR。&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/549">PR #549&lt;/a> 用 thumbhash 替换了 blurhash 图片预览，这是一种更新的算法，能以更小的载荷生成更清晰的占位图像，通常低于 30 字节，而 blurhash 大约需要 50 到 100 字节，同时还能保留原图的宽高比和颜色分布。blurhash 仍然保留为旧内容的回退方案。&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/548">PR #548&lt;/a> 更新了 whitenoise-rs，并加入 &lt;a href="https://nostrcompass.org/zh/topics/mip-05/">MIP-05&lt;/a> push registration bridge，将&lt;a href="https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#marmot-moves-keypackages-to-addressable-events-and-tightens-push-notifications">上周的 push notification 规范工作&lt;/a>接到客户端中。&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/493">PR #493&lt;/a> 为聊天消息增加了基于 cursor 的分页，用滚动驱动的方式替代此前的加载策略。&lt;/p>
&lt;h3 id="route96-增加动态标签配置和零出口流量清理">Route96 增加动态标签配置和零出口流量清理&lt;/h3>
&lt;p>&lt;a href="https://github.com/v0l/route96">Route96&lt;/a> 这个由 v0l 构建的 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 媒体服务器，合并了三个 PR。&lt;a href="https://github.com/v0l/route96/pull/80">PR #80&lt;/a> 通过 admin API 增加了动态 label model 配置，使运营者无需重启服务器就能切换内容分类模型。&lt;a href="https://github.com/v0l/route96/pull/82">PR #82&lt;/a> 为 admin UI 增加了标签配置字段。&lt;a href="https://github.com/v0l/route96/pull/79">PR #79&lt;/a> 则增加了 zero-egress 文件清理策略，自动删除那些从未被下载过的文件，从而帮助运营者压低存储成本。&lt;/p>
&lt;h3 id="snort-发布安全加固和-dvm-支付发票">Snort 发布安全加固和 DVM 支付发票&lt;/h3>
&lt;p>&lt;a href="https://github.com/v0l/snort">Snort&lt;/a> 这个 Web 客户端，本周发布了两个版本，并完成了一次全面的安全审计。修复内容包括 Schnorr 签名验证、&lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> relay 消息伪造防护，防止攻击者通过已被攻破的 relay 注入签名请求，以及 PIN 加密改进和移除对 NIP-26 delegation 的信任。性能提升则来自 WASM 中的批量 Schnorr 验证、lazy-loaded routes、预编译翻译，以及取消每个 event 的双重验证。&lt;a href="https://github.com/v0l/snort/pull/618">PR #618&lt;/a> 增加了 &lt;a href="https://nostrcompass.org/en/topics/nip-90/">NIP-90&lt;/a>（Data Vending Machine）kind &lt;code>7000&lt;/code> payment-required 发票显示，因此当 DVM 返回支付要求时，Snort 会直接在信息流中渲染 Lightning invoice。&lt;/p>
&lt;h3 id="damus-改进-lmdb-压缩">Damus 改进 LMDB 压缩&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> 这个 iOS 客户端，合并了 &lt;a href="https://github.com/damus-io/damus/pull/3719">PR #3719&lt;/a>，按计划周期自动执行 LMDB 压缩，防止本地数据库随着时间推移无界增长。&lt;a href="https://github.com/damus-io/damus/pull/3663">PR #3663&lt;/a> 则改进了 BlurOverlayView，使其看起来像一种保护措施，而不是坏掉的界面。&lt;/p>
&lt;h3 id="captains-log-增加-tag-索引和笔记同步">Captain&amp;rsquo;s Log 增加 tag 索引和笔记同步&lt;/h3>
&lt;p>&lt;a href="https://github.com/nodetec/captains-log">Captain&amp;rsquo;s Log&lt;/a>（Comet）这个来自 Nodetec 的 Nostr 原生长文写作工具，本周合并了四个 PR。&lt;a href="https://github.com/nodetec/captains-log/pull/156">PR #156&lt;/a> 为笔记增加了 tag 索引和跨笔记同步支持，&lt;a href="https://github.com/nodetec/captains-log/pull/157">PR #157&lt;/a> 重构了笔记同步和 tag 处理，&lt;a href="https://github.com/nodetec/captains-log/pull/159">PR #159&lt;/a> 则修复了已删除笔记的同步问题，确保被删除的笔记在各设备间仍保持删除状态。&lt;/p>
&lt;h3 id="relatr-v02x-重新设计插件系统并推出-nostr-原生验证器市场">Relatr v0.2.x 重新设计插件系统，并推出 Nostr 原生验证器市场&lt;/h3>
&lt;p>&lt;a href="https://github.com/ContextVM/relatr">Relatr&lt;/a> 这个 &lt;a href="https://nostrcompass.org/zh/topics/web-of-trust/">Web of Trust&lt;/a> 评分引擎，通过社交图距离和可配置验证器计算信任排名，发布了 v0.2.x 系列，并对插件系统进行了完整重构。验证器现在使用 Elo 编写，这是一种可移植的函数式表达语言，经过分叉后支持多步骤的宿主编排能力，例如 Nostr 查询、社交图查找和 NIP-05 解析。插件以 kind &lt;code>765&lt;/code> 的 Nostr event 发布，使分发过程天然适配 relay 网络。新的&lt;a href="https://relatr.net">插件市场&lt;/a>让运营者可以在浏览器中发现、安装和加权验证器，同时还提供一个 CLI（&lt;code>relo&lt;/code>）用于本地编写和发布。整体架构是沙箱化的：插件只能调用宿主明确提供的能力，因此恶意验证器无法逃逸出其既定作用域。Relatr 实例现在还可以通过网站进行管理，运营者可以完整看到评分算法由哪些插件构成，以及各自的权重。&lt;/p>
&lt;h3 id="shopstr-改进移动端导航和访问控制">Shopstr 改进移动端导航和访问控制&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> 这个使用 Bitcoin 买卖商品的 Nostr 原生市场，本周在主应用和配套项目 &lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a> 上一共推进了 158 次提交。修复内容包括移动端社区布局改进、导航时菜单自动关闭，以及 dropdown 自动关闭。受保护路由现在不能再通过直接输入 URL 的方式绕过登录，同时 slug 匹配逻辑现在也能正确处理多个精确匹配结果。&lt;/p>
&lt;h3 id="pollerama-增加通知电影搜索和评分-ui">Pollerama 增加通知、电影搜索和评分 UI&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-polls">Pollerama&lt;/a> 这个基于 Nostr 的投票、问卷和社交评分应用，增加了线程通知、电影搜索功能，以及评分 UI 重构。该版本还修复了信息流加载问题，并升级了依赖版本。&lt;/p>
&lt;h3 id="purser-构建带-marmot-加密的-nostr-原生支付守护进程">Purser 构建带 Marmot 加密的 Nostr 原生支付守护进程&lt;/h3>
&lt;p>&lt;a href="https://github.com/EthnTuttle/purser">Purser&lt;/a> 这个设计为 Zaprite 替代品的 Nostr 原生支付守护进程，本周合并了九个 PR，持续搭建其核心架构。该项目通过 MDK 使用 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> MLS，为商户和客户之间的消息提供加密，并使用 Strike 和 Square 作为支付提供方。本周落地的内容包括配置和目录加载、消息 schema 校验、MDK 通信层、Strike 和 Square provider 实现、polling engine、anti-spam rate limiting、待处理支付持久化以及订单处理管线。在团队移除 mock MLS、改为在本地模式中使用真实加密之后，全部 99 个测试现在都在运行真实的 mdk-core MLS 操作。&lt;/p>
&lt;h3 id="vector-重构-dm-附件并增加资料编辑">Vector 重构 DM 附件并增加资料编辑&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> 这个以隐私为重点、基于 Tauri 构建的 Nostr 私信客户端，合并了 &lt;a href="https://github.com/VectorPrivacy/Vector/pull/55">PR #55&lt;/a>，对前端进行了重构。DM 附件解密和保存逻辑已迁移到 vector-core 库中，应用现在也支持资料编辑。上传取消标志已通过 TauriSendCallback 正确串接，未使用的附件预览回调也被清理掉了。&lt;/p>
&lt;h2 id="协议与规范工作">协议与规范工作&lt;/h2>
&lt;h3 id="nip-更新">NIP 更新&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>的最新变更：&lt;/p>
&lt;p>&lt;strong>已合并：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-58/">NIP-58&lt;/a>（Badges）：Profile Badges 迁移到 kind 10008，Badge Sets 迁移到 kind 30008&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2276">PR #2276&lt;/a>）：将 Profile Badges 从 kind &lt;code>30008&lt;/code> 迁移到 kind &lt;code>10008&lt;/code>，也就是每个 pubkey 一个的可替换 event，并为 Badge Sets 引入 kind &lt;code>30008&lt;/code>。此前，Profile Badges 与 Badge 定义共用同一个 kind（&lt;code>30008&lt;/code>），因此它们都是由 &lt;code>d&lt;/code> tag 键控的参数化可替换 event。新的 kind &lt;code>10008&lt;/code> 是简单可替换 event：每个 pubkey 一个，不需要 &lt;code>d&lt;/code> tag。客户端现在只需为每个用户查询一个可替换 event，而不是扫描参数化可替换 event。Amethyst v1.07.3 已经带上了这次迁移。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-34/">NIP-34&lt;/a>（Git Stuff）：增加与 git 相关的 follow lists&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2130">PR #2130&lt;/a>）：为 NIP-34 仓库和 issue 跟踪增加了 follow list 约定。用户可以发布 kind &lt;code>30000&lt;/code> 的 follow set，使用 &lt;code>git-repos&lt;/code> 或 &lt;code>git-issues&lt;/code> 这样的 &lt;code>d&lt;/code> tag，并在其中通过 &lt;code>a&lt;/code> tag 引用他们想跟踪的仓库（kind &lt;code>30617&lt;/code>）。客户端可以订阅这些 follow set，在用户信息流中展示仓库活动，类似于 kind &lt;code>3&lt;/code> 联系人列表对 pubkey 的作用方式。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>开放 PR 和讨论：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>NIP-AC：通过 WebRTC 进行点对点语音和视频通话&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2301">PR #2301&lt;/a>）：在最初由 0xChat 实现的 NIP-100 基础上，草案提出了三个变化：迁移到 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密，并包裹在 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a> gift wraps 中以消除元数据泄露；明确语音和视频通话建立的 WebRTC 工作流，包括 offer、answer 和 ICE candidates；以及一种 mesh 群组通话模型，其中每个 peer 都与其他所有 peer 建立直接 WebRTC 连接。该规范与 NIP-100 不向后兼容。Amethyst 已经开始围绕它开发，本周落地了通话状态机测试套件（&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2143">PR #2143&lt;/a>）以及过期 call offer 处理（&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2164">PR #2164&lt;/a>）。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/en/topics/nip-340/">NIP-340&lt;/a>（FROST Quorum）&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2299">PR #2299&lt;/a>）：提出了在 Nostr 上进行 &lt;a href="https://nostrcompass.org/zh/topics/frost/">FROST&lt;/a>（Flexible Round-Optimized Schnorr Threshold）门限签名的约定。FROST 允许一组签名者共同控制一个 Nostr 身份，只要满足 t-of-n 条件，成员就能在不重建完整私钥的情况下签署 event。该 NIP 定义了如何协调签名轮次、分发密钥份额以及发布门限签名 event，并建立在来自 &lt;a href="https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#igloo-signer-11">FROSTR 项目&lt;/a>的 Igloo signer 工作之上。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/en/topics/nip-5d/">NIP-5D&lt;/a>（Nostr Web Applets）&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2303">PR #2303&lt;/a>）：定义了一套 &lt;code>postMessage&lt;/code> 协议，使运行在 iframe 中的沙箱化 Web 应用，也就是“napplets”，能够与宿主应用，也就是“shell”，通信。shell 通过结构化消息 API 向 napplet 提供 Nostr 签名、relay 访问和用户上下文，而 iframe 沙箱则阻止其直接访问密钥。这将 &lt;a href="https://nostrcompass.org/en/topics/nip-5a/">NIP-5A&lt;/a> 的静态网站托管模型进一步推进到可读写 Nostr event 的交互式应用。该 NIP 目前正在积极开发中，并已有可运行的 runtime 实现。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/en/topics/nip-5c/">NIP-5C&lt;/a>（Scrolls）&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2281">PR #2281&lt;/a>）：此前名为 NIP-A5 提案。它定义了在 Nostr 上发布和发现 WebAssembly 程序的约定。WASM 二进制被存储为 Nostr event，客户端则可以在沙箱化 runtime 中下载并执行它们。一个&lt;a href="https://nprogram.netlify.app/">演示应用&lt;/a>展示了在浏览器中运行 scrolls 的方式，其中示例程序以 Nostr event 发布，任何客户端都可以获取并执行。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-85/">NIP-85&lt;/a>（Trusted Assertions）：澄清说明&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2304">PR #2304&lt;/a>）：收紧了关于单个服务提供方使用多个 key 和多个 relay 的规范表述，明确客户端应如何处理那些跨多个 pubkey 或 relay endpoint 运营的提供方所发布的 assertions。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-24/">NIP-24&lt;/a>（Extra Metadata Fields）：为可替换 event 增加 published_at&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2300">PR #2300&lt;/a>）：将 &lt;a href="https://nostrcompass.org/en/topics/nip-23/">NIP-23&lt;/a>（Long-form Content）中的 &lt;code>published_at&lt;/code> tag 泛化到所有可替换和可寻址 event。这个 tag 只用于显示：如果 &lt;code>published_at&lt;/code> 等于 &lt;code>created_at&lt;/code>，客户端将 event 显示为在该时间“创建”；如果两者不同，也就是 event 被更新过，客户端就可以显示为“更新于”。这样 kind &lt;code>0&lt;/code> 资料可以显示“joined at”日期，其他可替换 event 也可以在更新后保留原始发布时间戳。与之配套的 &lt;a href="https://nostrcompass.org/zh/topics/nip-51/">NIP-51&lt;/a> 提案（&lt;a href="https://github.com/nostr-protocol/nips/pull/2302">PR #2302&lt;/a>）则把同样的 tag 加到列表类 event 中。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a>（Gift Wrap）：临时 gift wrap kind&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2245">PR #2245&lt;/a>）：新增 kind &lt;code>21059&lt;/code>，作为现有 kind &lt;code>1059&lt;/code> gift wrap 的临时版本。临时 event（kinds &lt;code>20000&lt;/code>-&lt;code>29999&lt;/code>）遵循 &lt;a href="https://nostrcompass.org/zh/topics/nip-01/">NIP-01&lt;/a> 语义：relay 不需要存储它们，并且可以在投递后将其丢弃。这样一来，应用就可以发送在投递后从 relay 上消失的 gift-wrapped 消息，从而降低高吞吐消息场景下的存储需求，同时保留与普通 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> DMs 相同的三层加密模型。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h3 id="opensats-宣布第十六轮-nostr-grants">OpenSats 宣布第十六轮 Nostr grants&lt;/h3>
&lt;p>&lt;a href="https://opensats.org">OpenSats&lt;/a> 于 4 月 8 日宣布了其&lt;a href="https://opensats.org/blog/sixteenth-wave-of-nostr-grants">第十六轮 Nostr grants&lt;/a>，资助了四个首次获得资助的项目和一个续期项目。&lt;a href="https://github.com/vitorpamplona/amethyst/tree/main/desktopApp">Amethyst Desktop&lt;/a> 获得资助，由贡献者 Robert Nagy 基于 &lt;a href="https://nostrcompass.org/zh/topics/quartz/">Quartz&lt;/a> 和 Commons 模块构建独立桌面应用，将 Android 客户端的功能集带到以鼠标为主的界面和持久 relay 连接环境中。&lt;a href="https://github.com/nogringo/nostr-mail">Nostr Mail&lt;/a> 获得资助，以 kind &lt;code>1301&lt;/code> event 加上 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a> gift wraps 在 Nostr 上构建完整邮件系统，并提供 Flutter 客户端以及用于兼容 Gmail/Outlook 的 SMTP bridge 服务器。&lt;a href="https://github.com/Nostrord/nostrord">Nostrord&lt;/a> 获得资助，用于构建基于 Kotlin Multiplatform 的 &lt;a href="https://nostrcompass.org/en/topics/nip-29/">NIP-29&lt;/a> relay 群组客户端，提供类似 Discord 的群消息、审核和线程。&lt;a href="https://github.com/tami1A84/null--nostr">Nurunuru&lt;/a> 获得资助，用于构建面向日语用户、界面风格参考 LINE 的原生 iOS Nostr 客户端，并为引导流程加入基于 passkey 的生物识别登录。HAMSTR 则获得了续期资助，最早一次资助来自&lt;a href="https://opensats.org/blog/eleventh-wave-of-nostr-grants#hamstr">第十一轮&lt;/a>。&lt;/p>
&lt;h2 id="nip-深度解析nip-17private-direct-messages">NIP 深度解析：NIP-17（Private Direct Messages）&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/17.md">NIP-17&lt;/a> 定义了 Nostr 上当前的私密私信标准。它取代了更早的 &lt;a href="https://nostrcompass.org/zh/topics/nip-04/">NIP-04&lt;/a>（Encrypted Direct Messages）方案，后者会泄露元数据，发送方、接收方和时间戳都对 relay 可见，而且使用的是更弱的加密构造。NIP-17 将 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a>（Encrypted Payloads）用于内容加密，并结合 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a>（Gift Wrap）进行元数据保护，形成一个 relay 无法看出是谁在和谁通信的三层系统。&lt;/p>
&lt;p>这个协议使用三层嵌套的 event kinds。最内层是真正的消息，一个未签名的 kind &lt;code>14&lt;/code> event：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744108800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">14&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;f1a2b3c4d5e6f7890123456789abcdef01234567890abcdef1234567890abcdef&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://inbox.example.com&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;subject&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Project update&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;The new relay config is deployed. Let me know if you see any issues.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这个 kind &lt;code>14&lt;/code> event 被刻意设计成未签名，也就是 &lt;code>sig&lt;/code> 为空。规范将其描述为提供可否认性，但在实践中这种保护非常有限。包裹 rumor 的 kind &lt;code>13&lt;/code> seal 是由发送者的真实密钥签名的。接收者可以把这个已签名 seal 展示给第三方，从而证明发送者曾与其通信，即便不暴露消息内容。借助零知识证明，接收者甚至可以证明精确的消息内容，而无需暴露自己的私钥。这个未签名 rumor 更像是一封放在已签名信封里的未签名信件，信封上的签名仍将发送者与内容联系起来。真正的可否认性需要对称认证，例如 Signal 使用的 HMAC，但这与 Nostr 的去中心化 relay 模型不兼容，因为消息必须能够自我认证。NIP-17 真正的优势在于元数据隐私和内容保密，而不是可否认性。&lt;/p>
&lt;p>这条未签名消息随后会被包裹进一个 kind &lt;code>13&lt;/code> seal 中。这个 seal 由实际发送者签名，并通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密后发送给接收者：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;d7e3a4b9c1f2e8d6a5b4c3d2e1f09876d7e3a4b9c1f2e8d6a5b4c3d2e1f09876&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744022400&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">13&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;nip44-encrypted kind 14 payload&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这个 seal 没有 tags，因此即便被解密，也不会暴露接收者。seal 由发送者的真实密钥签名，因此接收者可以通过检查 seal 的 &lt;code>pubkey&lt;/code> 是否与内部 kind &lt;code>14&lt;/code> 的 &lt;code>pubkey&lt;/code> 一致，来确认消息身份。&lt;/p>
&lt;p>接着，这个 seal 会再被包裹进一个 kind &lt;code>1059&lt;/code> gift wrap 中，由一个随机的一次性密钥签名，并指向接收者：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2c3d4e5f67890a1b2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744065600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1059&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;f1a2b3c4d5e6f7890123456789abcdef01234567890abcdef1234567890abcdef&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;nip44-encrypted kind 13 payload&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210fedcba9876543210&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>gift wrap 的 &lt;code>pubkey&lt;/code> 是专门为这条消息随机生成的密钥，而 &lt;code>created_at&lt;/code> 则会被随机回拨，最多回拨到过去两天。这是 relay 真正能看到的最外层：一条来自未知 pubkey、发给接收者的消息，时间戳并不反映消息真实发送时间。随机时间戳可以防止事后对已存储 event 进行分析，但如果攻击者主动连接着 relay，仍然可以观察到 gift wrap 首次出现的时间，因此这种防护只对之后才查询 relay 数据的被动观察者有效。由于 pubkey 是随机的，时间戳也是伪造的，relay 无法确定真实发送者。接收者要读取消息时，会用自己的 key 和这个随机 pubkey 解密 gift wrap，找到里面的 seal，再用自己的 key 和 seal 中发送者的 pubkey 解密 seal，最终拿到内部的 kind &lt;code>14&lt;/code> 消息。&lt;/p>
&lt;p>NIP-17 不提供前向保密。所有消息都使用静态 Nostr keypair 进行加密，也就是使用 NIP-44 基于发送者和接收者密钥派生的方式。如果私钥被攻破，过去和未来所有发往该密钥的消息都可以被解密。这是一个有意的权衡：因为加密只依赖 nsec，所以只要用户备份了自己的 nsec，就可以从任何仍存有 gift wraps 的 relay 中恢复全部消息历史。像 MLS 这样的协议，也就是 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 所使用的方案，则通过轮换密钥材料提供前向保密，但代价是要求状态同步，并且在密钥轮换后无法恢复历史消息。&lt;/p>
&lt;p>NIP-17 还定义了 kind &lt;code>15&lt;/code> 用于加密文件消息，它增加了 &lt;code>file-type&lt;/code>、&lt;code>encryption-algorithm&lt;/code>、&lt;code>decryption-key&lt;/code> 和 &lt;code>decryption-nonce&lt;/code> tags，使接收者能够解密一个在上传到 Blossom 服务器前通过 AES-GCM 加密的附件。kind &lt;code>10050&lt;/code> 用于发布用户偏好的 DM relay 列表，以便发送者知道应把 gift wraps 送到哪里。消息中的 &lt;code>pubkey&lt;/code> 加上 &lt;code>p&lt;/code> tags 的集合定义了一个聊天室，增加或移除参与者就会生成一个带有全新历史边界的新房间。&lt;/p>
&lt;p>实现方面已经覆盖了大多数主流客户端。&lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a> 将 NIP-17 用于全部一对一消息。&lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a> 将 NIP-17 用于其工作量证明 DMs。&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>、&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal&lt;/a>、&lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a>、&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>、&lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a> 和 &lt;a href="https://github.com/coracle-social/coracle">Coracle&lt;/a> 都将 NIP-17 作为其主要 DM 协议。该规范还支持通过在 gift wrap 中设置 &lt;code>expiration&lt;/code> tag 来实现消息阅后消失。&lt;/p>
&lt;h2 id="nip-深度解析nip-46nostr-remote-signing">NIP 深度解析：NIP-46（Nostr Remote Signing）&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/46.md">NIP-46&lt;/a> 定义了一种将用户私钥与客户端应用分离开的协议。用户不再需要把 nsec 粘贴进 Web 应用，而是运行一个 remote signer，也叫 “bunker”，由它持有私钥，并通过 Nostr relay 响应签名请求。客户端永远看不到私钥。这缩小了攻击面：即便客户端被攻破，攻击者也只能请求签名，无法直接提取密钥本身。&lt;/p>
&lt;p>该协议使用 kind &lt;code>24133&lt;/code> 同时承载请求和响应，并通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a>（Encrypted Payloads）加密。客户端会为会话生成一次性的 &lt;code>client-keypair&lt;/code>，并通过带有彼此 pubkey tag 的 NIP-44 加密消息与 remote signer 通信。下面是一条客户端发给 remote signer 的签名请求：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;aa11bb22cc33dd44ee55ff6677889900aabbccdd11223344556677889900aabb&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;eff37350d839ce3707332348af4549a96051bd695d3223af4aabce4993531d86&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744108800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">24133&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;nip44-encrypted JSON-RPC request&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;1122334455667788990011223344556677889900aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff0011223344556677&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>其中加密后的 &lt;code>content&lt;/code> 包含一个类似 JSON-RPC 的结构：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;random-request-id-1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;method&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;sign_event&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;params&amp;#34;&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;kind\&amp;#34;:1,\&amp;#34;content\&amp;#34;:\&amp;#34;Hello from remote signing\&amp;#34;,\&amp;#34;tags\&amp;#34;:[],\&amp;#34;created_at\&amp;#34;:1744108800}&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>remote signer 会解密请求，将其展示给用户批准，或者依据已配置权限自动批准，然后使用用户私钥对 event 进行签名，并在响应中返回已签名 event：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;bb22cc33dd44ee55ff6677889900aabb11223344556677889900aabbccddeeff&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;fa984bd7dbb282f07e16e7ae87b26a2a7b9b90b7246a44771f0cf5ae58018f52&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1744108801&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">24133&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;eff37350d839ce3707332348af4549a96051bd695d3223af4aabce4993531d86&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;nip44-encrypted JSON-RPC response&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff00112233445566778899&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>连接可以由任意一方发起。remote signer 会提供一个包含其 pubkey 和 relay 信息的 &lt;code>bunker://&lt;/code> URL。客户端则会提供一个 &lt;code>nostrconnect://&lt;/code> URL，其中带有客户端 pubkey、relays，以及用于连接校验的 secret。&lt;code>secret&lt;/code> 参数用于防止连接伪造：只有通过带外方式收到该 URL 的一方，才能完成握手。&lt;/p>
&lt;p>协议定义了八种方法：&lt;code>connect&lt;/code> 用于建立会话，&lt;code>sign_event&lt;/code> 用于对 event 签名，&lt;code>get_public_key&lt;/code> 用于获取用户 pubkey，&lt;code>ping&lt;/code> 用于 keepalive，&lt;code>nip04_encrypt&lt;/code>/&lt;code>nip04_decrypt&lt;/code> 用于旧加密方式，&lt;code>nip44_encrypt&lt;/code>/&lt;code>nip44_decrypt&lt;/code> 用于当前加密方式，&lt;code>switch_relays&lt;/code> 用于 relay 管理。relay 迁移由 remote signer 负责处理，因此它可以随着时间将连接迁移到新的 relay 上，而不会打断会话。&lt;/p>
&lt;p>客户端在连接时可以通过权限系统请求特定能力。像 &lt;code>nip44_encrypt,sign_event:1,sign_event:14&lt;/code> 这样的权限字符串，表示请求 NIP-44 加密能力，以及仅对 kind &lt;code>1&lt;/code> 和 kind &lt;code>14&lt;/code> event 的签名能力。remote signer 可以接受、拒绝或修改这些权限。这意味着一个用于阅读和发帖的 Web 客户端可能只需要 &lt;code>sign_event:1&lt;/code> 权限，而一个 DM 客户端则可能还需要 &lt;code>sign_event:14&lt;/code> 和 &lt;code>nip44_encrypt&lt;/code> 权限。&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 在 Android 上实现了 NIP-46，而其本周发布的 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-08-newsletter/#amber-v600-pre1-%e5%a2%9e%e5%8a%a0%e6%8c%89%e8%bf%9e%e6%8e%a5%e9%9a%94%e7%a6%bb%e7%9a%84-nip-46-%e7%ad%be%e5%90%8d%e5%af%86%e9%92%a5">v6.0.0-pre1&lt;/a> 又进一步加入了按连接隔离的签名密钥，以实现客户端间隔离。&lt;a href="https://github.com/nicktee/nsecapp">nsec.app&lt;/a>（此前名为 Nostr Connect）则提供了一个基于 Web 的 bunker。&lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a> 为 JavaScript 客户端提供了 &lt;code>BunkerSigner&lt;/code>，而&lt;a href="https://nostrcompass.org/en/newsletters/2026-04-01-newsletter/#nostr-tools-adds-bunker-relay-control-and-fixes-nip-47-multi-relay-parsing">上周的 PR #530&lt;/a>增加了 &lt;code>skipSwitchRelays&lt;/code>，以便手动管理 relay。该协议也支持 auth challenge：当 remote signer 需要额外认证，例如密码、生物识别或硬件 token 时，它会返回一个 &lt;code>auth_url&lt;/code>，由客户端在浏览器中打开，让用户完成认证。&lt;/p>
&lt;hr>
&lt;p>本周内容就是这些。你在构建什么，或者有什么新闻想分享？欢迎在 Nostr 上私信我们，或访问 &lt;a href="https://nostrcompass.org">nostrcompass.org&lt;/a>。&lt;/p></content:encoded></item><item><title>Nostr Compass #16</title><link>https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/</link><pubDate>Wed, 01 Apr 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#amethyst-%e5%8f%91%e5%b8%83%e5%9b%ba%e5%ae%9a%e7%ac%94%e8%ae%b0relay-%e7%ae%a1%e7%90%86%e5%92%8c-request-to-vanish">v1.07.0&lt;/a> 中发布固定笔记、通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-86/">NIP-86&lt;/a> 进行 relay 管理，以及对 &lt;a href="https://nostrcompass.org/zh/topics/nip-62/">NIP-62&lt;/a> Request to Vanish 的支持。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#nip-5a-%e5%90%88%e5%b9%b6%e5%b0%86%e9%9d%99%e6%80%81%e7%bd%91%e7%ab%99%e5%bc%95%e5%85%a5-nostr">NIP-5A&lt;/a>（静态网站）合并进 NIPs 仓库，定义了如何在 Nostr 密钥对之下使用 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 存储托管网站。&lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a> 在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#flotilla-v170-%e5%a2%9e%e5%8a%a0%e8%af%ad%e9%9f%b3%e6%88%bf%e9%97%b4%e5%92%8c%e9%82%ae%e7%ae%b1%e7%99%bb%e5%bd%95">v1.7.0&lt;/a> 中加入语音房间、邮箱密码登录和工作量证明 DM。&lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> 在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#white-noise-%e4%bf%ae%e5%a4%8d-relay-%e6%8a%96%e5%8a%a8%e5%b9%b6%e6%89%a9%e5%b1%95%e5%ae%a2%e6%88%b7%e7%ab%af%e6%8e%a7%e5%88%b6">v2026.3.23&lt;/a> 中修复 relay churn，&lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a> 发布了其 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#nospeak-%e4%bd%9c%e4%b8%ba-10-%e7%a7%81%e5%af%86%e4%bf%a1%e4%bd%bf%e5%8f%91%e5%b8%83">1.0.0&lt;/a> 版本，定位为无需注册的加密信使。&lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a> &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#nymchat-%e5%8f%91%e5%b8%83%e5%9f%ba%e4%ba%8e-marmot-%e7%9a%84%e7%be%a4%e8%81%8a">采用 Marmot&lt;/a> 实现带 NIP-17 回退的 MLS 加密群聊。&lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Form*&lt;/a> 在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#calendar-by-form-v100">v1.0.0&lt;/a> 中加入私有日历列表和 ICS 导入，&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 增加了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#amber-v502-through-v504">助记词恢复和 NIP-42 relay auth 白名单&lt;/a>，&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#marmot-%e5%b0%86-keypackages-%e8%bf%81%e7%a7%bb%e5%88%b0%e5%8f%af%e5%af%bb%e5%9d%80%e4%ba%8b%e4%bb%b6%e5%b9%b6%e6%94%b6%e7%b4%a7%e6%8e%a8%e9%80%81%e9%80%9a%e7%9f%a5%e6%a0%bc%e5%bc%8f">Marmot 规范&lt;/a>则将 KeyPackages 迁移到可寻址 event 并收紧了 MIP-05 推送通知格式。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="amethyst-发布固定笔记relay-管理和-request-to-vanish">Amethyst 发布固定笔记、relay 管理和 Request to Vanish&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 这个由 vitorpamplona 维护的 Android 客户端，在三天内连发六个版本，从 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.07.0">v1.07.0&lt;/a> 到 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.07.5">v1.07.5&lt;/a>。核心功能横跨六个协议表面：固定笔记、专门的投票信息流页面、&lt;a href="https://nostrcompass.org/zh/topics/nip-62/">NIP-62&lt;/a>（Request to Vanish）支持，用于向 relay 请求删除该 pubkey 的所有 event；客户端内的 &lt;a href="https://nostrcompass.org/zh/topics/nip-86/">NIP-86&lt;/a>（Relay Management API）；relay 信息页中的 &lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a>（relay 发现与活跃性监控）评估；以及 &lt;a href="https://nostrcompass.org/zh/topics/nip-43/">NIP-43&lt;/a>（relay 访问元数据和请求）成员信息展示。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#amethyst-%e5%8f%91%e5%b8%83%e5%9b%ba%e5%ae%9a%e7%ac%94%e8%ae%b0relay-%e7%ae%a1%e7%90%86%e5%92%8c-request-to-vanish">v1.07.0&lt;/a> 中发布固定笔记、通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-86/">NIP-86&lt;/a> 进行 relay 管理，以及对 &lt;a href="https://nostrcompass.org/zh/topics/nip-62/">NIP-62&lt;/a> Request to Vanish 的支持。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#nip-5a-%e5%90%88%e5%b9%b6%e5%b0%86%e9%9d%99%e6%80%81%e7%bd%91%e7%ab%99%e5%bc%95%e5%85%a5-nostr">NIP-5A&lt;/a>（静态网站）合并进 NIPs 仓库，定义了如何在 Nostr 密钥对之下使用 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 存储托管网站。&lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a> 在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#flotilla-v170-%e5%a2%9e%e5%8a%a0%e8%af%ad%e9%9f%b3%e6%88%bf%e9%97%b4%e5%92%8c%e9%82%ae%e7%ae%b1%e7%99%bb%e5%bd%95">v1.7.0&lt;/a> 中加入语音房间、邮箱密码登录和工作量证明 DM。&lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> 在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#white-noise-%e4%bf%ae%e5%a4%8d-relay-%e6%8a%96%e5%8a%a8%e5%b9%b6%e6%89%a9%e5%b1%95%e5%ae%a2%e6%88%b7%e7%ab%af%e6%8e%a7%e5%88%b6">v2026.3.23&lt;/a> 中修复 relay churn，&lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a> 发布了其 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#nospeak-%e4%bd%9c%e4%b8%ba-10-%e7%a7%81%e5%af%86%e4%bf%a1%e4%bd%bf%e5%8f%91%e5%b8%83">1.0.0&lt;/a> 版本，定位为无需注册的加密信使。&lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a> &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#nymchat-%e5%8f%91%e5%b8%83%e5%9f%ba%e4%ba%8e-marmot-%e7%9a%84%e7%be%a4%e8%81%8a">采用 Marmot&lt;/a> 实现带 NIP-17 回退的 MLS 加密群聊。&lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Form*&lt;/a> 在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#calendar-by-form-v100">v1.0.0&lt;/a> 中加入私有日历列表和 ICS 导入，&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 增加了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#amber-v502-through-v504">助记词恢复和 NIP-42 relay auth 白名单&lt;/a>，&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#marmot-%e5%b0%86-keypackages-%e8%bf%81%e7%a7%bb%e5%88%b0%e5%8f%af%e5%af%bb%e5%9d%80%e4%ba%8b%e4%bb%b6%e5%b9%b6%e6%94%b6%e7%b4%a7%e6%8e%a8%e9%80%81%e9%80%9a%e7%9f%a5%e6%a0%bc%e5%bc%8f">Marmot 规范&lt;/a>则将 KeyPackages 迁移到可寻址 event 并收紧了 MIP-05 推送通知格式。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="amethyst-发布固定笔记relay-管理和-request-to-vanish">Amethyst 发布固定笔记、relay 管理和 Request to Vanish&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 这个由 vitorpamplona 维护的 Android 客户端，在三天内连发六个版本，从 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.07.0">v1.07.0&lt;/a> 到 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.07.5">v1.07.5&lt;/a>。核心功能横跨六个协议表面：固定笔记、专门的投票信息流页面、&lt;a href="https://nostrcompass.org/zh/topics/nip-62/">NIP-62&lt;/a>（Request to Vanish）支持，用于向 relay 请求删除该 pubkey 的所有 event；客户端内的 &lt;a href="https://nostrcompass.org/zh/topics/nip-86/">NIP-86&lt;/a>（Relay Management API）；relay 信息页中的 &lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a>（relay 发现与活跃性监控）评估；以及 &lt;a href="https://nostrcompass.org/zh/topics/nip-43/">NIP-43&lt;/a>（relay 访问元数据和请求）成员信息展示。&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-86/">NIP-86&lt;/a> 定义了一套面向 relay 运营者的 JSON-RPC 接口，允许客户端通过标准化 API 发送封禁 pubkey、允许 pubkey、列出被封禁用户等管理命令。Amethyst 现在直接在其 relay 管理 UI 中公开了这一能力，因此运行自有 relay 的用户可以在同一个发帖客户端里完成管理操作。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2039">PR #2039&lt;/a> 还将旧的封禁与允许 pubkey 的十六进制输入对话框替换为交互式用户搜索对话框。&lt;/p>
&lt;p>v1.07.2 增加了 GIF 键盘上传，并修复了一个签名回归问题：旧版 Amber 会为 &lt;code>rejected&lt;/code> 字段返回空字符串，导致拒绝响应被误读（&lt;a href="https://github.com/vitorpamplona/amethyst/pull/2042">PR #2042&lt;/a>）。v1.07.5 则修复了图片上传崩溃。更早一点的 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.2">v1.06.2&lt;/a> 和 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.3">v1.06.3&lt;/a> 还增加了单选与多选投票的类型选择器、视频进度条拖动定位，以及匿名发帖改进。&lt;/p>
&lt;h3 id="nip-5a-合并将静态网站引入-nostr">NIP-5A 合并，将静态网站引入 Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/5A.md">NIP-5A&lt;/a>（静态网站）通过 &lt;a href="https://github.com/nostr-protocol/nips/pull/1538">PR #1538&lt;/a> 合并，定义了如何在 Nostr 密钥对之下托管静态网站。规范使用两种 event kind：kind &lt;code>15128&lt;/code> 用于根网站，每个 pubkey 一个；kind &lt;code>35128&lt;/code> 用于由 &lt;code>d&lt;/code> tag 标识的命名网站。每个清单将 URL 路径映射到 SHA256 哈希，并可选使用 &lt;code>server&lt;/code> tag 指向存放实际文件的 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 存储主机。&lt;/p>
&lt;p>托管模型是这样的：网站作者构建静态站点，将文件上传到一个或多个 Blossom 服务器，然后发布一个已签名清单 event，将路径映射到内容哈希。主机服务器接收 Web 请求，从子域中解析作者 pubkey，从作者的 &lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a> relay 列表中获取清单，并通过对应哈希从 Blossom 下载 blob 后提供文件。网站仍处于作者控制之下，因为只有该密钥能签署更新后的清单。主机服务器则是可替换的，因为任何理解 NIP-5A 的服务器都能基于同一个清单提供同一个网站。&lt;/p>
&lt;p>这套规范建立在已经存在的基础设施之上。由 lez 构建的 &lt;a href="https://github.com/lez/nsite">nsite&lt;/a> 参考主机实现，以及 hzrd149 的管理 UI &lt;a href="https://github.com/hzrd149/nsite-manager">nsite-manager&lt;/a>，在 NIP 合并前就已经在运行。此次合并的意义在于将 event kind 和 URL 解析规则正式化，为第二个、第三个实现提供稳定目标。&lt;/p>
&lt;h3 id="white-noise-修复-relay-抖动并扩展客户端控制">White Noise 修复 relay 抖动并扩展客户端控制&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> 这个基于 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 协议的私密信使，于 3 月 25 日发布了 &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v2026.3.23">v2026.3.23&lt;/a>。主要工作是 relay 稳定性。登录流程不再等待每个 relay-list 发布完成才继续，因为 relay-list 发布现在使用 quorum 逻辑，并在后台重试剩余 relay。一次性 fetch 和 publish 现在使用作用域明确的临时 relay 会话，而不是一直挂在长生命周期连接池中；恢复后的会话在启动后也能重新找回群组刷新路径。应用还通过 &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/495">PR #495&lt;/a> 和 &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/502">PR #502&lt;/a> 暴露了 relay 诊断和 relay 状态检查能力。&lt;/p>
&lt;p>同一版本还改变了会话行为。&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/468">PR #468&lt;/a> 增加了带 &lt;code>q&lt;/code> tag 和 &lt;code>nostr:nevent&lt;/code> 引用的 NIP-C7 回复线程；&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/471">PR #471&lt;/a> 和 &lt;a href="https://github.com/marmot-protocol/whitenoise/pull/512">PR #512&lt;/a> 让被删除消息显示为已删除占位，而不是静默消失；&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/478">PR #478&lt;/a> 增加了使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 匿名报告的应用内 bug 反馈流程；&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/486">PR #486&lt;/a> 则把支持聊天直接放进客户端。同一窗口还加入了面向用户的消息控制：&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/532">PR #532&lt;/a> 增加聊天归档，&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/541">PR #541&lt;/a> 增加带持续时间配置的静音与取消静音，&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/535">PR #535&lt;/a> 增加通知设置。&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/539">PR #539&lt;/a> 则是推送注册的预备工作，在 iOS 上接入 APNs 注册，在 Android 上检测 Play Services，为后续注册逻辑做准备。后端方面，&lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a> 添加了 MIP-05 推送通知原语和通知请求构建器（&lt;a href="https://github.com/marmot-protocol/mdk/pull/235">PR #235&lt;/a>、&lt;a href="https://github.com/marmot-protocol/mdk/pull/238">PR #238&lt;/a>），而 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a> 增加了推送注册持久化（&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/688">PR #688&lt;/a>）、后台任务取消修复（&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/696">PR #696&lt;/a>）和启动时的 key package 恢复（&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/693">PR #693&lt;/a>）。&lt;/p>
&lt;h3 id="nostr-vpn-到达-v030加入-roster-同步和-invite-v2">Nostr VPN 到达 v0.3.0，加入 roster 同步和 invite v2&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#nostr-vpn-%E4%BD%9C%E4%B8%BA-tailscale-%E6%9B%BF%E4%BB%A3%E6%96%B9%E6%A1%88%E5%90%AF%E5%8A%A8">继上周的发布报道之后&lt;/a>，&lt;a href="https://github.com/mmalmi/nostr-vpn">nostr-vpn&lt;/a> 这个通过 Nostr relay 传递信令、通过 WireGuard 建立加密隧道的点对点 VPN 继续快速发布，版本推进到了 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.3.3">v0.3.3&lt;/a>。这次版本升级带来了两个破坏性变化：邀请格式升级到 v2（0.3.0 仍可导入 v1 邀请，但旧版本不能导入 v2 邀请），同时信令协议中加入了管理员签名的 roster 同步。不同版本的 peer 仍可以在 mesh 层连接，但旧 peer 不会参与 roster 同步。&lt;/p>
&lt;p>roster 同步意味着它开始向托管网络演化。管理员节点现在可以将成员变更推送给所有 peer，因此向 mesh 中增加或移除设备不再需要每个 peer 手工更新配置。同一周的 v0.2.x 系列仍在解决具体部署问题：&lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.22">v0.2.22&lt;/a> 到 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.28">v0.2.28&lt;/a> 修复了 Windows 服务管理、加入 Android 构建脚本并打磨了 LAN 配对流程。&lt;/p>
&lt;h3 id="nospeak-作为-10-私密信使发布">nospeak 作为 1.0 私密信使发布&lt;/h3>
&lt;p>&lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a> 这个构建在 Nostr 上的私密信使，于 3 月 27 日发布了 &lt;a href="https://github.com/psic4t/nospeak/releases/tag/v1.0.0">1.0.0&lt;/a>。项目支持一对一和群组会话、联系人管理以及可自托管架构。一对一聊天使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a>（私密私信），该规范结合 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a>（Gift Wrap）与 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a>（加密载荷），从 relay 侧隐藏发送者身份。对于媒体，文件会在上传到 Blossom 服务器前通过 AES-256-GCM 在客户端侧加密。该版本还以容器镜像形式发布，便于自托管。&lt;/p>
&lt;h3 id="flotilla-v170-增加语音房间和邮箱登录">Flotilla v1.7.0 增加语音房间和邮箱登录&lt;/h3>
&lt;p>&lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a> 是 hodlbod 构建的类 Discord &lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a>（基于 relay 的群组）客户端，围绕“relays as groups”模型设计。它于 3 月 30 日和 31 日发布了 &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.0">v1.7.0&lt;/a> 和 &lt;a href="https://gitea.coracle.social/coracle/flotilla/src/tag/1.7.1">v1.7.1&lt;/a>。最核心的新功能是由 mplorentz 贡献的语音房间。用户现在可以在群组频道内加入语音通话，新的加入对话框（&lt;a href="https://gitea.coracle.social/coracle/flotilla/pulls/109">PR #109&lt;/a>）允许他们选择音频输入设备，并决定是加入语音还是仅查看文本聊天。这个对话框解决了旧体验中的一个 UX 问题：此前进入启用语音的房间会强制激活麦克风，即便用户只是想读消息或检查房间设置。&lt;/p>
&lt;p>同一版本还加入了邮箱密码登录作为 Nostr 密钥认证之外的替代方案、DM 的工作量证明、DM 编辑、重新设计的 relay 引导和设置、通过 &lt;code>supported_nips&lt;/code> 检测 Blossom 支持、改进的通知徽章、Android 推送回退以及 Android 文件上传修复。v1.7.1 随后修复了离线签名器场景下 pomade 注册回退问题。&lt;/p>
&lt;p>Hodlbod 还在构建 &lt;a href="https://gitea.coracle.social/coracle/caravel">Caravel&lt;/a>，这是一个 zooid relay 的托管管理器和仪表盘，本周在初始开发中记录了 40 次提交。&lt;/p>
&lt;h3 id="nymchat-发布基于-marmot-的群聊">Nymchat 发布基于 Marmot 的群聊&lt;/h3>
&lt;p>&lt;a href="https://github.com/Spl0itable/NYM">Nymchat&lt;/a>（也叫 NYM，Nostr Ynstant Messenger）是一个与 Bitchat 桥接的短暂聊天客户端。它宣布所有新的群聊现在都使用 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 协议进行 MLS 加密消息传输。该集成使用 kind &lt;code>443&lt;/code>、&lt;code>444&lt;/code> 和 &lt;code>445&lt;/code> 分别表示 key package、welcome 消息和群组消息，从而提供前向保密、被攻破后安全性以及零元数据泄露。如果接收方无法使用 MLS，Nymchat 会回退到更早的 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a>（私密私信）群聊路径，该路径仍是端到端加密，但不具备 MLS 的 ratchet-tree 属性。&lt;/p>
&lt;p>本周的 v3.55 和 v3.56 系列主要处理群聊边缘情况：新设备上的加载、离开行为、通知路由和未读徽章计数。同一轮更新还修补了由未转义 HTML 导致的 XSS 漏洞，并将关键词和短语屏蔽扩展到用户昵称。这使 Nymchat 成为又一个加入 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#white-noise-%e4%bf%ae%e5%a4%8d-relay-%e6%8a%96%e5%8a%a8%e5%b9%b6%e6%89%a9%e5%b1%95%e5%ae%a2%e6%88%b7%e7%ab%af%e6%8e%a7%e5%88%b6">White Noise&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#openchat-v024-through-v030">OpenChat&lt;/a> 阵营的 Marmot 客户端，扩大了能够通过同一协议交换 MLS 加密群组消息的应用集合。&lt;/p>
&lt;h2 id="版本发布">版本发布&lt;/h2>
&lt;h3 id="calendar-by-form-v100">Calendar by Form* v1.0.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Form*&lt;/a> 这个基于 &lt;a href="https://nostrcompass.org/zh/topics/nip-52/">NIP-52&lt;/a>（日历事件）构建的去中心化日历应用，于 3 月 29 日达到 &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v1.0.0">v1.0.0&lt;/a>。新版本增加了使用加密 Nostr event（kind &lt;code>32123&lt;/code>）和 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a>（加密载荷）自加密的私有日历列表，使用户能够将事件组织成私有集合，而不向 relay 暴露这种分组关系。同一版本还加入了 ICS intent 处理，用于从其他应用导入日历数据，以及用于用户之间共享事件的邀请请求。&lt;/p>
&lt;h3 id="amber-v502-through-v504">Amber v5.0.2 through v5.0.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 这个 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a>（Android 签名器应用）签名器发布了三个小版本：&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v5.0.2">v5.0.2&lt;/a>、&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v5.0.3">v5.0.3&lt;/a> 和 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v5.0.4">v5.0.4&lt;/a>。其中最直观的新功能是助记词恢复短语登录（&lt;a href="https://github.com/greenart7c3/Amber/pull/358">PR #358&lt;/a>），让用户能通过 BIP39 助记词恢复签名器，而不必直接输入原始 nsec 或 ncryptsec 字符串。&lt;a href="https://github.com/greenart7c3/Amber/pull/357">PR #357&lt;/a> 增加了 &lt;a href="https://nostrcompass.org/zh/topics/nip-42/">NIP-42&lt;/a> relay auth 白名单，使用户能够限制哪些 relay 可以请求客户端认证。&lt;a href="https://github.com/greenart7c3/Amber/pull/353">PR #353&lt;/a> 增加了解密权限的加密范围选择，让用户可以只授予 NIP-04 或只授予 NIP-44 解密访问，而不是给出笼统授权。v5.0.4 还修复了拒绝操作未能遵守加密与解密权限范围的问题，并改善了同时接收多个 bunker 请求时的性能。&lt;/p>
&lt;h3 id="aegis-v040">Aegis v0.4.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZharlieW/Aegis">Aegis&lt;/a> 这个跨平台签名器于 3 月 26 日发布了 &lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.4.0">v0.4.0&lt;/a>。新版本在设置中加入 Full 和 Selective 两种授权模式，并修复了多个二维码扫描问题。后续提交 &lt;a href="https://github.com/ZharlieW/Aegis/commit/d4f799fe51dd82968d54f72ac77f2de29d0cfe6b">d4f799f&lt;/a>、&lt;a href="https://github.com/ZharlieW/Aegis/commit/3313af92e55e449ebc98fbd91a085bd444d716e7">3313af9&lt;/a>、&lt;a href="https://github.com/ZharlieW/Aegis/commit/3b214e4176f5dbe7f18690d0996e69dd151fe00f">3b214e4&lt;/a> 和 &lt;a href="https://github.com/ZharlieW/Aegis/commit/e4f40b6f1f48c2dae1bb5e4246df26c26dba419e">e4f40b6&lt;/a> 延续了这一方向，增加了批量选择控制、可复用的批量选择统计、set-all-groups 选择 API，以及权限页面上的按权限使用统计。&lt;/p>
&lt;h3 id="schemata-v027-through-v030">Schemata v0.2.7 through v0.3.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrability/schemata">Schemata&lt;/a> 是用于验证 Nostr event kind 的 JSON Schema 定义，它在 &lt;a href="https://github.com/nostrability/schemata/releases/tag/v0.2.7">v0.2.7&lt;/a> 到 &lt;a href="https://github.com/nostrability/schemata/releases/tag/v0.3.0">v0.3.0&lt;/a> 之间发布了四个版本，并合并了 21 个 PR。v0.3.0 带来了 relay URL、hex ID、MIME 类型和 BOLT-11 字符串的模式一致性修复（&lt;a href="https://github.com/nostrability/schemata/pull/126">PR #126&lt;/a>）、集中化 relay URL 模式（&lt;a href="https://github.com/nostrability/schemata/pull/117">PR #117&lt;/a>）、&lt;a href="https://nostrcompass.org/zh/topics/nip-19/">NIP-19&lt;/a> bech32 基础类型 schema（&lt;a href="https://github.com/nostrability/schemata/pull/118">PR #118&lt;/a>），以及对 kind 777 spell event 的验证（&lt;a href="https://github.com/nostrability/schemata/pull/125">PR #125&lt;/a>）。发布管道现在会在每次发布时向 Nostr 发布一条 kind &lt;code>1&lt;/code> 笔记（&lt;a href="https://github.com/nostrability/schemata/pull/120">PR #120&lt;/a>），让项目通过其所验证的协议来宣布自己。除了规范的 JS/TS 包之外，Schemata 现在还支持十多种语言：Rust、Go、Python、Kotlin、Java、Swift、Dart、PHP、C#/.NET、C++、Ruby 和 C。&lt;/p>
&lt;p>与 Schemata 同时，团队还发布了实验性代码生成器 &lt;a href="https://github.com/nostrability/schemata-codegen">schemata-codegen&lt;/a>，它用不同方法解决同一个验证问题。Schemata 的验证包需要 JSON Schema runtime 依赖，而 schemata-codegen 则直接将 schema 移植为类型化的本地语言构件（类型化 tag tuple、kind interface 和 runtime validator），从而不需要在运行时依赖验证器库。&lt;a href="https://github.com/nostrability/schemata-codegen/blob/main/CODEGEN-VS-VALIDATORS.md">codegen-vs-validators comparison&lt;/a> 解释了两种方式各自适合的场景。&lt;/p>
&lt;h3 id="bigbrotr-v650-through-v654">BigBrotr v6.5.0 through v6.5.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/BigBrotr/bigbrotr">BigBrotr&lt;/a> 这个 relay 分析平台在 &lt;a href="https://github.com/BigBrotr/bigbrotr/releases/tag/v6.5.0">v6.5.0&lt;/a> 到 &lt;a href="https://github.com/BigBrotr/bigbrotr/releases/tag/v6.5.4">v6.5.4&lt;/a> 之间发布了五个版本。v6.5.0 通过 &lt;code>parse_relay_url()&lt;/code> 工厂函数集中处理 relay URL 验证，并加入 URL 长度检查和路径净化。监控基础设施也得到了修复：公告 event 现在包含 geohash 位置 tag（参考 &lt;a href="https://nostrcompass.org/zh/topics/nip-52/">NIP-52&lt;/a>），而原本没有截止时间、可能无限挂起的 Geo/Net &lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a> 元数据测试也加入了超时保护。&lt;a href="https://github.com/BigBrotr/bigbrotr/pull/410">PR #410&lt;/a> 将 PostgreSQL 从 16 升级到 18，为 relay 分析管道带来了 async I/O 子系统和更好的 WAL 吞吐量。&lt;/p>
&lt;h3 id="vertex-lab-relay-增加-nip-50-个人资料搜索">Vertex Lab relay 增加 NIP-50 个人资料搜索&lt;/h3>
&lt;p>&lt;a href="https://vertexlab.io">Vertex Lab&lt;/a> 团队也是 &lt;a href="https://github.com/vertex-lab/npub.world">npub.world&lt;/a> 和 &lt;a href="https://vertexlab.io/docs">Vertex&lt;/a> Web of Trust 引擎的维护者，他们宣布 &lt;code>wss://relay.vertexlab.io&lt;/code> 现在支持用于个人资料查询的 &lt;a href="https://nostrcompass.org/zh/topics/nip-50/">NIP-50&lt;/a>（搜索）。NIP-50 为标准 Nostr &lt;code>REQ&lt;/code> 过滤器增加了 &lt;code>search&lt;/code> 字段，使客户端能够向支持索引的 relay 发送全文搜索查询。对于已经提供 Web of Trust 数据的 relay 来说，增加个人资料搜索意味着连接到 &lt;code>relay.vertexlab.io&lt;/code> 的客户端可以直接按名称或简介发现用户，而无需单独的搜索服务。&lt;/p>
&lt;h3 id="hashtree-v0217-and-v0218-发布-webrtc-mesh-和-iris-desktop">Hashtree v0.2.17 and v0.2.18 发布 WebRTC mesh 和 Iris Desktop&lt;/h3>
&lt;p>&lt;a href="https://github.com/mmalmi/hashtree">Hashtree&lt;/a> 是 mmalmi 的内容寻址 blob 存储系统，会在 Nostr 上发布 Merkle 根。它在 3 月 31 日发布了 &lt;a href="https://github.com/mmalmi/hashtree/releases/tag/v0.2.17">v0.2.17&lt;/a> 和 &lt;a href="https://github.com/mmalmi/hashtree/releases/tag/v0.2.18">v0.2.18&lt;/a>。这两个版本总结了一轮 30 次提交的冲刺，加入了三类能力。第一，&lt;code>hashtree-webrtc&lt;/code> crate（在 v0.2.18 中重命名为 &lt;code>hashtree-network&lt;/code>）增加了基于 WebRTC 的点对点 blob 分发，并在 Rust CLI、仿真 harness 和 TypeScript 客户端之间统一 mesh 信令。第二，发布管道现在构建 Windows 工件（CLI zip 和 Iris 安装器），使其覆盖 macOS、Linux 和 Windows。第三，这两个版本都打包了 Iris Desktop 0.1.0，也就是 mmalmi 的 Nostr 社交客户端，作为 AppImage、.deb 和 Windows 安装器资源与 hashtree CLI 一同发布。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-18-newsletter/">Hashtree 首次在周刊 #10 中报道&lt;/a>，当时它作为兼容 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 的基于文件系统的存储启动。WebRTC 层是它迈向无需依赖中心化 Blossom 服务器的点对点内容分发的第一步。&lt;/p>
&lt;h3 id="nostr-mail-client-v070-through-v072">Nostr Mail Client v0.7.0 through v0.7.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/nogringo/nostr-mail-client">Nostr Mail Client&lt;/a> 是一个基于 Nostr 身份构建、采用 Flutter 的类邮件客户端，它在三天内发布了 &lt;a href="https://github.com/nogringo/nostr-mail-client/releases/tag/v0.7.0">v0.7.0&lt;/a>、&lt;a href="https://github.com/nogringo/nostr-mail-client/releases/tag/v0.7.1">v0.7.1&lt;/a> 和 &lt;a href="https://github.com/nogringo/nostr-mail-client/releases/tag/v0.7.2">v0.7.2&lt;/a>。可见的产品工作主要集中在引导流程（&lt;a href="https://github.com/nogringo/nostr-mail-client/pull/9">PR #9&lt;/a>）和个人资料编辑（&lt;a href="https://github.com/nogringo/nostr-mail-client/pull/10">PR #10&lt;/a>）上，这是任何试图把 Nostr 呈现为邮箱形态的客户端都需要的基础模块。后续小版本则把这部分工作打包进新的 Android 和 Linux 构建中。&lt;/p>
&lt;h3 id="wisp-v0140-through-v0161">Wisp v0.14.0 through v0.16.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a> 这个 Android Nostr 客户端本周又额外发布了 13 个版本，从 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.14.0-beta">v0.14.0-beta&lt;/a> 到 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.16.3-beta">v0.16.3-beta&lt;/a>。本周工作包括 NIP-17 rumor JSON 修复（&lt;a href="https://github.com/barrydeen/wisp/pull/385">PR #385&lt;/a>）、画廊卡片上的转发徽章（&lt;a href="https://github.com/barrydeen/wisp/pull/383">PR #383&lt;/a>）、可展开的反应详情（&lt;a href="https://github.com/barrydeen/wisp/pull/382">PR #382&lt;/a>）、持久化 emoji 集（&lt;a href="https://github.com/barrydeen/wisp/pull/381">PR #381&lt;/a>）和视频自动播放控制（&lt;a href="https://github.com/barrydeen/wisp/pull/380">PR #380&lt;/a>）。最新的 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.16.3-beta">v0.16.3-beta&lt;/a> 还修复了带连字符的自定义 emoji 短代码和缺失的 emoji tag。&lt;/p>
&lt;h3 id="primal-android-3017">Primal Android 3.0.17&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> 于 3 月 24 日发布了 &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.17">3.0.17&lt;/a>。&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/1000">PR #1000&lt;/a> 将 WalletException 类型映射为 NWC 响应中的错误码，使 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a> 客户端获得结构化失败信息，而不再只是通用错误。&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/995">PR #995&lt;/a> 修复了投票中的 zap 投票被显示为 Top Zaps 的问题，&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/998">PR #998&lt;/a> 则在未配置钱包时隐藏余额和操作按钮。&lt;/p>
&lt;h3 id="openchat-v024-through-v030">OpenChat v0.2.4 through v0.3.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a> 这个基于 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 栈的 Avalonia 聊天客户端，在四天内从 &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.2.4">v0.2.4&lt;/a> 发布到 &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.3.0">v0.3.0&lt;/a>。提交记录显示的是一个客户端如何补齐“能跑通 Marmot”和“人们可以日常使用”之间的差距。&lt;a href="https://nostrcompass.org/zh/topics/nip-42/">NIP-42&lt;/a> relay 认证落地，随后是带重复 event 过滤的 relay 选择器 UI。语音消息加入暂停、恢复、跳转和时长显示。签名器路径也被加固：Amber 连接通过更新的 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> URI 格式得到修复，请求发送前 WebSocket 会自动重连，而重复的 Amber 请求现在会通过检查重放响应被捕获。存储方面，Linux 和 macOS 获得了使用文件后备密钥的 AES-256-GCM 安全存储，用户元数据获取则开始使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a> relay 发现，并将结果缓存到本地数据库。&lt;/p>
&lt;h3 id="igloo-signer-11">Igloo Signer 1.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/FROSTR-ORG/igloo-ios-prototype">Igloo&lt;/a> 是来自 FROSTR 项目的 iOS &lt;a href="https://nostrcompass.org/zh/topics/frost/">FROST&lt;/a> 阈值签名器，它于 3 月 28 日发布了 &lt;a href="https://github.com/FROSTR-ORG/igloo-ios-prototype/releases/tag/v1.1">v1.1&lt;/a>。FROST（Flexible Round-Optimized Schnorr Threshold）签名允许一组签名者共同控制一个 Nostr 密钥对，只要 t-of-n 参与者满足条件，就能联合签署 event，而不需要任何单方持有完整私钥。Igloo 是 Nostr 领域最早的移动端实现之一。&lt;/p>
&lt;h3 id="nak-v0193-and-v0194">nak v0.19.3 and v0.19.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a> 这个 fiatjaf 的命令行 Nostr 工具包于 3 月 26 日和 30 日发布了 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.3">v0.19.3&lt;/a> 和 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.4">v0.19.4&lt;/a>。这两个版本都修复了 panic 条件：&lt;a href="https://github.com/fiatjaf/nak/pull/118">PR #118&lt;/a> 用 &lt;code>strings.Cut&lt;/code> 替换 &lt;code>strings.Split&lt;/code>，以防止潜在的越界访问；&lt;a href="https://github.com/fiatjaf/nak/pull/119">PR #119&lt;/a> 则在 curl flag 解析中防止了同类 panic。&lt;/p>
&lt;h3 id="flora-v030">Flora v0.3.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/shawnyeager/flora-extension">Flora&lt;/a> 是一个在 Nostr 上实现去中心化屏幕录制和分享的 Chrome 扩展，它发布了 &lt;a href="https://github.com/shawnyeager/flora-extension/releases/tag/v0.3.0">v0.3.0&lt;/a>。新版本增加了公开、未列出和私密三种模式的加密视频分享。私密录制会通过 AES-256-GCM 加密，并通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a>（私密私信）发送给接收者，因此录制内容不会以明文接触任何服务器。&lt;/p>
&lt;h3 id="yakihonne-mobile-203">YakiHonne Mobile 2.0.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/YakiHonne/mobile-app">YakiHonne&lt;/a> 这个移动端 Nostr 客户端发布了 &lt;a href="https://github.com/YakiHonne/mobile-app/releases/tag/YakiHonne-2.0.3">2.0.3&lt;/a>，加入了 relay 评论和加入请求、扩展的嵌套回复、笔记自动翻译以及 NWC 多 relay 支持。&lt;/p>
&lt;h2 id="项目更新">项目更新&lt;/h2>
&lt;h3 id="zap-cooking-添加-zap-投票和-branta-支付验证">Zap Cooking 添加 zap 投票和 Branta 支付验证&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a> 这个食谱与内容平台本周合并了 11 个 PR，重点放在互动内容和支付流程。&lt;a href="https://github.com/zapcooking/frontend/pull/277">PR #277&lt;/a> 增加了 zap 投票（kind 6969），用户通过发送 sats 投票，并可以查看带头像的投票者列表。&lt;a href="https://github.com/zapcooking/frontend/pull/274">PR #274&lt;/a> 则重新设计了投票 UX，使投票界面在信息流中更加自然。&lt;/p>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend/pull/276">PR #276&lt;/a> 还在 Send Payment 流程中加入基于摄像头的二维码扫描，并集成了 &lt;a href="https://branta.pro/">Branta&lt;/a>，这是一个在支付前验证目标是否合法的服务。Branta 会在发送前检查支付目标是否存在钓鱼、地址替换和中间人拦截风险。在 Zap Cooking 的实现中，Branta 验证过的平台名称和 logo 会直接显示在支付流程里，而启用 Branta 的二维码还可以携带 &lt;code>branta_id&lt;/code> 和 &lt;code>branta_secret&lt;/code> 参数，让钱包在扫码时就完成目标验证。&lt;/p>
&lt;h3 id="divine-为统一搜索铺路并加固视频交付">diVine 为统一搜索铺路并加固视频交付&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a> 这个短视频客户端本周继续收紧搜索、信息流导航、播放恢复和上传行为。&lt;a href="https://github.com/divinevideo/divine-mobile/pull/2540">PR #2540&lt;/a> 为统一搜索页打下基础，提供 Videos、People 和 Tags 三个分组区域。&lt;a href="https://github.com/divinevideo/divine-mobile/pull/2623">PR #2623&lt;/a> 将个人资料信息流、收件箱、通知、发现列表、经典 vines 以及可组合网格信息流统一迁移到共享分页控制器上，强化了各处的分页一致性。&lt;/p>
&lt;p>视频交付方面也有几项具体修复。&lt;a href="https://github.com/divinevideo/divine-mobile/pull/2643">PR #2643&lt;/a> 会按顺序重试 Divine 托管的衍生资源，并在报告播放错误前回退到原始 blob，从而避免单个资源源的瞬时失败直接杀死播放。&lt;a href="https://github.com/divinevideo/divine-mobile/pull/2634">PR #2634&lt;/a> 则在能力探测短暂失败时，让可恢复上传继续走 Divine 自有路径，减少短时网络故障导致的上传中断。&lt;a href="https://github.com/divinevideo/divine-mobile/pull/2637">PR #2637&lt;/a> 还调整了敏感内容门控逻辑，使视频只在真正的警告标签场景下被强制拦截，而不是仅因为创作者提供了内容警告标签。&lt;/p>
&lt;h3 id="shopstr-添加自定义店面milk-market-持续推进市场功能">Shopstr 添加自定义店面，Milk Market 持续推进市场功能&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> 这个基于 Nostr 的市场，合并了 &lt;a href="https://github.com/shopstr-eng/shopstr/pull/245">PR #245&lt;/a> 来支持自定义店面，使卖家拥有更独特的主页界面，而不必让每个列表都套在同一种通用展示之中。&lt;/p>
&lt;p>&lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a> 是一个专门卖牛奶的市场，它继续推进店面优化（&lt;a href="https://github.com/shopstr-eng/milk-market/pull/18">PR #18&lt;/a>）、账户恢复（&lt;a href="https://github.com/shopstr-eng/milk-market/pull/17">PR #17&lt;/a>）、牛肉分润（&lt;a href="https://github.com/shopstr-eng/milk-market/pull/15">PR #15&lt;/a>）以及 MCP 工具类型修复（&lt;a href="https://github.com/shopstr-eng/milk-market/pull/16">PR #16&lt;/a>）。&lt;/p>
&lt;h3 id="notedeck-添加音效并将其更新器路径延伸到-android">Notedeck 添加音效，并将其更新器路径延伸到 Android&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> 这个来自 Damus 团队的桌面客户端，合并了 &lt;a href="https://github.com/damus-io/notedeck/pull/1412">PR #1412&lt;/a>，加入使用 rodio 的 UI 交互音效子系统；也合并了 &lt;a href="https://github.com/damus-io/notedeck/pull/1399">PR #1399&lt;/a>，其中包含 Agentium 更新，如 CLI 标题标志和可折叠会话文件夹。一个开放中的 &lt;a href="https://github.com/damus-io/notedeck/pull/1417">PR #1417&lt;/a> 提议在 Android 上通过 Nostr/Zapstore 完成 APK 自更新，它建立在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-18-newsletter/#notedeck-%E5%B0%86%E7%89%88%E6%9C%AC%E5%8F%91%E7%8E%B0%E8%BF%81%E7%A7%BB%E5%88%B0-nostr">周刊 #14 中报道的 Notedeck Nostr 原生更新器工作&lt;/a> 之上。&lt;/p>
&lt;h3 id="nostria-添加-repost-relay-hint-和-nip-98-对齐">Nostria 添加 repost relay hint 和 NIP-98 对齐&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> 合并了 &lt;a href="https://github.com/nostria-app/nostria/pull/583">PR #583&lt;/a>，为 kind 6 和 kind 16 的 repost &lt;code>e&lt;/code> tag 增加 &lt;a href="https://nostrcompass.org/zh/topics/nip-18/">NIP-18&lt;/a>（转发）relay hint；合并了 &lt;a href="https://github.com/nostria-app/nostria/pull/582">PR #582&lt;/a>，让 Brainstorm HTTP auth（kind 27235）与 &lt;a href="https://nostrcompass.org/zh/topics/nip-98/">NIP-98&lt;/a>（HTTP Auth）所要求的 tag 对齐；还合并了 &lt;a href="https://github.com/nostria-app/nostria/pull/576">PR #576&lt;/a>，加入 Schemata schema 验证测试。NIP-98 这项变更意味着 Nostria 现在可以使用和其他客户端一致的 HTTP auth 格式对外部服务进行认证。&lt;/p>
&lt;h3 id="nostr-doc-添加桌面打包和-offline-first-工作">Nostr-Doc 添加桌面打包和 offline-first 工作&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-docs">Nostr-Doc&lt;/a> 是 Form* 的协作编辑器，本周在打包和编辑器工作上都很活跃。&lt;a href="https://github.com/formstr-hq/nostr-docs/commit/fcdc00a564c8d76f094c586b06efce07592a60e4">commit fcdc00a&lt;/a> 增加了桌面应用，&lt;a href="https://github.com/formstr-hq/nostr-docs/commit/3977a8eb2e62b84a67de756c2776e14de8470927">commit 3977a8e&lt;/a> 开始推进原生应用工作，&lt;a href="https://github.com/formstr-hq/nostr-docs/commit/413a030f5b47fb8e32a5dff81bcef557ad9b5869">commit 413a030&lt;/a> 则推动应用向 offline-first 行为靠拢。编辑器侧，&lt;a href="https://github.com/formstr-hq/nostr-docs/commit/1855ce86ee83ad504e14e47d9c339baffb114786">commit 1855ce8&lt;/a> 增加了 Ctrl+S 保存、保存警告、链接预览修复和修正后的删除线渲染。&lt;/p>
&lt;h3 id="rust-nostr-优化-nip-21-解析并增加-relay-侧-nip-62-支持">rust-nostr 优化 NIP-21 解析并增加 relay 侧 NIP-62 支持&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> 本周合并了八个 PR。其中最值得注意的是 &lt;a href="https://github.com/rust-nostr/nostr/pull/1308">PR #1308&lt;/a>，它通过让 &lt;code>PublicKey::parse&lt;/code> 的 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/21.md">NIP-21&lt;/a> URI 解析与标准 bech32 解析性能对齐来完成优化。此前 NIP-21 URI 的解析大约比原始 bech32 密钥慢两倍。项目中还存在四个开放 PR，为内存、LMDB、SQLite 和数据库测试后端增加 relay 侧的 &lt;a href="https://nostrcompass.org/zh/topics/nip-62/">NIP-62&lt;/a>（Request to Vanish）支持（&lt;a href="https://github.com/rust-nostr/nostr/pull/1315">PR #1315&lt;/a>、&lt;a href="https://github.com/rust-nostr/nostr/pull/1316">PR #1316&lt;/a>、&lt;a href="https://github.com/rust-nostr/nostr/pull/1317">PR #1317&lt;/a>、&lt;a href="https://github.com/rust-nostr/nostr/pull/1318">PR #1318&lt;/a>）。&lt;/p>
&lt;h3 id="nostr-tools-增加-bunker-relay-控制并修复-nip-47-多-relay-解析">nostr-tools 增加 bunker relay 控制并修复 NIP-47 多 relay 解析&lt;/h3>
&lt;p>&lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a> 合并了 &lt;a href="https://github.com/nbd-wtf/nostr-tools/pull/530">PR #530&lt;/a>，为 BunkerSignerParams 增加 &lt;code>skipSwitchRelays&lt;/code> 以支持手动 relay 管理；同时还合并了 &lt;a href="https://github.com/nbd-wtf/nostr-tools/pull/529">PR #529&lt;/a>，修复 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a>（Nostr Wallet Connect）连接字符串解析，使其支持规范允许的多 relay 场景。&lt;/p>
&lt;h3 id="nostrability-集成-sherlock-审计数据并发布-schemata-概览">Nostrability 集成 Sherlock 审计数据并发布 Schemata 概览&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrability/nostrability">Nostrability&lt;/a> 这个 Nostr 客户端互操作追踪器本周合并了 14 个 PR。&lt;a href="https://github.com/nostrability/nostrability/pull/306">PR #306&lt;/a> 将 Sherlock 扫描统计整合进仪表盘。Sherlock 是 Nostrability 的自动审计工具，它连接到 Nostr 客户端，捕获其发布的 event，并用 Schemata 的 JSON Schema 定义验证每个 event 是否符合规范，以检测规范违规。仪表盘现在会展示按客户端划分的 schema 失败率（&lt;a href="https://github.com/nostrability/nostrability/pull/315">PR #315&lt;/a>），让开发者看到自己的客户端在哪些 event kind 上出错。&lt;a href="https://github.com/nostrability/nostrability/pull/323">PR #323&lt;/a> 还重构了 Nostr 发布工作流，让版本公告作为单独作业运行，不会被前面的 CI 步骤取消。&lt;/p>
&lt;p>elsat 还在 3 月 30 日发布了 &lt;a href="https://njump.me/naddr1qvzqqqr4gupzq96n3hp2vfmf6z2y8uvvxl97xk86kkalnqghx4p25lzl79c76a7yqy2hwumn8ghj7un9d3shjtnyv9kh2uewd9hj7qgwwaehxw309ahx7uewd3hkctcqz4fnx4rkw3x57nrcwdn8zt22xd982jehfptsgqtrww">Schemata for nostr devs&lt;/a>，解释 schemata、schemata-codegen 和 Sherlock 之间的关系，并给出当前覆盖数字：涵盖 65 个 NIP 的 179 个 event kind schema、154 个 tag schema、13 条协议消息以及 310 个示例 event。&lt;/p>
&lt;h3 id="nalgorithm-添加摘要生成和本地评分缓存">Nalgorithm 添加摘要生成和本地评分缓存&lt;/h3>
&lt;p>&lt;a href="https://github.com/jooray/nalgorithm">Nalgorithm&lt;/a> 是一个新的相关性排序 Nostr 信息流项目，本周开始公开开发。&lt;a href="https://github.com/jooray/nalgorithm/commit/cf6c501e754ef95a1b4fecc1a76288471a101f43">commit cf6c501&lt;/a> 搭建了初始 Web 应用，它从关注列表中抓取帖子，并根据用户定义的偏好提示对其评分。&lt;a href="https://github.com/jooray/nalgorithm/commit/8e931b6ae85d470e73603752134ff49b7ba4bb86">commit 8e931b6&lt;/a> 加入了一个 CLI 摘要工具，可以把高排名帖子转换为口语化摘要，&lt;a href="https://github.com/jooray/nalgorithm/commit/4cb9c635489a9a3429e8d71f3861dc2a11624153">commit 4cb9c63&lt;/a> 则加入了基于文件的分数缓存和基于近期点赞的增量式学习提示演化。&lt;a href="https://github.com/jooray/nalgorithm/commit/c2edfb8b89fadbe0028c3f5729bda7e23b2e3c03">commit c2edfb8&lt;/a> 还停止缓存失败批次的回退分数，以避免短暂评分失败永久压平帖子的排序。&lt;/p>
&lt;h3 id="tenex-添加-rag-向量存储和定向-mcp-启动">TENEX 添加 RAG 向量存储和定向 MCP 启动&lt;/h3>
&lt;p>&lt;a href="https://github.com/tenex-chat/tenex">TENEX&lt;/a> 是一个 Nostr 原生代理框架，通过 Telegram 将 AI 代理桥接到 Nostr 频道。本周它合并了七个 PR。&lt;a href="https://github.com/tenex-chat/tenex/pull/101">PR #101&lt;/a> 增加了可插拔的向量存储抽象，支持 SQLite-vec、LanceDB 和 Qdrant 后端，使代理在不锁定单一向量数据库的情况下获得检索增强生成。&lt;a href="https://github.com/tenex-chat/tenex/pull/102">PR #102&lt;/a> 让 MCP 启动变得定向化：只有代理实际使用到工具的 MCP 服务器才会被启动，而不是第一次执行就抢先拉起所有服务器。&lt;a href="https://github.com/tenex-chat/tenex/pull/100">PR #100&lt;/a> 加入了 &lt;code>send_message&lt;/code> 工具，使带有 Telegram 频道绑定的代理能够主动推送消息，而不仅仅是响应入站消息。&lt;a href="https://github.com/tenex-chat/tenex/pull/106">PR #106&lt;/a> 则通过直接读取 &lt;code>.git/HEAD&lt;/code> 而不是运行 &lt;code>git branch&lt;/code>，避免了一个会触发 9GB Bun/JSC 内存预分配的子进程启动。&lt;/p>
&lt;h3 id="dart-ndk-迁移-amber-signer并加入-alby-go-一键连接">Dart NDK 迁移 Amber signer，并加入 Alby Go 一键连接&lt;/h3>
&lt;p>&lt;a href="https://github.com/relaystr/ndk">Dart NDK&lt;/a> 这个 Flutter Nostr development kit 本周合并了 11 个 PR。&lt;a href="https://github.com/relaystr/ndk/pull/525">PR #525&lt;/a> 将 Amber signer 支持迁移到 ndk_flutter 包中，&lt;a href="https://github.com/relaystr/ndk/pull/552">PR #552&lt;/a> 则在示例应用中加入了 Alby Go 一键钱包连接。&lt;a href="https://github.com/relaystr/ndk/pull/502">PR #502&lt;/a> 为 CLI 增加了 install.sh 脚本，&lt;a href="https://github.com/relaystr/ndk/pull/523">PR #523&lt;/a> 则移除了 Rust verifier 依赖，改为使用原生 asset 处理。&lt;/p>
&lt;h2 id="protocol-and-spec-work">Protocol and Spec Work&lt;/h2>
&lt;h3 id="marmot-将-keypackages-迁移到可寻址事件并收紧推送通知格式">Marmot 将 KeyPackages 迁移到可寻址事件，并收紧推送通知格式&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/marmot">Marmot 规范&lt;/a> 本周合并了四个 PR，改变了协议处理密钥材料和群组成员关系的方式。&lt;a href="https://github.com/marmot-protocol/marmot/pull/54">PR #54&lt;/a> 将 KeyPackage event 从普通 &lt;code>kind:443&lt;/code> 迁移到带有 &lt;code>d&lt;/code> tag 的可寻址 &lt;code>kind:30443&lt;/code>，从而消除了密钥轮换期间依赖 &lt;a href="https://nostrcompass.org/zh/topics/nip-09/">NIP-09&lt;/a> 事件删除的需要。可寻址事件会原地覆盖，使轮换成为自包含流程。&lt;a href="https://github.com/marmot-protocol/marmot/pull/57">PR #57&lt;/a> 允许非管理员用户提交 SelfRemove 提案（主动退出群组），&lt;a href="https://github.com/marmot-protocol/marmot/pull/62">PR #62&lt;/a> 则要求管理员在使用 SelfRemove 之前先放弃管理员身份，避免管理员在仍持有提升权限的情况下直接消失。&lt;/p>
&lt;p>&lt;a href="https://github.com/marmot-protocol/marmot/pull/61">PR #61&lt;/a> 还收紧了 &lt;a href="https://nostrcompass.org/zh/topics/mip-05/">MIP-05&lt;/a> 推送通知格式，明确了单 blob base64 编码、版本、token wire format 以及 x-only key 的使用方式。其结果是，在规范、客户端库和应用后端之间，token blob 与 x-only key 现在拥有一套明确定义的 wire 表示。本周这些规范变更的实现已经落地到 White Noise 栈中，并在上文的 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#white-noise-%e4%bf%ae%e5%a4%8d-relay-%e6%8a%96%e5%8a%a8%e5%b9%b6%e6%89%a9%e5%b1%95%e5%ae%a2%e6%88%b7%e7%ab%af%e6%8e%a7%e5%88%b6">White Noise v2026.3.23 部分&lt;/a>中介绍。&lt;/p>
&lt;h3 id="nip-更新">NIP 更新&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>的最新变更：&lt;/p>
&lt;p>&lt;strong>已合并：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/5A.md">NIP-5A&lt;/a>：静态网站&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/1538">PR #1538&lt;/a>）：定义 kind &lt;code>15128&lt;/code>（根网站）和 kind &lt;code>35128&lt;/code>（命名网站）清单 event，用于在 Nostr 密钥对下基于 Blossom 存储托管静态网站。详见&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#nip-%e6%b7%b1%e5%ba%a6%e8%a7%a3%e6%9e%90nip-5a%e9%9d%99%e6%80%81%e7%bd%91%e7%ab%99">下方深度解析&lt;/a>。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-30/">NIP-30&lt;/a>（自定义表情）：允许短代码中使用连字符&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2297">PR #2297&lt;/a>）：更新短代码描述，将连字符纳入允许范围。带连字符的短代码自该 NIP 引入以来就已在实践中使用，因此规范现在只是将现有实践正式记录下来。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>开放 PR 和讨论：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>NIP-C1：Agent TUI Messages&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2295">PR #2295&lt;/a>）：提出一种结构化消息格式，使代理能够通过加密 DM 发送带交互 UI 元素的内容，包括类型化的 &lt;code>text&lt;/code>、&lt;code>buttons&lt;/code>、&lt;code>card&lt;/code> 和 &lt;code>table&lt;/code> 载荷。草案将一切放在现有 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/topics/nip-04/">NIP-04&lt;/a> 私信内容中的 JSON 里，不定义新的 event kind，并为按钮响应采用简单的回调字符串格式。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-95：混合式点对点 relay 协议&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2293">PR #2293&lt;/a>）：提出一种混合 relay 模型，其中 relay 仍然是权威节点，但也可以协调通过 WebRTC 在 peer 间分发近期 event。草案引入了 &lt;code>PEER_REGISTER&lt;/code>、&lt;code>PEER_REQUEST&lt;/code> 和 &lt;code>PEER_OFFER&lt;/code> 等 relay 消息，由稳定客户端担任 Super Peer，relay 作为种子节点和回退节点。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-B9：Zap Poll Events&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2284">PR #2284&lt;/a>）：在 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/88.md">NIP-88&lt;/a>（投票）覆盖免费投票之后，重新开启旧的 NIP-69 zap 投票思路。草案使用 kind &lt;code>6969&lt;/code> 定义投票，用 kind &lt;code>9734&lt;/code> 的 zap 作为投票，从而形成带经济型 Sybil 抵抗的付费投票系统，与免费的一钥一票模型互补。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-AD：Super Zap&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2289">PR #2289&lt;/a>）：提出一种约定，将发送给 relay pubkey 或客户端 pubkey 的 zap 显示为特殊的推广笔记，本质上将 zap receipt 变成广告位。relay 运营者和客户端会发布带 &lt;code>lud16&lt;/code> 的资料，抓取这些 receipt，提取 zap 描述中的嵌入内容，并可选设置最低 sats 阈值以抑制垃圾信息。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-XX：代理信誉证明&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2285">PR #2285&lt;/a>）：提议 kind &lt;code>30085&lt;/code> 作为参数化可替换 event，用于记录关于 Nostr 代理的结构化信誉证明。草案通过让信誉依赖观察者来避免单一全局分数，引入时间衰减使旧证明逐渐失效，支持带证据要求的负面评价，并草拟了简单加权评分和图多样性评分两种方式，以提高 Sybil 抵抗能力。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-XX：付费 API 服务公告&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2291">PR #2291&lt;/a>）：提议 kind &lt;code>31402&lt;/code> 可寻址 event，用于广告式发布付费 HTTP API，由 Nostr 负责发现，由 HTTP 402 负责支付处理。草案采用 tags-first 设计，使 relay 无需解析 JSON 内容就能按支付方式、价格和能力过滤，同时允许可选的请求和响应 schema，以便客户端或代理自动生成调用。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-XX：通过 SplitSig 从 LNURL-auth 推导密钥&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2294">PR #2294&lt;/a>）：提议从 LNURL-auth 的 ECDSA 签名与客户端随机 nonce 联合推导 Nostr 密钥对，公式为 &lt;code>nsec = SHA256(ecdsa_signature || nonce)&lt;/code>。服务器看得到 ECDSA 签名（这是 LNURL-auth 握手天然的一部分），但看不到 nonce；浏览器生成 nonce，但无法控制签名。单独任一部分都无法导出 nsec。其目标是让同一个 Lightning 钱包在不同设备上生成同一个 Nostr 密钥，并以钱包作为恢复锚点，而任何服务器都无法重建该私钥。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a>：记录 rejected 字段&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2290">PR #2290&lt;/a>）：把 intent 式签名器响应中的 &lt;code>rejected&lt;/code> 字段正式写入文档，也就是 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#amethyst-%e5%8f%91%e5%b8%83%e5%9b%ba%e5%ae%9a%e7%ac%94%e8%ae%b0relay-%e7%ae%a1%e7%90%86%e5%92%8c-request-to-vanish">Amethyst v1.07.x 修复&lt;/a> 所绕开的那种行为。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-深度解析nip-5a静态网站">NIP 深度解析：NIP-5A（静态网站）&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/5A.md">NIP-5A&lt;/a> 定义了如何在 Nostr 密钥对之下托管静态网站，使用两种 event kind 和现有 blob 存储基础设施，将已签名 event 变成可访问的 Web 页面。其&lt;a href="https://github.com/nostr-protocol/nips/blob/master/5A.md">规范&lt;/a> 于 3 月 25 日通过 &lt;a href="https://github.com/nostr-protocol/nips/pull/1538">PR #1538&lt;/a> 合并。&lt;/p>
&lt;p>这个模型使用 kind &lt;code>15128&lt;/code> 表示根网站，每个 pubkey 一个；使用 kind &lt;code>35128&lt;/code> 表示由 &lt;code>d&lt;/code> tag 标识的命名网站。每个清单将绝对 URL 路径映射到 SHA256 哈希。下面是一个根网站清单示例：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;5324d695ed7abf7cdd2a48deb881c93b7f4e43de702989bbfb55a1b97b35a3de&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;266815e0c9210dfa324c6cba3573b14bee49da4209a9456f9484e5106cd408a5&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1743465600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">15128&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;path&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;/index.html&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;186ea5fd14e88fd1ac49351759e7ab906fa94892002b60bf7f5a428f28ca1c99&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;path&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;/about.html&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef123456&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;path&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;/favicon.ico&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;fedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;server&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://blossom.primal.net&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;My Nostr Site&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;description&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;A static website hosted on Nostr&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;source&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://github.com/lez/nsite&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f4e4a9e785f70e9fcaa855d769438fea10781e84cd889e3fcb823774f83d094cf2c05d5a3ac4aebc1227a4ebc3d56867286c15a6df92d55045658bb428fd5fb5&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>提供服务的流程分三步。主机服务器收到 HTTP 请求，从子域中提取作者 pubkey（根网站使用 npub 作为子域，命名网站则使用 raw pubkey 的 base36 编码），通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a> 获取作者的 relay 列表，并查询网站清单。找到清单后，服务器将请求路径解析为内容哈希，从 &lt;code>server&lt;/code> tag 中列出的 Blossom 服务器下载对应 blob，然后返回给请求者。&lt;/p>
&lt;p>DNS 子域格式有严格约束。根网站直接使用标准 npub 作为子域。命名网站使用原始 pubkey 的 50 字符 base36 编码，后面拼接 &lt;code>d&lt;/code> tag 值，并全部放入单个 DNS label 中。由于 DNS label 最多 63 个字符，而 base36 编码固定占 50 个字符，所以 &lt;code>d&lt;/code> tag 最长只能是 13 个字符。规范还要求 &lt;code>d&lt;/code> tag 必须匹配 &lt;code>^[a-z0-9-]{1,13}$&lt;/code> 且不能以连字符结尾，以避免 DNS 解析歧义。&lt;/p>
&lt;p>使用内容哈希意味着同一个网站可以由不同主机服务器提供，而文件完整性也能在不信任服务器的情况下被验证。主机服务器不需要自己存储任何文件，只需按需根据清单中的哈希从 Blossom 获取文件。这意味着作者控制内容，Blossom 服务器存储原始文件，而主机服务器只是连接两者。这三者都可以被独立替换。&lt;/p>
&lt;p>现有实现包括 &lt;a href="https://github.com/lez/nsite">nsite&lt;/a>，这是一个负责解析清单并提供文件的主机服务器；以及 &lt;a href="https://github.com/hzrd149/nsite-manager">nsite-manager&lt;/a>，这是一个用于构建和发布清单的 UI。规范还增加了 &lt;code>source&lt;/code> tag，用于链接网站的源代码仓库，而在 &lt;a href="https://github.com/nostr-protocol/nips/pull/2286">PR #2286&lt;/a> 中单独合并的 README 更新则把 kind &lt;code>15128&lt;/code> 和 &lt;code>35128&lt;/code> 都登记进了 NIP kind 索引。&lt;/p>
&lt;h2 id="nip-深度解析nip-62request-to-vanish">NIP 深度解析：NIP-62（Request to Vanish）&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/62.md">NIP-62&lt;/a> 将 kind &lt;code>62&lt;/code> 定义为要求 relay 删除该请求 pubkey 所有 event 的请求。&lt;a href="https://github.com/nostr-protocol/nips/blob/master/62.md">规范&lt;/a> 的动机带有法律色彩：在存在被遗忘权法律的司法辖区，标准化、可验证签名的删除请求能给 relay 运营者一个明确的行动信号。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a7b8c9d0e1f23456789012345678901234567890abcdef1234567890abcdef12&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1e2d3c4b5a697887766554433221100ffeeddccbbaa99887766554433221100&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1743465600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">62&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;relay&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Requesting deletion of all events from this relay.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;11aa22bb33cc44dd55ee66ff77889900aabbccddeeff0011223344556677889911aa22bb33cc44dd55ee66ff77889900aabbccddeeff00112233445566778899&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>该规范区分定向 vanish 请求和全局 vanish 请求。定向请求会带具体的 &lt;code>relay&lt;/code> tag，标明哪些 relay 应执行删除。全局请求则把 &lt;code>relay&lt;/code> tag 的值写成字面量 &lt;code>ALL_RELAYS&lt;/code>，请求任何看到该 event 的 relay 删除这个 pubkey 的所有 event。选择遵从的 relay 还必须确保这些已删除 event 不会再次被广播回该 relay，也就是让删除具有粘性。&lt;/p>
&lt;p>NIP-62 在范围和意图上都超越了 &lt;a href="https://nostrcompass.org/zh/topics/nip-09/">NIP-09&lt;/a>（事件删除）。NIP-09 允许你删除单个 event，而 relay 可以选择是否遵从。NIP-62 请求删除一切，而规范要求只要 relay URL 被 tag 出来，该 relay 就必须遵从。它还要求 relay 删除对请求方 pubkey 带有 p-tag 的 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a>（Gift Wrap）event，这意味着收到的私信也会和用户自己的 event 一起清理掉。对一个 NIP-62 vanish 请求再发布 NIP-09 删除没有任何效果：一旦 vanish，就不能通过删除 vanish 请求来“取消 vanish”。&lt;/p>
&lt;p>本周，&lt;a href="https://nostrcompass.org/zh/newsletters/2026-04-01-newsletter/#amethyst-%e5%8f%91%e5%b8%83%e5%9b%ba%e5%ae%9a%e7%ac%94%e8%ae%b0relay-%e7%ae%a1%e7%90%86%e5%92%8c-request-to-vanish">Amethyst v1.07.0&lt;/a> 已经发布了客户端侧的 NIP-62 支持，让用户可以在应用里发起 vanish 请求。在 relay 侧，&lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> 有四个开放 PR，分别为内存、LMDB、SQLite 和数据库测试后端增加 NIP-62 支持（&lt;a href="https://github.com/rust-nostr/nostr/pull/1315">PR #1315&lt;/a>、&lt;a href="https://github.com/rust-nostr/nostr/pull/1316">PR #1316&lt;/a>、&lt;a href="https://github.com/rust-nostr/nostr/pull/1317">PR #1317&lt;/a>、&lt;a href="https://github.com/rust-nostr/nostr/pull/1318">PR #1318&lt;/a>）。这让客户端支持和 relay 支持在同一周内形成呼应。&lt;/p>
&lt;p>这项协议设计带来一个现实张力。Nostr 的价值主张之一是抗审查，即 relay 不应阻止内容发布。而 NIP-62 引入了一种情况：relay 必须阻止某个特定 pubkey 的内容再次发布。这两种属性之所以能共存，是因为该请求是自我定向的：你要求删除的是你自己的 event，而不是别人的。除非用户明确选择退出，否则抗审查特性对其他所有人仍然完整保留。&lt;/p>
&lt;hr>
&lt;p>本周就到这里。正在构建什么，或者有新闻想分享？&lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a>（私密私信）联系我们&lt;/a>，或者直接在 Nostr 上找到我们。&lt;/p></content:encoded></item><item><title>Nostr Compass #15</title><link>https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/</link><pubDate>Wed, 25 Mar 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> 在其 3.0 钱包版本之后继续推进&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#primal-%e6%b7%bb%e5%8a%a0-follow-packszap-%e5%a2%9e%e5%bc%ba%e5%92%8c%e6%b7%b1%e5%b1%82%e9%93%be%e6%8e%a5">Follow Packs、zap 增强和 &lt;code>primalconnect://&lt;/code> 深层链接&lt;/a>。&lt;a href="https://github.com/BigBrotr/bigbrotr">BigBrotr&lt;/a> 发布了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#bigbrotr-%e7%bb%98%e5%88%b6-relay-%e7%bd%91%e7%bb%9c%e4%b8%ad%e7%9a%84%e7%a7%81%e9%92%a5%e6%9a%b4%e9%9c%b2%e6%83%85%e5%86%b5">nsec 泄露分析&lt;/a>，扫描了 1,085 个 relay 上的 4,100 万个 event，发现 16,599 个有效私钥，而 &lt;a href="https://npub.world">npub.world&lt;/a> 也在同一周把泄露警告集成到了个人资料页面。Martti Malmi 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#nostr-vpn-%e4%bd%9c%e4%b8%ba-tailscale-%e6%9b%bf%e4%bb%a3%e6%96%b9%e6%a1%88%e5%90%af%e5%8a%a8">nostr-vpn&lt;/a>，这是一个通过 Nostr relay 传递信令并建立 WireGuard 隧道的 Tailscale 替代方案，七天内发布了 11 个版本。&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> 团队将&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#%e5%bc%80%e6%ba%90-doom-%e9%80%9a%e8%bf%87-nostr-%e5%ae%9e%e7%8e%b0%e7%82%b9%e5%af%b9%e7%82%b9%e8%bf%90%e8%a1%8c">点对点 DOOM&lt;/a>开源，&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#fips-v020-%e5%8f%91%e5%b8%83-tor-%e4%bc%a0%e8%be%93%e5%8f%af%e5%a4%8d%e7%8e%b0%e6%9e%84%e5%bb%ba%e5%92%8c-sidecar-%e7%a4%ba%e4%be%8b">v0.2.0&lt;/a>，&lt;a href="https://github.com/nostrability/schemata">Nostrability Schemata&lt;/a> 则在一周内扩展到了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#nostrability-schemata-%e8%bd%ac%e5%90%91%e5%a4%9a%e8%af%ad%e8%a8%80">六种语言&lt;/a>。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="primal-添加-follow-packszap-增强和深层链接">Primal 添加 Follow Packs、zap 增强和深层链接&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-18-newsletter/">继上周对 3.0.7 的报道之后&lt;/a>，&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> 本周继续做发布后的工作，重点放在引导流程、编辑器 UX 和钱包上下文上。重新设计的引导流程引入了 Follow Packs（&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/949">PR #949&lt;/a>），笔记编辑器加入了原生 GIF 按钮，zap 增强服务（&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/979">PR #979&lt;/a>）会为钱包交易补充 zap 上下文，而 &lt;code>primalconnect://&lt;/code> 深层链接协议（&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/969">PR #969&lt;/a>）则支持跨应用导航。&lt;/p>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-ios-app">Primal iOS&lt;/a> 也通过 TestFlight 并行推出同样的工作，钱包切换（&lt;a href="https://github.com/PrimalHQ/primal-ios-app/pull/191">PR #191&lt;/a>）、投票实现和引导流程重构都在同一时间窗口落地。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> 在其 3.0 钱包版本之后继续推进&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#primal-%e6%b7%bb%e5%8a%a0-follow-packszap-%e5%a2%9e%e5%bc%ba%e5%92%8c%e6%b7%b1%e5%b1%82%e9%93%be%e6%8e%a5">Follow Packs、zap 增强和 &lt;code>primalconnect://&lt;/code> 深层链接&lt;/a>。&lt;a href="https://github.com/BigBrotr/bigbrotr">BigBrotr&lt;/a> 发布了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#bigbrotr-%e7%bb%98%e5%88%b6-relay-%e7%bd%91%e7%bb%9c%e4%b8%ad%e7%9a%84%e7%a7%81%e9%92%a5%e6%9a%b4%e9%9c%b2%e6%83%85%e5%86%b5">nsec 泄露分析&lt;/a>，扫描了 1,085 个 relay 上的 4,100 万个 event，发现 16,599 个有效私钥，而 &lt;a href="https://npub.world">npub.world&lt;/a> 也在同一周把泄露警告集成到了个人资料页面。Martti Malmi 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#nostr-vpn-%e4%bd%9c%e4%b8%ba-tailscale-%e6%9b%bf%e4%bb%a3%e6%96%b9%e6%a1%88%e5%90%af%e5%8a%a8">nostr-vpn&lt;/a>，这是一个通过 Nostr relay 传递信令并建立 WireGuard 隧道的 Tailscale 替代方案，七天内发布了 11 个版本。&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> 团队将&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#%e5%bc%80%e6%ba%90-doom-%e9%80%9a%e8%bf%87-nostr-%e5%ae%9e%e7%8e%b0%e7%82%b9%e5%af%b9%e7%82%b9%e8%bf%90%e8%a1%8c">点对点 DOOM&lt;/a>开源，&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#fips-v020-%e5%8f%91%e5%b8%83-tor-%e4%bc%a0%e8%be%93%e5%8f%af%e5%a4%8d%e7%8e%b0%e6%9e%84%e5%bb%ba%e5%92%8c-sidecar-%e7%a4%ba%e4%be%8b">v0.2.0&lt;/a>，&lt;a href="https://github.com/nostrability/schemata">Nostrability Schemata&lt;/a> 则在一周内扩展到了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#nostrability-schemata-%e8%bd%ac%e5%90%91%e5%a4%9a%e8%af%ad%e8%a8%80">六种语言&lt;/a>。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="primal-添加-follow-packszap-增强和深层链接">Primal 添加 Follow Packs、zap 增强和深层链接&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-18-newsletter/">继上周对 3.0.7 的报道之后&lt;/a>，&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> 本周继续做发布后的工作，重点放在引导流程、编辑器 UX 和钱包上下文上。重新设计的引导流程引入了 Follow Packs（&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/949">PR #949&lt;/a>），笔记编辑器加入了原生 GIF 按钮，zap 增强服务（&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/979">PR #979&lt;/a>）会为钱包交易补充 zap 上下文，而 &lt;code>primalconnect://&lt;/code> 深层链接协议（&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/969">PR #969&lt;/a>）则支持跨应用导航。&lt;/p>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-ios-app">Primal iOS&lt;/a> 也通过 TestFlight 并行推出同样的工作，钱包切换（&lt;a href="https://github.com/PrimalHQ/primal-ios-app/pull/191">PR #191&lt;/a>）、投票实现和引导流程重构都在同一时间窗口落地。&lt;/p>
&lt;h3 id="bigbrotr-绘制-relay-网络中的私钥暴露情况">BigBrotr 绘制 relay 网络中的私钥暴露情况&lt;/h3>
&lt;p>&lt;a href="https://github.com/BigBrotr/bigbrotr">BigBrotr&lt;/a> 这个 Nostr relay 分析平台发布了一篇关于 relay 网络中私钥暴露的&lt;a href="https://bigbrotr.com/blog/exposed-nsec-analysis/">详细分析&lt;/a>。研究扫描了来自 1,085 个 relay 的 4,100 万个 event，搜索嵌在 event 内容中的有效 nsec 字符串，发现了 16,599 个有效私钥。这个数字看起来很惊人，但在过滤掉占匹配结果 92% 的机器人 “Mr.nsec” 之后，真正暴露密钥的真实账户只有 38 个，这些账户的总关注者超过 21,000，而且没有迹象表明他们知道自己的密钥已经公开。&lt;/p>
&lt;p>团队还将 nsec-leak-checker 做成了一个 &lt;a href="https://nostrcompass.org/zh/topics/nip-90/">NIP-90&lt;/a>（Data Vending Machine）服务，让用户能够在不向检查器泄露私钥的前提下检查自己的私钥是否出现在扫描数据集中。&lt;a href="https://npub.world">npub.world&lt;/a> 在同一周整合了泄露数据，在检测到暴露密钥的个人资料页上显示警告横幅。这个组合既给 DVM 和代理提供了程序化接口，也给普通用户提供了可读的警告。底层数据集还被用于 &lt;a href="https://github.com/BigBrotr/bigbrotr/releases/tag/v6.4.0">BigBrotr v6.4.0&lt;/a>，该版本增加了可替换和可寻址 event 的物化视图，并修复了同步器空闲超时问题。&lt;/p>
&lt;h3 id="nostr-vpn-作为-tailscale-替代方案启动">Nostr VPN 作为 Tailscale 替代方案启动&lt;/h3>
&lt;p>Iris 的作者 Martti Malmi（mmalmi）构建并发布了 &lt;a href="https://github.com/mmalmi/nostr-vpn">nostr-vpn&lt;/a>，这是一个点对点 VPN，使用 Nostr relay 传递信令，并使用 WireGuard（通过 boringtun）建立加密隧道。其动机非常直接：“受够了 Tailscale 需要第三方账户，所以我做了 Nostr VPN。” 这个工具使用 Nostr 密钥对作为身份，在设备之间建立网状网络，不依赖中心协调服务器。&lt;/p>
&lt;p>该项目在七天内发布了 11 个版本，从 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.2">v0.2.2&lt;/a> 到 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.13">v0.2.13&lt;/a>。这轮冲刺添加了 Windows 支持、用于本地网络发现的 LAN 配对，以及面向移动设备的 Android sidecar。其架构很简单：两台设备通过 Nostr relay 交换连接元数据，然后建立直接的 WireGuard 隧道。Nostr 负责发现和 NAT 穿透信令，WireGuard 负责实际流量，身份则是一个 Nostr 密钥对。&lt;/p>
&lt;p>Malmi 同时还在继续推进 &lt;a href="https://github.com/mmalmi/nostr-double-ratchet">nostr-double-ratchet&lt;/a>，这是一个类似 Signal 的安全消息通道库，并在同一周内从 &lt;a href="https://github.com/mmalmi/nostr-double-ratchet/releases/tag/v0.0.86">v0.0.86&lt;/a> 发布到 &lt;a href="https://github.com/mmalmi/nostr-double-ratchet/releases/tag/v0.0.93">v0.0.93&lt;/a>。&lt;/p>
&lt;h3 id="开源-doom-通过-nostr-实现点对点运行">开源 DOOM 通过 Nostr 实现点对点运行&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> 团队开源了一个点对点多人 DOOM 实现，它使用 Nostr 做 peer 发现，使用 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 做端到端加密，使用来自 n0 的 QUIC 网络库 &lt;a href="https://github.com/n0-computer/iroh">Iroh&lt;/a> 做 gossip 传输。游戏以 4.2 MB 的 WebXDC 文件形式发布，可以作为聊天消息中的附件发送，不需要任何服务器来托管或协调比赛。&lt;/p>
&lt;p>技术上，这个实现用实时混合同步模型替代了 1993 年原始的 lockstep 网络代码。玩家通过 Nostr relay 查询彼此发现，通过 Marmot 加密通道协商会话，然后将低延迟游戏流量切换到 Iroh 的 QUIC gossip 层。整个栈里，Nostr 负责发现，Marmot 负责加密，Iroh 负责传输。&lt;/p>
&lt;p>Vector 本周还发布了安全加固内容。新版本加入了带有反调试保护和 zeroize 的内存加固密钥库、完整 DM 和群组消息过滤的用户屏蔽，以及针对 Mini Apps 的 WebXDC 实时通道修复。&lt;/p>
&lt;h3 id="fips-v020-发布-tor-传输可复现构建和-sidecar-示例">FIPS v0.2.0 发布 Tor 传输、可复现构建和 sidecar 示例&lt;/h3>
&lt;p>&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> 是 Free Internetworking Peering System，也是一个贴近 Nostr 的网状网络项目，它发布了 &lt;a href="https://github.com/jmcorgan/fips/releases/tag/v0.2.0-rel">v0.2.0&lt;/a>。该版本增加了用于匿名化网状链路的 Tor 传输支持、可复现构建、一个通过 Nostr relay 连接的 sidecar 示例，以及 OpenWrt 包工作流中的 Nostr 版本发布。该版本还修复了 drain-window frame 引发的 rekey 后抖动峰值。由于 wire format 已从 v0.1.0 变更，现有 v0.1.0 节点若不升级将无法与 v0.2.0 互操作。&lt;/p>
&lt;h3 id="nostrability-schemata-转向多语言">Nostrability Schemata 转向多语言&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrability/schemata">Nostrability Schemata&lt;/a> 项目维护着用于验证 Nostr event kind 的 JSON Schema 定义，它在一周内从仅 JavaScript 扩展到六种语言。Rust、Go、Dart、Swift 和 Python 的新包都已发布，每种语言都同时提供数据包和验证器。&lt;a href="https://github.com/nostrability/schemata/releases/tag/v0.2.6">v0.2.6&lt;/a> 还新增了 17 个 event kind schema。&lt;/p>
&lt;p>&lt;a href="https://nostrability.github.io/nostrability/">Nostrability 互操作追踪器&lt;/a> 也同步完成了一次改造。新的 What&amp;rsquo;s New 标签通过 Atom feed 和 Nostr event 双重发布更新，应用分类过滤允许访问者深入查看特定客户端类型，追踪器现在还会根据 GitHub 仓库元数据自动检测编程语言。Nostrability 现在也有了自己的 npub，使项目本身能通过它所记录的协议被发现。对于跨语言工作的库作者来说，多语言 schema 包意味着同一套 event kind 定义可以作为原生导入使用，而不必由每个项目各自维护一份 schema 副本。&lt;/p>
&lt;h2 id="版本发布">版本发布&lt;/h2>
&lt;h3 id="amethyst-v1060-and-v1061">Amethyst v1.06.0 and v1.06.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 于 3 月 23 日发布了 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.0">v1.06.0&lt;/a> 和 &lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.06.1">v1.06.1&lt;/a>。最显眼的功能是使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-85/">NIP-85&lt;/a>（可信断言）数据进行加权投票的投票支持，同时重新设计了普通投票卡片和 zap 投票卡片。新的渲染方式让标准投票和 zap 加权投票都拥有更清晰的视觉布局。v1.06.1 随后修复了并发修改导致的崩溃，解决了投票渲染路径引入的稳定性回退问题。&lt;/p>
&lt;h3 id="amber-v500-and-v501">Amber v5.0.0 and v5.0.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 这个 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a>（Android 签名器应用）签名器，将近期 4.1.x 的预发布工作提升为稳定版，于 3 月 18 日发布了 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v5.0.0">v5.0.0&lt;/a>。这个稳定版包含了上周报道的 &lt;a href="https://nostrcompass.org/zh/topics/nip-42/">NIP-42&lt;/a> relay-auth、内置 Tor、按内容类型划分的权限以及加密 PIN 存储变更。随后发布的 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v5.0.1">v5.0.1&lt;/a> 则从离线构建变体中移除了 internet 权限，使该构建在 Android 权限层无法再发起网络请求。&lt;/p>
&lt;h3 id="mostro-v0170-and-mostro-mobile-v122">Mostro v0.17.0 and Mostro Mobile v1.2.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> 这个构建在 Nostr 上的点对点 Bitcoin 交易所，于 3 月 18 日发布了 &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.17.0">v0.17.0&lt;/a>。服务器版本延续了 v0.16.x 周期中的争议和评分工作，为买卖双方增加了更完整的交易信誉数据，并将其作为 Nostr event 发布。&lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a> 这个 Flutter 客户端则在 3 月 23 日跟进发布了 &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.2">v1.2.2&lt;/a>，保持移动界面与最新协议变更同步。&lt;/p>
&lt;h3 id="shosho-v0140">Shosho v0.14.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a> 这个 Nostr 直播应用于 3 月 19 日发布了 &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.14.0">v0.14.0&lt;/a>，并同时推出了 Shosho Shop。这个版本在个人资料页添加了 Shop 标签页、在 Browse 中加入 Shop，并在直播和剪辑中加入 In-Live Shop 按钮。发布说明称现有的“Nostr products”会自动显示，买家点击后会跳转到卖家的 Plebeian Market 页面购买。Shosho 的发布说明没有指明使用的列表 event kind，因此目前还无法确认 Shosho Shop 是否读取了 &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> README 中明确支持的同一套 &lt;a href="https://nostrcompass.org/zh/topics/nip-99/">NIP-99&lt;/a> 分类列表。&lt;/p>
&lt;h3 id="applesauce-v520">Applesauce v5.2.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/applesauce">Applesauce&lt;/a> 是 hzrd149 为构建 Nostr 应用维护的一组辅助包集合，它在 3 月 22 日发布了 &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core@5.2.0">v5.2.0&lt;/a>。这个版本跨越六个包。SQLite 包修复了 event tag 上的 UNIQUE 约束冲突问题，该问题会导致重复插入。signers 包增加了 &lt;code>AndroidNativeSigner&lt;/code>，将 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 原生 Android 签名器接口封装起来，使基于 web-view 的应用无需自定义 bridge 代码就能使用硬件支持签名。relay 包在 relay 和池状态对象中增加了 &lt;code>challenge&lt;/code> 字段，用于追踪 &lt;a href="https://nostrcompass.org/zh/topics/nip-42/">NIP-42&lt;/a> auth 状态，让应用在 relay 请求认证时能以编程方式响应。core 包增加了 &lt;code>isEventPointerSame&lt;/code> 和 &lt;code>isAddressPointerSame&lt;/code> 方法，用于去重 event 引用，common 包则增加了 &lt;code>user.blossomServers$&lt;/code>，用于解析用户的 Blossom 媒体服务器。Applesauce 为 noStrudel、Satellite 和多个 Web 客户端提供支撑，因此这些修复会传播到整个 Web 客户端层。&lt;/p>
&lt;h3 id="wisp-一周内发布-16-个版本">Wisp 一周内发布 16 个版本&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a> 这个 Android Nostr 客户端本周从 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.9.3-beta">v0.9.3-beta&lt;/a> 一直发布到 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.13.1-beta">v0.13.1-beta&lt;/a>，共计 16 个版本。新增功能包括多账户支持、降低打扰的 zen 通知模式、草稿和定时发帖、安全内容过滤以及新的 flame 图标。&lt;/p>
&lt;h3 id="manent-v120">Manent v1.2.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/dtonon/manent">Manent&lt;/a> 这个私密加密笔记和文件存储应用于 3 月 20 日发布了 &lt;a href="https://github.com/dtonon/manent/releases/tag/v1.2.0">v1.2.0&lt;/a>。该版本增加了应用内直接拍照、上传前缩放图片以降低存储成本，以及查看已存图片时的双指缩放。Manent 使用用户的密钥对将笔记和文件加密后存储在 Nostr relay 上，因此手机或桌面应用只是一个可以从 relay 数据重建全部状态的薄客户端。&lt;/p>
&lt;h3 id="divine-107">diVine 1.0.7&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a> 这个短视频客户端于 3 月 21 日发布了 &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.7">1.0.7&lt;/a>，增加了在视频卡住时自动恢复播放的 watchdog。在 &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/#divine-ships-v106-with-e2e-test-infrastructure-and-nip-49-import">v1.0.6&lt;/a> 中加入 E2E 测试基础设施和直接 MP4 加载之后，这个版本针对的是剩下的那条播放失败路径：视频中途停止但不抛出错误。&lt;/p>
&lt;h3 id="alby-extension-v3142">Alby Extension v3.14.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/getAlby/lightning-browser-extension">Alby Extension&lt;/a> 这个 &lt;a href="https://nostrcompass.org/zh/topics/nip-07/">NIP-07&lt;/a>（浏览器扩展签名器）扩展于 3 月 18 日发布了 &lt;a href="https://github.com/getAlby/lightning-browser-extension/releases/tag/v3.14.2">v3.14.2&lt;/a>，增加了 Lightning 地址二维码显示和 Schnorr 签名支持。Schnorr 的加入使浏览器扩展与 Nostr 原生使用的 secp256k1 签名方案保持一致。&lt;/p>
&lt;h3 id="noornote-v065-through-v0611">NoorNote v0.6.5 through v0.6.11&lt;/h3>
&lt;p>&lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a> 这个记笔记应用从 &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.6.5">v0.6.5&lt;/a> 到 &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.6.11">v0.6.11&lt;/a> 发布了七个版本。最重要的新内容是 Follow Packs，也就是经过策展的账户集合，用户可以批量浏览和订阅，类似 Twitter Lists，但专门为引导流程设计。用户可以创建、编辑和分享带有自定义标题、描述和封面图的 Follow Packs。这一系列版本还将底层 Nostr 库从 NDK v2 升级到 v3，从而改进 relay 连接处理和订阅管理。图片笔记和重新设计的 relay 连接体验也构成了这轮更新的一部分。&lt;/p>
&lt;h3 id="nak-v0191-and-v0192">nak v0.19.1 and v0.19.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a> 是 fiatjaf 的命令行 Nostr 工具包，用于与 relay 交互、编码和解码 &lt;a href="https://nostrcompass.org/zh/topics/nip-19/">NIP-19&lt;/a>（Bech32 编码实体）标识符、签署 event 以及查询 relay 数据。它于 3 月 17 日和 20 日发布了 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.1">v0.19.1&lt;/a> 和 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.2">v0.19.2&lt;/a>。这两个小版本延续了上周 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-18-newsletter/">v0.19.0&lt;/a> 中加入的群组论坛 UI 工作。&lt;/p>
&lt;h3 id="calendar-by-form-v021">Calendar by Form* v0.2.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Form*&lt;/a> 这个基于 &lt;a href="https://nostrcompass.org/zh/topics/nip-52/">NIP-52&lt;/a>（日历事件）构建的去中心化日历应用，于 3 月 20 日发布了 &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v0.2.1">v0.2.1&lt;/a>。这个版本修复了影响事件提醒的通知模板问题。Calendar 将事件存储为 Nostr kind 31922（按日期）和 kind 31923（按时间）event，因此任何愿意支持这些 kind 的 Nostr 客户端都可以渲染日历数据。该应用由 Formstr 团队构建，他们也维护 Formstr（去中心化表单）和 Pollerama（投票）。&lt;/p>
&lt;h3 id="nym-v350-through-v353">NYM v3.50 through v3.53&lt;/h3>
&lt;p>&lt;a href="https://github.com/Spl0itable/NYM">NYM&lt;/a> 这个与 Bitchat 桥接的轻量级短暂聊天客户端，从 v3.50 到 v3.53 共发布了 28 个版本（补丁版本号增长很快）。其中最值得注意的功能是 Nymbot，它是一个内置聊天机器人，会响应频道中的 &lt;code>@nymbot&lt;/code> 提及，并提供 relay 状态和管理功能。“hardcore mode” 会为每条发出的消息生成一个全新的密钥对，使会话线程在身份层面无法关联。权衡也很清楚：你失去了持久身份，但获得了按消息粒度的匿名性。relay 代理层本周也有工作推进，包括分片 relay 代理 worker 以提升连接性、geohash 频道支持以及对系统时钟不精确节点的时钟偏差容忍。&lt;/p>
&lt;h2 id="项目更新">项目更新&lt;/h2>
&lt;h3 id="ditto-添加-bluesky-桥接和-wikipedia-集成">Ditto 添加 Bluesky 桥接和 Wikipedia 集成&lt;/h3>
&lt;p>&lt;a href="https://github.com/soapbox-pub/ditto">Ditto&lt;/a> 是 Soapbox 团队可定制的 Nostr 社交客户端，本周在三个不同功能方向上记录了 300 多次提交。第一条线是 Bluesky 桥接（19 次提交），它将 Bluesky 帖子以内联完整信息流线程的方式渲染出来，在侧边栏加入由官方 Discover（whats-hot）信息流支撑的 Bluesky 发现页面导航，并接入评论、分享、反应和复制链接等操作按钮。当用户在 Ditto 中回复 Bluesky 帖子时，编辑弹窗会显示免责声明，提示该交互具有跨协议性质。&lt;a href="https://nostrcompass.org/zh/topics/nip-73/">NIP-73&lt;/a>（外部内容 ID）的 kind 17 反应支撑了这种跨协议模型：Nostr 用户对 Bluesky 帖子做出反应，而该反应会被存储为一个引用外部内容标识符的标准 Nostr event。这也是同一种 NIP-73 模式，可以桥接任何外部内容的反应，从 Bluesky 帖子到 YouTube 视频再到网页。&lt;/p>
&lt;p>第二条线是 Wikipedia 集成（9 次提交）。Ditto 现在会在详情页渲染丰富的 Wikipedia 文章内容，而不是通用链接预览，加入带文章缩略图的搜索自动补全，并提供一个 &lt;code>/wikipedia&lt;/code> 页面，从 Wikipedia API 拉取精选内容。Wikipedia 和 Archive.org 的结果也会出现在通用搜索自动补全下拉菜单中。第三条线是通过 Capacitor 提供 iOS 平台支持，远程构建脚本和平台配置与一次 UI 大改同时落地（55 次提交），用新的基于弧线的导航设计替换了应用所有页面的毛玻璃头部。总计 314 次提交推动 Ditto 从纯 Nostr 客户端走向一个多协议聚合器，将 Bluesky 和 Wikipedia 与 Nostr 信息流并列为一等内容源。&lt;/p>
&lt;h3 id="pika-构建-nip-34-forge-ci-管道">Pika 构建 NIP-34 forge CI 管道&lt;/h3>
&lt;p>&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a> 这个基于 Marmot 的加密消息应用，本周合并了 33 个 PR，重点围绕一个带有合并前 CI 的自托管 &lt;a href="https://nostrcompass.org/zh/topics/nip-34/">NIP-34&lt;/a> forge。这个 forge 是一层 git 托管系统，它将补丁作为 NIP-34 event 接收，在合并前运行 CI 检查，并通过 Nostr event 回传结构化状态。&lt;a href="https://github.com/sledtools/pika/pull/701">PR #701&lt;/a> 加入了基于 lane 的合并前和 nightly CI，其中 Rust、TypeScript、Apple 构建等各条代码路径在各自 lane 中独立运行，并各自给出通过或失败状态。&lt;a href="https://github.com/sledtools/pika/pull/715">PR #715&lt;/a> 将托管 CI 代理切换为 Incus OpenClaw 容器以实现隔离，&lt;a href="https://github.com/sledtools/pika/pull/733">PR #733&lt;/a> 则增加了 &lt;code>ph forge&lt;/code> CLI，用于从命令行与托管 forge 交互。配套 PR 还处理了合并所需的仓库写权限（&lt;a href="https://github.com/sledtools/pika/pull/736">PR #736&lt;/a>）、带实时状态徽章的结构化 CI 元数据（&lt;a href="https://github.com/sledtools/pika/pull/722">PR #722&lt;/a>）、Apple nightly 构建拆分（&lt;a href="https://github.com/sledtools/pika/pull/738">PR #738&lt;/a>），以及 forge 认证和分支查找修复（&lt;a href="https://github.com/sledtools/pika/pull/734">PR #734&lt;/a>）。这是首批真正建立在 NIP-34 git event 之上的可运行 CI/CD 系统之一，使基于 Nostr 的源码托管从基础补丁交换迈向开发者在 GitHub 或 GitLab 上习惯的合并加测试工作流。&lt;/p>
&lt;h3 id="nostria-添加社区代码片段和语音-event-处理">Nostria 添加社区、代码片段和语音 event 处理&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> 由 sondreb 维护，是一个跨平台 Nostr 客户端。本周它继续扩展应用界面，超越了 #14 中报道的 Web of Trust 过滤。最主要的新增内容是完整的 &lt;a href="https://nostrcompass.org/zh/topics/nip-72/">NIP-72&lt;/a>（审核社区）实现，包括社区创建、审核员和 relay 配置、带图片预览的帖子审批跟踪，以及包含 Posts 和 Moderators 标签页的专用社区页面。&lt;/p>
&lt;p>同一段开发还加入了带语法高亮编辑器的代码片段渲染和编辑、用于音频会话的语音 event 回复支持、私信的聊天 relay 设置、通过 Web Share API 进行频道分享、媒体播放器的工具栏停靠系统、最新版 Brainstorm Web of Trust 服务的应用内注册、使用 NWC 和 BOLT-11 发票在 DM 中收发资金、Nostr 原生 GIF 处理，以及更强的音乐人 RSS 导入路径，可以从播客 feed 中继承现有 Lightning 分成。&lt;/p>
&lt;h3 id="nostr-vpn-快速迭代">nostr-vpn 快速迭代&lt;/h3>
&lt;p>除了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#nostr-vpn-%e4%bd%9c%e4%b8%ba-tailscale-%e6%9b%bf%e4%bb%a3%e6%96%b9%e6%a1%88%e5%90%af%e5%8a%a8">最初的发布&lt;/a>之外，&lt;a href="https://github.com/mmalmi/nostr-vpn">nostr-vpn&lt;/a> 的提交记录揭示了真实部署中遇到的具体问题。&lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.3">v0.2.3&lt;/a> 到 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.5">v0.2.5&lt;/a> 加入了初始安装脚本和跨平台 CLI。&lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.6">v0.2.6&lt;/a> 和 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.7">v0.2.7&lt;/a> 带来了 Windows 支持，这要求为配置写入处理 UAC 路径引用，并支持由守护进程持有的配置更新。&lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.8">v0.2.8&lt;/a> 到 &lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.10">v0.2.10&lt;/a> 修复了 Windows GUI 服务动作、CLI 子进程处理以及机器范围的服务配置。&lt;a href="https://github.com/mmalmi/nostr-vpn/releases/tag/v0.2.12">v0.2.12&lt;/a> 用定时 LAN 配对替代了 LAN 发现，这是一种用户主动发起的流程，让同一本地网络中的两台设备无需 relay 信令就能完成配对。这是非常典型的早期实地测试模式：每个版本都针对一个具体部署故障，用户群足够小以支持日更迭代，而开发者本人也在各版本之间实际使用这个工具。&lt;/p>
&lt;h3 id="comet-自动化构建">Comet 自动化构建&lt;/h3>
&lt;p>&lt;a href="https://github.com/nodetec/comet">Comet&lt;/a>（前身为 Captain&amp;rsquo;s Log）是 Nodetec 的 Nostr 原生长文写作工具，本周产出了 40 多个自动化 alpha 构建。Comet 是一个桌面应用，用于编写和发布 NIP-23（长文内容）文章，支持本地草稿存储、Markdown 编辑和一键发布到用户的 relay 集合。自动化构建管道会为 main 分支上的每次提交生成一个带 tag 的版本，这使原始发布数量不能直接作为功能迭代速度的衡量指标。40 个构建真正说明的是：该应用处于持续的日常活跃开发中，每次提交都会在几分钟内被测试、打包并提供下载。&lt;/p>
&lt;h2 id="nip-更新">NIP 更新&lt;/h2>
&lt;p>3 月 17 日至 24 日期间 &lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>的最新变更：&lt;/p>
&lt;p>3 月 18 日到 3 月 24 日之间没有新的 NIP 合并。&lt;/p>
&lt;p>&lt;strong>窗口期内更新的开放 PR 和讨论：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>NIP-AA：Nostr 上的自主代理&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2259">PR #2259&lt;/a>）：提出自主代理在 Nostr 网络上运行的约定。该 PR 定义了代理如何标识自己、发现服务，以及通过 Nostr event 与其他代理和人类协调。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-50/">NIP-50&lt;/a>（搜索）：排序扩展&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2283">PR #2283&lt;/a>）：为 NIP-50 搜索查询增加排序参数，包括 top、hot、zaps 和 new。这将允许客户端直接从支持全文搜索的 relay 请求排序结果，而不是在客户端侧再排序。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-A5：WASM 程序&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2281">PR #2281&lt;/a>）：提出一种在 Nostr 上发布和发现 WebAssembly 程序的约定。WASM 二进制可以作为 Nostr event 分发，而 relay 则作为可移植可执行代码的发现层。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-CF：Combine Forces 可互操作 napps&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2277">PR #2277&lt;/a>）：定义可互操作的 Nostr 应用（“napps”）约定，使其能够跨不同客户端和服务进行功能组合。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Snapshots NIP&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2279">PR #2279&lt;/a>）：提出一种 relay 状态快照机制，用于 relay 同步和备份。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Checkpoints NIP&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2278">PR #2278&lt;/a>）：提出用于标记已知良好 relay 状态的 checkpoint event，作为 snapshots 提案的补充。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-58/">NIP-58&lt;/a>（徽章）：Badge Sets 重构&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2276">PR #2276&lt;/a>）：重构徽章集合的组织和引用方式。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a>（Relay 信息文档）：扩展&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2280">PR #2280&lt;/a>）：为 relay 信息文档增加额外字段，以提供更丰富的机器可读 relay 元数据。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nostr-五年三月回顾">Nostr 五年三月回顾&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/#five-years-of-nostr-februaries">上个月的周刊&lt;/a> 回顾了 Nostr 的各个二月如何从 NIP-01（基本协议流程）重写，推进到 Damus App Store 浪潮，再到网状网络和代理提案。本次回顾追踪 2021 年到 2026 年每一个三月发生的事情。&lt;/p>
&lt;h3 id="march-2021-two-commits">March 2021: Two Commits&lt;/h3>
&lt;p>Nostr 诞生四个月后的那个三月，协议仓库里总共只有两次提交，而且都发生在 3 月 4 日。fiatjaf &lt;a href="https://github.com/nostr-protocol/nostr/commit/dcd8cc3">添加了 nostwitter 实例链接&lt;/a>，把早期访问者指向可用部署；同时又&lt;a href="https://github.com/nostr-protocol/nostr/commit/54dfb46">在基础过滤器定义中加入了 kind&lt;/a>。第二个提交很能说明问题：在 2021 年 3 月，Nostr 甚至还不能按 kind 过滤 event。协议当时就是这么原始。整个网络只有两三个 relay，Telegram 群组是唯一协调渠道。NIPs 仓库尚不存在，协议提案还只是主 nostr 仓库中的文件。那个月唯一的提交者就是 fiatjaf。支持 VPN、多人游戏和网状网络的协议，在五年后的复杂形态，其 2021 年 3 月的全部产出还装得进一个 git diff。&lt;/p>
&lt;h3 id="march-2022-pre-damus-building">March 2022: Pre-Damus Building&lt;/h3>
&lt;p>2022 年 3 月，主协议仓库没有任何提交，开发已经完全转移到工具仓库。&lt;a href="https://github.com/fiatjaf/branle">Branle&lt;/a> 是 fiatjaf 的 Vue.js Web 客户端，当时也是主要 Nostr 界面，在那个三月有 5 次提交，包括 Docker 部署支持，以及 &lt;a href="https://nostrcompass.org/zh/topics/nip-05/">NIP-05&lt;/a>（基于 DNS 的验证）显示名修复，去掉了验证徽章中的 &lt;code>_@&lt;/code> 前缀。Robert C. Martin 的 &lt;a href="https://github.com/unclebob/more-speech">more-speech&lt;/a> 这个 Clojure 桌面客户端记录了 13 次或更多提交，加入了线程、键盘导航和编辑窗口。那个月最著名的 Nostr 开发者并不是加密领域人物，而是那位《Clean Code》销量数百万册的软件作者，用 Clojure 写了一个 Nostr 客户端。这个语言选择足以说明早期社区的气质：那是一群带着强烈偏好的程序员，为自己构建工具。&lt;/p>
&lt;p>当时 relay 网络扩展到大约 15 个 relay，活跃用户规模大致在几百人。Damus 还不存在，要到 2022 年 4 月才会创建。Nostream 也尚未出现。那个月的重点是基础设施：让已经被这个小社区日常使用的工具更可靠。&lt;/p>
&lt;h3 id="march-2023-post-explosion-infrastructure">March 2023: Post-Explosion Infrastructure&lt;/h3>
&lt;p>在 Damus App Store 浪潮以及公钥数突破 30 万之后的一个月，2023 年 3 月的主题是吸收增长。&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a> 合并了 28 个 PR，是协议历史上第二高的月度数量。&lt;a href="https://nostrcompass.org/zh/topics/nip-51/">NIP-51&lt;/a>（列表）合并，为客户端提供结构化的关注、静音和书签集合；&lt;a href="https://nostrcompass.org/zh/topics/nip-39/">NIP-39&lt;/a>（个人资料中的外部身份）落地；NIP-78（应用特定数据）为需要私有状态的应用提供了通用存储 kind；而 &lt;a href="https://nostrcompass.org/zh/topics/nip-57/">NIP-57&lt;/a>（Lightning Zaps）的重写（&lt;a href="https://github.com/nostr-protocol/nips/pull/392">PR #392&lt;/a>）则整合了 zap 流程并澄清了术语。那个月讨论最多的 PR 是一个替代 mention 处理方案（&lt;a href="https://github.com/nostr-protocol/nips/pull/381">PR #381&lt;/a>），评论超过 50 条。&lt;/p>
&lt;p>当月最具影响力的新项目是 &lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a>（Nostr Development Kit），这是一个 TypeScript 库，负责 relay 连接、event 签名、缓存和订阅管理。pablof7z 于 2023 年 3 月 16 日做了&lt;a href="https://github.com/nostr-dev-kit/ndk/commit/09e5e03">首次提交&lt;/a>，11 天后的 3 月 27 日又从头重写了一遍（“basically another initial commit”），并在 3 月 31 日前让 LNURL 和 zap 支持可用。NDK 在 15 天里从零走到可支持 zap。就在 NDK 创建五天后，3 月 21 日，Alby 团队创建了 &lt;a href="https://github.com/getAlby/nostr-wallet-connect">NWC&lt;/a>（Nostr Wallet Connect），这是 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a> 的参考实现，用于将 Lightning 钱包连接到 Nostr 应用。接下来三年 Web Nostr 开发的两大基础项目，就在同一个 30 天窗口里诞生。OpenSats 的 Nostr 资助计划当时还未启动，第一波要等到四个月后的 &lt;a href="https://opensats.org/blog/nostr-grants-july-2023">2023 年 7 月&lt;/a>。&lt;/p>
&lt;p>同月其他值得注意的新项目还包括 NostrGit、NostrChat、LNbits 的 nostr-signing-device 项目和 nostrmo。&lt;a href="https://github.com/mikedilger/gossip">Gossip&lt;/a> 这个专注智能 relay 选择的 Rust 桌面客户端则发布了三个版本。当时的协议处于全面建设阶段，而 2023 年 3 月创造的这些工具在三年后仍在使用。&lt;/p>
&lt;h3 id="march-2024-protocol-maturation">March 2024: Protocol Maturation&lt;/h3>
&lt;p>2024 年 3 月的主题是为协议的长期使用做加固。&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a> 合并了 12 个 PR，其中最重要的是 &lt;a href="https://nostrcompass.org/zh/topics/nip-34/">NIP-34&lt;/a>（Git Stuff），也就是 &lt;a href="https://github.com/nostr-protocol/nips/pull/997">PR #997&lt;/a>。它在经过 44 天审查和 130 多条评论后于 3 月 5 日合并。那条讨论串像一个时间胶囊，记录了社区如何争论去中心化 GitHub 应该怎么做。jb55 将其类比为 &lt;code>git send-email&lt;/code>，Giszmo 提议使用根提交哈希做跨 fork 发现（“something GitHub doesn&amp;rsquo;t do and we could”），mikedilger 建议使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-98/">NIP-98&lt;/a>（HTTP Auth）事件签名认证代替 SSH 密钥，而 fiatjaf 则直截了当地否定了支持通用版本控制系统的必要性：“不是每个版本控制系统，只要 git。没人用别的。” PR 打开数小时内，fiatjaf 就已经让 nak、go-nostr 和 gitstr 支持通过 Nostr 接收补丁。DanConwayDev 也是讨论中最活跃的参与者之一，他的 ngit 当时已是 OpenSats 资助项目。那个时期还合并了一个用于个人资料元数据的 bot 字段，使客户端能以机器可读方式区分自动化账户和人工账户。&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 发布了 v0.85.0，在一个版本中同时加入 git event 支持、wiki 文章、医疗数据渲染和内容编辑。&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> 达到了 v0.10.0。&lt;a href="https://github.com/Spl0itable/nosflare">Nosflare&lt;/a> 这个运行在 Cloudflare Workers 上的无服务器 Nostr relay 证明了 relay 逻辑可以在边缘运行。OpenSats 还向 Bruno Garcia 发放了&lt;a href="https://opensats.org/blog/bruno-garcia-receives-lts-grant">长期支持资助&lt;/a>，以支持他持续贡献 Amethyst 客户端。&lt;/p>
&lt;h3 id="march-2025-infrastructure-expansion">March 2025: Infrastructure Expansion&lt;/h3>
&lt;p>2025 年 3 月共产生 10 个已合并 NIP。最重要的是 &lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a>（relay 发现与活跃性监控），也就是 &lt;a href="https://github.com/nostr-protocol/nips/pull/230">PR #230&lt;/a>，它在经过长达 25 个月的历程后于 3 月 3 日合并。dskvr 在 2023 年 2 月首次提出 relay 监控，被告知这可以在客户端侧完成；随后他解释了为什么单个客户端同时连接数千个 relay 并不现实，经历了七次完整草稿重写，在八个地理区域（美国东北、巴西、美国西部、美国东部、澳大利亚、印度、韩国、南非）构建了监控节点，并等待 relay 工具链跟上。等到它合并时，nostr.watch、relaypag.es、monitorlizard、Snort、noStrudel 和 Jumble 中都已经有实现。NIP-66 数据后来成为 Nostrability outbox 基准测试的燃料，&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/#outbox-model-under-the-microscope">我们在周刊 #12 中已报道&lt;/a>。NIP-C0（代码片段）也在当月合并（&lt;a href="https://github.com/nostr-protocol/nips/pull/1852">PR #1852&lt;/a>，63 条评论），引入了 kind 1337 事件用于分享源代码。&lt;/p>
&lt;p>Nostr 上最早的 MCP 服务器也在这个月出现。&lt;a href="https://github.com/AustinKelsay/nostr-mcp-server">nostr-mcp-server&lt;/a> 于 3 月 23 日出现，&lt;a href="https://github.com/getAlby/nwc-mcp-server">nwc-mcp-server&lt;/a> 于 3 月 14 日出现，距 Anthropic 在 2024 年 11 月宣布 Model Context Protocol 仅过去四个月。这些早期桥接先于后来在 2025 年末和 2026 年初出现的完整 &lt;a href="https://nostrcompass.org/zh/topics/contextvm/">ContextVM&lt;/a> SDK 和代理商业化工作。&lt;/p>
&lt;p>&lt;a href="https://github.com/mikedilger/gossip">Gossip&lt;/a> 发布了 v0.14.0。&lt;a href="https://github.com/coracle-social/coracle">Coracle&lt;/a> 这个 hodlbod 的 Web 客户端支持 relay 感知的信息流管理，也发布了三个版本。OpenSats 则宣布了其&lt;a href="https://opensats.org/blog/10th-wave-of-nostr-grants">第十波 Nostr 资助&lt;/a>，延续了自 2023 年中以来一直运行的资金支持管道。&lt;/p>
&lt;h3 id="march-2026-convergence">March 2026: Convergence&lt;/h3>
&lt;p>&lt;em>2026 年 3 月的活动摘自 Nostr Compass 第 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/">#12&lt;/a> 期至 &lt;a href="">#15&lt;/a> 期（本期）。&lt;/em>&lt;/p>
&lt;p>2026 年 3 月是多个分散线程汇聚成可运行系统的一个月。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/#marmot-development-kit-ships-first-public-release">Marmot Development Kit&lt;/a> 发布了首个公开版本，包含加密媒体、多语言绑定以及需要在规范、Rust 和 TypeScript 三方协调更新的 ChaCha20-Poly1305 迁移。&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/#shopstr-and-milk-market-open-mcp-commerce-surfaces">Shopstr 和 Milk Market&lt;/a> 增加了面向代理采购的 MCP 商业接口。&lt;a href="https://nostrcompass.org/zh/topics/nip-42/">NIP-42&lt;/a> relay auth 同时落地到 &lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/#nip-42-relay-auth-across-bunker-signer-and-relay">Amber&lt;/a>、strfry 和 OAuth Bunker，闭合了签名器、relay 和 bunker 软件之间的回路。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-18-newsletter/#notedeck-%E5%B0%86%E7%89%88%E6%9C%AC%E5%8F%91%E7%8E%B0%E8%BF%81%E7%A7%BB%E5%88%B0-nostr">Notedeck&lt;/a> 则使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-94/">NIP-94&lt;/a>（文件元数据）版本 event 发布了 Nostr 原生软件更新。&lt;/p>
&lt;p>本周，&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#bigbrotr-%e7%bb%98%e5%88%b6-relay-%e7%bd%91%e7%bb%9c%e4%b8%ad%e7%9a%84%e7%a7%81%e9%92%a5%e6%9a%b4%e9%9c%b2%e6%83%85%e5%86%b5">BigBrotr&lt;/a> 扫描了整个 relay 网络中的泄露私钥，并同时发布了分析和 DVM 检查器。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#nostr-vpn-%e4%bd%9c%e4%b8%ba-tailscale-%e6%9b%bf%e4%bb%a3%e6%96%b9%e6%a1%88%e5%90%af%e5%8a%a8">Nostr VPN&lt;/a> 证明了 Nostr 的密钥模型不仅适用于社交媒体，也适用于网络基础设施。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#%e5%bc%80%e6%ba%90-doom-%e9%80%9a%e8%bf%87-nostr-%e5%ae%9e%e7%8e%b0%e7%82%b9%e5%af%b9%e7%82%b9%e8%bf%90%e8%a1%8c">DOOM&lt;/a> 证明了 Nostr 发现、Marmot 加密和 QUIC 传输可以支撑实时多人游戏。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#amber-v500-and-v501">Amber&lt;/a> 跳到了 v5.0.0。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-25-newsletter/#wisp-%e4%b8%80%e5%91%a8%e5%86%85%e5%8f%91%e5%b8%83-16-%e4%b8%aa%e7%89%88%e6%9c%ac">Wisp&lt;/a> 在七天内发布了 16 个版本。一周之内，主要项目就贡献了 25 个以上带 tag 的版本发布。&lt;/p>
&lt;p>本月前 24 天里已有 7 个 NIP 合并。协议增加了 &lt;a href="https://nostrcompass.org/zh/topics/nip-54/">NIP-54&lt;/a>（Wiki）Djot 标记、&lt;a href="https://nostrcompass.org/zh/topics/nip-19/">NIP-19&lt;/a>（Bech32 编码实体）输入限制、&lt;a href="https://nostrcompass.org/zh/topics/nip-91/">NIP-91&lt;/a>（过滤器 AND 运算符）布尔查询逻辑，以及 &lt;a href="https://nostrcompass.org/zh/topics/nip-85/">NIP-85&lt;/a>（可信断言）Web of Trust 断言。开放提案则从自主代理（NIP-AA）延伸到 WASM 程序（NIP-A5），再到 &lt;a href="https://nostrcompass.org/zh/topics/nip-50/">NIP-50&lt;/a> 的搜索排序扩展。&lt;/p>
&lt;h3 id="looking-ahead">Looking Ahead&lt;/h3>
&lt;p>Nostr 的五个三月勾勒出一条清晰的弧线。2021 年时，只有一个人向一个还不能按 kind 过滤 event 的协议提交了两次提交。到了 2023 年，NDK 和 NWC 在相隔五天内诞生，以吸收 Damus 爆发后的增长。到 2024 年，一条拥有 141 条评论的 PR 讨论串已经在争论一个社交协议上的 git 协作该如何运作。到 2025 年，一份经过七次重写、历时 25 个月耐心打磨的 relay 监控规范终于合并。到 2026 年，有人因为 Tailscale 需要账户而恼火，于是用 Nostr 密钥对构建了一个 VPN；另一个人则发布了通过 Nostr relay 发现 peer、通过 Marmot 加密游戏流量的多人 DOOM。BigBrotr 对 1,085 个 relay、4,100 万个 event 的扫描，给出了网络增长规模的一个具体量化指标。2026 年 3 月的协议表面面积，对 2021 年 3 月的参与者来说几乎不可想象，但其底层模型并没有改变：由 secp256k1 密钥签名、通过 relay 分发的 event。&lt;/p>
&lt;hr>
&lt;p>本周就到这里。正在构建什么，或者有新闻想分享？&lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a>（私密私信）联系我们&lt;/a>，或者直接在 Nostr 上找到我们。&lt;/p></content:encoded></item><item><title>Nostr Compass #14</title><link>https://nostrcompass.org/zh/newsletters/2026-03-18-newsletter/</link><pubDate>Wed, 18 Mar 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-03-18-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 实现完整的 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a>（Nostr Wallet Connect）方法支持，&lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a> 在 &lt;a href="https://github.com/getAlby/hub/releases/tag/v1.21.6">v1.21.6&lt;/a> 中添加多 relay 支持，&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 发布 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.3">v4.1.3&lt;/a> 带有内置 Tor 和更细粒度的签名器权限，&lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a> 在 &lt;a href="https://github.com/ZeusLN/zeus/pull/3835">PR #3835&lt;/a> 中移除了有风险的 NWC keysend 路径。&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> 在 &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.8.0-rc2">v0.8.0-rc2&lt;/a> 中发布签名更新器，通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-94/">NIP-94&lt;/a>（文件元数据）event 发现版本，&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> 修复了过时的 &lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a>（Relay 列表元数据）状态，&lt;a href="https://github.com/nostrability/outbox">Nostrability Outbox&lt;/a> 用修正数据修订了基准测试结果，&lt;a href="https://github.com/PrimalHQ/primal-ios-app">Primal iOS&lt;/a> 测试 DM 的直接 relay 订阅。&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> 发布 &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.7">3.0.7&lt;/a>，&lt;a href="https://github.com/v0l/route96">Route96&lt;/a> 发布 &lt;a href="https://github.com/v0l/route96/releases/tag/v0.6.0">v0.6.0&lt;/a>，&lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a> 在 &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.1.0-alpha.11">v0.1.0-alpha.11&lt;/a> 中持续优化 Marmot 互操作性，&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a> 在 &lt;a href="https://github.com/sledtools/pika/releases/tag/pika/v1.1.1">pika/v1.1.1&lt;/a> 中整合其运行时，&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> 添加 &lt;a href="https://nostrcompass.org/zh/topics/nip-85/">NIP-85&lt;/a>（可信断言）Web of Trust 过滤。NIPs 仓库合并了 &lt;a href="https://nostrcompass.org/zh/topics/nip-54/">NIP-54&lt;/a>（Wiki）Djot 标记和 &lt;a href="https://nostrcompass.org/zh/topics/nip-19/">NIP-19&lt;/a>（Bech32 编码实体）的 5000 字符输入上限，同时关于 &lt;a href="https://nostrcompass.org/zh/topics/nip-49/">NIP-49&lt;/a>（私钥加密）密钥文件、&lt;a href="https://nostrcompass.org/zh/topics/nip-43/">NIP-43&lt;/a>（Relay 访问元数据和请求）成员一致性、&lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a>（私密私信）删除指南和 &lt;a href="https://nostrcompass.org/zh/topics/nip-222/">NIP-222&lt;/a> 分享意图 URI 的开放提案也在推进。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="wallet-connect-支持扩大钱包客户端收紧失败路径">Wallet Connect 支持扩大，钱包客户端收紧失败路径&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>，由 vitorpamplona 维护的 Android 客户端，合并了 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1828">PR #1828&lt;/a>，使其 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a> 实现接近完整的协议覆盖。该补丁添加了 &lt;code>make_invoice&lt;/code>、&lt;code>lookup_invoice&lt;/code>、&lt;code>list_transactions&lt;/code>、&lt;code>get_balance&lt;/code>、&lt;code>get_info&lt;/code>、hold invoice 方法、带有 TLV 记录的 keysend 支持、通过 kind &lt;code>13194&lt;/code> 的能力发现，以及 kind &lt;code>23197&lt;/code> 上带有 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a>（加密载荷）的通知 event。这为客户端提供了更广泛的 NWC 接口，而无需依赖应用特定的扩展。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 实现完整的 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a>（Nostr Wallet Connect）方法支持，&lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a> 在 &lt;a href="https://github.com/getAlby/hub/releases/tag/v1.21.6">v1.21.6&lt;/a> 中添加多 relay 支持，&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 发布 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.3">v4.1.3&lt;/a> 带有内置 Tor 和更细粒度的签名器权限，&lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a> 在 &lt;a href="https://github.com/ZeusLN/zeus/pull/3835">PR #3835&lt;/a> 中移除了有风险的 NWC keysend 路径。&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> 在 &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.8.0-rc2">v0.8.0-rc2&lt;/a> 中发布签名更新器，通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-94/">NIP-94&lt;/a>（文件元数据）event 发现版本，&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> 修复了过时的 &lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a>（Relay 列表元数据）状态，&lt;a href="https://github.com/nostrability/outbox">Nostrability Outbox&lt;/a> 用修正数据修订了基准测试结果，&lt;a href="https://github.com/PrimalHQ/primal-ios-app">Primal iOS&lt;/a> 测试 DM 的直接 relay 订阅。&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> 发布 &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.7">3.0.7&lt;/a>，&lt;a href="https://github.com/v0l/route96">Route96&lt;/a> 发布 &lt;a href="https://github.com/v0l/route96/releases/tag/v0.6.0">v0.6.0&lt;/a>，&lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a> 在 &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.1.0-alpha.11">v0.1.0-alpha.11&lt;/a> 中持续优化 Marmot 互操作性，&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a> 在 &lt;a href="https://github.com/sledtools/pika/releases/tag/pika/v1.1.1">pika/v1.1.1&lt;/a> 中整合其运行时，&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a> 添加 &lt;a href="https://nostrcompass.org/zh/topics/nip-85/">NIP-85&lt;/a>（可信断言）Web of Trust 过滤。NIPs 仓库合并了 &lt;a href="https://nostrcompass.org/zh/topics/nip-54/">NIP-54&lt;/a>（Wiki）Djot 标记和 &lt;a href="https://nostrcompass.org/zh/topics/nip-19/">NIP-19&lt;/a>（Bech32 编码实体）的 5000 字符输入上限，同时关于 &lt;a href="https://nostrcompass.org/zh/topics/nip-49/">NIP-49&lt;/a>（私钥加密）密钥文件、&lt;a href="https://nostrcompass.org/zh/topics/nip-43/">NIP-43&lt;/a>（Relay 访问元数据和请求）成员一致性、&lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a>（私密私信）删除指南和 &lt;a href="https://nostrcompass.org/zh/topics/nip-222/">NIP-222&lt;/a> 分享意图 URI 的开放提案也在推进。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="wallet-connect-支持扩大钱包客户端收紧失败路径">Wallet Connect 支持扩大，钱包客户端收紧失败路径&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>，由 vitorpamplona 维护的 Android 客户端，合并了 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1828">PR #1828&lt;/a>，使其 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a> 实现接近完整的协议覆盖。该补丁添加了 &lt;code>make_invoice&lt;/code>、&lt;code>lookup_invoice&lt;/code>、&lt;code>list_transactions&lt;/code>、&lt;code>get_balance&lt;/code>、&lt;code>get_info&lt;/code>、hold invoice 方法、带有 TLV 记录的 keysend 支持、通过 kind &lt;code>13194&lt;/code> 的能力发现，以及 kind &lt;code>23197&lt;/code> 上带有 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a>（加密载荷）的通知 event。这为客户端提供了更广泛的 NWC 接口，而无需依赖应用特定的扩展。&lt;/p>
&lt;p>周围的钱包栈朝着同一方向发展。&lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a>，许多 NWC 部署背后的自托管 Lightning 节点和钱包服务，发布了 &lt;a href="https://github.com/getAlby/hub/releases/tag/v1.21.6">v1.21.6&lt;/a>，支持多 relay 和更简化的连接与交换流程。&lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a>，移动 Lightning 钱包，合并了 &lt;a href="https://github.com/ZeusLN/zeus/pull/3835">PR #3835&lt;/a>，在识别到该流程中存在静默资金流失路径后移除了 NWC keysend 支持，同时修复了待处理 event 和 Cashu 活动处理。Nostr 上的钱包连接正在变得更广泛，实现者正在移除难以安全保障的流程。&lt;/p>
&lt;h3 id="notedeck-将版本发现迁移到-nostr">Notedeck 将版本发现迁移到 Nostr&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/">继上周的 Notedeck 报道之后&lt;/a>，&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>，来自 Damus 团队的原生桌面客户端，在合并 &lt;a href="https://github.com/damus-io/notedeck/pull/1326">PR #1326&lt;/a> 后发布了 &lt;a href="https://github.com/damus-io/notedeck/releases/tag/v0.8.0-rc2">v0.8.0-rc2&lt;/a>。新的更新器订阅签名的 kind &lt;code>1063&lt;/code> 版本 event，匹配本地平台，下载引用的二进制文件，并在安装前验证其 SHA256 哈希。版本元数据不再需要来自 GitHub API 或项目网站。一个受信任的版本 pubkey 和一个 relay 连接就足够了。&lt;/p>
&lt;p>同一补丁还添加了 &lt;code>notedeck-release&lt;/code> CLI，从 GitHub 发布工件发布这些 event，这意味着发布管道现在既有 Nostr 原生的发布路径，也有 Nostr 原生的发现路径。它还使 Damus 和 Notedeck 的更新器模型更接近 Zapstore 的 relay 发布签名版本流程：Zapstore 的 &lt;code>zsp&lt;/code> 工具已经将软件资产作为 kind &lt;code>1063&lt;/code> 或 &lt;code>3063&lt;/code> event 处理，因此该路径不限于一个客户端或一个发布者。候选版本的其余部分是实用的桌面工作，关注列、个人资料&amp;quot;以用户身份查看&amp;quot;、&lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a>（Gift Wrap）支持、实时笔记统计和 &lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a>（Relay 信息文档）限制处理，但更新器是最可能超越这一发布周期的部分。&lt;/p>
&lt;h3 id="relay-状态正向运行时行为靠拢">Relay 状态正向运行时行为靠拢&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> 合并了 &lt;a href="https://github.com/damus-io/damus/pull/3665">PR #3665&lt;/a>，用对最新 kind &lt;code>10002&lt;/code> event 的直接数据库查询替代了过时的存储 relay 列表 event ID。当旧值过期时，relay 添加和移除操作可能回退到引导列表或一年前的列表，使得某些 relay 变更看似成功但实际活跃状态未改变。&lt;a href="https://github.com/damus-io/damus/pull/3690">PR #3690&lt;/a> 修复了第二条故障路径，在 LMDB 压缩期间删除过时的 &lt;code>lock.mdb&lt;/code> 状态，以免应用在下次启动时因 &lt;code>SIGBUS&lt;/code> 崩溃。&lt;/p>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-ios-app">Primal iOS&lt;/a> 开放了 &lt;a href="https://github.com/PrimalHQ/primal-ios-app/pull/194">PR #194&lt;/a>，在会话打开时直接订阅聊天对象的 &lt;a href="https://nostrcompass.org/zh/topics/nip-04/">NIP-04&lt;/a>（加密私信）写入 relay，同时保留缓存服务器作为后备。&lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a> 开放了 &lt;a href="https://github.com/nostur-com/nostur-ios-public/pull/53">PR #53&lt;/a>，结合随机化 relay 评分、来自 nostr.watch 的 &lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a> 活跃度过滤和 Thompson 采样，将 relay 选择从固定启发式转变为学习策略。客户端长期以来将 relay 选择视为设置数据。越来越多的应用现在将其视为需要测量和修复逻辑的实时状态。&lt;/p>
&lt;h2 id="版本发布">版本发布&lt;/h2>
&lt;h3 id="primal-android-307">Primal Android 3.0.7&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a>，来自 Primal 的 Android 客户端，发布了 &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/3.0.7">3.0.7&lt;/a>，包含新的投票和钱包功能。&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/945">PR #945&lt;/a> 添加基于 zap 的投票，&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/948">PR #948&lt;/a> 分页加载投票使更大的投票保持可用，&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/965">PR #965&lt;/a> 获取所有交易的 zap 收据。同一版本还在 &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/968">PR #968&lt;/a> 中使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-89/">NIP-89&lt;/a>（推荐应用处理器）客户端元数据标记支持的 event，帮助下游客户端更清晰地归属 event 来源。&lt;/p>
&lt;h3 id="amber-v413">Amber v4.1.3&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/">继上周的 Amber 报道之后&lt;/a>，&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>，用于 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 流程的 Android 签名器应用，发布了 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.3">v4.1.3&lt;/a>。该版本在其近期 &lt;a href="https://nostrcompass.org/zh/topics/nip-42/">NIP-42&lt;/a> relay 认证工作基础上进行了更多操作加固：&lt;a href="https://github.com/greenart7c3/Amber/pull/327">PR #327&lt;/a> 在 Orbot 支持之外添加内置 Tor，&lt;a href="https://github.com/greenart7c3/Amber/pull/324">PR #324&lt;/a> 用内容类型特定规则替代粗粒度的基于 NIP 的加密权限，&lt;a href="https://github.com/greenart7c3/Amber/pull/336">PR #336&lt;/a> 从离线版本中移除网络权限，&lt;a href="https://github.com/greenart7c3/Amber/pull/335">PR #335&lt;/a> 添加 CI 检查以保持该状态。&lt;a href="https://github.com/greenart7c3/Amber/pull/322">PR #322&lt;/a> 还将 PIN 存储迁移到加密 DataStore。&lt;/p>
&lt;p>此版本收紧了签名器边界本身。这对任何将真实密钥或 relay 认证决策交给 Amber 的 Android 流程都很有用，因为困难的部分不仅是签名器能做什么，还包括它的作用范围能被缩小到多窄。&lt;/p>
&lt;h3 id="route96-v060">Route96 v0.6.0&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/">继上周的 Route96 报道之后&lt;/a>，&lt;a href="https://github.com/v0l/route96">Route96&lt;/a>，支持 Blossom 和 &lt;a href="https://nostrcompass.org/zh/topics/nip-96/">NIP-96&lt;/a>（HTTP 文件存储）的媒体服务器，发布了 &lt;a href="https://github.com/v0l/route96/releases/tag/v0.6.0">v0.6.0&lt;/a>。该版本将配置和白名单状态迁移到数据库并支持热重载，添加了冷文件或老化文件的保留策略。还添加了更丰富的 &lt;code>GET /user/files&lt;/code> 端点和下载及出口的文件统计跟踪，为运营者提供更多关于其存储服务器使用方式的可见性。&lt;/p>
&lt;h3 id="openchat-v010-alpha11">OpenChat v0.1.0-alpha.11&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/">继上周的 OpenChat 报道之后&lt;/a>，&lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a>，基于 Marmot 栈构建的 Avalonia 聊天客户端，经过一周密集的协议工作后发布了 &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.1.0-alpha.11">v0.1.0-alpha.11&lt;/a>。&lt;a href="https://github.com/DavidGershony/openChat/commit/c33895d6b1a198f01b9b01a7be974bdce033fb9c">Commit c33895d&lt;/a> 将 Welcome event 包装在 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a> gift wrap 中并移除了旧的 MIP-00 tag 规范化 shim，&lt;a href="https://github.com/DavidGershony/openChat/commit/2738ff428154f60f50debb8f2a53662d427b28f1">commit 2738ff4&lt;/a> 完成了 MIP-02 合规审计，&lt;a href="https://github.com/DavidGershony/openChat/commit/8e470cf7945bced010168c8229d73d67db638b9f">commit 8e470cf&lt;/a> 对 MIP-03 群组消息加密做了同样的工作。&lt;a href="https://github.com/DavidGershony/openChat/commit/129ca37e264efaa2d1a8b04fe95cd72e5e212547">Commit 129ca37&lt;/a> 还将 NIP-44 处理统一到共享的 marmot-cs 实现上，降低了客户端加密漂移的风险。&lt;/p>
&lt;h3 id="nak-v0190-和-v0191">nak v0.19.0 和 v0.19.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>，fiatjaf 的命令行 Nostr 工具包，发布了 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.0">v0.19.0&lt;/a> 和 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.19.1">v0.19.1&lt;/a>。0.19 系列在 &lt;a href="https://github.com/fiatjaf/nak/commit/5f4efdbc69a36fc80ea3f97b2cdee1db6a7c5b47">commit 5f4efdb&lt;/a> 中添加了群组论坛 UI，在 &lt;a href="https://github.com/fiatjaf/nak/commit/da0b75337198010687aceb6a07bbae67407faee3">commit da0b753&lt;/a> 中将群组元数据编辑切换到完整替换流程，在 &lt;a href="https://github.com/fiatjaf/nak/commit/bef67d35d259e0450debf0fd870e1a937a2406bf">commit bef67d3&lt;/a> 中用 &lt;code>supported_kinds&lt;/code> 替代旧的 &lt;code>no-text&lt;/code> 处理。对于群组实现者来说，这使 CLI 与群组规范和客户端的发展方向保持一致。&lt;/p>
&lt;h2 id="项目更新">项目更新&lt;/h2>
&lt;h3 id="amethyst">Amethyst&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-11-newsletter/">继上周的 Amethyst 报道之后&lt;/a>，&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>，拥有 Nostr 中最广泛协议覆盖面之一的 Android 客户端，在 NIP-47 补丁之后继续推进其钱包和 relay 工作。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1853">PR #1853&lt;/a> 在 relay 管理界面添加了 &lt;a href="https://nostrcompass.org/zh/topics/nip-45/">NIP-45&lt;/a>（Event 计数）COUNT 查询，让用户可以看到每个 relay 为主页信息流、通知、DM 和索引数据实际持有多少 event。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1849">PR #1849&lt;/a> 为 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a>（私密私信）聊天添加加密文件上传，当存储主机拒绝加密版本时提供未加密上传的重试路径。&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1791">PR #1791&lt;/a> 还带来了完整的 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a>（Nostr Connect）桌面 bunker 登录和心跳指示器，这很重要，因为远程签名失败通常从用户角度看起来像随机的 UI 故障。客户端显示签名器是否存活以及最近何时响应，同时也清楚表明当前会话使用的是 bunker。&lt;/p>
&lt;h3 id="nostria">Nostria&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>，围绕本地优先栈构建的多平台客户端，合并了 &lt;a href="https://github.com/nostria-app/nostria/pull/561">PR #561&lt;/a>，为信息流和线程回复添加 Web of Trust 过滤。该功能使用现有的信任服务排名数据，并将其作为信息流过滤器和回复过滤器公开，隐藏排名未达到阈值的作者，同时在受信任的后代存在时保留线程结构。这为用户提供了&amp;quot;显示所有人&amp;quot;和硬编码列表策展之间的中间层。&lt;/p>
&lt;p>同一周还带来了 &lt;a href="https://github.com/nostria-app/nostria/pull/563">PR #563&lt;/a>，为摘要页面添加内容过滤和转发支持。在跟踪的 PR 列表之外，Nostria 还一直在填充更多的高级用户功能。它现在支持最新的 Brainstorm Web of Trust 服务和应用内注册，以及使用 NWC 和 BOLT-11 发票在 DM 中收发资金的流程。它还通过 emoji NIP 添加了 Nostr 原生 GIF 处理，以及更强大的音乐人 RSS 导入路径，可以从播客信息流中提取现有的 Lightning 分成。Nostria 正在将排名、媒体、支付和发布视为一个连接的应用平面。&lt;/p>
&lt;h3 id="nostur">Nostur&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a>，由 nostur-com 维护的 iOS 客户端，开放了 &lt;a href="https://github.com/nostur-com/nostur-ios-public/pull/53">PR #53&lt;/a>，将 outbox 路由从固定计划转变为评分策略。该补丁添加了随机化 relay 评分、带有缓存 nostr.watch 信息流的 &lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a> relay 活跃度过滤，以及 Thompson 采样，使 relay 的成功和失败数据改变未来的选择。该设计在过多 relay 会被过滤掉时保留安全阀，并保留 &lt;code>.onion&lt;/code> relay。这是当前客户端将 relay 选择视为自适应系统的最清晰示例之一。&lt;/p>
&lt;h3 id="nostrability-outbox">Nostrability Outbox&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/">继早前的 Outbox 基准测试报告之后&lt;/a>，&lt;a href="https://github.com/nostrability/outbox">Nostrability Outbox&lt;/a>，专注于 &lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a> 客户端路由的基准测试和分析项目，本周致力于收紧自己的结论。&lt;a href="https://github.com/nostrability/outbox/pull/35">PR #35&lt;/a> 用跨 1,511 次运行的完整重新基准测试替换了膨胀的 Thompson 采样结果，并推荐 &lt;code>CG3&lt;/code> 变体用于 NDK 风格的路由。&lt;a href="https://github.com/nostrability/outbox/pull/43">PR #43&lt;/a> 添加了衰减和用例比较，修复了 &lt;code>0 follows&lt;/code> 缓存中毒 bug，然后在固定缓存 TTL 后重新运行了 Telluride 数据集。&lt;/p>
&lt;p>这不是通常意义上的产品工作，但对客户端作者很重要，因为该项目的数字现在更加精确，在之前过度声称的地方不那么好看了。修正后的结果仍然有用。在 Outbox 关心的场景中，随机化选择持续优于纯确定性路由，Thompson 风格的学习在客户端持久化有用的 relay 历史时可以显著提高覆盖率，&lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a> 活跃度过滤减少了在死 relay 上浪费的时间。这项工作也正在转化为具体的实现提案，包括 &lt;a href="https://github.com/nostr-dev-kit/ndk/pull/387">NDK #387&lt;/a>、&lt;a href="https://github.com/nostur-com/nostur-ios-public/pull/53">Nostur #53&lt;/a>、&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1833">Amethyst #1833&lt;/a>、&lt;a href="https://github.com/rust-nostr/nostr/pull/1282">rust-nostr #1282&lt;/a>、&lt;a href="https://github.com/coracle-social/welshman/pull/53">welshman #53&lt;/a>，以及 &lt;a href="https://github.com/hzrd149/applesauce/pull/54">applesauce #54&lt;/a> 和 &lt;a href="https://github.com/hzrd149/applesauce/pull/55">applesauce #55&lt;/a>。&lt;/p>
&lt;h3 id="white-noise-后端">White Noise 后端&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise-rs">whitenoise-rs&lt;/a>，White Noise 和其他 Marmot 工具使用的 Rust 后端，合并了两个关于 Blossom 媒体处理的边界加固补丁。&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/637">PR #637&lt;/a> 对 Blossom URL 强制执行 HTTPS 并添加上传超时，&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/642">PR #642&lt;/a> 将 blob 下载限制在 &lt;code>100 MiB&lt;/code> 以阻止超大媒体拉取变成拒绝服务路径。对于私密消息软件来说，媒体 URL 是加密应用逻辑和不受信任网络基础设施之间最尖锐的接口之一。本周团队收紧了这一边缘。&lt;/p>
&lt;h3 id="rust-nostr">rust-nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a>，Rust 协议库，合并了 &lt;a href="https://github.com/rust-nostr/nostr/pull/1280">PR #1280&lt;/a>，为 &lt;code>LocalRelayBuilderNip42&lt;/code> 添加便捷构造函数。新的读写辅助方法为嵌入式 relay 和测试设置提供了更清晰的方式将 &lt;a href="https://nostrcompass.org/zh/topics/nip-42/">NIP-42&lt;/a> 认证策略转化为代码。这是一个小型库补丁，但对构建需要开启 auth 的本地或应用捆绑 relay 的团队很重要，无需每次都重复样板代码。&lt;/p>
&lt;h3 id="pika">Pika&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/">继早前的 Pika 报道之后&lt;/a>，&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>，基于 Marmot 的消息应用，发布了 &lt;a href="https://github.com/sledtools/pika/releases/tag/pika/v1.1.1">pika/v1.1.1&lt;/a> 和 &lt;a href="https://github.com/sledtools/pika/releases/tag/pikachat-v1.1.1">pikachat-v1.1.1&lt;/a>，本发布周期聚焦于运行时统一。&lt;a href="https://github.com/sledtools/pika/pull/542">PR #542&lt;/a> 为 CLI 和 sidecar 引入共享 Marmot 运行时门面，应用主机也迁移到同一平面。&lt;a href="https://github.com/sledtools/pika/pull/556">PR #556&lt;/a> 收紧了 OpenClaw 代理生命周期和配置状态，&lt;a href="https://github.com/sledtools/pika/pull/600">PR #600&lt;/a> 为托管环境添加了从备份恢复和更严格的恢复安全性。&lt;/p>
&lt;p>这里直接面向用户的功能比上次 Pika 报道中少，但架构变化意义重大。将群组、媒体、通话和会话逻辑放在一个共享运行时后面，降低了随着 Marmot 栈增长应用和守护进程发生漂移的可能性。&lt;/p>
&lt;h2 id="nip-更新">NIP 更新&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>的最新变更：&lt;/p>
&lt;p>&lt;strong>已合并：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-54/">NIP-54&lt;/a>（Wiki）：从 Asciidoc 切换到 Djot&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2242">PR #2242&lt;/a>）：kind &lt;code>30818&lt;/code> 上的 Wiki 内容现在使用 Djot 作为规范标记格式。合并的文本添加了明确的 wikilink 行为、kind &lt;code>818&lt;/code> 的合并请求示例、kind &lt;code>30819&lt;/code> 的重定向示例，以及 &lt;code>d&lt;/code> tag 的非拉丁文字规范化示例。这为实现者提供了比 Asciidoc 更清晰的解析目标，并移除了又一个依赖 Ruby 工具链的规范路径。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-19/">NIP-19&lt;/a>（Bech32 编码实体）：添加输入限制&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2264">PR #2264&lt;/a>）：规范现在建议将 Bech32 编码实体字符串限制在 5000 个字符。这是一个小变更但具有实际的解析价值，因为 NIP-19 字符串现在出现在许多客户端的二维码流程、深层链接、分享面板和用户粘贴输入中。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>开放 PR 和讨论：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-49/">NIP-49&lt;/a>（私钥加密）的 Nostr 密钥文件&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2269">PR #2269&lt;/a>）：提议一种 &lt;code>.nostrkey&lt;/code> 文件格式，用于密码加密的密钥导出和导入。如果合并，将为客户端提供比复制原始 &lt;code>ncryptsec&lt;/code> 字符串更常规的基于文件的备份路径。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-43/">NIP-43&lt;/a>（Relay 访问元数据和请求）的成员状态一致性&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2267">PR #2267&lt;/a>）：添加了一个章节，澄清 relay 应该为每个 pubkey 维护一个权威成员状态。这将简化围绕成员变更和重放历史的群组客户端逻辑。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a>（私密私信）的删除指南&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2260">PR #2260&lt;/a>）：提议通过 gift wrap 删除 event 来编辑和删除私密消息的具体路径。工作仍在进行中，但如果 NIP-17 要完全取代旧的 DM 流程，客户端作者需要这里的答案。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-222/">NIP-222&lt;/a> 的分享意图 URI&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2266">PR #2266&lt;/a>）：该草案将标准化移动和桌面应用如何将共享内容传递给 Nostr 客户端。这是当前应用间互操作中最粗糙的边缘之一。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-深度解析nip-94文件元数据">NIP 深度解析：NIP-94（文件元数据）&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-94/">NIP-94&lt;/a> 将 kind &lt;code>1063&lt;/code> 定义为文件的一等元数据 event。&lt;a href="https://github.com/nostr-protocol/nips/blob/master/94.md">规范&lt;/a>为该 event 提供了人类可读的 &lt;code>content&lt;/code> 和机器可读的 tag，包括下载 URL、MIME 类型、哈希、尺寸、预览、后备和存储服务提示。这很重要，因为文件在 relay 上作为独立对象可查询。客户端不必从周围内容中抓取元数据来理解文件是什么。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;6a92ef8d7c3a1b5d4e8f9a0b1c2d3e4f567890abcdef1234567890abcdef1234&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1e2d3c4b5a697887766554433221100ffeeddccbbaa99887766554433221100&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1742342400&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1063&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;url&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://downloads.example.org/notedeck/v0.8.0-rc2/notedeck-macos-universal.tar.gz&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;m&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;application/gzip&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;x&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4a5b6c7d8e9f00112233445566778899aabbccddeeff00112233445566778899&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;ox&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4a5b6c7d8e9f00112233445566778899aabbccddeeff00112233445566778899&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;size&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;48392011&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;dim&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;0x0&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;magnet&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;magnet:?xt=urn:btih:00112233445566778899aabbccddeeff00112233&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;i&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;00112233445566778899aabbccddeeff00112233&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;blurhash&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;LEHV6nWB2yk8pyo0adR*.7kCMdnj&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;thumb&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://downloads.example.org/notedeck/v0.8.0-rc2/thumb.png&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;bbccddeeff00112233445566778899aabbccddeeff0011223344556677889900&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;image&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://downloads.example.org/notedeck/v0.8.0-rc2/screenshot.png&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;ccddeeff00112233445566778899aabbccddeeff001122334455667788990011&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;summary&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Signed macOS release artifact for Notedeck v0.8.0-rc2&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;alt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Notedeck desktop release archive&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;fallback&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://mirror.example.net/notedeck/v0.8.0-rc2/notedeck-macos-universal.tar.gz&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;service&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip96&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Notedeck macOS universal build&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;11aa22bb33cc44dd55ee66ff77889900aabbccddeeff0011223344556677889911aa22bb33cc44dd55ee66ff77889900aabbccddeeff00112233445566778899&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>这些 tag 的作用比初看起来要大。&lt;code>x&lt;/code> 标识提供的文件，而 &lt;code>ox&lt;/code> 标识在任何服务端转换之前的原始文件。预览 tag 让客户端无需下载完整资产即可构建可浏览的文件索引，&lt;code>summary&lt;/code> 可以在旁边携带简短摘录。&lt;code>fallback&lt;/code> 在主 URL 失败时提供第二来源，&lt;code>service&lt;/code> 提示文件背后的存储协议，如 &lt;a href="https://nostrcompass.org/zh/topics/nip-96/">NIP-96&lt;/a> 或其他主机。因此，NIP-94 位于社交发布之下和原始存储之上。它描述的是文件，而非围绕文件的对话。&lt;/p>
&lt;p>这就是为什么本周的 Notedeck 更新器很有趣。&lt;a href="https://github.com/damus-io/notedeck/pull/1326">PR #1326&lt;/a> 使用签名的 kind &lt;code>1063&lt;/code> event 进行软件版本发现，然后根据发布的 SHA256 验证下载的二进制文件。相同的 event 形状可以描述软件工件或媒体上传。NIP-94 已经足够老到稳定，但它仍有增长空间，因为越来越多的项目将元数据 event 视为面向机器的传输方式，而不仅仅是面向人的装饰。&lt;/p>
&lt;h2 id="nip-深度解析nip-54wiki">NIP 深度解析：NIP-54（Wiki）&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-54/">NIP-54&lt;/a> 将 kind &lt;code>30818&lt;/code> 定义为 wiki 文章 event。&lt;a href="https://github.com/nostr-protocol/nips/blob/master/54.md">规范&lt;/a>将 &lt;code>d&lt;/code> tag 视为规范化的文章主题，允许多个作者为同一主题发布条目。文章正文位于 &lt;code>content&lt;/code> 中，而 tag 处理规范化标识、显示标题、摘要和对早期版本的引用。这意味着 NIP-54 不仅是一种内容格式，它也是一个检索和排名问题，因为每个客户端仍然需要决定显示哪个文章版本。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;8c94e5d1f2a300112233445566778899aabbccddeeff00112233445566778899&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1742342400&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30818&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nostr-wiki&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Nostr Wiki&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;summary&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Djot-formatted reference article about Nostr wiki events&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;30818:11223344556677889900aabbccddeeff00112233445566778899aabbccddeeff:nostr-wiki&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.org&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;fork&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;11223344556677889900aabbccddeeff00112233445566778899aabbccddeeff&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.org&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;fork&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Nostr is a [protocol][] for carrying events across relays.\n\n[protocol]: nostr:nevent1example&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;33cc44dd55ee66ff77889900aabbccddeeff0011223344556677889900112233cc44dd55ee66ff77889900aabbccddeeff00112233445566778899001122&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>本周的合并将规范标记从 Asciidoc 改为 Djot（&lt;a href="https://github.com/nostr-protocol/nips/pull/2242">PR #2242&lt;/a>）。这对实现者很重要，因为 Djot 有更紧凑的独立规范和跨语言更简单的解析器方案。合并的文本还澄清了引用式 wikilink 如何解析、合并请求如何使用 kind &lt;code>818&lt;/code>、重定向如何使用 kind &lt;code>30819&lt;/code>，以及 &lt;code>d&lt;/code> tag 规范化对非拉丁文字应如何处理。这些是让两个独立客户端就链接指向哪篇文章达成一致的部分。&lt;/p>
&lt;p>NIP-54 在协议中也处于一个不寻常的位置。Wiki 客户端需要内容渲染，但它也需要排名策略。回应、relay 列表、联系人列表和显式尊重信号都会影响哪篇文章在给定主题上获胜。Djot 切换不解决排名问题，但它确实移除了位于其下方的解析器歧义之一。这就是为什么合并现在很重要：变更与其说是关于更好的散文格式，不如说是关于使多客户端 wiki 行为更容易一致地实现。&lt;/p>
&lt;p>正在构建什么，或想让我们报道？通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 私信在 Nostr 上联系我们：&lt;code>npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923&lt;/code>。&lt;/p></content:encoded></item><item><title>Nostr Compass #13</title><link>https://nostrcompass.org/zh/newsletters/2026-03-11-newsletter/</link><pubDate>Wed, 11 Mar 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-03-11-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> 与 &lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a> 为 agent 驱动商业增加了 MCP 接口；&lt;a href="https://github.com/flox1an/oauth-bunker">OAuth Bunker&lt;/a>、&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 和 &lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a> 则在应用、签名器和 relay 软件中加入了 &lt;a href="https://nostrcompass.org/zh/topics/nip-42/">NIP-42&lt;/a>（客户端到 Relay 的认证）relay-auth 与 protected event 支持。&lt;a href="https://github.com/v0l/route96">Route96&lt;/a> 围绕 AI 标注、审核队列、感知哈希与机器可读服务器文档发布了两个版本。&lt;a href="https://github.com/satsdisco/samizdat">Samizdat&lt;/a> 已先在 Web 上线，本周发布首个 Android alpha，随后又加入 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a>（Android 签名器应用）支持。&lt;a href="https://github.com/formstr-hq/nostr-forms">Formstr&lt;/a> 通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-49/">NIP-49&lt;/a>（私钥加密）增加注册能力，&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 发布基于 Namecoin 的 &lt;a href="https://nostrcompass.org/zh/topics/nip-05/">NIP-05&lt;/a>（域名验证）解析工作，&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> 发布 &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.4">v0.16.4&lt;/a>，而 NIPs 仓库合并了 &lt;a href="https://nostrcompass.org/zh/topics/nip-91/">NIP-91&lt;/a>（过滤器 AND 运算符）以及面向 &lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a>（Relay 发现与存活监测）的防御性指引。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="shopstr-与-milk-market-开放-mcp-商业接口">Shopstr 与 Milk Market 开放 MCP 商业接口&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> 是一个支持 Lightning 与 Cashu 支付的点对点市场，它合并了 &lt;a href="https://github.com/shopstr-eng/shopstr/pull/234">PR #234&lt;/a>（&lt;a href="https://github.com/shopstr-eng/shopstr/commit/94ef7d1a4519e8e0158668d13c8cb8684b1d46e2">commit 94ef7d1&lt;/a>），加入了一个使用 API key 认证的 MCP 服务器，用于 agent 账户管理。该改动增加了用于 agent 发现的 &lt;code>.well-known/agent.json&lt;/code>、MCP onboarding 与状态端点、订单创建和支付校验路由，以及专门的购买与读取工具，还有一个用于管理 API key 的设置页面。&lt;a href="https://github.com/shopstr-eng/shopstr/pull/236">PR #236&lt;/a> 继续扩展，加入卖家侧的消息、地址、订单更新与商品规格选择操作。&lt;a href="https://github.com/shopstr-eng/shopstr/pull/235">PR #235&lt;/a> 中的安全修复则将单轮 SHA-256 API key 哈希替换为带盐的 100,000 次 PBKDF2。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> 与 &lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a> 为 agent 驱动商业增加了 MCP 接口；&lt;a href="https://github.com/flox1an/oauth-bunker">OAuth Bunker&lt;/a>、&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 和 &lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a> 则在应用、签名器和 relay 软件中加入了 &lt;a href="https://nostrcompass.org/zh/topics/nip-42/">NIP-42&lt;/a>（客户端到 Relay 的认证）relay-auth 与 protected event 支持。&lt;a href="https://github.com/v0l/route96">Route96&lt;/a> 围绕 AI 标注、审核队列、感知哈希与机器可读服务器文档发布了两个版本。&lt;a href="https://github.com/satsdisco/samizdat">Samizdat&lt;/a> 已先在 Web 上线，本周发布首个 Android alpha，随后又加入 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a>（Android 签名器应用）支持。&lt;a href="https://github.com/formstr-hq/nostr-forms">Formstr&lt;/a> 通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-49/">NIP-49&lt;/a>（私钥加密）增加注册能力，&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 发布基于 Namecoin 的 &lt;a href="https://nostrcompass.org/zh/topics/nip-05/">NIP-05&lt;/a>（域名验证）解析工作，&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> 发布 &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.4">v0.16.4&lt;/a>，而 NIPs 仓库合并了 &lt;a href="https://nostrcompass.org/zh/topics/nip-91/">NIP-91&lt;/a>（过滤器 AND 运算符）以及面向 &lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a>（Relay 发现与存活监测）的防御性指引。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="shopstr-与-milk-market-开放-mcp-商业接口">Shopstr 与 Milk Market 开放 MCP 商业接口&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> 是一个支持 Lightning 与 Cashu 支付的点对点市场，它合并了 &lt;a href="https://github.com/shopstr-eng/shopstr/pull/234">PR #234&lt;/a>（&lt;a href="https://github.com/shopstr-eng/shopstr/commit/94ef7d1a4519e8e0158668d13c8cb8684b1d46e2">commit 94ef7d1&lt;/a>），加入了一个使用 API key 认证的 MCP 服务器，用于 agent 账户管理。该改动增加了用于 agent 发现的 &lt;code>.well-known/agent.json&lt;/code>、MCP onboarding 与状态端点、订单创建和支付校验路由，以及专门的购买与读取工具，还有一个用于管理 API key 的设置页面。&lt;a href="https://github.com/shopstr-eng/shopstr/pull/236">PR #236&lt;/a> 继续扩展，加入卖家侧的消息、地址、订单更新与商品规格选择操作。&lt;a href="https://github.com/shopstr-eng/shopstr/pull/235">PR #235&lt;/a> 中的安全修复则将单轮 SHA-256 API key 哈希替换为带盐的 100,000 次 PBKDF2。&lt;/p>
&lt;p>Agent 现在可以读取 &lt;a href="https://nostrcompass.org/zh/topics/nip-99/">NIP-99&lt;/a>（分类信息）listing，并通过现有的 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a>（Nostr Wallet Connect）与 &lt;a href="https://nostrcompass.org/zh/topics/nip-60/">NIP-60&lt;/a>（Cashu 钱包）支付流程完成结账，而无需抓取页面或反向工程客户端行为。&lt;/p>
&lt;p>&lt;a href="https://github.com/shopstr-eng/milk-market">Milk Market&lt;/a> 是运行在 &lt;a href="https://milk.market">milk.market&lt;/a> 上的 Nostr 食品市场，它在 &lt;a href="https://github.com/shopstr-eng/milk-market/commit/da6c0b499494b4e4861c4ff8a220e066c46285b3">commit da6c0b4&lt;/a> 中引入了同样的 MCP 与 API key 基础。&lt;a href="https://github.com/shopstr-eng/milk-market/pull/10">PR #10&lt;/a> 增加了订阅订单、购买后修改收货地址，以及面向 Stripe 和其他法币支付路径的多商户、多币种结账处理。后续的 &lt;a href="https://github.com/shopstr-eng/milk-market/pull/11">PR #11&lt;/a> 修复了一个启动期数据库初始化 bug：新安装时未创建 failed relay publishes 表，导致首次加载出现 500 错误。这个面向 agent 的接口既可配合 Shopstr 上的 Bitcoin 原生结账使用，也支持 Milk Market 上混合法币与 Bitcoin 的结账流。&lt;/p>
&lt;h3 id="nip-42-relay-认证横跨-bunker签名器与-relay">NIP-42 Relay 认证横跨 Bunker、签名器与 Relay&lt;/h3>
&lt;p>&lt;a href="https://github.com/flox1an/oauth-bunker">OAuth Bunker&lt;/a> 是一个 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a>（Nostr Connect）bunker，用于把 OAuth 提供方桥接到 Nostr 签名。它加入了 &lt;a href="https://nostrcompass.org/zh/topics/nip-07/">NIP-07&lt;/a>（浏览器扩展签名器）登录、单身份自动选择以及对已删除身份的清理（&lt;a href="https://github.com/flox1an/oauth-bunker/commit/f0c7683cb2374fd9a3ebd1b186055da8abd2c2ff">commit f0c7683&lt;/a>）。当系统中只存在一个身份时，bunker 现在会直接选中，而不是继续提示用户。删除某个身份时，也会移除其悬空的分配关系和连接。&lt;a href="https://github.com/flox1an/oauth-bunker/commit/6b8796c6c59c7d48dc1ede92d6de6bf54feb56cc">Commit 6b8796c&lt;/a> 还增加了面向已分配用户的 &lt;code>ALWAYS_ALLOWED_KINDS&lt;/code> 配置路径，默认允许 kind &lt;code>30078&lt;/code> 的应用特定数据，使代理身份无需逐条批准也能写入应用存储。&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 是 Android 上最主要的 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 签名器，本周发布 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.3-pre4">v4.1.3-pre4&lt;/a>，期间共有四个预发布版本。&lt;a href="https://github.com/greenart7c3/Amber/pull/317">PR #317&lt;/a> 为 kind &lt;code>22242&lt;/code> 请求加入了 &lt;a href="https://nostrcompass.org/zh/topics/nip-42/">NIP-42&lt;/a> relay 认证处理。实现中新增了一个数据库列，用于跟踪按 relay 区分的权限，并在 &lt;code>(pkKey, type, kind, relay)&lt;/code> 上建立唯一索引。用户会看到一个专门的认证页面，可以针对单个 relay 或通过通配符 &lt;code>*&lt;/code> 作用域对所有 relay 授权或拒绝，并将选择持久化。通配符权限会清除该 kind 的所有 relay 级别条目。&lt;a href="https://github.com/greenart7c3/Amber/pull/318">PR #318&lt;/a> 则继续重构多 event 请求界面，用可组合卡片内联显示详情，而不是跳转到单独页面。此次发布还更新了默认资料 relay、增加 bottom sheet 请求展示，并通过禁用 StrongBox keystore 修复了 MediaTek 设备上的崩溃问题。&lt;/p>
&lt;p>在 relay 侧，&lt;a href="https://github.com/hoytech/strfry/pull/156">strfry PR #156&lt;/a> 为 &lt;a href="https://nostrcompass.org/zh/topics/nip-70/">NIP-70&lt;/a>（Protected Events）实现了 NIP-42 认证处理，而 &lt;a href="https://github.com/hoytech/strfry/pull/176">PR #176&lt;/a> 会拒绝嵌入受保护 event 的 repost。&lt;/p>
&lt;h3 id="notedeck-增加-nip-11-relay-限制与-agentium-特性">Notedeck 增加 NIP-11 Relay 限制与 Agentium 特性&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> 是 Damus 团队开发的原生桌面客户端，本周合并了 14 个 PR。&lt;a href="https://github.com/damus-io/notedeck/pull/1316">PR #1316&lt;/a> 加入 &lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a>（Relay 信息文档）中的 relay 限制抓取，因此所有 outbox relay 现在都会遵守 relay 信息文档中的 &lt;code>max_message_length&lt;/code> 与 &lt;code>max_subscriptions&lt;/code>。该实现包含后台 job 处理、带抖动的指数退避连接重试，以及自定义 HTTP Accept 头。&lt;a href="https://github.com/damus-io/notedeck/pull/1312">PR #1312&lt;/a> 修复了一个在切换账户后私信有时无法加载的 bug，而 &lt;a href="https://github.com/damus-io/notedeck/pull/1333">PR #1333&lt;/a> 为 multicast relay 通信增加退避机制，以避免错误时的广播刷屏。&lt;/p>
&lt;p>Agentium 子系统（Notedeck 内建的编码 agent UI，内部代号为“Dave”）新增了剪贴板图片粘贴、通过 kind &lt;code>31991&lt;/code> event 在设备间同步的命名运行配置（&lt;a href="https://nostrcompass.org/zh/topics/nip-33/">NIP-33&lt;/a> 参数化可替换 event）、git worktree 创建器，以及允许每个会话选择后端的模型选择器（&lt;a href="https://github.com/damus-io/notedeck/pull/1336">PR #1336&lt;/a>）。&lt;a href="https://github.com/damus-io/notedeck/pull/1338">PR #1338&lt;/a> 集成了 &lt;code>egui_kittest&lt;/code>，用于无头 UI 测试，而 &lt;a href="https://github.com/damus-io/notedeck/pull/1339">PR #1339&lt;/a> 增加了一张 dashboard 卡片，用于跟踪各客户端中新联系人列表的创建情况。仍处于开放状态的 &lt;a href="https://github.com/damus-io/notedeck/pull/1314">PR #1314&lt;/a> 则把 Amethyst 的 Namecoin NIP-05 解析移植到 Notedeck，支持 ElectrumX 查询、SOCKS5 Tor 路由与搜索栏集成。&lt;/p>
&lt;h3 id="divine-ships-v106-with-e2e-test-infrastructure-and-nip-49-import">diVine Ships v1.0.6 with E2E Test Infrastructure and NIP-49 Import&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a> 是一个短视频循环客户端，致力于在 &lt;a href="https://divine.video">divine.video&lt;/a> 恢复 Vine 档案。它发布了 &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.6">v1.0.6&lt;/a>，包含 127 个已合并 PR。该版本增加了 &lt;a href="https://nostrcompass.org/zh/topics/nip-49/">NIP-49&lt;/a> 账户导入、外部 &lt;a href="https://nostrcompass.org/zh/topics/nip-05/">NIP-05&lt;/a> 支持、多账户处理，以及由本地存储支持的重设计草稿与 clips 库，同时还提供 macOS 与实验性 Linux 构建。&lt;/p>
&lt;p>在工程层面，&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1928">PR #1928&lt;/a> 增加了一整套 E2E 集成测试基础设施，使用 Patrol 对 Docker 后端栈（relay、API、Blossom、Postgres、Redis、ClickHouse）进行原生 UI 自动化。五个认证旅程测试覆盖注册、验证、密码重置、会话过期与 token 刷新。&lt;a href="https://github.com/divinevideo/divine-mobile/pull/2105">PR #2105&lt;/a> 将视频加载策略从优先 HLS 切换为直连 MP4，并在必要时自动回退到 HLS，使加载时间从 30 到 60 秒缩短到几乎瞬时。&lt;a href="https://github.com/divinevideo/divine-mobile/pull/2076">PR #2076&lt;/a> 将首页 feed API 响应缓存到 SharedPreferences，以实现冷启动即时展示。&lt;a href="https://github.com/divinevideo/divine-mobile/pull/2104">PR #2104&lt;/a> 强制在 feed 中隐藏带 &lt;code>ai-generated&lt;/code> 标签的内容，而 &lt;a href="https://github.com/divinevideo/divine-mobile/pull/2100">PR #2100&lt;/a> 增加了一项安全设置，只显示由 diVine 托管的视频。Hive 向 Drift 的资料缓存迁移仍在 &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1881">PR #1881&lt;/a>、&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1883">PR #1883&lt;/a> 和 &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1903">PR #1903&lt;/a> 中持续推进，用 Drift DAO 替换约 1074 行 Hive 代码。&lt;/p>
&lt;h3 id="vector-v032-发布-nip-77-negentropy-同步与-mls-改进">Vector v0.3.2 发布 NIP-77 Negentropy 同步与 MLS 改进&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a> 是一个注重隐私的桌面消息应用，使用 MLS 群组加密以及 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a>（私密私信）和 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a>（加密载荷）加密，现已发布 &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.3.2">v0.3.2&lt;/a>。头条改动是面向 MLS 群组同步的 NIP-77 negentropy（&lt;a href="https://github.com/VectorPrivacy/Vector/commit/b06adf4af2673fb5ac5add01356999ea70628eac">commit b06adf4&lt;/a>），利用并行启动显著加快漏收消息的追赶速度。此次发布还增加了重构后的音频引擎并完整支持 Linux、带模糊预览的图片 spoiler、可点击超链接及富链接预览、供群组管理员使用的 &lt;code>@everyone&lt;/code> 配合 &lt;code>@mention&lt;/code> 提醒、emoji shortcode 自动补全、群组静音、在现有回应上点击 react，以及可取消的文件上传。Vector 还会显式过滤 NIP-17 群聊 event（&lt;a href="https://github.com/VectorPrivacy/Vector/commit/2179a51c0449b3a70663a1573195b7945adf58ba">commit 2179a51&lt;/a>），在群组加密中只使用 MLS。&lt;/p>
&lt;h2 id="版本发布">版本发布&lt;/h2>
&lt;h3 id="route96-v050-与-v051">Route96 v0.5.0 与 v0.5.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/v0l/route96">Route96&lt;/a> 是一个支持 Blossom 与 &lt;a href="https://nostrcompass.org/zh/topics/nip-96/">NIP-96&lt;/a>（HTTP 文件存储）的媒体服务器，已发布 &lt;a href="https://github.com/v0l/route96/releases/tag/v0.5.0">v0.5.0&lt;/a> 和 &lt;a href="https://github.com/v0l/route96/releases/tag/v0.5.1">v0.5.1&lt;/a>。v0.5.0 增加了自动 AI 标注、对未标注上传内容的回填、针对被标记文件的审核队列、基于 EXIF 的隐私拒绝策略，以及被封禁哈希的处理。&lt;/p>
&lt;p>v0.5.1 增加了感知图像哈希、用于相似图片查找的 locality-sensitive hashing、批量管理端点，以及发布的 &lt;a href="https://github.com/v0l/route96/releases/tag/v0.5.1">&lt;code>SKILL.md&lt;/code>&lt;/a>，用于描述服务器的 Blossom 与 NIP-96 API 接口，方便 agent 工具接入。&lt;a href="https://github.com/v0l/route96/pull/58">PR #58&lt;/a> 将后台 worker 迁移到完全异步的 Tokio task，而 &lt;a href="https://github.com/v0l/route96/commit/97b00a39e27b07053c2ad335dbf475bacba57bf8">commit 97b00a3&lt;/a> 增加了退避逻辑，避免热循环。&lt;/p>
&lt;h3 id="samizdat-v100-alpha">Samizdat v1.0.0-alpha&lt;/h3>
&lt;p>&lt;a href="https://github.com/satsdisco/samizdat">Samizdat&lt;/a> 是一个长文阅读与发布应用，可在 &lt;a href="https://samizdat.press">samizdat.press&lt;/a> 使用。它在 &lt;a href="https://github.com/satsdisco/samizdat/releases/tag/v1.0.0-alpha">v1.0.0-alpha&lt;/a> 中发布了首个 Android 构建。应用启动后默认进入精选 Press 页面，展示长篇 Nostr 文章，并通过底部标签在 Press、Feed、Saved 与 Write 视图之间切换。Android 版本加入了通过 Android Keystore 加密与生物识别解锁的原生密钥存储，支持处理 &lt;code>nostr:&lt;/code> URI 与 &lt;code>samizdat.press&lt;/code> 深链接，并通过 Android 应用选择器把签名流程交给 Amber、Primal 等签名器，而无需直接导入私钥。下拉刷新、跨屏幕尺寸的安全区域处理，以及原生分享、剪贴板、触感反馈和启动页集成，现在也已经成为 Android 外壳的一部分，而不是简单的 Web 包装层。&lt;/p>
&lt;p>&lt;a href="https://github.com/satsdisco/samizdat/commit/d17308f3c2e6020e14074fbb1c03a8f60f29a3e6">Commit d17308f&lt;/a> 为 Amber 与 Primal 流程加入基于 intent 的 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 签名，而 &lt;a href="https://github.com/satsdisco/samizdat/commit/e29dab84f7b58edd621f7b86ed7ca6458f965614">commit e29dab8&lt;/a> 则用原生 Capacitor 插件配合 &lt;code>startActivityForResult&lt;/code> 替换了一种 JavaScript bridge 权宜方案。该应用要求 Android 7.0+（API 24），在这个 alpha 阶段以调试版 APK 形式发布，仍未具备推送通知。当前的发布流程依赖签名器应用，而 &lt;code>nsec&lt;/code> 登录则覆盖本地阅读和账户访问。&lt;/p>
&lt;h3 id="calendar-by-form-v020">Calendar by Form* v0.2.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-calendar">Calendar by Form*&lt;/a> 是一个去中心化日历应用，支持 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a>（Gift Wrap）私密事件共享，可在 &lt;a href="https://calendar.formstr.app">calendar.formstr.app&lt;/a> 使用。它通过 &lt;a href="https://github.com/formstr-hq/nostr-calendar/pull/38">PR #38&lt;/a> 发布了 &lt;a href="https://github.com/formstr-hq/nostr-calendar/releases/tag/v0.2.0">v0.2.0&lt;/a>。该版本扩展了 &lt;a href="https://nostrcompass.org/zh/topics/nip-52/">NIP-52&lt;/a>（日历事件）的循环事件处理能力，超越了 v0.1.0 仅支持单个事件的基础。底层变更还涉及本地事件存储、签名器处理和 Android 通知管线。这是 Formstr 组织在上个月仓库迁移后第二个活跃应用。&lt;/p>
&lt;h3 id="mostro-v0164">Mostro v0.16.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> 是构建在 Nostr 之上的点对点 Bitcoin 交易所，现已发布 &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.4">v0.16.4&lt;/a>。其中包含了&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/">上周报道&lt;/a>的争议会话恢复修复（&lt;a href="https://github.com/MostroP2P/mostro/pull/599">PR #599&lt;/a>）和自动关闭修复（&lt;a href="https://github.com/MostroP2P/mostro/pull/606">PR #606&lt;/a>）。本次发布新增内容包括：&lt;a href="https://github.com/MostroP2P/mostro/pull/625">PR #625&lt;/a> 为 kind &lt;code>38384&lt;/code> 的用户评分 event 增加 &lt;code>days&lt;/code> 字段，&lt;a href="https://github.com/MostroP2P/mostro/pull/612">PR #612&lt;/a> 为这些评分 event 增加过期处理，而 &lt;a href="https://github.com/MostroP2P/mostro/pull/614">PR #614&lt;/a> 则把订单 event 的过期策略改为使用配置值，而不是硬编码的 24 小时窗口。&lt;a href="https://github.com/MostroP2P/mostro/pull/622">PR #622&lt;/a> 还增加了幂等性检查，以防止开发者费用重复支付。&lt;/p>
&lt;h3 id="mostro-mobile-v121">Mostro Mobile v1.2.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a> 是 Mostro P2P 交易所的 Flutter 客户端，发布了 &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.1">v1.2.1&lt;/a>，包含 11 项新功能和 11 项 bug 修复。该版本增加了争议聊天中的加密多媒体渲染（&lt;a href="https://github.com/MostroP2P/mobile/pull/514">PR #514&lt;/a>）、当订单进入终态时自动关闭争议 UI（&lt;a href="https://github.com/MostroP2P/mobile/pull/503">PR #503&lt;/a>）、用于导入 NWC 钱包的二维码扫描（&lt;a href="https://github.com/MostroP2P/mobile/commit/12eaee4d154fa31b07f82b96819de520e825aee6">commit 12eaee4&lt;/a>）、法语翻译以及 FCM 推送通知处理。&lt;a href="https://github.com/MostroP2P/mobile/pull/496">PR #496&lt;/a> 通过将 bip340 依赖固定在 v0.2.0，修复了 Schnorr 签名填充 bug。&lt;/p>
&lt;h3 id="0xchat-v154">0xchat v1.5.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/0xchat-app/0xchat-app-main">0xchat&lt;/a> 是一个支持 Cashu 的 Telegram 风格消息客户端，发布了 &lt;a href="https://github.com/0xchat-app/0xchat-app-main/releases/tag/v1.5.4-release">v1.5.4&lt;/a>，重点修复 Linux 桌面问题，包括 AppImage dock 图标、emoji 渲染、上下文菜单卡死以及回复/复制 UI 卡顿。该版本还修复了图片上传问题和 npub.cash 集成。&lt;a href="https://github.com/0xchat-app/0xchat-app-main/pull/49">PR #49&lt;/a> 移除了一个每 3 秒强制玻璃拟态重绘却没有实际作用的轮询定时器，消除了不必要的 UI 重建；同时通过并发加载 event cache，而不是阻塞 relay、联系人和频道启动，解除登录初始化的阻塞。&lt;/p>
&lt;h3 id="keep-v060">Keep v0.6.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a> 是一个支持 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 与 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 的 Android FROST 阈值签名器，已发布 &lt;a href="https://github.com/privkeyio/keep-android/releases/tag/v0.6.0">v0.6.0&lt;/a> 和 &lt;a href="https://github.com/privkeyio/keep-android/releases/tag/v0.6.1">v0.6.1&lt;/a>。v0.6.0 增加了钱包 descriptor 协调与管理 UI、带生物识别认证的备份/恢复流程（&lt;a href="https://github.com/privkeyio/keep-android/pull/184">PR #184&lt;/a>）、从阈值份额恢复 nsec（&lt;a href="https://github.com/privkeyio/keep-android/pull/187">PR #187&lt;/a>）、通过 Rust UniFFI 实现的跨平台动画二维码边框生成（&lt;a href="https://github.com/privkeyio/keep-android/pull/188">PR #188&lt;/a>），以及带链式验证的签名审计轨迹（&lt;a href="https://github.com/privkeyio/keep-android/pull/189">PR #189&lt;/a>）。v0.6.1 则通过 &lt;a href="https://github.com/privkeyio/keep-android/pull/191">PR #191&lt;/a> 将许可证从 AGPL-3.0 改为 MIT。&lt;/p>
&lt;h3 id="njump-v030">njump v0.3.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/njump">njump&lt;/a> 是用于浏览 Nostr 内容的静态网关，可在 &lt;a href="https://njump.me">njump.me&lt;/a> 使用。它发布了 &lt;a href="https://github.com/fiatjaf/njump/releases/tag/v0.3.0">v0.3.0&lt;/a>，其中包含 &lt;code>note1&lt;/code> 代码解析的破坏性变更，以及底层 nostr 库的更新。&lt;/p>
&lt;h3 id="roadstr-v011">Roadstr v0.1.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/jooray/roadstr">Roadstr&lt;/a> 是一个基于 Nostr 的去中心化道路事件上报应用，已发布其初始演示版本 &lt;a href="https://github.com/jooray/roadstr/releases/tag/v0.1.1">v0.1.1&lt;/a>。该应用使用 openfreemap.org 的矢量瓦片在地图上显示道路事件。&lt;/p>
&lt;h3 id="bitcredit-v053">Bitcredit v0.5.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core">Bitcredit&lt;/a> 是一个带有 Nostr 传输层并配套专用 relay（&lt;a href="https://www.bit.cr/">bit.cr&lt;/a>）的电子票据应用，已发布 &lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/releases/tag/v0.5.3">v0.5.3&lt;/a>。&lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/pull/846">PR #846&lt;/a> 为 API 增加了 &lt;code>payment_actions&lt;/code> 与 &lt;code>bill_state&lt;/code> 字段，用于支付与接受状态，&lt;a href="https://github.com/BitcreditProtocol/Bitcredit-Core/pull/849">PR #849&lt;/a> 则修复了匿名签名器的签名地址处理。&lt;/p>
&lt;h3 id="openchat-v010-alpha3">OpenChat v0.1.0-alpha.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a> 是一个构建在 Marmot 协议 .NET MLS 与 C# 库之上的聊天应用，已发布 &lt;a href="https://github.com/DavidGershony/openChat/releases/tag/v0.1.0-alpha.3">v0.1.0-alpha.3&lt;/a>。该版本增加了对 Amber 与 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 流程的外部签名器支持（&lt;a href="https://github.com/DavidGershony/openChat/commit/e568d979fe15eead19172f2eb6f8cf26ca845247">commit e568d97&lt;/a>），把 MLS 状态持久化移动到 MLS 服务内部，以消除崩溃窗口中的数据丢失（&lt;a href="https://github.com/DavidGershony/openChat/commit/4720bc8625136a0d5b0e23322bc0c50cd80577e8">commit 4720bc8&lt;/a>），并通过新的 CI 管线发布 Windows、Linux 与 Android 构建。&lt;/p>
&lt;h3 id="opensignal-v100">OpenSignal v1.0.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/turizspace/opensignal">OpenSignal&lt;/a> 是一个面向 Nostr 的 Kotlin Multiplatform 交易副驾应用，已发布 &lt;a href="https://github.com/turizspace/OpenSignal/releases/tag/v1.0.0">v1.0.0&lt;/a>。该版本打包了共享 KMP 模块，用于领域逻辑、图表渲染、Nostr 认证与发布、Blossom &lt;a href="https://nostrcompass.org/zh/topics/nip-96/">NIP-96&lt;/a> 上传支持，以及跨桌面端和 Android 外壳的基于 ONNX 的 AI 推理钩子。已发布的架构还包括一个用于图表截图分析的 FastAPI AI 服务、模型训练管线，以及输出结构化交易计划、仓位大小与警告的风险引擎。登录既支持原始 &lt;code>nsec&lt;/code> 密钥，也支持外部签名器，而最终输出流程以发布 Nostr event 结束，而非只在本地展示分析结果。&lt;/p>
&lt;h2 id="项目更新">项目更新&lt;/h2>
&lt;h3 id="formstr">Formstr&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-forms">Formstr&lt;/a> 是 Nostr 上的 Google Forms 替代品，它合并了 &lt;a href="https://github.com/formstr-hq/nostr-forms/pull/434">PR #434&lt;/a>（&lt;a href="https://github.com/formstr-hq/nostr-forms/commit/e9c4fd5dadfa0b83f1e87d7596eaf35f9fdb7da8">commit e9c4fd5&lt;/a>），增加了使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-49/">NIP-49&lt;/a>（私钥加密）加密私钥的注册流程。在这一变更之前，用户要么需要 &lt;a href="https://nostrcompass.org/zh/topics/nip-07/">NIP-07&lt;/a> 浏览器扩展，要么必须直接粘贴原始 &lt;code>nsec&lt;/code> 才能使用 Formstr。新流程会在客户端生成密钥对，通过 NIP-49 的 scrypt + XChaCha20-Poly1305 方案，用用户选择的密码加密私钥，并存储所得的 &lt;code>ncryptsec&lt;/code> 字符串。之后用户无需安装签名器扩展，只需输入密码即可再次登录。整个密钥管理过程始终留在客户端侧。&lt;/p>
&lt;h3 id="amethyst">Amethyst&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 这个功能丰富的 Android 客户端合并了四个 PR，发布了上周仍处于开放状态的、基于 Namecoin 的 &lt;a href="https://nostrcompass.org/zh/topics/nip-05/">NIP-05&lt;/a> 解析工作。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1734">PR #1734&lt;/a> 为 &lt;code>.bit&lt;/code>、&lt;code>d/&lt;/code> 和 &lt;code>id/&lt;/code> 标识符增加了通过 ElectrumX 实现的抗审查 NIP-05 验证。当 Amethyst 在 NIP-05 字段中检测到这些后缀时，它会查询 ElectrumX-NMC 服务器获取该名称的交易历史，并从最新输出中解析 &lt;code>NAME_UPDATE&lt;/code> 脚本以提取 Nostr pubkey，同时拒绝超过 36,000 个区块的过期名称，也就是 Namecoin 的到期窗口。启用 Tor 时，ElectrumX 连接会通过 SOCKS5 路由，并在明网与 &lt;code>.onion&lt;/code> 端点之间动态选择服务器。一个带一小时 TTL 的 LRU 缓存则避免重复的区块链查询。&lt;/p>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1771">PR #1771&lt;/a> 修复了该流程中的竞争条件与解析器正确性问题。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1785">PR #1785&lt;/a> 允许新用户在注册时从普通 NIP-05 标识符或 Namecoin 支持的标识符导入关注列表。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1786">PR #1786&lt;/a> 则加入自定义 ElectrumX 服务器设置，让用户自行选择由哪台服务器处理查询。&lt;/p>
&lt;h3 id="nostr-idb">nostr-idb&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/nostr-idb">nostr-idb&lt;/a> 是一个为 IndexedDB 中存储 Nostr event 提供辅助方法的库，它合并了 &lt;a href="https://github.com/hzrd149/nostr-idb/pull/6">PR #6&lt;/a>，增加对 &lt;a href="https://nostrcompass.org/zh/topics/nip-91/">NIP-91&lt;/a> AND 标签过滤器的支持。该改动把交集语义加入客户端侧过滤匹配逻辑，使 IndexedDB 查询可以要求所有列出的标签值都存在，而不是只匹配其中任意一个。&lt;a href="https://github.com/hzrd149/nostr-idb/pull/8">PR #8&lt;/a> 将该库更新到最新的 NIP-DB 接口，随后 &lt;a href="https://github.com/hzrd149/nostr-idb/commit/b49b3d32c575ff8214dc3fb07675109c2a971972">commit b49b3d3&lt;/a> 修复了订阅死锁，并移除了 nostr-tools 的生产依赖。&lt;/p>
&lt;h3 id="pensieve">Pensieve&lt;/h3>
&lt;p>&lt;a href="https://github.com/andotherstuff/pensieve">Pensieve&lt;/a> 是一个以归档优先的 Nostr 索引器，带有 ClickHouse 分析能力。它合并了 &lt;a href="https://github.com/andotherstuff/pensieve/pull/8">PR #8&lt;/a>，增加按条目生效的缓存 TTL 强制执行与按 key 的 miss 合并，以降低 API CPU 峰值。成本最高的时序端点，例如参与度统计、按小时活跃度和按 kind 活跃度，现已使用 10 分钟的服务端 TTL，而不再触发同步的重算风暴。&lt;/p>
&lt;h3 id="blossom">Blossom&lt;/h3>
&lt;p>&lt;a href="https://github.com/hzrd149/blossom">Blossom&lt;/a> 是去中心化媒体托管协议及其服务器栈，本周合并了两个 BUD-11 授权更新。&lt;a href="https://github.com/hzrd149/blossom/pull/91">PR #91&lt;/a> 把可选授权拆分到独立 BUD 中，并澄清 &lt;code>x&lt;/code> 与 &lt;code>server&lt;/code> 标签的作用。&lt;a href="https://github.com/hzrd149/blossom/pull/93">PR #93&lt;/a> 清理了按端点区分的授权行为，并正式定义用于上传校验的 &lt;code>X-SHA-256&lt;/code> 请求头。这两个 PR 将授权逻辑统一到 BUD-11 中，并消除了围绕上传、删除和媒体管理流程中请求哈希的歧义。&lt;/p>
&lt;h2 id="nip-更新">NIP 更新&lt;/h2>
&lt;p>最近 &lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>中的变更：&lt;/p>
&lt;p>&lt;strong>已合并：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-91/">NIP-91&lt;/a>（过滤器 AND 运算符）&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/1365">PR #1365&lt;/a>）：为标签过滤器增加交集语义，使 relay 可以回答要求所有列出标签值都匹配的查询，而不是任意一个都算命中。这样可以减少客户端侧后过滤和高标签密度查询中的带宽浪费。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a>（Relay 发现与存活监测）：防御措施&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2240">PR #2240&lt;/a>）：继&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/">上周报道&lt;/a>的 outbox 基准测试工作之后，该规范现在补充了关于 relay 监测数据失效路径的警告。客户端不得要求 kind &lt;code>30166&lt;/code> 监测 event 才能正常工作。监测器可能错误、过期或恶意。规范预期客户端交叉核验来源，避免仅凭单一 feed 就切断用户 relay 图中的大部分路径。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-39/">NIP-39&lt;/a>（资料中的外部身份）：kind 10011 注册清理&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2256">PR #2256&lt;/a>）：把 kind &lt;code>10011&lt;/code> 直接加入规范，与&lt;a href="https://nostrcompass.org/en/newsletters/2026-03-04-newsletter/">上周报道&lt;/a>的 Amethyst 实现保持一致。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>开放 PR 与讨论：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-70/">NIP-70&lt;/a>（Protected Events）：拒绝嵌入受保护 event 的 repost&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2251">PR #2251&lt;/a>）：如果某个 relay 对原始 event 执行 NIP-70，但接受携带同样内容的 repost，那么 &lt;code>-&lt;/code> 标签就失去了实际作用。这个 PR 增加了规则，要求 relay 同时拒绝 kind 6 和 kind 16 的受保护 event repost。&lt;a href="https://github.com/hoytech/strfry/pull/176">strfry PR #176&lt;/a> 已经实现了这一点。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-71/">NIP-71&lt;/a>（视频 Event）：多音轨&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2255">PR #2255&lt;/a>）：增加音频 &lt;code>imeta&lt;/code> 标签，用于替代音轨、语言变体以及纯音频流。客户端可以在保持视频文件稳定的同时切换音频语言，或者把音频作为独立轨道提供给类似播客的内容。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a>（Relay 信息文档）与 &lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a> Relay 属性&lt;/strong>（&lt;a href="https://github.com/nostr-protocol/nips/pull/2257">PR #2257&lt;/a>）：为 relay 信息文档增加结构化 &lt;code>attributes&lt;/code> 字段，使客户端和发现工具能获得当前自由文本描述之外的机器可读元数据。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-深度解析nip-49私钥加密">NIP 深度解析：NIP-49（私钥加密）&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-49/">NIP-49&lt;/a> 定义了客户端如何用密码加密私钥，并将结果编码为 &lt;code>ncryptsec&lt;/code> bech32 字符串。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-11-newsletter/#formstr">Formstr&lt;/a> 在其新的注册流程中使用了 NIP-49。&lt;/p>
&lt;p>这种格式并不绑定到专门的 event kind。客户端从原始的 32 字节 secp256k1 私钥开始，通过 scrypt 从用户密码派生对称密钥，使用 XChaCha20-Poly1305 加密私钥，然后把结果包装成 bech32 &lt;code>ncryptsec&lt;/code> 字符串。一个单字节标志会记录该密钥在加密前是否曾被以不安全方式处理过。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;4d47f4f0a6f6edbc1bbd7f4e2a45ec68f27cba91d6c6ab5cf28d8d87b0f3d57e&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;1f8b4c3e7b0f9451d4f9b8a7c6e5d4c3b2a1908f7e6d5c4b3a29181716151413&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1741699200&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30078&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;encrypted-key-backup&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;format&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;ncryptsec&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;encryption&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip49&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;ncryptsec1qgg9947rlpvqu76pj5ecreduf9jxhselq2nae2kghhvd5g7dgjtcxfqtd67p9m0w57lspw8gsq6yphnm8623nsl8xn9j4jdzz84zm3frztj3z7s35vpzmqf6ksu8r89qk5z2zxfmu5gv8th8wclt0h4p&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;6a8f6e4b2d1901735f0ad4b6e8c1f3a579d0e2b4c6f8a1d3e5f7091b2c3d4e5f11223344556677889900aabbccddeeff00112233445566778899aabbccddeeff&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>上面的 JSON event 是应用层示例，并不是 NIP-49 的要求。NIP 标准化的是加密密钥格式本身。客户端可以在本地存储 &lt;code>ncryptsec&lt;/code>，通过应用特定存储进行同步，或把它导出为备份字符串。密码在派生密钥前会按 Unicode NFKC 规范化，因此相同密码可在不同客户端和平台上得到一致解密结果。&lt;/p>
&lt;p>这个单字节密钥安全标志有三个已定义值：&lt;code>0x00&lt;/code> 表示密钥的处理历史未知，&lt;code>0x01&lt;/code> 表示已知该密钥曾被不安全地处理过，例如在加密前以明文粘贴到 Web 表单中，&lt;code>0x02&lt;/code> 表示密钥在安全环境中生成并加密，从未暴露。客户端可以利用它在导入已知存在不安全历史的密钥时给出警告。&lt;/p>
&lt;p>与明文 &lt;code>nsec&lt;/code> 导出相比，NIP-49 对密钥的保护更强，但加密强度最终仍取决于密码质量与配置的 scrypt 成本。更高的 &lt;code>LOG_N&lt;/code> 值会让离线猜测更困难，但也会拖慢合法解密操作。规范警告不要把加密密钥发布到公共 relay，因为攻击者会从收集密文中获益，用于离线破解。相比之下，&lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 远程签名完全避免暴露密钥，&lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> Android 签名则把密钥保留在专用签名器应用中。NIP-49 填补的是另一个位置：为自主管理密钥的用户提供可移植的加密备份。&lt;/p>
&lt;p>相关实现包括：&lt;a href="https://github.com/formstr-hq/nostr-forms/pull/434">Formstr PR #434&lt;/a> 的注册流程，&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a> 的 ncryptsec 备份与恢复，&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-11-newsletter/#divine-ships-v106-with-e2e-test-infrastructure-and-nip-49-import">diVine v1.0.6&lt;/a> 的账户导入，&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-11-newsletter/#keep-v060">Keep v0.6.0&lt;/a> 的 FROST 份额导出，以及 &lt;a href="https://nsec.app">nsec.app&lt;/a> 和 &lt;a href="https://github.com/getAlby/hub">Alby&lt;/a> 等密钥管理工具。&lt;/p>
&lt;h2 id="nip-深度解析nip-70protected-events">NIP 深度解析：NIP-70（Protected Events）&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-70/">NIP-70&lt;/a> 定义了受保护 event。当某个 event 带有 &lt;code>[&amp;quot;-&amp;quot;]&lt;/code> 标签时，relay 必须拒绝它，除非该 relay 要求 &lt;a href="https://nostrcompass.org/zh/topics/nip-42/">NIP-42&lt;/a> 认证，并且认证过的 pubkey 与 event 作者匹配。&lt;/p>
&lt;p>NIP-42 认证流程如下：relay 发送一个包含随机字符串的 &lt;code>AUTH&lt;/code> challenge，客户端则响应一个已签名的 kind &lt;code>22242&lt;/code> event，其标签中包含 relay URL 和该 challenge。relay 会验证签名，并检查认证 event 中的 pubkey 是否与正在发布的受保护 event 中的 pubkey 一致。如果 pubkey 不匹配，relay 就会以 &lt;code>restricted&lt;/code> 前缀拒绝该 event。&lt;/p>
&lt;p>event 内容本身仍然可以是公开的。&lt;code>-&lt;/code> 标签只控制谁可以把该 event 发布到遵守该标签的 relay。这适用于 &lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a>（简单群组）的半封闭 feed、仅成员可见的 relay 空间，以及其他作者希望限制通过 relay 图再传播的场景。NIP-70 只是一个单标签约定，而不是新的 event kind，因此任何现有 event kind 都可以携带 &lt;code>-&lt;/code> 标签。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;cb8feca582979d91fe90455867b34dbf4d65e4b86e86b3c68c368ca9f9eef6f2&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1707409439&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;-&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;hello members of the secret group&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;fa163f5cfb75d77d9b6269011872ee22b34fb48d23251e9879bb1e4ccbdd8aaaf4b6dc5f5084a65ef42c52fbcde8f3178bac3ba207de827ec513a6aa39fa684c&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>即便某个 relay 阻止第三方发布原始 event，仍然有人可以把内容封装进 repost 重新发布。&lt;a href="https://github.com/nostr-protocol/nips/pull/2251">PR #2251&lt;/a> 试图解决这一点，要求 relay 也必须拒绝 kind 6 和 kind 16 中包含受保护内容的 repost。&lt;a href="https://github.com/hoytech/strfry/pull/156">strfry PR #156&lt;/a> 为 protected event 增加了 NIP-42 认证处理，&lt;a href="https://github.com/hoytech/strfry/pull/176">strfry PR #176&lt;/a> 则阻止 repost 嵌入受保护内容。&lt;/p>
&lt;p>NIP-70 控制的是 relay 行为。接收者仍然可以把内容复制到其他地方，规范也明确如此。&lt;code>-&lt;/code> 标签给 relay 一个机器可读信号，让其拒绝再发布。相比之下，&lt;a href="https://nostrcompass.org/zh/topics/nip-62/">NIP-62&lt;/a>（请求消失）是在事后请求 relay 删除数据，而 NIP-70 则是在入口阶段阻止未授权发布。两者是互补的：作者可以先把 event 标记为受保护，以限制扩散；之后如果希望 relay 移除内容，再发出删除请求。&lt;/p>
&lt;hr>
&lt;p>本周就到这里。你正在构建什么，或者有新闻想分享？&lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 私信联系我们&lt;/a>，或直接在 Nostr 上找到我们。&lt;/p></content:encoded></item><item><title>Nostr Compass #12</title><link>https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/</link><pubDate>Wed, 04 Mar 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/marmot-protocol/mdk">Marmot Development Kit&lt;/a> 发布&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/#marmot-development-kit-%e5%8f%91%e5%b8%83%e9%a6%96%e4%b8%aa%e5%85%ac%e5%bc%80%e7%89%88%e6%9c%ac">首个公开版本&lt;/a>，支持加密媒体和多语言绑定。&lt;a href="https://github.com/nostrability/outbox">Nostrability&lt;/a> 发布&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/#outbox-%e6%a8%a1%e5%9e%8b%e6%b7%b1%e5%ba%a6%e5%89%96%e6%9e%90">outbox 模型基准测试&lt;/a>，涵盖 14 种 relay 选择算法。&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a> 在八天内从&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/#wisp-%e4%bb%8e-alpha-%e5%bf%ab%e9%80%9f%e8%bf%88%e5%85%a5-beta">首个 alpha 进入 beta&lt;/a>，支持 Tor 和 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a>（Android 签名器应用）签名。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/#nip-%e6%9b%b4%e6%96%b0">NIP-91&lt;/a>（AND 过滤器）合并。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/#vector-v031">Vector v0.3.1&lt;/a> 实现 negentropy 同步，性能提升 15 倍。本期还包括&amp;quot;Nostr 五年二月回顾&amp;quot;专题，追溯协议从服务三个 relay 的规范重写，到 Damus App Store 爆发，再到网状网络和 AI 代理提案的发展历程。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="outbox-模型深度剖析">Outbox 模型深度剖析&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrability/outbox">Nostrability&lt;/a> 发布了一系列 outbox 模型基准测试，评估不同 relay 选择算法从去中心化 relay 网络检索 event 的效果。该项目在十天内合并了 16 个 PR 和 76 次提交，产出了迄今为止可能是最全面的 &lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a>（Relay 列表元数据）实现策略实证分析。&lt;/p>
&lt;p>基准测试针对五种语言的 15 个客户端和库中的真实关注列表，测试了 14 种 relay 选择算法。仅查询热门 relay 的基线方法大约能检索到 26% 的 event。贪婪集合覆盖配合 Thompson 采样可达到 80-90% 的召回率。加入基于双曲贴现和 EWMA relay 延迟跟踪的延迟感知变体后，在六个测试场景中，2 秒标记时的完整性从 62-80% 提升到 72-96%。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/marmot-protocol/mdk">Marmot Development Kit&lt;/a> 发布&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/#marmot-development-kit-%e5%8f%91%e5%b8%83%e9%a6%96%e4%b8%aa%e5%85%ac%e5%bc%80%e7%89%88%e6%9c%ac">首个公开版本&lt;/a>，支持加密媒体和多语言绑定。&lt;a href="https://github.com/nostrability/outbox">Nostrability&lt;/a> 发布&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/#outbox-%e6%a8%a1%e5%9e%8b%e6%b7%b1%e5%ba%a6%e5%89%96%e6%9e%90">outbox 模型基准测试&lt;/a>，涵盖 14 种 relay 选择算法。&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a> 在八天内从&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/#wisp-%e4%bb%8e-alpha-%e5%bf%ab%e9%80%9f%e8%bf%88%e5%85%a5-beta">首个 alpha 进入 beta&lt;/a>，支持 Tor 和 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a>（Android 签名器应用）签名。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/#nip-%e6%9b%b4%e6%96%b0">NIP-91&lt;/a>（AND 过滤器）合并。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/#vector-v031">Vector v0.3.1&lt;/a> 实现 negentropy 同步，性能提升 15 倍。本期还包括&amp;quot;Nostr 五年二月回顾&amp;quot;专题，追溯协议从服务三个 relay 的规范重写，到 Damus App Store 爆发，再到网状网络和 AI 代理提案的发展历程。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="outbox-模型深度剖析">Outbox 模型深度剖析&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrability/outbox">Nostrability&lt;/a> 发布了一系列 outbox 模型基准测试，评估不同 relay 选择算法从去中心化 relay 网络检索 event 的效果。该项目在十天内合并了 16 个 PR 和 76 次提交，产出了迄今为止可能是最全面的 &lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a>（Relay 列表元数据）实现策略实证分析。&lt;/p>
&lt;p>基准测试针对五种语言的 15 个客户端和库中的真实关注列表，测试了 14 种 relay 选择算法。仅查询热门 relay 的基线方法大约能检索到 26% 的 event。贪婪集合覆盖配合 Thompson 采样可达到 80-90% 的召回率。加入基于双曲贴现和 EWMA relay 延迟跟踪的延迟感知变体后，在六个测试场景中，2 秒标记时的完整性从 62-80% 提升到 72-96%。&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a>（Relay 监控）的死 relay 过滤效果显著。通过 &lt;a href="https://nostr.watch">nostr.watch&lt;/a> 活跃性数据预过滤 relay 候选者，移除了 40-64% 的死 relay，relay 成功率从 30% 翻倍至 75-85%。信息流加载时间下降 39%（从 10 个场景的 40 秒降至 24 秒）。EOSE 竞速模拟发现，等待 EOSE 加 200 毫秒宽限期比在第一个 relay 完成时即停止获得更好的完整性。&lt;/p>
&lt;p>对于无法完全重写 relay 路由的客户端，&amp;ldquo;混合 outbox 增强&amp;quot;方法在现有硬编码应用 relay 之上添加按作者的 outbox 查询。这种混合方案实现了 80% 的一年 event 召回率（基线为 26%），为具有传统 relay 架构的客户端提供了迁移路径。&lt;/p>
&lt;h3 id="contextvm-提交-mcp-nip-并发布短暂-gift-wrap">ContextVM 提交 MCP NIP 并发布短暂 Gift Wrap&lt;/h3>
&lt;p>&lt;a href="https://contextvm.org">ContextVM&lt;/a>，连接 Nostr 与 &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a> 的协议，本周在 &lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>提交了两项提案。&lt;a href="https://github.com/nostr-protocol/nips/pull/2246">PR #2246&lt;/a> 将 CVM 形式化为使用短暂 kind 25910 event 在 Nostr 上传输 MCP JSON-RPC 消息的约定。&lt;a href="https://github.com/nostr-protocol/nips/pull/2245">PR #2245&lt;/a> 为 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a>（Gift Wrap）扩展了一种短暂 kind（21059），遵循 &lt;a href="https://nostrcompass.org/zh/topics/nip-01/">NIP-01&lt;/a>（基本协议流程）的短暂语义，允许 relay 在消息投递后丢弃包裹的消息。&lt;/p>
&lt;p>短暂 gift wrap 约定作为 &lt;a href="https://docs.contextvm.org/spec/ceps/cep-19/">CEP-19&lt;/a> 在 ContextVM SDK v0.6.x 发布系列中发布。&lt;a href="https://github.com/ContextVM/sdk">SDK 实现&lt;/a>添加了一个 &lt;code>GiftWrapMode&lt;/code> 枚举，包含三种设置：OPTIONAL（接受两种 kind 并自动检测对端能力）、EPHEMERAL（仅 kind 21059）和 PERSISTENT（仅 kind 1059）。对于 AI 工具调用，短暂模式避免在 relay 上存储中间请求-响应流量，降低存储成本和隐私暴露。&lt;/p>
&lt;p>独立运营者在网络上推出了新的公共 MCP 服务器，包括一个 Wolfram Alpha 查询服务器。ContextVM 团队在 v0.6.x 发布周期中同步发布了 CEP-15（通用工具 schema）和 CEP-17（服务器 relay 列表发布）。&lt;/p>
&lt;h3 id="marmot-development-kit-发布首个公开版本">Marmot Development Kit 发布首个公开版本&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/mdk">MDK&lt;/a>（Marmot Development Kit），驱动 &lt;a href="https://github.com/sledtools/pika">Pika&lt;/a> 和 &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> 进行 &lt;a href="https://nostrcompass.org/zh/topics/mls/">Marmot&lt;/a> 加密消息的 Rust 库，以 &lt;a href="https://github.com/marmot-protocol/mdk/releases/tag/v0.6.0">v0.6.0&lt;/a> 作为首个公开版本发布。超过 200 个 PR 合并到此版本中，新增六位贡献者。&lt;/p>
&lt;p>此版本包括加密媒体支持（MIP-04，使用 HKDF 种子派生的 MIP-01 v2）、确定性 commit 竞争解决（MIP-03）、加密本地存储、Marmot commit 和提案的管理员授权验证，以及用于协议可扩展性的 GREASE 支持。绑定适用于 Kotlin、Python、Ruby 和 Windows，同时支持 Android 交叉编译。该库升级至 OpenMLS 0.8.0，包含安全公告修复和在内存中清零敏感值的 &lt;code>Secret&amp;lt;T&amp;gt;&lt;/code> 类型。&lt;/p>
&lt;p>配套协议变更（&lt;a href="https://github.com/marmot-protocol/marmot/pull/48">MIP-03&lt;/a>）将 kind 445 消息的 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a>（加密载荷）加密替换为 ChaCha20-Poly1305。NIP-44 按规范要求 UTF-8 字符串输入，使得无法通过标准 TypeScript Nostr 库传递原始 Marmot 消息字节。替代方案直接从 Marmot 导出密钥派生密钥。此破坏性变更需要在&lt;a href="https://github.com/marmot-protocol/marmot/pull/48">核心规范&lt;/a>、&lt;a href="https://github.com/marmot-protocol/mdk/pull/208">MDK&lt;/a> 和 &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/54">TypeScript SDK&lt;/a> 之间协调更新。&lt;/p>
&lt;p>&lt;a href="https://github.com/marmot-protocol/marmot-ts">marmot-ts&lt;/a>，由 hzrd149 维护的 TypeScript 实现，合并了四个包含破坏性 API 变更的 PR。一次&lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/52">综合更新&lt;/a>添加了用于创建/发布/轮换生命周期的密钥包管理器、&lt;code>sendChatMessage&lt;/code> 便捷方法、无需加入即可预览邀请（&lt;code>readInviteGroupInfo&lt;/code>）、用于前向保密轮换的自更新，以及结构化调试日志。群组解密 API 从 &lt;code>readGroupMessage&lt;/code> 重命名为 &lt;code>decryptGroupMessage&lt;/code>，提供更丰富的结果变体（processed/skipped/rejected/unreadable）。gzuuus 贡献了示例清理工作，添加了 NIP-65 relay 支持和符合 MIP-00 的最后手段密钥包处理。&lt;/p>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise-rs">White Noise CLI&lt;/a>（&lt;code>wn&lt;/code>），驱动移动应用和新 TUI 的 Rust 后端，在十天内合并了 16 个 PR。签名器生命周期处理通过 RAII 作用域守卫获得了取消安全性（&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/538">PR #538&lt;/a>），修复了一类中断操作可能泄漏签名器状态的 bug。当必需的 relay 列表（kind 10002/10050/10051）缺失时，登录现在会阻塞（&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/515">PR #515&lt;/a>），当收件箱列表不存在时，giftwrap 订阅回退到 &lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a> relay（&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/518">PR #518&lt;/a>）。调试模式（&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/528">PR #528&lt;/a>）以 JSON 输出暴露数据库查询和 MLS ratchet-tree 检查。其他修复涉及签名器重新注册后的订阅恢复、欢迎消息补发时机、relay 过滤器验证和用户搜索半径限制。&lt;/p>
&lt;p>Marmot 本周在核心 Rust 技术栈之外有了显著扩展。&lt;a href="https://github.com/marmot-protocol/wn-tui">White Noise TUI&lt;/a>，White Noise 消息栈的终端界面，于 3 月 3 日发布。它将 &lt;code>wn&lt;/code> CLI 作为子进程包装，通过 Elm 风格的单向架构渲染其 JSON 输出，提供带未读指示器的多会话导航、群组创建和成员搜索、实时消息流，以及终端中的表情回应。&lt;/p>
&lt;p>&lt;a href="https://github.com/DavidGershony">DavidGershony&lt;/a> 发布了完整的 C# Marmot 技术栈，镜像 Rust 工具链的分层架构。&lt;a href="https://github.com/DavidGershony/dotnet-mls">dotnet-mls&lt;/a> 用 C# 实现 MLS RFC 9420 密码学原语。&lt;a href="https://github.com/DavidGershony/marmot-cs">marmot-cs&lt;/a> 在此基础上添加 Nostr relay 传输，相当于 MDK 的 C# 版本。&lt;a href="https://github.com/DavidGershony/openChat">OpenChat&lt;/a>，使用 .NET 9 和 Avalonia UI 构建的跨平台桌面应用，将两者整合为一个可用的聊天客户端，支持 NIP-44 私信、Marmot 群组加密、&lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a>（Nostr Connect）远程签名和多 relay 状态指示器。&lt;/p>
&lt;p>&lt;a href="https://github.com/zerosats/mdk-pwa-reference">MDK PWA Reference&lt;/a> 提供了一个 Progressive Web App 模板，用于构建 Marmot 加密应用，实验性地支持 AI 代理参与群聊和通过 Arkade 钱包基础设施进行 Bitcoin 支付。&lt;/p>
&lt;h3 id="wisp-从-alpha-快速迈入-beta">Wisp 从 Alpha 快速迈入 Beta&lt;/h3>
&lt;p>&lt;a href="https://github.com/barrydeen/wisp">Wisp&lt;/a> 是一个新的 Android Nostr 客户端，从 2 月 24 日的&lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.1.0-alpha">首个 alpha&lt;/a> 到 3 月 3 日的 &lt;a href="https://github.com/barrydeen/wisp/releases/tag/v0.3.4-beta">v0.3.4-beta&lt;/a>，在八天内产出 19 个版本、115 个合并 PR 和 276 次提交。&lt;/p>
&lt;p>功能发展轨迹涵盖了大多数客户端需要数月才能达到的领域。v0.1.0 发布时即支持 outbox/inbox relay 模型和引导流程。到 v0.1.3，客户端已具备面向 Amber 的 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> intent 签名、用于 &lt;code>.onion&lt;/code> relay 连接的内嵌 Tor SOCKS5 代理，以及 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a>（Nostr Wallet Connect）。v0.2.0 以 beta 身份推出，带有静音列表过滤和自定义表情支持，v0.2.4 添加了内容警告覆盖层。v0.3.x 系列引入了 &lt;a href="https://nostrcompass.org/zh/topics/nip-13/">NIP-13&lt;/a> 笔记工作量证明、带持久设置的后台 PoW 挖矿、&lt;code>.onion&lt;/code> relay 存储和静音线程通知。&lt;/p>
&lt;p>通过 Google ML Kit 实现的设备端翻译在初始模型下载后无需网络访问即可本地运行。交互式社交图谱可视化使用速度 Verlet 物理模拟，以约 30fps 运行，支持捏合缩放导航和个人资料查看。&lt;/p>
&lt;h2 id="版本发布">版本发布&lt;/h2>
&lt;h3 id="vector-v031">Vector v0.3.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a>，Marmot 加密消息应用，发布了 &lt;a href="https://github.com/VectorPrivacy/Vector/releases/tag/v0.3.1">v0.3.1&lt;/a>，包含群组管理改进和性能优化。多管理员群组、批量邀请、按 npub 邀请和群组头像扩展了协作功能。Android 后台通知现在支持内联回复和标记已读操作。&lt;/p>
&lt;p>基于 &lt;a href="https://nostrcompass.org/zh/topics/negentropy/">Negentropy&lt;/a> 的确定性同步可检索完整会话历史，包括离线期间错过的消息。语音转文字在 Android 上通过 GPU 加速重建。文件附件处理进行了全面改造，支持下载进度、重试状态、目录压缩发送和全程实时进度指示器。启动时间、图片处理、音频播放和整体 UI 响应速度提升超过 15 倍。应用安装体积减少超过三分之一，前端减少约一半。新增 32 位 ARM Android 支持。&lt;/p>
&lt;h3 id="alby-hub-v1215">Alby Hub v1.21.5&lt;/h3>
&lt;p>&lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a>，支持 Nostr Wallet Connect（&lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a>）的自托管 Lightning 节点，发布了 &lt;a href="https://github.com/getAlby/hub/releases/tag/v1.21.5">v1.21.5&lt;/a>。默认 NWC 配置中添加了第二个 relay，提升 relay 重启期间的可靠性。修复了交易列表中无效 zap 数据的问题，解决了格式错误的 &lt;a href="https://nostrcompass.org/zh/topics/nip-57/">NIP-57&lt;/a>（Lightning Zaps）event 的显示问题。应用商店新增 Alby CLI 和 LNVPS 条目。&lt;/p>
&lt;h3 id="nospeak-v012x">nospeak v0.12.x&lt;/h3>
&lt;p>&lt;a href="https://github.com/psic4t/nospeak">nospeak&lt;/a>，基于文本的 Nostr 消息客户端，在此期间发布了三个版本。&lt;a href="https://github.com/psic4t/nospeak/releases/tag/v0.12.0">v0.12.0&lt;/a> 添加了 PIN 应用锁（4 位键盘）和超过 15 种新语言翻译，包括孟加拉语、泰语、越南语、印地语、阿拉伯语、希伯来语、乌尔都语、土耳其语、日语、中文、韩语、荷兰语、波兰语、俄语和波斯语（含 RTL 支持）。&lt;a href="https://github.com/psic4t/nospeak/releases/tag/v0.12.1">v0.12.1&lt;/a> 引入了 Cypher 主题（纯黑背景配青色强调色），以及 Android 视频海报生成。&lt;a href="https://github.com/psic4t/nospeak/releases/tag/v0.12.2">v0.12.2&lt;/a> 在联系人菜单中添加了聊天导出和查看个人资料功能。&lt;/p>
&lt;h3 id="citrine-v200-pre2">Citrine v2.0.0-pre2&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a>，greenart7c3 开发的 Android 个人 relay，发布了 &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v2.0.0-pre2">v2.0.0-pre2&lt;/a>，通过新数据库索引和重构的 Kotlin 协程提升 relay 性能。每个托管的 Web 应用现在在独立端口启动。全文搜索和重新设计的 event 界面（支持 event 展开）完善了此次更新。&lt;/p>
&lt;h3 id="noornote-v05x">NoorNote v0.5.x&lt;/h3>
&lt;p>&lt;a href="https://github.com/77elements/noornote">NoorNote&lt;/a>，基于 Nostr 的笔记应用，从 &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.5.0">v0.5.0&lt;/a> 到 &lt;a href="https://github.com/77elements/noornote/releases/tag/v0.5.7">v0.5.7&lt;/a> 发布了 8 个版本。v0.5.0 登陆 Android，添加了 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> Amber 签名器支持和 &lt;a href="https://nostrcompass.org/zh/topics/nip-71/">NIP-71&lt;/a>（视频 Event）笔记发布。v0.5.1 重新设计的欢迎页包含公共时间线预览，APK 缩减至 15 MB。v0.5.2 的 Relay 浏览器让用户通过可分享的 URL 浏览公共 relay 时间线，同时支持媒体下载和 &lt;a href="https://nostrcompass.org/zh/topics/nip-30/">NIP-30&lt;/a> 自定义表情回应。后续 v0.5.7 之前的版本修复了协作&amp;quot;部落&amp;quot;笔记共享系统中的同步竞争条件。&lt;/p>
&lt;h3 id="noscall-v051">NosCall v0.5.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/sanah9/noscall">NosCall&lt;/a>，Nostr 语音和视频通话应用，发布了 &lt;a href="https://github.com/sanah9/noscall/releases/tag/v0.5.1-release">v0.5.1&lt;/a>，新增语音消息支持、优化的桌面体验（含群组入口）、桌面联系人收藏、联系人备注和筛选、数据导出和清理选项，以及系统字号无障碍支持。&lt;/p>
&lt;h3 id="shosho-v0130">Shosho v0.13.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a>，Nostr 直播应用，发布了 &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.13.0">v0.13.0&lt;/a>，支持从流卡片菜单下载 MP4 回放，以及 &lt;a href="https://nostrcompass.org/zh/topics/nip-05/">NIP-05&lt;/a>（基于 DNS 的验证）个人资料功能。RTMP 发布器迁移至 Expo Modules API。低带宽连接下的直播性能得到改善，旧设备崩溃和 iOS 向 &lt;a href="https://zap.stream">Zap.Stream&lt;/a> 推流的问题已修复。&lt;/p>
&lt;h3 id="nostr-java-v200">nostr-java v2.0.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/tcheeric/nostr-java">nostr-java&lt;/a> 发布了 &lt;a href="https://github.com/tcheeric/nostr-java/releases/tag/v2.0.0">v2.0.0&lt;/a>，支持可配置的 WebSocket 缓冲区大小，允许应用处理更大的 Nostr event 而不会截断。主版本号变更反映了连接 API 的破坏性变更。&lt;/p>
&lt;h3 id="prism-110">Prism 1.1.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a> 发布了 &lt;a href="https://github.com/hardran3/Prism/releases/tag/1.1.0">1.1.0&lt;/a>，支持长文内容（kind 30023 文章）和用于在应用中直接撰写的 Markdown 编辑器，随后发布了 &lt;a href="https://github.com/hardran3/Prism/releases/tag/1.1.1">1.1.1&lt;/a> bug 修复版本。&lt;/p>
&lt;h3 id="angor-v026">Angor v0.2.6&lt;/h3>
&lt;p>&lt;a href="https://github.com/block-core/angor">Angor&lt;/a>，Bitcoin 众筹平台，发布了 &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.6">v0.2.6&lt;/a>，集成 Boltz 并提供一键投资流程。投资和基金项目类型均已在 testnet 上端到端运行。团队表示 UI 完成度约为 70%。&lt;/p>
&lt;h2 id="nip-更新">NIP 更新&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>的最新变更：&lt;/p>
&lt;p>&lt;strong>已合并：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1365">NIP-91：过滤器 AND 运算符&lt;/a>&lt;/strong>：为 relay 订阅中的 tag 数组添加 AND 过滤语义。目前，在 tag 过滤器中指定多个值（例如多个 &lt;code>p&lt;/code> tag）会匹配包含其中任何一个的 event。NIP-91 允许客户端要求 event 同时匹配所有指定的 tag 值，减少带宽并加速索引操作。多个 relay 实现已存在，包括 nostr-rs-relay、satellite-node、worker-relay 和 applesauce。此前编号为 NIP-119。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2247">NIP-30：emoji tag 中的表情集地址&lt;/a>&lt;/strong>：&lt;a href="https://nostrcompass.org/zh/topics/nip-30/">NIP-30&lt;/a> 中的自定义 emoji tag 现在可以包含可选的表情集地址。在客户端中点击表情可以打开其所属的表情集进行收藏或浏览。源自 &lt;a href="https://github.com/purrgrammer/chachi">Chachi&lt;/a> 客户端。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2111">NIP-29：添加 unallowpubkey 和 unbanpubkey&lt;/a>&lt;/strong>：为 &lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a> 群组聊天新增两个管理员命令。&lt;code>unallowpubkey&lt;/code> 从允许列表中移除 pubkey 而不封禁。&lt;code>unbanpubkey&lt;/code> 解除封禁而不将 pubkey 重新添加到成员列表。此前，从允许列表中移除某人的唯一方式也会封禁他们，而解除封禁则需要重新将用户添加为成员。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>开放 PR 和讨论：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2244">NIP-A7：Spells&lt;/a>&lt;/strong>（2 月 27 日开启）：由 purrgrammer 提出，spells 是作为 kind 777 event 发布的可移植已保存 Nostr 查询。spell 在结构化 tag 中编码 REQ 或 COUNT 过滤器（&lt;code>k&lt;/code> 用于 kind，&lt;code>authors&lt;/code> 用于 pubkey，&lt;code>tag&lt;/code> 用于任意 tag 过滤），并提供运行时变量：&lt;code>$me&lt;/code> 解析为已登录用户的 pubkey，&lt;code>$contacts&lt;/code> 展开为用户的 kind 3 关注列表。相对时间戳（&lt;code>7d&lt;/code>、&lt;code>2w&lt;/code>、&lt;code>1mo&lt;/code>）让 spell 无需硬编码日期即可定义滚动时间窗口。已在 &lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a> 和 &lt;a href="https://github.com/purrgrammer/grimoire">Grimoire&lt;/a> 中实现，spell 让用户创建、分享和订阅可跨客户端的策展信息流。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2245">NIP-59：短暂 Gift Wrap（kind 21059）&lt;/a>&lt;/strong>（2 月 27 日开启）：为 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a> gift wrap 添加短暂变体。Kind 21059 遵循 NIP-01 短暂语义，因此 relay 在投递后丢弃 event。由 ContextVM 为 MCP 传输提出，适用于无需消息持久化的场景。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2246">ContextVM：基于 Nostr 的 MCP JSON-RPC&lt;/a>&lt;/strong>（2 月 27 日开启）：指定如何使用短暂 kind 25910 event 通过 &lt;code>p&lt;/code> 和 &lt;code>e&lt;/code> tag 进行寻址和关联来传输 Model Context Protocol 消息。设计刻意精简，将协议细节推迟到 &lt;a href="https://docs.contextvm.org">ContextVM 规范&lt;/a>。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2238">NIP-29：音视频直播空间&lt;/a>&lt;/strong>（2 月 25 日开启，草案）：fiatjaf 的草案，为 &lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a> 群组扩展直播音视频功能。提案在群组元数据 event 中添加可选的 &lt;code>livekit&lt;/code> 和 &lt;code>no-text&lt;/code> tag。当用户想加入语音空间时，客户端在 &lt;code>/.well-known/nip29/livekit/{groupId}&lt;/code> 向 relay 请求 JWT。Relay 检查群组成员资格并颁发以用户十六进制 pubkey 作为 &lt;code>sub&lt;/code> 声明的令牌，该令牌传递给 &lt;a href="https://livekit.io/">LiveKit&lt;/a> 用于媒体传输。语音房间访问继承群组现有的权限模型，relay 端的成员规则决定谁可以发言。正在 Pyramid 和 Chachi 中测试。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2235">协作 Event 所有权&lt;/a>&lt;/strong>（2 月 24 日开启）：pablof7z 提出一种指针 event（kind 39382），通过在 &lt;code>p&lt;/code> tag 中列出共同所有者 pubkey 并在 &lt;code>k&lt;/code> tag 中指定目标 event kind 来声明协作空间。任何列出的所有者都可以发布相同 &lt;code>d&lt;/code> tag 的该 kind event，客户端通过查询所有所有者并取最新 event 来解析当前状态。仅当可验证的 &lt;code>a&lt;/code> tag 反向引用指针且作者出现在其 &lt;code>p&lt;/code> tag 中时，才显示共同作者署名，防止伪造声明。这使得共享 wiki 页面和共同编写的资源无需将控制权分配给单个密钥对。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2234">NIP-09：级联删除转发&lt;/a>&lt;/strong>（2 月 24 日开启）：当原作者删除笔记时，relay 也应删除引用它的 kind 6 或 kind 16 转发。动机来自隐私考虑：转发可能在作者删除源内容后保留意外泄露的信息。此变更仅在 relay 端进行，不需要客户端修改。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2233">NIP-07：peekPublicKey&lt;/a>&lt;/strong>（2 月 23 日开启）：为 &lt;a href="https://nostrcompass.org/zh/topics/nip-07/">NIP-07&lt;/a> 浏览器扩展添加 &lt;code>peekPublicKey()&lt;/code> 方法。与 &lt;code>getPublicKey()&lt;/code> 不同，它在不提示用户确认的情况下返回当前 pubkey，在用户启用自动登录时实现静默自动登录。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2248">NIP-BB：Book&lt;/a>&lt;/strong>（2 月 28 日开启，草案）：定义四种可寻址 event kind（30300-30303）用于在 Nostr 上结构化出版书籍。Cover event 保存根元数据，包括标题、封面图片、通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-32/">NIP-32&lt;/a>（标签系统）label 指定的许可证和语言代码。Index event 使用 base62 分数索引将每章映射到其位置，使作者可以在现有章节之间插入新章节而无需重新编号。Chapter event 作为带可选图片的结构性标题，Episode event 承载实际散文（上限 30,000 字符），带有定位图片 tag。评论使用对 Cover event 的 Zap，以 Zap 描述作为评论文本。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2242">NIP-54：从 Asciidoc 切换到 Djot&lt;/a>&lt;/strong>（2 月 26 日开启）：继 12 月的 &lt;a href="https://nostrcompass.org/en/newsletters/2025-12-31-newsletter/">d-tag 国际化修复&lt;/a>之后，此 PR 提议将 &lt;a href="https://nostrcompass.org/zh/topics/nip-54/">NIP-54&lt;/a> wiki 的 Asciidoc 标记格式替换为 &lt;a href="https://djot.net/">Djot&lt;/a>，添加了理由说明和非拉丁文字的 wikilink 示例。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2240">NIP-66：防御措施&lt;/a>&lt;/strong>（2 月 26 日开启）：基于 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-03-04-newsletter/#outbox-%e6%a8%a1%e5%9e%8b%e6%b7%b1%e5%ba%a6%e5%89%96%e6%9e%90">nostrability/outbox&lt;/a> 基准测试的经验，为 &lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a> 边缘情况添加明确提示。配套的 &lt;a href="https://github.com/nostr-protocol/nips/pull/2241">PR #2241&lt;/a> 定义了 SSL、地理位置、网络和连接检查的输出 tag。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-C1：密码学身份证明&lt;/strong>（wiki 条目，kind 30817）：提出 kind 30509 event，将 APK 签名证书与 Nostr 个人资料进行密码学关联。证明的工作方式是使用证书的私钥对包含 Nostr pubkey 的规范消息进行签名（支持 ECDSA、RSA PKCS1v15、Ed25519 及其他标准算法），然后在以 Nostr 密钥签名的 kind 30509 event 中发布签名。验证者可以确认控制应用 Android 签名证书的人也控制着声称发布该应用的 Nostr pubkey。证明默认一年后过期，可以显式撤销。已在 &lt;a href="https://github.com/zapstore/zapstore">Zapstore&lt;/a> 工具链中实现。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NIP-31402：SARA 收入份额发行注册&lt;/strong>（wiki 条目，kind 30817）：定义 kind 31402 可寻址 event，用于在 Nostr relay 上发布 Simple Autonomous Revenue Agreement（SARA）发行信息。发行方公布 Lightning 结算的收入份额条款，包括池份额百分比、触发支付条件、sats 阈值、期限长度和分级定价。代理和人类可以跨 relay 发现发行信息并自主订阅，无需中心化平台。Kind 编号模仿 kind 30402（L402 服务注册，由同一作者作为配套 wiki 条目发布），因为 SARA 代表 L402 支付关系的回报端。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="开放-pr-和项目更新">开放 PR 和项目更新&lt;/h2>
&lt;h3 id="damusnip-89zhtopicsnip-89推荐应用处理器">Damus：&lt;a href="https://nostrcompass.org/zh/topics/nip-89/">NIP-89&lt;/a>（推荐应用处理器）&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/pull/3337">PR #3337&lt;/a> 为 &lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> 实现了 NIP-89 客户端 tag 支持。应用现在在所有发布路径（主应用、分享扩展、高亮标注、草稿）上添加客户端 tag，当其他应用包含其 tag 时在时间戳旁显示&amp;quot;via ClientName&amp;rdquo;。外观设置中的隐私开关允许用户禁用 tag 发送。&lt;a href="https://github.com/damus-io/damus/pull/3652">PR #3652&lt;/a> 在设置中添加了存储部分，通过交互式饼图展示 NostrDB 和 Kingfisher 缓存的磁盘使用情况，支持导出。&lt;/p>
&lt;p>开放中：&lt;a href="https://github.com/damus-io/damus/pull/3657">PR #3657&lt;/a> 为引用笔记添加 &lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a> relay 回退。当内联 &lt;code>nevent&lt;/code> 包含作者 pubkey 但没有 relay 提示且笔记不在用户的池中时，Damus 获取作者的 kind 10002 relay 列表并从其写入 relay 重试。&lt;/p>
&lt;h3 id="amethystnip-39zhtopicsnip-39外部身份nip-c0nip-66zhtopicsnip-66">Amethyst：&lt;a href="https://nostrcompass.org/zh/topics/nip-39/">NIP-39&lt;/a>（外部身份）、NIP-C0、&lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a>&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 在 28 个 PR 中合并了一系列 NIP 实现。外部身份声明现在作为独立的 kind 10011 event 在 &lt;a href="https://nostrcompass.org/zh/topics/nip-39/">NIP-39&lt;/a> 下发布（&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1747">PR #1747&lt;/a>），将社交身份与 kind 0 元数据分离，同时保持向后兼容回退。通过 NIP-C0 支持代码片段（&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1744">PR #1744&lt;/a>），添加了 kind 1337 event 以及语言、扩展名、运行时、许可证和依赖项的访问器。&lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a> relay 监控实现（&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1742">PR #1742&lt;/a>）涵盖了两种 event kind，完整解析 RTT 指标、网络类型、支持的 NIP 和 geohash 的 tag。&lt;/p>
&lt;p>加密私信登陆 Amethyst Desktop（&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1710">PR #1710&lt;/a>），采用分栏聊天布局，同时支持 &lt;a href="https://nostrcompass.org/zh/topics/nip-04/">NIP-04&lt;/a>（加密私信）和 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a>（私密私信）。新的 relay 信息流界面（&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1733">PR #1733&lt;/a>）让用户浏览特定 relay 的帖子，支持关注/取消关注功能。开放中：抗审查 NIP-05 验证（&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1734">PR #1734&lt;/a>）为 &lt;code>.bit&lt;/code> 标识符添加了并行验证路径，通过 Namecoin 区块链而非 HTTP DNS 进行解析。当 Amethyst 检测到 NIP-05 字段中的 &lt;code>.bit&lt;/code> 后缀时，它查询 ElectrumX-NMC 服务器获取该名称的交易历史，从最新输出中解析 &lt;code>NAME_UPDATE&lt;/code> 脚本以提取 Nostr pubkey，并拒绝超过 36,000 个区块（Namecoin 的到期窗口）的名称。启用 Tor 时，ElectrumX 连接通过 SOCKS5 路由，在 clearnet 和 &lt;code>.onion&lt;/code> 端点之间动态选择服务器。一小时 TTL 的 LRU 缓存防止重复的区块链查询。&lt;/p>
&lt;h3 id="notedeckoutbox-架构">Notedeck：Outbox 架构&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck/pull/1303">PR #1303&lt;/a> 将 &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> 从临时 relay 池管理迁移到集中式 outbox 模型，支持账户级别的订阅。Messages 模块现在在不存在默认 DM relay 列表时自动发布一个，并按 kind 10050 将私信路由到收件人的首选 relay。&lt;/p>
&lt;h3 id="pika群组独立个人资料和教程信息流">Pika：群组独立个人资料和教程信息流&lt;/h3>
&lt;p>&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>，支持 iOS、Android 和桌面端构建的 Marmot 加密消息应用，新增群组独立个人资料（&lt;a href="https://github.com/sledtools/pika/pull/368">PR #368&lt;/a>）。用户现在可以为每个群聊设置独立的显示名称和头像，以及自定义简介。这些个人资料作为 Marmot 群组内的加密 kind 0 event 发布，群组外任何人不可见，当未设置群组特定个人资料时回退到用户的全局 Nostr 个人资料。新成员加入时，管理员重新广播所有已存储的群组个人资料，每个成员在 commit 时重新发布自己的个人资料。个人资料图片在 Blossom 上传前经过 Marmot 媒体加密。PR 包含 16 个新单元测试，并通过 CLI 命令（&lt;code>update-group-profile&lt;/code>）和 UI 暴露该功能。&lt;/p>
&lt;p>新的 &lt;code>pika-news&lt;/code> Web 应用（&lt;a href="https://github.com/sledtools/pika/pull/401">PR #401&lt;/a>）监控 Pika 自身的 GitHub PR，从 PR diff 中自动生成分步教程，以带有 &lt;a href="https://nostrcompass.org/zh/topics/nip-07/">NIP-07&lt;/a> 认证的服务端渲染页面发布。用户可以通过 Nostr 认证聊天实时讨论特定教程。&lt;/p>
&lt;h3 id="divine可嵌入小组件和视频回复">diVine：可嵌入小组件和视频回复&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>，Nostr 原生视频共享平台，在十天内合并了 132 个 PR。可嵌入的 iframe 小组件（&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1843">PR #1843&lt;/a>）提供独立的 &lt;code>/embed?npub=...&lt;/code> 页面，渲染用户的个人资料和最新视频。视频回复功能（&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1915">PR #1915&lt;/a>）在功能标志后面启用，使用 Kind 1111 评论（&lt;a href="https://nostrcompass.org/zh/topics/nip-22/">NIP-22&lt;/a>）配合 &lt;a href="https://nostrcompass.org/zh/topics/nip-92/">NIP-92&lt;/a>（媒体附件）imeta 元数据。受 Bluesky 启发的三级内容过滤器（&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1797">PR #1797&lt;/a>）在 17 个 &lt;a href="https://nostrcompass.org/zh/topics/nip-32/">NIP-32&lt;/a> 内容警告类别中提供显示/警告/隐藏控制。&lt;/p>
&lt;h3 id="strfryreq-过滤器验证">strfry：REQ 过滤器验证&lt;/h3>
&lt;p>&lt;a href="https://github.com/hoytech/strfry/pull/163">PR #163&lt;/a> 为 &lt;a href="https://github.com/hoytech/strfry">strfry&lt;/a>（C++ Nostr relay）添加了可配置的 REQ 过滤器验证。运营者可以设置每个 REQ 的最大过滤器数、必需的 author 或 tag 存在、允许的 kind 白名单和每过滤器 kind 限制。该功能面向需要严格过滤器执行的 NWC relay 部署。开放中：&lt;a href="https://github.com/hoytech/strfry/pull/173">PR #173&lt;/a> 在摄入时为 event 载荷添加可选的 zstd 压缩。&lt;/p>
&lt;h3 id="rust-nostrnip-62zhtopicsnip-62-request-to-vanish">rust-nostr：&lt;a href="https://nostrcompass.org/zh/topics/nip-62/">NIP-62&lt;/a> Request to Vanish&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a>，Rust Nostr 协议库，在三个数据库后端中添加了 &lt;a href="https://nostrcompass.org/zh/topics/nip-62/">NIP-62&lt;/a>（Request to Vanish）支持：&lt;a href="https://github.com/rust-nostr/nostr/pull/1268">LMDB&lt;/a>、&lt;a href="https://github.com/rust-nostr/nostr/pull/1270">SQLite&lt;/a> 和&lt;a href="https://github.com/rust-nostr/nostr/pull/1272">内存&lt;/a>。LMDB 实现包含可配置选项，可按部署启用或禁用 &lt;a href="https://nostrcompass.org/zh/topics/nip-09/">NIP-09&lt;/a> 和 NIP-62 执行。&lt;/p>
&lt;h3 id="ndk协作-event-和-nip-46-超时">NDK：协作 Event 和 NIP-46 超时&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a>，JavaScript/TypeScript 的 Nostr Development Kit，合并了 &lt;a href="https://github.com/nostr-dev-kit/ndk/pull/380">PR #380&lt;/a>，引入 &lt;code>NDKCollaborativeEvent&lt;/code> 用于使用可寻址指针 event（kind 39382）定义授权作者的多作者协作文档。&lt;code>NDKNip46Signer&lt;/code> 的可配置超时（&lt;a href="https://github.com/nostr-dev-kit/ndk/pull/381">PR #381&lt;/a>）防止 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 远程签名操作在 bunker 无响应时无限期挂起。&lt;/p>
&lt;h3 id="tenex代理分类和-pubkey-访问控制">TENEX：代理分类和 Pubkey 访问控制&lt;/h3>
&lt;p>&lt;a href="https://github.com/tenex-chat/tenex">TENEX&lt;/a>，Nostr 原生 AI 代理编排平台，合并了两个安全相关 PR。TIP-01 基于角色的代理分类（&lt;a href="https://github.com/tenex-chat/tenex/pull/91">PR #91&lt;/a>）将代理类别（principal、orchestrator、worker、advisor、auditor）映射到通过 denied-tools 映射的自动化工具限制。前门 pubkey 访问控制（&lt;a href="https://github.com/tenex-chat/tenex/pull/87">PR #87&lt;/a>）确保只有白名单或后端签名的 pubkey 的 event 与已知代理一起路由；未知 pubkey 被静默丢弃，并使用 OpenTelemetry span 进行审计。&lt;/p>
&lt;h3 id="zap-cooking会员仪表板">Zap Cooking：会员仪表板&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapcooking/frontend">Zap Cooking&lt;/a>，基于 Nostr 的食谱分享平台，在十天内合并了 25 个 PR 和 85 次提交。会员仪表板（&lt;a href="https://github.com/zapcooking/frontend/pull/228">PR #228&lt;/a>）显示订阅状态（含到期日期）和管理/升级选项，为 Sous Chef 和 Zappy 层级重新启用功能限制（客户端和服务端双重检查），并在 26 个文件中统一层级命名。两阶段群组消息加载（&lt;a href="https://github.com/zapcooking/frontend/pull/227">PR #227&lt;/a>）提供快速的 3 天初始获取以即时显示，随后进行 40 天后台回填。&lt;/p>
&lt;p>钱包助记词存储从 pubkey 派生加密迁移到 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 自加密（&lt;a href="https://github.com/zapcooking/frontend/pull/224">PR #224&lt;/a>），修复了旧方案从 &lt;code>SHA-256(pubkey)&lt;/code> 派生密钥的漏洞。由于 pubkey 是公开的，旧方案实质上相当于未加密。现有钱包在首次加载时静默迁移。&lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a> 群组聊天新增红色圆点徽章的未读指示器和基于 kind 9009 邀请码的邀请制访问（&lt;a href="https://github.com/zapcooking/frontend/pull/213">PR #213&lt;/a>）。链接预览和 Nostr event 嵌入现在在私信和群组消息中渲染（&lt;a href="https://github.com/zapcooking/frontend/pull/218">PR #218&lt;/a>）。设置中的 Nostr 备份部分（&lt;a href="https://github.com/zapcooking/frontend/pull/210">PR #210&lt;/a>）通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-78/">NIP-78&lt;/a>（应用特定数据）加密存储和滚动 3 槽位版本管理保存关注列表和静音列表。启动性能通过延迟通知服务、基于 IntersectionObserver 的惰性 DOM 渲染（将 200 条 event 的信息流中 DOM 节点从约 15,000 个减少到约 3,000 个）和延长 outbox 缓存 TTL 得到改善（&lt;a href="https://github.com/zapcooking/frontend/pull/208">PR #208&lt;/a>）。可定制的打印食谱模态框（&lt;a href="https://github.com/zapcooking/frontend/pull/205">PR #205&lt;/a>）允许用户切换包含的部分并提供实时预览。&lt;a href="https://github.com/BrantaOps/branta-core">Branta SDK&lt;/a> 集成（&lt;a href="https://github.com/zapcooking/frontend/pull/222">PR #222&lt;/a>）为 POST 和 GET 请求添加验证防护。&lt;/p>
&lt;h3 id="keeprust-驱动的状态迁移">Keep：Rust 驱动的状态迁移&lt;/h3>
&lt;p>&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a>，基于 Nostr 的 Android 私钥管理器，合并了 &lt;a href="https://github.com/privkeyio/keep-android/pull/178">PR #178&lt;/a>，删除四个 Kotlin 配置存储，改为来自 keep-mobile 层的 Rust 驱动共享状态。10 秒轮询循环被来自 Rust 的基于推送的 &lt;code>KeepStateCallback&lt;/code> 替代。&lt;a href="https://github.com/privkeyio/keep-android/pull/179">PR #179&lt;/a> 添加了带密码保护的加密备份和恢复。&lt;/p>
&lt;h3 id="mostro-mobile争议聊天加密">Mostro Mobile：争议聊天加密&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a>，Mostro P2P Bitcoin 交易平台的移动客户端，发布了争议聊天加密的两阶段迁移。第一步（&lt;a href="https://github.com/MostroP2P/mobile/pull/495">PR #495&lt;/a>）从 mostro 特定的包装切换到从管理员 pubkey 派生的共享密钥加密。在此基础上，&lt;a href="https://github.com/MostroP2P/mobile/pull/501">PR #501&lt;/a> 将消息模型与 &lt;code>NostrEvent&lt;/code> 统一，并在磁盘上加密存储 gift wrap event，与点对点聊天模式一致。BIP-340 签名修复（&lt;a href="https://github.com/MostroP2P/mobile/pull/496">PR #496&lt;/a>）将 bip340 依赖覆盖为 0.2.0，解决了 &lt;code>bigToBytes()&lt;/code> 填充 bug，该 bug 导致 1-2% 的 Schnorr 签名无效，以及公钥以 &lt;code>0x00&lt;/code> 开头的密钥 100% 失败。订单详情现在显示可读的状态标签而非原始协议值，支持英语、西班牙语、意大利语和法语本地化（&lt;a href="https://github.com/MostroP2P/mobile/pull/502">PR #502&lt;/a>）。HalCash 被添加，SEPA 被移除作为支付方式（&lt;a href="https://github.com/MostroP2P/mobile/pull/493">PR #493&lt;/a>），因为 SEPA 转账可能超过 24 小时（SEPA Instant 保留）。&lt;/p>
&lt;p>在服务端，&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> 修复了争议会话恢复以包含发起者字段（&lt;a href="https://github.com/MostroP2P/mostro/pull/599">PR #599&lt;/a>），现在在卖方释放资金时自动关闭活跃争议，发布已结算的 Nostr event 以便管理员客户端看到解决结果（&lt;a href="https://github.com/MostroP2P/mostro/pull/606">PR #606&lt;/a>）。&lt;/p>
&lt;h2 id="nostr-五年二月回顾">Nostr 五年二月回顾&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/zh/newsletters/2026-01-28-newsletter/#nostr-%E4%BA%94%E5%B9%B4%E4%B8%80%E6%9C%88%E5%9B%9E%E9%A1%BE">上月的周刊&lt;/a>追溯了 Nostr 从早期开发到 Damus 爆发再到 2026 年安全基础设施的一月里程碑。本次回顾涵盖 2021 年至 2026 年每个二月发生的事件。&lt;/p>
&lt;h3 id="2021-年-2-月重写">2021 年 2 月：重写&lt;/h3>
&lt;p>Nostr 诞生三个月后，2 月产出了协议最具影响力的早期变更。2 月 14-15 日，fiatjaf &lt;a href="https://github.com/nostr-protocol/nostr/commit/33a1a70">重写了 NIP-01&lt;/a>，用 EVENT/REQ/CLOSE 模型取代了原始消息格式，该模型至今仍在使用。在此次重写之前，客户端和 relay 通过更简单的结构通信。将 event 发布（EVENT）与订阅管理（REQ/CLOSE）分离，使得 relay 端过滤成为可能，这对后续的扩展至关重要。&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-04/">NIP-04&lt;/a> 在同月到来，使用基于 secp256k1 Diffie-Hellman 密钥交换派生的共享密钥添加了加密私信。其加密方式较为基础（AES-256-CBC），后来被 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 经过审计的密码学所取代，但它为少数早期用户提供了协议上的第一个私密通信通道。&lt;/p>
&lt;p>工具生态随 &lt;a href="https://github.com/fiatjaf/noscl">noscl&lt;/a>（一个 Go 命令行客户端，用于终端 relay 交互）的出现而扩展，futurepaul 开始开发 &lt;a href="https://github.com/futurepaul/nostr-rs">nostr-rs&lt;/a>，一个早期的 Rust 实现。整个网络在两三个 relay 上运行，通过一个 &lt;a href="https://t.me/nostr_protocol">Telegram 群组&lt;/a>协调，活跃贡献者大约七人。&lt;/p>
&lt;h3 id="2022-年-2-月积蓄势能">2022 年 2 月：积蓄势能&lt;/h3>
&lt;p>2021 年 12 月 31 日的 &lt;a href="https://news.ycombinator.com/item?id=29749061">Hacker News 帖子&lt;/a>持续吸引开发者直到二月。&lt;a href="https://github.com/nostr-protocol/nostr">nostr-protocol/nostr&lt;/a> 仓库（正式的 &lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>要到 2022 年 5 月才存在）在二月收到六个 PR，包括 vinliao 的 NIP-13（工作量证明）、fiatjaf 的 NIP-14（声誉）、Cameri 的 NIP-15（资源关系）和 melvincarvalho 的 &lt;a href="https://github.com/nostr-protocol/nostr/pull/75">NIP-17&lt;/a>（基于 Nostr 的 Git 更新）。NIP 编号后来被重新分配给私密私信；Nostr 上的 git 协作通过后来的 &lt;a href="https://gitworkshop.dev">gitworkshop.dev&lt;/a> 独立继续。&lt;/p>
&lt;p>Greg Heartsfield 的 &lt;a href="https://github.com/scsibug/nostr-rs-relay">nostr-rs-relay&lt;/a> 是当月的主力，贡献了 34 次提交和三个版本。2 月 12 日的 0.5.0 版本添加了 &lt;a href="https://nostrcompass.org/zh/topics/nip-05/">NIP-05&lt;/a> 已验证用户发布限制。0.5.1 和 0.5.2 在接下来两周相继发布，该 relay 独自承载了网络的大部分流量。&lt;/p>
&lt;p>Robert C. Martin（Uncle Bob）正在构建 &lt;a href="https://github.com/unclebob/more-speech">more-speech&lt;/a>，一个 Clojure 桌面客户端，在 1 月 18 日到 2 月底之间记录了 69 次提交。他的参与吸引了更广泛的软件工程社区的关注。fiatjaf 的 &lt;a href="https://github.com/fiatjaf/nos2x">nos2x&lt;/a> 浏览器扩展在二月发布了 &lt;a href="https://nostrcompass.org/zh/topics/nip-04/">NIP-04&lt;/a> 解密支持和 relay 偏好策略，实现了 Web 客户端至今仍用于密钥委托的 &lt;code>window.nostr&lt;/code> 接口（&lt;a href="https://nostrcompass.org/zh/topics/nip-07/">NIP-07&lt;/a>）。&lt;/p>
&lt;p>&lt;a href="https://github.com/fiatjaf/branle">Branle&lt;/a>，当时的主要 Web 客户端，在 2 月 13 日获得了 &lt;code>web+nostr&lt;/code> 协议处理器注册，这是 Nostr 应用间深层链接的早期尝试。&lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a> 加强了 NIP-05 验证。&lt;a href="https://github.com/nbd-wtf/go-nostr">go-nostr&lt;/a> 在 11 次提交中添加了 NIP-04 加密私信支持和 NIP-12（通用 Tag 查询）解析。网络大约在 7-15 个 relay 上运行，活跃用户群可能在数百人。Damus 和 Nostream 尚不存在，要到 2022 年 4 月才会出现。&lt;/p>
&lt;h3 id="2023-年-2-月国际关注">2023 年 2 月：国际关注&lt;/h3>
&lt;p>2023 年 2 月为 Nostr 带来了最大的公众关注浪潮。&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>，William Casarin 的 iOS 客户端，在多次被拒后于 &lt;a href="https://www.coindesk.com/tech/2023/02/01/decentralized-social-media-project-nostrs-damus-gets-listed-on-apple-app-store">1 月 31 日获得 Apple App Store 批准&lt;/a>。到 2 月 1 日，它进入美国社交网络类前十。两天后的 2 月 2 日，据报道应中国国家互联网信息办公室要求，&lt;a href="https://techcrunch.com/2023/02/02/damus-pulled-from-apples-app-store-in-china-after-two-days/">Apple 将 Damus 从中国 App Store 下架&lt;/a>。&lt;/p>
&lt;p>包括 TechCrunch 和 CoinDesk 在内的主流媒体报道了这一下架事件，扩大了对该应用和协议的认知。到 2 月 3 日，nostr.directory 上带有元数据的唯一公钥超过 30 万。所有 relay 均由自费的爱好者运营，基础设施争先恐后地处理负载。到二月初大约追踪到 289 个 relay，这一数字继续攀升。&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>当月记录了 29 个合并 PR，是协议历史上当时单月最高。&lt;a href="https://github.com/nostr-protocol/nips/pull/224">NIP-57&lt;/a>（Lightning Zaps）和 &lt;a href="https://github.com/nostr-protocol/nips/pull/220">NIP-23&lt;/a>（长文内容）均在 2 月 13 日合并，在一天之内为 Nostr 添加了 Bitcoin 微支付并将其扩展到短帖之外。&lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a>（Relay 列表元数据）一周前的 2 月 7 日合并，为后续的 outbox 模型奠定基础。&lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a>（Nostr Connect）和 &lt;a href="https://nostrcompass.org/zh/topics/nip-58/">NIP-58&lt;/a>（徽章）也在月末前落地。&lt;/p>
&lt;p>Human Rights Foundation 于 2 月 21 日&lt;a href="https://hrf.org/devfund2023q1">向 William Casarin 授予 50,000 美元用于 Nostr 和 Damus 开发&lt;/a>，这是首批面向 Nostr 项目的机构资助之一。OpenSats 尚未启动其 Nostr 基金（要到 &lt;a href="https://opensats.org/blog/nostr-grants-july-2023">2023 年 7 月&lt;/a>）。&lt;/p>
&lt;h3 id="2024-年-2-月协议韧性">2024 年 2 月：协议韧性&lt;/h3>
&lt;p>2024 年 2 月的重点从增长转向协议韧性。&lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a>（私密私信）自前一年七月开放以来，正在使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 经审计的密码学和 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a> gift wrapping 来替代老化的 &lt;a href="https://nostrcompass.org/zh/topics/nip-04/">NIP-04&lt;/a> 加密。NIP-04 向 relay 运营者泄露元数据，他们可以看到发送者-接收者对。NIP-17 通过一次性密钥对隐藏发送者身份，在三月最后一轮审查后合并。&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a>（简单群组）在数月讨论后于 &lt;a href="https://github.com/nostr-protocol/nips/pull/566">2 月 28 日合并&lt;/a>，定义了 relay 如何通过管理员角色和访问控制托管审核群聊。&lt;a href="https://nostrcompass.org/zh/topics/nip-92/">NIP-92&lt;/a>（imeta tag）于 2 月 1 日合并，标准化了客户端如何为媒体 event 附加图片尺寸和 blurhash 预览。&lt;/p>
&lt;p>2 月 16 日，NIPs 仓库添加了 &lt;a href="https://github.com/nostr-protocol/nips/commit/62c48eff">BREAKING.md&lt;/a>，一个跟踪协议规范向后不兼容变更的文件。它的创建承认 Nostr 已达到需要正式记录破坏性变更的成熟度。&lt;/p>
&lt;p>当月合并了 22 个 PR。&lt;a href="https://github.com/cashubtc/npubcash-server">npub.cash&lt;/a> 作为 Lightning 地址服务发布，让任何 npub 无需运行服务器即可接收支付。2 月 8 日发表的一篇&lt;a href="https://arxiv.org/abs/2402.05709">学术论文&lt;/a>发现，95% 的免费 relay 无法通过捐赠覆盖运营成本，35% 的付费 relay 收取低于 1,000 sats（当时约 0.45 美元）的入场费。&lt;/p>
&lt;h3 id="2025-年-2-月基础设施增长">2025 年 2 月：基础设施增长&lt;/h3>
&lt;p>2025 年 2 月向 NIPs 仓库产出 28 个合并 PR。&lt;a href="https://nostrcompass.org/zh/topics/nip-62/">Right to Vanish&lt;/a> NIP 于 2 月 19 日合并，定义了用户如何请求 relay 删除其数据，以回应关于数据可移植性和用户控制的监管问题。&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-60/">NIP-60&lt;/a>（Cashu 钱包）和 NIP-61（Nutzaps）收到简化更新，精简了 ecash 代币存储格式。q-tag（引用 tag）在多个 NIP 中持续推广，标准化 event 如何引用其他 event 用于引用和线程化。&lt;/p>
&lt;p>客户端发布标志着稳步进展。&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> v0.3.0 alpha 在一月最后一天发布，二月持续被采用。Primal v2.1 于 2 月 7 日发布，&lt;a href="https://github.com/0ceanSlim/grain">GRAIN&lt;/a> v0.3.0（Go relay 实现）于 2 月 21 日发布。&lt;/p>
&lt;p>NOSTRLDN v5 将伦敦 Nostr 社区聚集起来举办第五次聚会。DVMCP 桥接了 Nostr 的数据自动售货机（&lt;a href="https://nostrcompass.org/zh/topics/nip-90/">NIP-90&lt;/a>）与 Model Context Protocol，预示了接下来一个月到来的 AI 代理集成工作。&lt;/p>
&lt;h3 id="2026-年-2-月超越社交媒体">2026 年 2 月：超越社交媒体&lt;/h3>
&lt;p>&lt;em>2026 年 2 月活动摘自 Nostr Compass 第 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-04-newsletter/">#8&lt;/a> 期至第 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-25-newsletter/">#11&lt;/a> 期。&lt;/em>&lt;/p>
&lt;p>2026 年 2 月产出了任何单个 Nostr 月份中范围最广泛的应用层开发。&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> 发布了去中心化点对点 Bitcoin 交易的&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-11-newsletter/#mostro-%E5%8F%91%E5%B8%83%E9%A6%96%E4%B8%AA%E5%85%AC%E5%BC%80-beta">首个公开 beta&lt;/a>，&lt;a href="https://github.com/zapstore/zapstore">Zapstore&lt;/a> 在数月的候选版本测试后达到 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-11-newsletter/#zapstore-v100">1.0 稳定版&lt;/a>。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-25-newsletter/#white-noise-v030">White Noise v0.3.0&lt;/a> 交付了实时 &lt;a href="https://nostrcompass.org/zh/topics/mls/">Marmot&lt;/a> 加密消息，支持 Amber 签名器并合并了 160 余项改进。&lt;/p>
&lt;p>来自 pablof7z（用于代理工作流的 NIP-AE 和用于 MCP 服务器公告的 NIP-AD）和 joelklabo（AI 代理消息）的竞争性 AI 代理提案与扩展 &lt;a href="https://nostrcompass.org/zh/topics/nip-90/">NIP-90&lt;/a> 的 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-25-newsletter/#nip-%E6%9B%B4%E6%96%B0">DVM 代理协调提案&lt;/a>同时到来。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-25-newsletter/#contextvm%E5%9F%BA%E4%BA%8E-nostr-%E7%9A%84-mcp">ContextVM&lt;/a> 发布了将 Model Context Protocol 连接到 Nostr 传输的 SDK 改进。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-25-newsletter/#burrow%E9%9D%A2%E5%90%91-ai-%E4%BB%A3%E7%90%86%E7%9A%84-mls-%E6%B6%88%E6%81%AF">Burrow&lt;/a> 为 AI 代理和人类添加了 &lt;a href="https://nostrcompass.org/zh/topics/mls/">Marmot&lt;/a> 加密消息，将 Nostr 的身份和 relay 基础设施扩展到机器对机器通信。&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-25-newsletter/#fipsnostr-%E5%8E%9F%E7%94%9F%E7%BD%91%E7%8A%B6%E7%BD%91%E7%BB%9C">FIPS&lt;/a> 发布了 Nostr 原生网状网络的可用 Rust 实现，使用 secp256k1 密钥对作为节点身份，支持跨 UDP、以太网、蓝牙或 LoRa 无线电的传输无关路由。其设计表明 Nostr 的密钥模型超越了社交媒体，延伸到物理网络基础设施。&lt;/p>
&lt;p>&lt;a href="https://opensats.org/blog/fifteenth-wave-of-nostr-grants">OpenSats 宣布了第十五批 Nostr 资助&lt;/a>，资助项目包括 ContextVM 和 Nostube。协议变更包括 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a> 为 Nostr Wallet Connect 提供的 hold invoice 支持和 &lt;a href="https://nostrcompass.org/zh/topics/nip-45/">NIP-45&lt;/a>（计数结果）用于 relay 端计数估算的 HyperLogLog。&lt;a href="https://nostrcompass.org/zh/topics/nip-85/">NIP-85&lt;/a>（可信断言）用于 &lt;a href="https://nostrcompass.org/zh/topics/web-of-trust/">Web of Trust&lt;/a> 评分的服务提供商可发现性也已合并。&lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> 开始全面 API 重新设计，Nostria 3.0 和 &lt;a href="https://github.com/FROSTR-ORG">Frostr&lt;/a>（iOS TestFlight）均已发布。&lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 的本地缓存层解决了跨 relay 的媒体可用性问题。&lt;/p>
&lt;h3 id="展望未来">展望未来&lt;/h3>
&lt;p>五个二月的协议历史展示了从基础工作到应用层多样化的一致演进，2023 年的用户涌入是转折点。2021 年，七位贡献者在三个 relay 上工作。到 2026 年，同一协议支持在生产基础设施上运行的网状网络和自主代理提案。&lt;/p>
&lt;hr>
&lt;p>本周就到这里。正在构建什么或有新闻要分享？&lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 私信联系我们&lt;/a>或在 Nostr 上找到我们。&lt;/p></content:encoded></item><item><title>Nostr Compass #11</title><link>https://nostrcompass.org/zh/newsletters/2026-02-25-newsletter/</link><pubDate>Wed, 25 Feb 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-02-25-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v0.3.0">White Noise v0.3.0&lt;/a> 带来实时消息和 Amber 签名器支持，合并了 160 余项改进。&lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.5">diVine 1.0.5&lt;/a> 修复视频播放问题，新增 Kind 22236 浏览 event 用于创作者数据分析。&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>、&lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a> 和 &lt;a href="https://github.com/dmcarrington/unfiltered">Unfiltered&lt;/a> 均发布更新。&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> 发布 Nostr 原生网状网络的可用 Rust 实现。Notecrumbs 修复 damus.io 链接预览的稳定性问题。&lt;a href="https://contextvm.org">ContextVM&lt;/a> 将 Nostr 与 Model Context Protocol 对接。新项目包括 &lt;a href="https://github.com/CentauriAgent/burrow">Burrow&lt;/a>（为 AI 代理与人类之间提供 MLS 加密通信）和 &lt;a href="https://github.com/nostria-app/nostria-signer-extension">Nostria Signer&lt;/a>（基于浏览器的密钥库与身份管理）。深入解析涵盖 NIP-55 Android 签名和 NIP-60 Cashu 钱包同步。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="notecrumbs-稳定性改进">Notecrumbs 稳定性改进&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notecrumbs">Notecrumbs&lt;/a>，为 damus.io 链接预览提供支持的 Nostr API 和 Web 服务器，收到一系列修复以解决可靠性问题。&lt;/p>
&lt;p>&lt;a href="https://github.com/damus-io/notecrumbs/commit/3f201f63ea49">并发修复&lt;/a>将飞行中去重机制替换为 watch channel。两个调用方同时请求同一条笔记时，均可能成为数据获取者，若其中一方在另一方订阅通知前先完成，便会引发死锁。带原子操作的 watch channel 确保只有一个获取者运行，其余等待结果。&lt;/p>
&lt;p>&lt;a href="https://github.com/damus-io/notecrumbs/commit/b0d0bf5a2f17">速率限制&lt;/a>实现了针对 relay 频繁请求的双层防护。当用户反复访问同一条笔记时，系统对 relay 请求设置 5 分钟冷却窗口进行防抖处理。这一保护覆盖所有 &lt;a href="https://nostrcompass.org/zh/topics/nip-19/">NIP-19&lt;/a> 类型和个人资料信息流，防止在高流量期间对 relay 产生成比例的垃圾请求。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v0.3.0">White Noise v0.3.0&lt;/a> 带来实时消息和 Amber 签名器支持，合并了 160 余项改进。&lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.5">diVine 1.0.5&lt;/a> 修复视频播放问题，新增 Kind 22236 浏览 event 用于创作者数据分析。&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>、&lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a> 和 &lt;a href="https://github.com/dmcarrington/unfiltered">Unfiltered&lt;/a> 均发布更新。&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a> 发布 Nostr 原生网状网络的可用 Rust 实现。Notecrumbs 修复 damus.io 链接预览的稳定性问题。&lt;a href="https://contextvm.org">ContextVM&lt;/a> 将 Nostr 与 Model Context Protocol 对接。新项目包括 &lt;a href="https://github.com/CentauriAgent/burrow">Burrow&lt;/a>（为 AI 代理与人类之间提供 MLS 加密通信）和 &lt;a href="https://github.com/nostria-app/nostria-signer-extension">Nostria Signer&lt;/a>（基于浏览器的密钥库与身份管理）。深入解析涵盖 NIP-55 Android 签名和 NIP-60 Cashu 钱包同步。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="notecrumbs-稳定性改进">Notecrumbs 稳定性改进&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notecrumbs">Notecrumbs&lt;/a>，为 damus.io 链接预览提供支持的 Nostr API 和 Web 服务器，收到一系列修复以解决可靠性问题。&lt;/p>
&lt;p>&lt;a href="https://github.com/damus-io/notecrumbs/commit/3f201f63ea49">并发修复&lt;/a>将飞行中去重机制替换为 watch channel。两个调用方同时请求同一条笔记时，均可能成为数据获取者，若其中一方在另一方订阅通知前先完成，便会引发死锁。带原子操作的 watch channel 确保只有一个获取者运行，其余等待结果。&lt;/p>
&lt;p>&lt;a href="https://github.com/damus-io/notecrumbs/commit/b0d0bf5a2f17">速率限制&lt;/a>实现了针对 relay 频繁请求的双层防护。当用户反复访问同一条笔记时，系统对 relay 请求设置 5 分钟冷却窗口进行防抖处理。这一保护覆盖所有 &lt;a href="https://nostrcompass.org/zh/topics/nip-19/">NIP-19&lt;/a> 类型和个人资料信息流，防止在高流量期间对 relay 产生成比例的垃圾请求。&lt;/p>
&lt;p>&lt;a href="https://github.com/damus-io/notecrumbs/commit/38670b3972b6">性能改进&lt;/a>将二次数据获取移至后台 tokio 任务。页面现在使用缓存数据即时渲染，不再阻塞于可能累计长达 7.5 秒的顺序 relay 超时。此次修复同时升级至 nostrdb 0.10.0。&lt;/p>
&lt;h3 id="contextvm基于-nostr-的-mcp">ContextVM：基于 Nostr 的 MCP&lt;/h3>
&lt;p>&lt;a href="https://contextvm.org">ContextVM&lt;/a> 是一套将 Nostr 与 &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a>（MCP）对接的工具集。近期提交引入了新的 &lt;a href="https://docs.contextvm.org/spec/ceps/cep-8/">CEP-8&lt;/a> 规范以支持支付功能，并在整个二月持续推进 &lt;a href="https://github.com/ContextVM/sdk">SDK&lt;/a> 改进。&lt;/p>
&lt;p>SDK 为基于 Nostr 的 MCP 提供 TypeScript 客户端和服务端传输层。开发者可以在 Nostr 网络上暴露 MCP 服务器，客户端可以与之连接。Relay 充当盲目消息总线，仅负责路由加密 event。不具备原生 Nostr 支持的客户端通过代理层接入。该库处理 relay 管理和用于 event 认证的密码学签名，兼容 Node.js 和浏览器环境。&lt;/p>
&lt;p>&lt;a href="https://github.com/ContextVM/cvmi">CVMI&lt;/a> 提供用于服务发现和方法调用的 CLI。&lt;a href="https://github.com/ContextVM/relatr">Relatr&lt;/a> 结合社交图谱距离与个人资料验证计算个性化信任评分。&lt;/p>
&lt;p>ContextVM 将自身定位为桥接层：现有 MCP 服务器在保持原有传输方式的同时获得 Nostr 互操作性。&lt;/p>
&lt;h3 id="white-noise-记录去中心化用户搜索">White Noise 记录去中心化用户搜索&lt;/h3>
&lt;p>&lt;a href="https://blog.jgmontoya.com/2026/02/22/user-search.html">jgmontoya 的博客文章&lt;/a>详细介绍了 &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a> 如何在去中心化的 relay 网络中处理用户搜索。&lt;/p>
&lt;p>个人资料分布带来了挑战：与拥有统一数据库的中心化通讯软件不同，Nostr 个人资料散布于数十个 relay 上，没有中央索引。White Noise 通过并行运行的生产者-消费者架构解决这一问题。&lt;/p>
&lt;p>生产者进程从用户的关注列表持续向外扩展社交图谱，获取距离递增的关注列表，并将发现的 pubkey 加入队列以待解析个人资料。消费者通过五个成本递增的层级解析匹配项：本地用户表（最快）、上次搜索的缓存个人资料、已连接的 relay、按 &lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a> 获取的用户 relay 列表，以及直接查询用户声明的 relay（最慢）。&lt;/p>
&lt;p>冷搜索大约需要 3 秒，而基于缓存的热搜索约为 10 毫秒。对于尚未建立社交图谱的新用户，系统注入联结紧密的引导节点以确保搜索功能正常运作。群组成员资格作为隐性社交信号，与显性关注并列。&lt;/p>
&lt;p>作者指出，数据埋点对于性能优化至关重要。缺乏指标时，改进只能靠猜测。&lt;/p>
&lt;h3 id="fipsnostr-原生网状网络">FIPS：Nostr 原生网状网络&lt;/h3>
&lt;p>&lt;a href="https://github.com/jmcorgan/fips">FIPS&lt;/a>（Free Internetworking Peering System）是一个可用的 Rust 实现，构建以 Nostr 密钥对（secp256k1）作为节点身份的自组织网状网络。&lt;a href="https://github.com/jmcorgan/fips/blob/master/docs/design/fips-intro.md">设计文档&lt;/a>与功能代码同步提供。&lt;/p>
&lt;p>该协议解决的是基础设施独立性问题：节点无需中央服务器或证书机构即可自动发现彼此。生成树提供基于坐标的路由，bloom filter 传播可达性信息，让节点仅凭本地知识做出转发决策。传输无关性意味着同一协议可运行于 UDP、以太网、蓝牙、LoRa 无线电或任何支持数据报的介质。&lt;/p>
&lt;p>两层加密保护流量。链路层加密（Noise IK 模式）通过相互认证和前向保密保护逐跳的邻节点通信。会话层加密（Noise XK 模式）提供端到端保护以防范中间路由器，只有目标节点才能解密有效载荷。这与 TLS 在穿越不可信网络时保护 HTTP 流量的方式相同。&lt;/p>
&lt;p>架构采用&amp;quot;贪婪嵌入&amp;quot;生成树进行路由。每个节点根据其相对于树根和父节点的位置获得坐标。数据包贪婪地向坐标更接近目标的方向路由，bloom filter 广告可达端点。当贪婪路由失败（局部最小值）时，节点可回退至基于树的路径。&lt;/p>
&lt;p>Rust 实现已包含带 bloom filter 发现的 UDP 传输，未来计划集成 Nostr relay 以实现对等引导。&lt;/p>
&lt;h2 id="版本发布">版本发布&lt;/h2>
&lt;p>本周 relay 基础设施和客户端应用均有版本发布，同时有新项目进入这一领域。&lt;/p>
&lt;h3 id="haven-v120">HAVEN v1.2.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/bitvora/haven">HAVEN&lt;/a>，将四种 relay 功能与 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 媒体服务器捆绑的一体化个人 relay，发布了 &lt;a href="https://github.com/bitvora/haven/releases/tag/v1.2.0">v1.2.0&lt;/a>。此版本超越了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-18-newsletter/#haven-v120-rc3">上周报道的&lt;/a> RC 阶段。&lt;/p>
&lt;p>多 npub 支持通过白名单机制让单个 HAVEN 实例服务多个 Nostr 身份，并新增黑名单功能用于访问控制。重写的备份系统采用可移植的 JSONL 格式，带有 &lt;code>haven restore&lt;/code> 命令用于从 JSONL 文件导入笔记。云存储集成新增 &lt;code>--to-cloud&lt;/code> 和 &lt;code>--from-cloud&lt;/code> 标志用于远程备份管理。&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/web-of-trust/">Web of Trust&lt;/a> 改进包括可配置的信任计算深度级别，以及带无锁优化的自动 24 小时刷新间隔以降低内存开销。relay 请求的 user-agent 配置和可配置的 Blastr 超时设置完善了此次发布，同时支持导出数据为压缩 JSONL 格式。&lt;/p>
&lt;h3 id="white-noise-v030">White Noise v0.3.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>，基于 &lt;a href="https://nostrcompass.org/zh/topics/mls/">MLS&lt;/a> 加密实现 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 协议的加密消息应用，发布了 &lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v0.3.0">v0.3.0&lt;/a>，合并了 160 余项改进。&lt;/p>
&lt;p>此版本通过流式连接取代轮询实现实时消息，消息即时送达。Amber 支持（&lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a>）意味着私钥无需触碰应用。图片分享现已支持上传进度跟踪和加载时的 blurhash 占位图。全屏查看支持捏合缩放。&lt;/p>
&lt;p>群组消息在可靠性上得到改进，聊天列表显示发送者姓名，&lt;a href="https://nostrcompass.org/zh/topics/mls/">MLS&lt;/a> 加密确保前向保密。用户搜索从关注列表向外扩展至四度分隔，搜索结果随发现即时流入。&lt;/p>
&lt;p>由于 Marmot 协议变更和切换至加密本地存储，此版本包含一项破坏性变更：升级时将重置所有本地数据。用户在升级前应备份 nsec 密钥。&lt;/p>
&lt;h3 id="divine-105">diVine 1.0.5&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>，基于还原的 Vine 存档构建的短视频循环播放客户端，发布了 &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.5">1.0.5&lt;/a>，带来大量视频播放修复和全新的去中心化数据分析系统。&lt;/p>
&lt;p>视频播放问题是修复重点：幽灵暂停、视频间的双重音频、缩略图与首帧之间的黑闪，以及播放器销毁后崩溃问题均已解决。池化视频播放器现在处理主页信息流以确保一致的播放体验。&lt;/p>
&lt;p>Kind 22236 短暂浏览 event 支持创作者数据分析和内容推荐。系统跟踪流量来源（主页、发现变体、个人资料、分享、搜索）和循环播放次数，同时过滤自身浏览。Nostr event imeta tag 中本地文件路径泄露问题已修复，按 BUD-01 规范在客户端构造规范的 Blossom URL。&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 远程签名器改进包括并行化的 relay 连接和回调 URL 支持。Android 在签名器批准后恢复应用时重新连接 WebSocket。&lt;/p>
&lt;h3 id="coracle-0630">Coracle 0.6.30&lt;/h3>
&lt;p>&lt;a href="https://github.com/coracle-social/coracle">Coracle&lt;/a>，专注于 relay 管理和 &lt;a href="https://nostrcompass.org/zh/topics/web-of-trust/">Web of Trust&lt;/a> 审核的 Web 端 Nostr 客户端，发布了 &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.30">0.6.30&lt;/a>，新增视频缩略图支持，改善了信息流中的媒体浏览体验。&lt;/p>
&lt;h3 id="nostur-v1260">Nostur v1.26.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostur-com/nostur-ios-public">Nostur&lt;/a>，iOS 端 Nostr 客户端，发布了 &lt;a href="https://github.com/nostur-com/nostur-ios-public/releases/tag/1.26.0">v1.26.0&lt;/a>，新增直播流信息流版块和重新设计的设置界面。GIF 现在可以托管在 Blossom 媒体服务器上，减少对中心化服务的依赖。Tenor 不可用时 Klipy GIF 集成提供备选方案。私信会话中的年份标题和提及数量显示完善了面向用户的变更。&lt;/p>
&lt;p>开发者工具和 CLI 应用本周也收到了更新。&lt;/p>
&lt;h3 id="nak-v0185">nak v0.18.5&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>，fiatjaf 的 Nostr 命令行瑞士军刀，发布了 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.18.5">v0.18.5&lt;/a>，新增 &lt;code>nak profile&lt;/code> 子命令用于获取和展示用户个人资料。&lt;code>git clone&lt;/code> 命令现在支持 &lt;code>nostr://&lt;/code> URI 中的 &lt;a href="https://nostrcompass.org/zh/topics/nip-05/">NIP-05&lt;/a> 名称，可通过人类可读标识符克隆仓库。&lt;/p>
&lt;h3 id="pika-v053">Pika v0.5.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>，基于 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 协议构建的适用于 iOS、Android 和桌面端的 &lt;a href="https://nostrcompass.org/zh/topics/mls/">MLS&lt;/a> 加密消息应用，发布了 &lt;a href="https://github.com/sledtools/pika/releases/tag/pikachat-v0.5.3">v0.5.3&lt;/a>。近期提交为桌面应用添加了文件上传和拖放媒体支持，同时修复了 Cloudflare Workers 部署问题。&lt;/p>
&lt;p>Pika 采用 Rust 核心承载所有业务逻辑，iOS（SwiftUI）和 Android（Kotlin）作为薄 UI 层渲染状态快照。MDK（Marmot Development Kit）提供 MLS 实现。项目处于 alpha 阶段，不建议用于敏感场景。&lt;/p>
&lt;h3 id="ridestr-v026">Ridestr v0.2.6&lt;/h3>
&lt;p>&lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a>，基于 Cashu 支付的去中心化打车平台，发布了 &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.6">v0.2.6&lt;/a>。此版本修复了 TalkBack 无障碍访问问题，以及切换支付方式时司机从附近列表消失、司机下线时已选司机数量未更新等 bug。&lt;/p>
&lt;p>&amp;ldquo;发送给所有人&amp;quot;功能现已更名为&amp;quot;广播 RoadFlare&amp;rdquo;，并修复了新安装司机端的静默失败问题。Ridestr 实现了 HTLC 托管用于无需信任的打车支付，以及跨设备的 &lt;a href="https://nostrcompass.org/zh/topics/nip-60/">NIP-60&lt;/a> 钱包同步。&lt;/p>
&lt;h3 id="unfiltered-v106">Unfiltered v1.0.6&lt;/h3>
&lt;p>&lt;a href="https://github.com/dmcarrington/unfiltered">Unfiltered&lt;/a>，Android 端类 Instagram 图片分享应用，发布了 &lt;a href="https://github.com/dmcarrington/unfiltered/releases/tag/v1.0.6">v1.0.6&lt;/a>，改进了用户搜索功能并新增每 60 秒自动重连 relay。&lt;/p>
&lt;p>使用 Kotlin 和 Jetpack Compose 构建，Unfiltered 采用 rust-nostr 绑定和兼容 Blossom 的服务器托管图片。Amber 集成（&lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a>）处理安全密钥管理。应用按时间顺序显示关注账号的帖子，无算法推荐，无广告。&lt;/p>
&lt;p>本周还有两个新的消息和签名项目发布。&lt;/p>
&lt;h3 id="burrow面向-ai-代理的-mls-消息">Burrow：面向 AI 代理的 MLS 消息&lt;/h3>
&lt;p>&lt;a href="https://github.com/CentauriAgent/burrow">Burrow&lt;/a> 是一款实现 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 协议的消息应用，提供无需电话号码或中心化服务器的 MLS 加密通信。人类用户和 AI 代理均可参与。&lt;/p>
&lt;p>纯 Rust CLI 守护进程配合 JSONL 输出模式处理与自动化系统的集成。Flutter 跨平台应用覆盖 Android、iOS、Linux、macOS 和 Windows。媒体附件与消息同步加密，WebRTC 处理音视频通话并支持可配置的 TURN 服务器。&lt;/p>
&lt;p>Burrow 在 Nostr 基础设施上叠加 MLS 加密。身份使用 Nostr 密钥对（secp256k1），MLS KeyPackage 以 kind 443 event 发布。消息以 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密作为 kind 445 event，邀请使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a> 礼品包裹。&lt;/p>
&lt;p>&lt;a href="https://openclaw.ai">OpenClaw&lt;/a> 集成让 AI 代理以完整工具访问权限参与其中。带审计日志的访问控制列表管理联系人和群组权限。这一组合使 Burrow 适用于需要在去中心化基础设施上实现 Signal 级别加密的代理间及代理与人类的消息场景。&lt;/p>
&lt;h3 id="nostria-signer-扩展">Nostria Signer 扩展&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria-signer-extension">Nostria Signer&lt;/a> 是一款基于 Chromium 的浏览器扩展，为 Nostr 用户提供密钥库和身份管理功能。&lt;/p>
&lt;p>包含多个账号的多个密钥库让用户可以为不同场景组织身份。国际化支持包括 RTL 语言。使用 Angular 和 TypeScript 构建（占代码库的 79.2%），可作为浏览器扩展和渐进式 Web 应用运行。&lt;/p>
&lt;p>Nostria Signer 实现了 &lt;a href="https://nostrcompass.org/zh/topics/nip-07/">NIP-07&lt;/a> 浏览器扩展签名，让基于 Web 的 Nostr 客户端无需直接访问私钥即可请求 event 签名。自动化的钱包迁移处理通过 Chrome Web Store 分发的更新。用户也可以从 &lt;code>dist/extension&lt;/code> 文件夹侧载安装。&lt;/p>
&lt;p>开发者强调该项目处于实验阶段：用户必须自行管理密钥恢复短语，开发者无法恢复丢失的密钥访问权限。&lt;/p>
&lt;h2 id="项目更新">项目更新&lt;/h2>
&lt;h3 id="formstr-迁移至新组织">Formstr 迁移至新组织&lt;/h3>
&lt;p>&lt;a href="https://github.com/formstr-hq/nostr-forms">Formstr&lt;/a>，Nostr 上的 Google Forms 替代方案，将仓库从 &lt;code>abh3po/nostr-forms&lt;/code> 迁移至 &lt;code>formstr-hq&lt;/code> 组织。这一 OpenSats 资助项目在新地址继续开发。&lt;/p>
&lt;h3 id="值得关注的开放-pr">值得关注的开放 PR&lt;/h3>
&lt;p>Nostr 项目中的进行中工作：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Damus Outbox 模型&lt;/strong>（&lt;a href="https://github.com/damus-io/damus/pull/3602">PR #3602&lt;/a>）：iOS 上 gossip/outbox relay 模型的实现计划。这一架构变更通过向收件人实际阅读的 relay 发布消息来改善消息投递。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Notedeck 跨平台通知&lt;/strong>（&lt;a href="https://github.com/damus-io/notedeck/pull/1296">PR #1296&lt;/a>）：Damus 桌面客户端的原生通知系统，覆盖 Android FCM、macOS 和 Linux。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>NDK Cashu v3 升级&lt;/strong>（&lt;a href="https://github.com/nostr-dev-kit/ndk/pull/370">PR #370&lt;/a>）：将 Nostr Development Kit 的钱包集成更新至 cashu-ts v3。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Zeus Cashu 离线功能&lt;/strong>（&lt;a href="https://github.com/ZeusLN/zeus/pull/3742">PR #3742&lt;/a>）：Zeus Lightning 钱包的离线 ecash 收发功能。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Shopstr 加密数字交付&lt;/strong>（&lt;a href="https://github.com/shopstr-eng/shopstr/pull/231">PR #231&lt;/a>）：为数字商品添加加密交付功能，并为实物商品添加动态重量支持。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-更新">NIP 更新&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>的最新变更：&lt;/p>
&lt;p>&lt;strong>本周已合并：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2223">NIP-85 服务提供商可发现性&lt;/a>&lt;/strong>：&lt;a href="https://nostrcompass.org/zh/topics/nip-85/">NIP-85&lt;/a> 规范新增客户端如何发现可信断言提供商的指南。当客户端需要 &lt;a href="https://nostrcompass.org/zh/topics/web-of-trust/">Web of Trust&lt;/a> 评分或其他计算指标时，可以向 relay 查询来自用户已关注或信任的提供商发布的 kind 30085 公告。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2229">NIP-29 移除非托管群组&lt;/a>&lt;/strong>：&lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a> 群组聊天规范移除了对非托管群组（任何成员均可添加其他人）的支持。所有 NIP-29 群组现在均要求 relay 端管理并设置明确的管理员角色，简化实现并减少垃圾信息向量。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2231">NIP-11 移除已弃用字段&lt;/a>&lt;/strong>：&lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a> relay 信息文档不再包含已弃用的 &lt;code>software&lt;/code> 和 &lt;code>version&lt;/code> 字段。实现应从响应中移除这些字段。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2227">NIP-39 迁移身份 tag&lt;/a>&lt;/strong>：外部身份声明（&lt;a href="https://nostrcompass.org/zh/topics/nip-39/">NIP-39&lt;/a> 中 GitHub、Twitter 等的 &lt;code>i&lt;/code> tag）从 kind 0 个人资料迁移至专用的 kind 30382 event，将身份验证与个人资料元数据分离。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>AI 代理 NIP 进展：&lt;/strong>&lt;/p>
&lt;p>四个以 AI 为重点的 NIP 持续活跃开发中。自&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-18-newsletter/#ai-%E4%BB%A3%E7%90%86-nip-%E7%9B%B8%E7%BB%A7%E7%99%BB%E5%9C%BA">上周报道&lt;/a>以来：&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2220">NIP-AE：Agents&lt;/a>&lt;/strong>（2 月 19 日更新）：定义代理身份，使用 kind 4199 作为代理定义，kind 4201 用于提示（&amp;ldquo;nudges&amp;rdquo;）。代理可引用 &lt;a href="https://nostrcompass.org/zh/topics/nip-94/">NIP-94&lt;/a> 文件元数据以获取扩展描述。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2226">NIP-XX：AI 代理消息&lt;/a>&lt;/strong>（2 月 18 日更新）：通过七种短暂 event kind（25800-25806）标准化对话消息，涵盖状态、流式增量、提示词、响应、工具调用、错误和取消。kind 31340 &amp;ldquo;AI Info&amp;rdquo; event 让代理公告支持的模型和能力。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2228">NIP-AC：DVM 代理协调&lt;/a>&lt;/strong>（2 月 18 日开启）：扩展 &lt;a href="https://nostrcompass.org/zh/topics/nip-90/">NIP-90&lt;/a> 以支持自主代理工作流。新增代理发现的心跳机制、质量跟踪的任务评审、结果承诺的数据托管、多步骤流水线的工作流链，以及竞争性提供商选择的群体竞价。参考实现运行于 2020117.xyz。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2221">NIP-AD：MCP 服务器公告&lt;/a>&lt;/strong>（2 月 12 日开启）：标准化在 Nostr 上公告 Model Context Protocol 服务器和技能的方式，已在 TENEX 平台上投入使用。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>其他开放 PR：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2232">NIP-144：服务授权协议&lt;/a>&lt;/strong>：定义客户端如何向 Nostr 上的服务提供商证明身份和权限。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2230">NIP-DC：Nostr Webxdc&lt;/a>&lt;/strong>：alexgleason 提议将 Webxdc（去中心化 Web 应用）与 Nostr event 集成。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-深入解析nip-55android-签名器应用">NIP 深入解析：NIP-55（Android 签名器应用）&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/55.md">NIP-55&lt;/a> 定义 Android Nostr 客户端如何向专用签名器应用请求密码学操作。本周 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-25-newsletter/#white-noise-v030">White Noise v0.3.0&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-25-newsletter/#unfiltered-v106">Unfiltered v1.0.6&lt;/a> 均新增了 Amber 支持，Android 签名协议值得深入了解。&lt;/p>
&lt;p>&lt;strong>通信渠道：&lt;/strong>&lt;/p>
&lt;p>NIP-55 通过两种机制实现应用间签名。Intent 为一次性操作提供带视觉反馈的手动用户批准。Content Resolver 在用户授予持久权限后支持自动签名，让应用无需反复提示即可在后台签名。&lt;/p>
&lt;p>通信使用自定义 &lt;code>nostrsigner:&lt;/code> URI 方案。客户端发起连接的方式如下：&lt;/p>
&lt;pre tabindex="0">&lt;code>nostrsigner:&amp;lt;base64-encoded-event&amp;gt;?type=sign_event&amp;amp;callbackUrl=myapp://callback
&lt;/code>&lt;/pre>&lt;p>&lt;strong>支持的操作：&lt;/strong>&lt;/p>
&lt;p>规范定义了七种密码学方法：event 签名（&lt;code>sign_event&lt;/code>）、公钥获取（&lt;code>get_public_key&lt;/code>）、&lt;a href="https://nostrcompass.org/zh/topics/nip-04/">NIP-04&lt;/a> 加密/解密、&lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密/解密，以及 zap event 解密（&lt;code>decrypt_zap_event&lt;/code>）。&lt;/p>
&lt;p>&lt;strong>权限模型：&lt;/strong>&lt;/p>
&lt;p>客户端调用一次 &lt;code>get_public_key&lt;/code> 建立信任关系，接收签名器的包名和用户 pubkey。规范要求客户端保存这些值并不再调用 &lt;code>get_public_key&lt;/code>，以防止指纹追踪攻击。&lt;/p>
&lt;p>对于签名请求，用户可以一次性批准或授予&amp;quot;记住我的选择&amp;quot;以支持后台操作。若用户持续拒绝操作，签名器返回&amp;quot;已拒绝&amp;quot;状态，防止反复提示。&lt;/p>
&lt;p>&lt;strong>实现情况：&lt;/strong>&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/amber">Amber&lt;/a> 是 Android 的主要 NIP-55 签名器。支持 NIP-55 的客户端包括 &lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-25-newsletter/#white-noise-v030">White Noise&lt;/a>、&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-25-newsletter/#unfiltered-v106">Unfiltered&lt;/a> 等。Web 应用无法直接接收签名器响应，必须使用回调 URL 或剪贴板操作。&lt;/p>
&lt;p>&lt;strong>与其他签名 NIP 的关系：&lt;/strong>&lt;/p>
&lt;p>NIP-55 与 &lt;a href="https://nostrcompass.org/zh/topics/nip-07/">NIP-07&lt;/a>（浏览器扩展）和 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a>（通过 relay 远程签名）互补。NIP-07 适用于桌面浏览器，NIP-46 适用于跨设备签名，NIP-55 则以最低延迟提供原生 Android 集成。&lt;/p>
&lt;h2 id="nip-深入解析nip-60cashu-钱包">NIP 深入解析：NIP-60（Cashu 钱包）&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/60.md">NIP-60&lt;/a> 定义 &lt;a href="https://nostrcompass.org/zh/topics/cashu/">Cashu&lt;/a> ecash 钱包如何在 Nostr relay 上存储状态，实现跨应用的钱包同步。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-25-newsletter/#ridestr-v026">Ridestr v0.2.6&lt;/a> 使用 NIP-60 进行跨设备钱包同步，该协议值得深入了解。&lt;/p>
&lt;p>&lt;strong>Event Kind：&lt;/strong>&lt;/p>
&lt;p>NIP-60 使用四种 event 类型。可替换的 kind 17375 存储钱包配置，包括 mint URL 和用于接收 P2PK ecash 支付的专用私钥。Token event（kind 7375）包含未花费的密码学凭证，消费历史（kind 7376）记录交易以供用户查看。可选的 kind 7374 跟踪 mint 支付报价。&lt;/p>
&lt;p>&lt;strong>钱包架构：&lt;/strong>&lt;/p>
&lt;p>钱包状态存储在 relay 上，可跨应用访问。用户的钱包 event 包含对 Cashu mint 的加密引用和一个与用户 Nostr 身份分离的钱包专用私钥。这一分离至关重要：钱包密钥处理 ecash 操作，Nostr 密钥处理社交功能。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">17375&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;nip44-encrypted-wallet-config&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [[&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;cashu-wallet&amp;#34;&lt;/span>]]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;strong>凭证管理：&lt;/strong>&lt;/p>
&lt;p>Cashu 凭证是无记名工具。一旦花费，凭证即失效。NIP-60 通过滚动机制处理这一问题：花费时，客户端创建包含剩余未花费凭证的新 token event，并通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-09/">NIP-09&lt;/a> 删除原有 event。已销毁的 token ID 存入 &lt;code>del&lt;/code> 字段用于状态跟踪。&lt;/p>
&lt;p>客户端应定期向 mint 验证凭证以检测已花费的凭证。允许每个 mint 存在多个 token event，消费历史 event 帮助用户跟踪交易，尽管这些是可选的。&lt;/p>
&lt;p>&lt;strong>安全模型：&lt;/strong>&lt;/p>
&lt;p>所有敏感数据使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密。钱包私钥从不以明文形式出现。由于 relay 存储加密的数据块而无法理解其内容，即使在不可信的 relay 上，钱包状态也保持私密。&lt;/p>
&lt;p>&lt;strong>实现情况：&lt;/strong>&lt;/p>
&lt;p>支持 NIP-60 的钱包包括 &lt;a href="https://github.com/gandlafbtc/nutsack">Nutsack&lt;/a> 和 &lt;a href="https://github.com/cashubtc/eNuts">eNuts&lt;/a>。&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-25-newsletter/#ridestr-v026">Ridestr&lt;/a> 等客户端使用 NIP-60 进行跨设备同步，让用户在桌面端充值并在移动端消费，无需手动转账。&lt;/p>
&lt;hr>
&lt;p>本周就到这里。正在构建什么或有新闻要分享？&lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 私信联系我们&lt;/a>或在 Nostr 上找到我们。&lt;/p></content:encoded></item><item><title>Nostr Compass #10</title><link>https://nostrcompass.org/zh/newsletters/2026-02-18-newsletter/</link><pubDate>Wed, 18 Feb 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-02-18-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> Blossom 本地缓存层初具雏形，多个独立项目在 Android 离线媒体访问上不约而同地汇聚。Alby 为构建和测试 Nostr Wallet Connect 集成推出 &lt;a href="https://sandbox.albylabs.com">NWC 开发者沙箱&lt;/a>，无需真实资金。两位作者在同一周提出了 AI 代理在 Nostr 上通信的竞争方案。fiatjaf 从 &lt;a href="https://github.com/nostr-protocol/nips/pull/1946">NIP-11&lt;/a> 中移除了未使用字段，删除了 relay 运营者从未采用的保留策略、国家代码、隐私政策和社区偏好 tag。&lt;a href="https://github.com/nostr-protocol/nips/pull/2223">NIP-85&lt;/a> 合并了 Trusted Assertions 的服务提供商可发现性指南。&lt;a href="https://github.com/nostr-protocol/nips/pull/1752">NIP-52&lt;/a> 新增 &lt;code>D&lt;/code> tag，为日历 event 启用按天精度的时间戳索引。新项目包括 &lt;a href="https://github.com/zeSchlausKwab/mapnolia">Mapnolia&lt;/a>（去中心化地图瓦片分发）、&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>（基于 MLS 加密的消息应用）、&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a>（Android 端 FROST 门限签名）、&lt;a href="https://files.iris.to/#/npub1xndmdgymsf4a34rzr7346vp8qcptxf75pjqweh8naa8rklgxpfqqmfjtce/hashtree">Hashtree&lt;/a>（内容寻址存储与 Nostr 集成）和 &lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a>（从任意 Android 应用分享内容到 Nostr）。&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> 合并 11 个 NWC PR，添加双钱包支持和自动服务生命周期管理。&lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a> 通过 NWC 集成推出&lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.0%2B2">内置 Lightning 钱包&lt;/a>。&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> 为 Android 应用商店上架做准备，HAVEN 达到 &lt;a href="https://github.com/bitvora/haven/releases/tag/v1.2.0-rc3">v1.2.0-rc3&lt;/a>，支持多 npub 和云备份。本周深入解析涵盖 NIP-85 的 Trusted Assertions 系统（将 Web of Trust 计算委托给服务提供商）以及 NIP-52 的日历 event 协议（跟随其按天精度索引更新）。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> Blossom 本地缓存层初具雏形，多个独立项目在 Android 离线媒体访问上不约而同地汇聚。Alby 为构建和测试 Nostr Wallet Connect 集成推出 &lt;a href="https://sandbox.albylabs.com">NWC 开发者沙箱&lt;/a>，无需真实资金。两位作者在同一周提出了 AI 代理在 Nostr 上通信的竞争方案。fiatjaf 从 &lt;a href="https://github.com/nostr-protocol/nips/pull/1946">NIP-11&lt;/a> 中移除了未使用字段，删除了 relay 运营者从未采用的保留策略、国家代码、隐私政策和社区偏好 tag。&lt;a href="https://github.com/nostr-protocol/nips/pull/2223">NIP-85&lt;/a> 合并了 Trusted Assertions 的服务提供商可发现性指南。&lt;a href="https://github.com/nostr-protocol/nips/pull/1752">NIP-52&lt;/a> 新增 &lt;code>D&lt;/code> tag，为日历 event 启用按天精度的时间戳索引。新项目包括 &lt;a href="https://github.com/zeSchlausKwab/mapnolia">Mapnolia&lt;/a>（去中心化地图瓦片分发）、&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a>（基于 MLS 加密的消息应用）、&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a>（Android 端 FROST 门限签名）、&lt;a href="https://files.iris.to/#/npub1xndmdgymsf4a34rzr7346vp8qcptxf75pjqweh8naa8rklgxpfqqmfjtce/hashtree">Hashtree&lt;/a>（内容寻址存储与 Nostr 集成）和 &lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a>（从任意 Android 应用分享内容到 Nostr）。&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> 合并 11 个 NWC PR，添加双钱包支持和自动服务生命周期管理。&lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a> 通过 NWC 集成推出&lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.0%2B2">内置 Lightning 钱包&lt;/a>。&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> 为 Android 应用商店上架做准备，HAVEN 达到 &lt;a href="https://github.com/bitvora/haven/releases/tag/v1.2.0-rc3">v1.2.0-rc3&lt;/a>，支持多 npub 和云备份。本周深入解析涵盖 NIP-85 的 Trusted Assertions 系统（将 Web of Trust 计算委托给服务提供商）以及 NIP-52 的日历 event 协议（跟随其按天精度索引更新）。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="blossom-本地缓存层初具雏形">Blossom 本地缓存层初具雏形&lt;/h3>
&lt;p>多个独立项目正在汇聚解决同一问题：移动设备上 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 媒体的离线访问。&lt;/p>
&lt;p>&lt;a href="https://github.com/greenart7c3/Morganite">Morganite&lt;/a>，greenart7c3（&lt;a href="https://github.com/greenart7c3/amber">Amber&lt;/a> 和 &lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a> 的开发者）推出的新 Android 应用，实现了 Blossom 媒体的客户端缓存。用户无需网络连接即可访问之前浏览过的图片和文件。&lt;/p>
&lt;p>&lt;a href="https://github.com/hardran3/Aerith">Aerith&lt;/a> 发布了 &lt;a href="https://github.com/hardran3/Aerith/releases/tag/v0.2">v0.2&lt;/a>，新增图片标签、批量镜像/标记/删除操作、按标签和文件类型过滤，以及初步的 Blossom 本地缓存支持。Aerith 是一款管理界面，供在多个 Blossom 服务器上存储媒体的用户组织和镜像其 blob。&lt;/p>
&lt;p>Blossom 规范中新增了一份&lt;a href="https://github.com/hzrd149/blossom/blob/master/implementations/local-blossom-cache.md">本地缓存实现指南&lt;/a>，记录了客户端 blob 存储规范，而 &lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a>（与 Aerith 同一开发者）则在其 Android 分享至 Nostr 流程中添加了 Blossom 上传集成。本周四个独立项目汇聚于同一问题：专用缓存应用、媒体管理器、参考规范，以及集成 Blossom 的分享工具，它们都在简单上传和检索之外实现了持久化本地存储。&lt;/p>
&lt;h3 id="alby-nwc-开发者沙箱">Alby NWC 开发者沙箱&lt;/h3>
&lt;p>&lt;a href="https://sandbox.albylabs.com">Alby&lt;/a> 为使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">Nostr Wallet Connect (NIP-47)&lt;/a> 的开发者推出了沙箱环境。该沙箱提供托管的 NWC 钱包服务，开发者可创建测试连接并发送模拟支付，无需连接真实 Lightning 钱包，同时实时观察 NWC event 的完整请求/响应周期。开发者从沙箱生成 &lt;code>nostr+walletconnect://&lt;/code> 连接字符串并传递给客户端，沙箱随即展示客户端与钱包服务之间流转的 kind 23194 请求和 kind 23195 响应 event。&lt;/p>
&lt;p>这降低了新 NWC 集成的门槛。此前，测试需要个人 Lightning 钱包或自托管的 NWC 服务。沙箱将这些屏蔽掉，让开发者可以即时获得 &lt;code>pay_invoice&lt;/code>、&lt;code>get_balance&lt;/code>、&lt;code>make_invoice&lt;/code>、&lt;code>lookup_invoice&lt;/code> 和 &lt;code>list_transactions&lt;/code> 方法对接真实 NWC 端点的反馈循环。&lt;/p>
&lt;h3 id="ai-代理-nip-相继登场">AI 代理 NIP 相继登场&lt;/h3>
&lt;p>Nostr 上 AI 代理通信的提案在数天内接连出现，以不同角度切入这一问题。&lt;/p>
&lt;p>来自 joelklabo 的 &lt;a href="https://github.com/nostr-protocol/nips/pull/2226">NIP-XX：AI 代理消息&lt;/a> 定义了 AI 代理交互的完整协议：包括提示词、响应、流式增量、状态更新、工具遥测、错误、取消和能力发现的 event kind。&lt;code>ai.info&lt;/code> 发现 event（kind 31340，可替换）让代理公告其支持的模型、带 schema 的工具、流式支持和速率限制。joelklabo 的提案包含通过提示词 ID 关联运行、会话管理、带序列排序的流重组，以及用于元数据隐私的 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a> 指南。&lt;/p>
&lt;p>来自 pablof7z 的 &lt;a href="https://github.com/nostr-protocol/nips/pull/2220">NIP-AE：Agents&lt;/a> 采用了不同方法，定义了代理实例化的 kind：定义和经验教训。这些是 pablof7z 在 &lt;a href="https://github.com/tenex-chat/tenex">TENEX&lt;/a>（基于 Nostr 构建的自主学习系统）中使用的 event 类型。同样来自 pablof7z 的配套提案 &lt;a href="https://github.com/nostr-protocol/nips/pull/2221">NIP-AD：MCP 服务器与技能公告&lt;/a> 定义了在 Nostr 上公告 &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a> 服务器和技能的 event。支持 &lt;a href="https://nostrcompass.org/zh/topics/nip-22/">NIP-22&lt;/a> 评论，社区可直接在 Nostr 上讨论和评分 MCP 服务器。&lt;/p>
&lt;p>NIP-XX 涵盖完整的代理通信，NIP-AE 和 NIP-AD 则处理身份和工具发现。这些提案可能会融合成统一标准，也可能作为互补层共存。&lt;/p>
&lt;h2 id="版本发布">版本发布&lt;/h2>
&lt;h3 id="haven-v120-rc3">HAVEN v1.2.0-rc3&lt;/h3>
&lt;p>&lt;a href="https://github.com/bitvora/haven">HAVEN&lt;/a>，将四种 relay 功能与 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 媒体服务器捆绑的一体化个人 relay，达到 &lt;a href="https://github.com/bitvora/haven/releases/tag/v1.2.0-rc3">v1.2.0-rc3&lt;/a>。此候选版本新增对多 npub 的支持，让单个 HAVEN 实例可为多个 Nostr 身份提供服务。更早的 RC 版本添加了云备份的 &lt;code>--from-cloud&lt;/code> 和 &lt;code>--to-cloud&lt;/code> 标志（RC2），并修复了 Web of Trust 重复计数 bug（RC1）。&lt;/p>
&lt;h3 id="mostro-mobile-v120内置-lightning-钱包">Mostro Mobile v1.2.0：内置 Lightning 钱包&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mobile">Mostro Mobile&lt;/a>，&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a> P2P Bitcoin 交易所的移动客户端（&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-11-newsletter/#mostro-%E5%8F%91%E5%B8%83%E9%A6%96%E4%B8%AA%E5%85%AC%E6%B5%8B%E7%89%88">上周报道的 v1.1.0&lt;/a>），发布了 &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.2.0%2B2">v1.2.0&lt;/a>，通过完整的 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NWC (NIP-47)&lt;/a> 集成内置 Lightning 钱包。买卖双方无需再切换应用处理发票。应用为卖家自动检测持有发票并通过已连接钱包支付，买家则获得自动发票生成。此版本紧随本周早些时候的 &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.1.1%2B1">v1.1.1&lt;/a>，该版本新增了带可信实例精选注册表的多 Mostro 节点支持、用于节点显示的 kind 0 元数据获取、通过 pubkey 自定义节点管理，以及所选节点下线时的自动回退。&lt;/p>
&lt;p>服务器端，&lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.2">Mostro v0.16.2&lt;/a> 发布，修复了重复开发费用支付、密码验证 RPC 端点的速率限制，以及协作取消时的正确争议清理。&lt;/p>
&lt;p>新配套项目 &lt;a href="https://github.com/MostroP2P/mostro-skill">mostro-skill&lt;/a> 让代理能通过 Nostr 在 Mostro 上进行交易。&lt;/p>
&lt;h3 id="aerith-v02">Aerith v0.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/hardran3/Aerith">Aerith&lt;/a>，&lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 图片管理器，发布了 &lt;a href="https://github.com/hardran3/Aerith/releases/tag/v0.2">v0.2&lt;/a>，新增用于组织媒体的图片标签、跨服务器批量镜像/标记/删除操作、按标签和文件类型过滤，以及初步的本地缓存支持。更多背景请参见&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-18-newsletter/#blossom-%e6%9c%ac%e5%9c%b0%e7%bc%93%e5%ad%98%e5%b1%82%e5%88%9d%e5%85%b7%e9%9b%8f%e5%bd%a2">新闻部分&lt;/a>。&lt;/p>
&lt;h3 id="mapnolia基于-nostr-的去中心化地图瓦片">Mapnolia：基于 Nostr 的去中心化地图瓦片&lt;/h3>
&lt;p>&lt;a href="https://github.com/zeSchlausKwab/mapnolia">Mapnolia&lt;/a> 是一款新的地理空间数据服务器，将 &lt;a href="https://github.com/protomaps/PMTiles">PMTiles&lt;/a> 地图存档按地理区域分块，并通过 Nostr 公告以实现去中心化发现。它向 Nostr relay 发布 kind 34444 参数化可替换 event，包含带图层元数据、geohash 区域、文件引用和 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 服务器详情的完整地图瓦片块索引。&lt;/p>
&lt;p>客户端通过 Nostr 网络发现和检索地图数据，而非通过中心化瓦片服务器。公告 event 携带足够的元数据，让客户端仅从列出的 Blossom 服务器请求所需的地理区域。Mapnolia 是首个将地理空间数据分发带入 Nostr 的项目，为支持离线的地图应用开辟了可能。&lt;/p>
&lt;h3 id="pika基于-marmot-的加密消息应用">Pika：基于 Marmot 的加密消息应用&lt;/h3>
&lt;p>&lt;a href="https://github.com/sledtools/pika">Pika&lt;/a> 是一款新的端对端加密消息应用，适用于 iOS 和 Android，使用 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 协议，该协议在 Nostr relay 之上叠加&lt;a href="https://nostrcompass.org/zh/topics/mls/">消息层安全（MLS）&lt;/a>。架构将关注点分离为处理 MLS 状态管理和通过 Nostr relay 进行消息加解密的 Rust 核心（&lt;code>pika_core&lt;/code>），以及 SwiftUI（iOS）和 Kotlin（Android）的轻量原生 UI 壳。状态单向流动：UI 向 Rust actor 分发动作，actor 改变状态并通过 UniFFI 和 JNI 绑定向 UI 发送带版本号的快照。&lt;/p>
&lt;p>Pika 加入了基于 MLS 的 Nostr 消息应用不断壮大的行列，与 &lt;a href="https://github.com/marmot-protocol/whitenoise">White Noise&lt;/a>、&lt;a href="https://github.com/VectorPrivacy">Vector&lt;/a> 和 &lt;a href="https://0xchat.com">0xchat&lt;/a> 并列。所有应用都使用 Nostr relay 作为 MLS 加密密文的传输层，使 relay 运营者无法读取消息内容。Pika 使用 Marmot Development Kit（MDK）实现 MLS，使用 nostr-sdk 连接 relay。&lt;/p>
&lt;h3 id="keepandroid-端-frostzhtopicsfrost-门限签名">Keep：Android 端 &lt;a href="https://nostrcompass.org/zh/topics/frost/">FROST&lt;/a> 门限签名&lt;/h3>
&lt;p>&lt;a href="https://github.com/privkeyio/keep-android">Keep&lt;/a> 是一款新的 Android 应用，用于 &lt;a href="https://nostrcompass.org/zh/topics/frost/">FROST&lt;/a> 门限签名，不需要任何单一设备持有完整私钥。它实现了 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a>（Android 签名器）和 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a>（远程签名），兼容的 Nostr 客户端可以在密钥材料分布于多台设备的情况下请求签名。默认配置为 2-of-3 和 3-of-5，但支持任意 t-of-n 门限。&lt;/p>
&lt;p>Keep 的分布式密钥生成（DKG）仪式通过 Nostr relay 使用自定义 event kind 运行：kind 21101 用于组公告，kind 21102 用于第一轮承诺多项式（公开广播），kind 21103 用于第二轮密钥份额（参与者之间点对点的 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密）。DKG 过程中，组私钥标量从未在任何地方被计算或组装。每台设备仅持有其多项式评估份额，任意 t 个份额即可通过两轮提交-然后-签名协议生成有效的 Schnorr 签名。最终的 64 字节签名与单签名者 Schnorr 签名无法区分。底层，Keep 使用 Zcash 基金会的 &lt;code>frost-secp256k1-tr&lt;/code> crate 并带 Taproot 调整，因此组公钥可直接用作 Nostr npub。&lt;/p>
&lt;p>Keep 加入 &lt;a href="https://frostr.org">Frostr&lt;/a> 项目家族，与 &lt;a href="https://github.com/FROSTR-ORG/igloo-desktop">Igloo Desktop&lt;/a>、&lt;a href="https://github.com/FROSTR-ORG/igloo-android">Igloo for Android&lt;/a>、&lt;a href="https://github.com/FROSTR-ORG/frost2x">Frost2x&lt;/a> 和 &lt;a href="https://github.com/FROSTR-ORG/igloo-ios">Igloo for iOS&lt;/a> 并列，扩展了 Nostr 上门限密钥管理的选择。&lt;/p>
&lt;h3 id="prism从-android-分享任意内容到-nostr">Prism：从 Android 分享任意内容到 Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/hardran3/Prism">Prism&lt;/a> 是一款新的 Android 应用（Kotlin/Jetpack Compose，API 26+），注册为系统分享目标，让用户可以从手机上任意应用向 Nostr 发布文本、URL、图片和视频。分享的 URL 在组合成笔记前会经过跟踪参数清除处理。Prism 获取 OpenGraph 元数据以生成丰富的链接预览，并内联渲染原生 Nostr 引用（&lt;code>note1&lt;/code>、&lt;code>nevent1&lt;/code>）。&lt;/p>
&lt;p>调度引擎采用混合 &lt;code>AlarmManager&lt;/code>/&lt;code>WorkManager&lt;/code> 方案以绕过 Android 电池优化：AlarmManager 处理精确唤醒时机，而加急 WorkManager 任务确保投递，离线场景下使用指数退避重试。媒体上传通过可配置的 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 服务器完成，支持图片和视频帧的缩略图生成。所有 event 签名委托给 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 外部签名器，如 &lt;a href="https://github.com/greenart7c3/amber">Amber&lt;/a>，并支持多账户身份切换。Prism 还支持 &lt;a href="https://nostrcompass.org/zh/topics/nip-84/">NIP-84（高亮）&lt;/a> 发帖。由 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-18-newsletter/#aerith-v02">Aerith&lt;/a> 的同一开发者创作。&lt;/p>
&lt;h3 id="hashtree内容寻址存储与-nostr-集成">Hashtree：内容寻址存储与 Nostr 集成&lt;/h3>
&lt;p>&lt;a href="https://files.iris.to/#/npub1xndmdgymsf4a34rzr7346vp8qcptxf75pjqweh8naa8rklgxpfqqmfjtce/hashtree">Hashtree&lt;/a> 是一个基于文件系统的内容寻址 blob 存储系统，在 Nostr 上发布 Merkle 根以创建可变的 npub/路径地址。该系统使用&amp;quot;哑存储&amp;quot;，与任何键值存储兼容，将内容分块为针对 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 上传优化的 2MB 块。与 BitTorrent 不同，无需主动进行 Merkle 证明计算，只需按哈希存储和检索 blob 即可。&lt;/p>
&lt;p>Nostr 集成支持类似 &lt;code>htree://npub.../repo-name&lt;/code> 的 git 远程 URL 用于克隆仓库，使用 &lt;code>htree publish mydata &amp;lt;hash&amp;gt;&lt;/code> 等命令将内容哈希发布到 &lt;code>npub.../mydata&lt;/code> 地址。完整的 CLI 支持加密（默认）和公开存储模式、内容固定、推送到 Blossom 服务器以及管理 Nostr 身份。每个存储项目要么是原始字节，要么是树节点，为通过 Nostr relay 网络进行去中心化内容分发提供了基础。&lt;/p>
&lt;h3 id="espyshakespeare-上的调色板捕获">Espy：Shakespeare 上的调色板捕获&lt;/h3>
&lt;p>&lt;a href="https://espy.you">Espy&lt;/a> 基于 &lt;a href="https://soapbox.pub/tools/shakespeare/">Shakespeare&lt;/a> 平台构建，让用户从照片中捕获调色板并将其作为 Nostr event 分享。Shakespeare 是一个 AI 驱动的应用构建器，通过 NIP-07 浏览器扩展对用户进行身份验证，并提供内置的 Nostr relay 连接，让开发者无需自行实现密钥管理或 relay 池即可发布应用。Espy 将相机输入的主色提取为可通过标准 Nostr 信息流发现的可分享调色板卡片。&lt;/p>
&lt;h3 id="flotilla-164">Flotilla 1.6.4&lt;/h3>
&lt;p>&lt;a href="https://gitea.coracle.social/coracle/flotilla">Flotilla&lt;/a>，hodlbod 的 Discord 风格 Nostr 客户端（以 relay 为群组进行组织），发布了 &lt;a href="https://gitea.coracle.social/coracle/flotilla/releases/tag/1.6.4">1.6.4&lt;/a>。Coracle 系列项目已从 GitHub 迁移到自托管的 &lt;a href="https://gitea.coracle.social/coracle">Gitea 实例&lt;/a>。此版本通过 NIP-9a 添加了推送通知和钱包接收流程，以及分类列表和空间 URL 支持。界面改进包括清理后的模态框和通知处理。房间静音和移动端安全区域内边距是本次变更的完结，同时修复了 Safari 图片上传和日历 event 详情问题。&lt;/p>
&lt;h3 id="shosho-v0120">Shosho v0.12.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a>，集成 Nostr 的移动直播应用，发布了 &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.12.0">v0.12.0&lt;/a>。此版本新增带播放器内回复和自定义表情集成的视频片段功能。线程保护阻止间接提及垃圾信息，新的二维码分享功能让用户可以离线交换个人资料。新的水平播放模式为直播提供类 Twitch 观看体验，浏览屏幕现在在直播旁展示创作者片段。&lt;/p>
&lt;h3 id="granary-v100">Granary v10.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/snarfed/granary">Granary&lt;/a>，一个在 Nostr、Bluesky、ActivityPub 和其他平台之间将数据转换为通用格式的社交网络翻译库，发布了带有重大变更的 &lt;a href="https://github.com/snarfed/granary/releases/tag/v10.0">v10.0&lt;/a>。此版本将 Nostr 的默认 ActivityStreams 1 ID 从 bech32 切换为十六进制，并扩展了 Nostr 支持，包括 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/27.md">NIP-27&lt;/a> 提及解析和文章 tag。各转换器新增的多输出选项让开发者可以批量在协议之间转换。&lt;/p>
&lt;h3 id="nostr-mcp-server-v300">Nostr MCP Server v3.0.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/AustinKelsay/nostr-mcp-server">Nostr MCP Server&lt;/a>，一个让 AI 代理与 Nostr 网络交互的 &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a> 服务器，发布了 &lt;a href="https://github.com/AustinKelsay/nostr-mcp-server/releases/tag/v3.0.0">v3.0.0&lt;/a>。此主要版本新增了社交动作（关注、反应、转发、回复）和带 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/65.md">NIP-65&lt;/a> 支持及可选 &lt;a href="https://nostrcompass.org/zh/topics/nip-42/">NIP-42&lt;/a> 认证的 relay 列表管理。通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 的直接消息功能也是新增内容。此版本与本周的 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-18-newsletter/#ai-%e4%bb%a3%e7%90%86-nip-%e7%9b%b8%e7%bb%a7%e7%99%bb%e5%9c%ba">AI 代理 NIP 提案&lt;/a>相配合，为在 Nostr 上运行的代理提供实用工具。&lt;/p>
&lt;h3 id="aegis-v038">Aegis v0.3.8&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZharlieW/Aegis">Aegis&lt;/a>，跨平台 Nostr 签名器，发布了 &lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.3.8">v0.3.8&lt;/a>，支持多语言 UI 以及内置 Nostr 应用浏览器的增量更新管理器。新的更新机制与本地状态进行增量差异比较，以更低的带宽占用保持应用内 Nostr 网页应用目录的更新。此版本还引入了 5 分钟密钥材料缓存，以减少连续签名多个 event 时的数据库往返次数。&lt;/p>
&lt;h3 id="snstr-v031">SNSTR v0.3.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/AustinKelsay/snstr">SNSTR&lt;/a>（Secure Nostr Software Toolkit for Renegades），Nostr 协议的 TypeScript 库，发布了 &lt;a href="https://github.com/AustinKelsay/snstr/releases/tag/v0.3.1">v0.3.1&lt;/a>。此版本添加了包验证守卫，确保所有入口点包含在 npm tarball 中，并在 Node 和 Bun 上强制执行 CI。&lt;a href="https://github.com/AustinKelsay/snstr/releases/tag/v0.3.0">v0.3.0&lt;/a> 在同一周发布。&lt;/p>
&lt;h3 id="citrine-v200-pre1">Citrine v2.0.0-pre1&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Citrine">Citrine&lt;/a>，greenart7c3 的 Android Nostr relay，发布了 &lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v2.0.0-pre1">v2.0.0-pre1&lt;/a>，通过优化数据库索引和更好的 Kotlin 协程处理提升性能。此版本还增强了对托管网页应用的支持，每个应用现在运行在独立端口上。&lt;/p>
&lt;h2 id="项目更新">项目更新&lt;/h2>
&lt;h3 id="primal-androidnwc-基础设施扩展">Primal Android：NWC 基础设施扩展&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> 本周合并了 11 个 NWC 相关 PR，延续&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-04-newsletter/#primal-android-%E5%8F%91%E5%B8%83-nwc-%E5%8A%A0%E5%AF%86">两周前开始的&lt;/a>建设工作。此批次添加了双钱包 NWC 支持、与后端通知绑定的服务自动启停、按钱包类型的连接路由，以及删除钱包时的正确数据清理。NWC 服务现在根据钱包连接状态自主管理生命周期，减少了用户手动干预。&lt;/p>
&lt;h3 id="notedeckandroid-应用商店准备工作">Notedeck：Android 应用商店准备工作&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>，&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> 团队的多平台 Nostr 客户端，本周合并了 &lt;a href="https://github.com/damus-io/notedeck/pull/1287">Android 应用商店发布准备&lt;/a>。该 PR 添加了 Google Play 要求的 UGC（用户生成内容）合规计划，包括服务条款接受界面、通过上下文菜单和设置进行用户屏蔽、向 relay 发布举报 event 的 &lt;a href="https://nostrcompass.org/zh/topics/nip-56/">NIP-56（举报）&lt;/a> 功能，以及内容与安全设置部分。为通过新 Makefile 目标生成签名发布 APK 和 AAB（Android App Bundle）添加了构建基础设施。EULA 文档确立了 17 岁以上年龄要求和 Nostr 特有的去中心化内容免责声明。合规功能本身将在后续 PR 中推出；此次合并奠定了文档和签名的基础。&lt;/p>
&lt;p>在 Damus iOS 端，修复了&lt;a href="https://github.com/damus-io/damus/pull/3593">无限加载旋转器回归问题&lt;/a>，该问题会导致内容加载完成后旋转器持续无限显示。&lt;/p>
&lt;h3 id="nostria发现-relay-和私信修复">Nostria：发现 Relay 和私信修复&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>，专注于全球规模的跨平台 Nostr 客户端，本周合并了 9 个 PR。最值得关注的是为个人资料查找&lt;a href="https://github.com/nostria-app/nostria/pull/460">自动初始化发现 Relay&lt;/a>，让新用户无需手动配置即可获得可用的 relay 连接。其他修复包括 &lt;a href="https://github.com/nostria-app/nostria/pull/466">DM 文本框自动换行&lt;/a>、&lt;a href="https://github.com/nostria-app/nostria/pull/479">全屏视频视口填充&lt;/a>、&lt;a href="https://github.com/nostria-app/nostria/pull/481">转发预览中的文章元数据提取&lt;/a>和&lt;a href="https://github.com/nostria-app/nostria/pull/458">通知中的 nostr: URI 解析&lt;/a>。&lt;/p>
&lt;h3 id="camelusriverpod-v3-迁移">Camelus：Riverpod v3 迁移&lt;/h3>
&lt;p>&lt;a href="https://github.com/camelus-hq/camelus">Camelus&lt;/a>，基于 Flutter 的 Nostr 客户端，本周合并了 5 个 PR，核心是 &lt;a href="https://github.com/camelus-hq/camelus/pull/158">Riverpod v3 API 迁移&lt;/a>和&lt;a href="https://github.com/camelus-hq/camelus/pull/159">通用信息流重构&lt;/a>。&lt;a href="https://github.com/camelus-hq/camelus/pull/161">嵌入式笔记缓存&lt;/a>避免了对引用笔记的冗余 relay 请求。&lt;/p>
&lt;h2 id="nip-更新">NIP 更新&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>的最新变更：&lt;/p>
&lt;p>&lt;strong>已合并：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2223">NIP-85：服务提供商可发现性&lt;/a>&lt;/strong>：vitorpamplona 为 &lt;a href="https://nostrcompass.org/zh/topics/nip-85/">NIP-85 Trusted Assertions&lt;/a> 服务提供商的客户端发现添加了指南，包括 relay 提示和算法特定的服务密钥。详见&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-18-newsletter/#nip-%e6%b7%b1%e5%85%a5%e8%a7%a3%e6%9e%90nip-85trusted-assertions">下方深入解析&lt;/a>。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1946">NIP-11：Relay 信息清理&lt;/a>&lt;/strong>：fiatjaf 从 &lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a> 中移除了 &lt;code>privacy_policy&lt;/code>、&lt;code>retention&lt;/code> 数组、&lt;code>relay_countries&lt;/code> 和社区偏好块。relay 运营者很少填写这些字段，客户端也不会对其做出响应。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1752">NIP-52：按天精度时间戳 Tag&lt;/a>&lt;/strong>：staab 在 &lt;a href="https://nostrcompass.org/zh/topics/nip-52/">NIP-52&lt;/a> 基于时间的日历 event（kind 31923）中添加了必需的 &lt;code>D&lt;/code> tag，表示按天精度的 Unix 时间戳，计算方式为 &lt;code>floor(unix_seconds / 86400)&lt;/code>。多个 &lt;code>D&lt;/code> tag 覆盖多日 event，无需解析完整时间戳即可实现高效的时间索引。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2210">NIP-47：简化&lt;/a>&lt;/strong>：&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-11-newsletter/">第 9 期 Newsletter&lt;/a> 中讨论的简化 PR 本周合并，从 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47（Nostr Wallet Connect）&lt;/a>中移除了 &lt;code>multi_pay_invoice&lt;/code> 和 &lt;code>multi_pay_keysend&lt;/code>。完整的 NWC 协议深入解析请参见 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-04-newsletter/#nip-%E6%B7%B1%E5%85%A5%E8%A7%A3%E6%9E%90nip-47nostr-wallet-connect">Newsletter #8&lt;/a>。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>开放 PR 和讨论：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2211">NIP-74：播客&lt;/a>&lt;/strong>：&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-04-newsletter/">Newsletter #8&lt;/a> 已报道，这一播客规范提案本周引发了激烈讨论。staab 指出至少已有三个竞争性播客标准在野运行，derekross 则指出了一个已有六个月历史且有活跃应用和播客的现有实现。推进需要各实现在分配 NIP 编号前先达成共识。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2226">NIP-XX：AI 代理消息&lt;/a>&lt;/strong>：joelklabo 提议了一个完整的 AI 代理通信协议，包含用于提示词、响应、流式传输、工具遥测、错误和能力发现的 event kind。参见&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-18-newsletter/#ai-%e4%bb%a3%e7%90%86-nip-%e7%9b%b8%e7%bb%a7%e7%99%bb%e5%9c%ba">新闻部分&lt;/a>了解本周所有 AI 提案的报道。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1893">NIP-PNS：私人笔记存储&lt;/a>&lt;/strong>：jb55 的私人笔记系统定义了 kind 1080 event，用于在 relay 上存储加密个人笔记，而不暴露写作者身份。该方案通过用户的 nsec 使用 HKDF 派生一个确定性的假名密钥对：&lt;code>pns_key = hkdf_extract(ikm=device_key, salt=&amp;quot;nip-pns&amp;quot;)&lt;/code>，然后从派生密钥生成 secp256k1 密钥对。第二次派生生成对称加密密钥：&lt;code>pns_nip44_key = hkdf_extract(ikm=pns_key, salt=&amp;quot;nip44-v2&amp;quot;)&lt;/code>。内层笔记使用此密钥以 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> v2 加密后在假名 pubkey 下发布，因此 relay 看到的是来自与用户主密钥无关的身份的 kind 1080 event。与 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a> 礼品包装不同，PNS 不可被垃圾信息利用（假名密钥是确定性的，而非随机的），且不携带任何公开元数据（无需 &lt;code>p&lt;/code> tag，因为没有接收者）。本周，jb55 发布了在 Notedeck Rust 后端（&lt;code>enostr::pns&lt;/code> 模块）实现 PNS 的发现。他发现规范的 &lt;code>hkdf_extract&lt;/code> 调用存在歧义，因为 RFC 5869 HKDF 有两个阶段（提取和扩展），产生不同输出，大多数库期待两者都有。他澄清了 &lt;code>pns_nip44_key&lt;/code> 绕过 NIP-44 的正常 ECDH 密钥协商，直接用作会话密钥——这是实现者需要知道的细节，因为大多数 NIP-44 库默认使用 ECDH。他还标记了参考实现 TypeScript 中的未定义变量。该 PR 最初来自 2025 年 4 月，现在正被积极实现。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2220">NIP-AE：Agents&lt;/a>&lt;/strong>：pablof7z 为 Nostr 上的代理身份定义了四种 event kind，源自他在 &lt;a href="https://github.com/tenex-chat/tenex">TENEX&lt;/a> 上的工作。基础模板是 kind 4199（代理定义），携带标题、角色描述、系统指令、工具声明和版本。行为修饰符位于 kind 4201（代理微调），使用 &lt;code>only-tool&lt;/code>、&lt;code>allow-tool&lt;/code> 和 &lt;code>deny-tool&lt;/code> tag 进行运行时能力控制。代理将其学习内容作为 kind 4129（代理经验教训）event 发布，经过分类后通过 &lt;code>e&lt;/code> tag 链接回父定义，可通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-22/">NIP-22&lt;/a> 评论线程进一步完善。所有权验证使用 kind 14199，一个人类运营者列出其代理 pubkey 的可替换 event，与代理 kind 0 个人资料 &lt;code>p&lt;/code> tag 匹配时建立双向链。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2221">NIP-AD：MCP 服务器与技能公告&lt;/a>&lt;/strong>：pablof7z 定义了在 Nostr 上公告 &lt;a href="https://modelcontextprotocol.io/">Model Context Protocol&lt;/a> 服务器和独立技能的 event。MCP 服务器公告携带服务器端点 URL 和支持的协议版本，以及带输入 schema 的可用工具列表。服务器公告支持 &lt;a href="https://nostrcompass.org/zh/topics/nip-22/">NIP-22&lt;/a> 评论，社区可直接在 Nostr 上讨论和评分 MCP 服务器。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2224">NIP-73：OSM Tag Kind&lt;/a>&lt;/strong>：DestBro 提议在 &lt;a href="https://nostrcompass.org/zh/topics/nip-73/">NIP-73（外部内容 ID）&lt;/a>中添加 OpenStreetMap 标识符，该 NIP 通过 &lt;code>i&lt;/code> 和 &lt;code>k&lt;/code> tag 标准化 Nostr event 引用书籍（ISBN）、电影（ISAN）、播客订阅（GUID）、geohash 和 URL 等外部内容的方式。提议的 OSM kind 将让 event 通过 OpenStreetMap 节点或路段 ID 引用特定地图特征（建筑物、道路、公园），将 Nostr 内容与开放地理数据库连接起来。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2219">NIP-XX：响应式图片变体&lt;/a>&lt;/strong>：woikos 提议扩展 &lt;a href="https://nostrcompass.org/zh/topics/nip-94/">NIP-94&lt;/a> 文件元数据 event，添加不同分辨率响应式图片变体的 tag。客户端可根据显示尺寸和网络条件选择合适的变体，为浏览 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 服务器上高分辨率图片的移动用户减少带宽消耗。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-深入解析nip-85trusted-assertions">NIP 深入解析：NIP-85（Trusted Assertions）&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/85.md">NIP-85&lt;/a> 定义了一个将耗时计算委托给可信服务提供商的系统，这些提供商以 Nostr event 的形式发布签名结果。Web of Trust 评分和互动指标需要爬取大量 relay 并处理海量 event，这在移动设备上是不切实际的。本周的&lt;a href="https://github.com/nostr-protocol/nips/pull/2223">合并&lt;/a>为客户端发现这些提供商的过程添加了指南。&lt;/p>
&lt;p>&lt;strong>委托：&lt;/strong>&lt;/p>
&lt;p>计算用户的 Web of Trust 评分需要在大量 relay 上多跳爬取关注图谱，而计算准确的关注者数量意味着要对整个 relay 网络进行去重。移动设备和浏览器客户端无法执行这些操作，然而这些结果对于垃圾过滤和内容排名至关重要。NIP-85 通过让用户指定可信提供商来弥合这一差距，由提供商运行计算并以标准 Nostr event 形式发布结果。&lt;/p>
&lt;p>&lt;strong>协议设计：&lt;/strong>&lt;/p>
&lt;p>NIP-85 使用四种 event kind 对不同主题类型进行断言。用户断言（kind 30382）携带关注者数量、帖子/回复/反应数量、zap 金额、标准化排名（0-100）、常见话题和活跃时段：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;service pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30382&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;e88a691e98d9987c964521dff60025f60700378a4879180dcbbb4a5027850411&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rank&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;89&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;followers&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4521&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;first_created_at&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1609459200&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;post_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1283&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;reply_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;647&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;reactions_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;8920&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_amt_recd&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;850000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_amt_sent&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;320000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_cnt_recd&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;412&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_cnt_sent&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;198&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_avg_amt_day_recd&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1150&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_avg_amt_day_sent&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;430&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;reports_cnt_recd&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;2&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;reports_cnt_sent&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;0&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nostr&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;bitcoin&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;active_hours_start&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;14&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;active_hours_end&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;22&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;service key signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Event 断言（kind 30383）对单条笔记评分，包含评论数、引用数、转发数、反应数和 zap 数据：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;service pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30383&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;target event id&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rank&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;72&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;comment_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;45&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;quote_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;12&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;repost_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;89&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;reaction_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;310&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;23&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;zap_amount&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;125000&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;service key signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>对于可寻址 event（长文章、wiki 页面），kind 30384 将相同的互动指标整体应用于所有版本。Kind 30385 对通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-73/">NIP-73（外部内容 ID）&lt;/a>引用的外部标识符（书籍、电影、网站、地点、话题标签）进行评分，NIP-73 通过 &lt;code>i&lt;/code> 和 &lt;code>k&lt;/code> tag 标准化 Nostr event 引用外部内容的方式：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;service pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30385&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;isbn:9780765382030&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;k&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;isbn&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rank&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;94&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;comment_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;67&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;reaction_cnt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;203&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;service key signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每个断言都是一个可替换的可寻址 event，其中 &lt;code>d&lt;/code> tag 包含主题：pubkey、event ID、event 地址或 NIP-73 标识符。服务提供商用自己的密钥对这些 event 签名，客户端根据信任关系评估它们。&lt;/p>
&lt;p>&lt;strong>提供商发现：&lt;/strong>&lt;/p>
&lt;p>用户通过发布 kind 10040 event 声明其信任的断言提供商。每个条目指定断言类型，包含提供商 pubkey 和 relay 提示，以及可选的算法变体：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;user pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">10040&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;30382:rank&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4fd5e210...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nip85.nostr.band&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;30382:rank&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;3d842afe...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nostr.wine&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;30382:zap_amt_sent&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4fd5e210...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nip85.nostr.band&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;30383:rank&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4fd5e210...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nip85.nostr.band&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;user signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>用户可以使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 对 &lt;code>.content&lt;/code> 中的 tag 列表进行加密，以保持提供商偏好的私密性。客户端通过检查关注账号所信任的提供商来构建提供商列表，为断言提供商本身创建去中心化的声誉层。&lt;/p>
&lt;p>&lt;strong>安全模型：&lt;/strong>&lt;/p>
&lt;p>提供商必须为不同算法使用不同的服务密钥，当算法个性化时每个用户使用唯一密钥，防止跨用户查询的交叉关联。每个服务密钥配有一个描述算法行为的 kind 0 元数据 event，让用户了解其所信任的内容。断言 event 只应在底层数据实际发生变化时更新，防止不必要的 relay 流量，让客户端可以放心缓存结果。&lt;/p>
&lt;p>&lt;strong>当前采用情况：&lt;/strong>&lt;/p>
&lt;p>NIP-85 将一种已非正式出现的模式正式化。Primal 的缓存服务器计算互动指标和 Web of Trust 评分。&lt;a href="https://gitlab.com/soapbox-pub/antiprimal">Antiprimal&lt;/a>（在 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-11-newsletter/#antiprimal%E6%A0%87%E5%87%86%E5%85%BC%E5%AE%B9%E7%9A%84-primal-%E7%BC%93%E5%AD%98%E7%BD%91%E5%85%B3">Newsletter #9&lt;/a> 中报道）使用 NIP-85 event kind 将这些计算桥接到标准 Nostr 客户端。&lt;a href="https://nostr.band">Nostr.band&lt;/a> 运营着规范自身示例中引用的 &lt;code>wss://nip85.nostr.band&lt;/code> relay，为其搜索索引数据提供断言 event。在客户端侧，&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>（由 vitorpamplona 创作，他也是此 NIP 的作者）在其 &lt;code>quartz&lt;/code> 库中有实验性的 Trusted Assertions 支持，可解析断言 event 和服务提供商声明。&lt;a href="https://vertexlab.io">Vertex&lt;/a> 计算类似的 Web of Trust 指标，但&lt;a href="https://vertexlab.io/blog/dvms_vs_nip_85/">选择了不同的方式&lt;/a>，使用直接 API 而非 NIP-85 event，理由是断言架构的发现问题和计算开销。有了 NIP-85，任何客户端都可以通过标准 event 格式从任意提供商获取断言，提供商在准确性上竞争，用户自主选择信任对象。&lt;/p>
&lt;h2 id="nip-深入解析nip-52日历-event">NIP 深入解析：NIP-52（日历 Event）&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/52.md">NIP-52&lt;/a> 在 Nostr 上定义日历 event，为客户端提供表示和发现特定时刻或时间段内发生事件的标准方式。本周的 &lt;a href="https://github.com/nostr-protocol/nips/pull/1752">D tag 合并&lt;/a>添加了按天精度索引，补全了规范查询基础设施中缺失的部分。&lt;/p>
&lt;p>&lt;strong>两种 Event 类型：&lt;/strong>&lt;/p>
&lt;p>NIP-52 根据时间精度将日历 event 分为两种 kind。基于日期的 event（kind 31922）表示全天发生的事件，如节假日或多日节庆。它们在 &lt;code>start&lt;/code> 和可选的 &lt;code>end&lt;/code> tag 中使用 ISO 8601 日期字符串，不考虑时区：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event creator pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1735689600&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">31922&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Annual celebration of Bitcoin&amp;#39;s genesis block&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;bitcoin-independence-day-2026&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Bitcoin Independence Day&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;start&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;2026-01-03&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;end&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;2026-01-04&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;location&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Worldwide&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;g&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;u4pruydqqv&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;bitcoin&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;organizer-pubkey&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;host&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;r&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://bitcoinindependenceday.com&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event creator signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>基于时间的 event（kind 31923）在 &lt;code>start&lt;/code> 和可选的 &lt;code>end&lt;/code> tag 中使用 Unix 时间戳表示特定时刻，另有 IANA 时区标识符（&lt;code>start_tzid&lt;/code>、&lt;code>end_tzid&lt;/code>）用于显示。两种 kind 都是参数化可替换 event，主办方通过发布具有相同 &lt;code>d&lt;/code> tag 的新 event 来更新详情。&lt;/p>
&lt;p>&lt;strong>日历和 RSVP：&lt;/strong>&lt;/p>
&lt;p>Kind 31924 event 将日历定义为集合，通过 &lt;code>a&lt;/code> tag 引用 kind 31922 或 31923 event（通过其地址坐标）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;calendar owner pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">31924&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Nostr community events worldwide&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nostr-community-calendar&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Nostr Community Events&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;31923:&amp;lt;organizer-pubkey&amp;gt;:nostr-meetup-2026&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;31922:&amp;lt;organizer-pubkey&amp;gt;:bitcoin-independence-day-2026&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;calendar owner signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>用户可以维护多个日历（个人、工作、社区），客户端可以订阅特定 pubkey 的日历。日历 event 可以包含引用日历的 &lt;code>a&lt;/code> tag 来请求加入，实现协作日历管理，多个用户可以向不属于自己的日历贡献 event。&lt;/p>
&lt;p>RSVP 使用 kind 31925，用户发布出席状态以及可选的空闲/繁忙指示：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;attendee pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">31925&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Looking forward to it&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;31923:&amp;lt;organizer-pubkey&amp;gt;:nostr-meetup-2026&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;kind 31923 event id&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;unique-rsvp-id&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;status&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;accepted&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;fb&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;busy&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;organizer-pubkey&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;attendee signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>有效的 &lt;code>status&lt;/code> 值为&amp;quot;accepted&amp;quot;、&amp;ldquo;declined&amp;rdquo;、&amp;ldquo;tentative&amp;rdquo;，可选的 &lt;code>fb&lt;/code> tag 将用户标记为该时段空闲或繁忙。RSVP event 引用日历 event 的 &lt;code>a&lt;/code> tag 并携带主办方的 &lt;code>p&lt;/code> tag，以便主办方客户端跨 relay 汇总响应。&lt;/p>
&lt;p>&lt;strong>D Tag 的添加：&lt;/strong>&lt;/p>
&lt;p>在本周合并之前，客户端查询某个日期范围内的 event 时必须从某个 pubkey 或日历获取所有 event 并在客户端侧过滤。基于时间的 event（kind 31923）上新增的必需 &lt;code>D&lt;/code> tag 包含按天精度的 Unix 时间戳，计算方式为 &lt;code>floor(unix_seconds / 86400)&lt;/code>。跨多天的 event 携带多个 &lt;code>D&lt;/code> tag，每天一个。Relay 现在可以按天对 event 建立索引并高效响应过滤查询，将原本的客户端过滤问题转变为 relay 端索引查找。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event creator pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1739836800&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">31923&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Monthly meetup for Nostr developers in Austin&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nostr-meetup-2026&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;title&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Nostr Developer Meetup&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;summary&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Talks and demos from local Nostr builders&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;image&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://example.com/meetup-banner.jpg&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;start&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1740067200&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;end&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1740078000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;start_tzid&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;America/New_York&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;end_tzid&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;America/New_York&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;D&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;20139&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;location&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;Bitcoin Commons, Austin TX&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;g&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;9v6knb2pg&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;organizer-pubkey&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;host&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;speaker-pubkey&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;speaker&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nostr&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;t&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;meetup&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;r&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://bitcoincommons.com&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event creator signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>D&lt;/code> 值 &lt;code>20139&lt;/code> 等于 &lt;code>floor(1740067200 / 86400)&lt;/code>，将此 event 定位于 2025 年 2 月 20 日。查询&amp;quot;本周所有 event&amp;quot;的客户端发送带相应 &lt;code>D&lt;/code> 范围的过滤器，relay 仅返回匹配的 event。&lt;/p>
&lt;p>&lt;strong>设计决策：&lt;/strong>&lt;/p>
&lt;p>NIP-52 故意省略了重复 event。规范完全不涉及重复规则（iCalendar 的 RRULE），将这一复杂性留给客户端处理。主办方为每次发生发布单独的 event，保持 relay 端数据模型简洁。参与者 tag 携带可选角色（&amp;ldquo;host&amp;rdquo;、&amp;ldquo;speaker&amp;rdquo;、&amp;ldquo;attendee&amp;rdquo;），位置 tag 可以包含用于空间查询的 geohash &lt;code>g&lt;/code> tag，以及人类可读的地址。&lt;/p>
&lt;p>&lt;strong>实现情况：&lt;/strong>&lt;/p>
&lt;p>&lt;a href="https://github.com/zmeyer44/flockstr">Flockstr&lt;/a> 是基于 NIP-52 构建的主要日历客户端。&lt;a href="https://gitea.coracle.social/coracle/coracle">Coracle&lt;/a> 在其社交信息流中显示日历 event。本周 &lt;code>D&lt;/code> tag 的添加实现了 relay 端时间索引，两个客户端均可利用此功能在查询特定日期范围内的 event 时减少带宽消耗。&lt;/p>
&lt;hr>
&lt;p>本周就到这里。正在构建什么？有新闻要分享？希望我们报道您的项目？&lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 私信联系我们&lt;/a>或在 Nostr 上找到我们。&lt;/p></content:encoded></item><item><title>Nostr Compass #9</title><link>https://nostrcompass.org/zh/newsletters/2026-02-11-newsletter/</link><pubDate>Wed, 11 Feb 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-02-11-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> Mostro 经过三年开发发布首个公测版，通过 Nostr 将 P2P Bitcoin 交易带到移动端。OpenSats 颁发第十六波 Bitcoin 资助，Minibits Wallet 获得续期资助，该钱包集成了 Nostr 的 Cashu 功能。&lt;strong>Zapstore 达到 1.0 稳定版本&lt;/strong>，标志着去中心化 Android 应用商店的成熟。Coracle 0.6.29 添加话题和高亮评论功能。Igloo Desktop v1.0.3 对 Frostr 门限签名进行了重大安全加固。Amber v4.1.2-pre1 迁移至 Flow 架构。Angor 发布 v0.2.5，带来全新的资金管理 UI 和 NIP-96 图片服务器配置。NostrPress 作为一款将 Nostr 个人资料转换为静态博客的工具上线。Antiprimal 发布了一个标准兼容的网关，将 Primal 的专有缓存服务器桥接到标准 Nostr NIP。Primal Android 合并 18 个 PR，扩展 NWC 基础设施，支持双钱包、审计日志和 &lt;code>lookup_invoice&lt;/code> 方法。diVine 推出 API 优先视频信息流。Marmot TypeScript SDK 将其参考聊天应用拆分为独立仓库，并开始迁移到 ts-mls v2。NIPs 仓库合并了 NIP-45 的 HyperLogLog 近似计数并从 kind 0 提取了身份 tag。vitorpamplona 发起的一系列提案开始系统性地精简 kind 0 元数据 event。新协议提案包括用于 NAT 穿透的 Nostr Relay Connect 和用于签名 Web 声明的 Nostr Web Token。本周的深入解析涵盖 NIP-45 新增的 HyperLogLog 近似计数（用于跨 relay event 指标）以及 NIP-96 的 HTTP 文件存储协议（现已弃用，由 Blossom 替代），各项目正在两种媒体标准之间过渡。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> Mostro 经过三年开发发布首个公测版，通过 Nostr 将 P2P Bitcoin 交易带到移动端。OpenSats 颁发第十六波 Bitcoin 资助，Minibits Wallet 获得续期资助，该钱包集成了 Nostr 的 Cashu 功能。&lt;strong>Zapstore 达到 1.0 稳定版本&lt;/strong>，标志着去中心化 Android 应用商店的成熟。Coracle 0.6.29 添加话题和高亮评论功能。Igloo Desktop v1.0.3 对 Frostr 门限签名进行了重大安全加固。Amber v4.1.2-pre1 迁移至 Flow 架构。Angor 发布 v0.2.5，带来全新的资金管理 UI 和 NIP-96 图片服务器配置。NostrPress 作为一款将 Nostr 个人资料转换为静态博客的工具上线。Antiprimal 发布了一个标准兼容的网关，将 Primal 的专有缓存服务器桥接到标准 Nostr NIP。Primal Android 合并 18 个 PR，扩展 NWC 基础设施，支持双钱包、审计日志和 &lt;code>lookup_invoice&lt;/code> 方法。diVine 推出 API 优先视频信息流。Marmot TypeScript SDK 将其参考聊天应用拆分为独立仓库，并开始迁移到 ts-mls v2。NIPs 仓库合并了 NIP-45 的 HyperLogLog 近似计数并从 kind 0 提取了身份 tag。vitorpamplona 发起的一系列提案开始系统性地精简 kind 0 元数据 event。新协议提案包括用于 NAT 穿透的 Nostr Relay Connect 和用于签名 Web 声明的 Nostr Web Token。本周的深入解析涵盖 NIP-45 新增的 HyperLogLog 近似计数（用于跨 relay event 指标）以及 NIP-96 的 HTTP 文件存储协议（现已弃用，由 Blossom 替代），各项目正在两种媒体标准之间过渡。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="mostro-发布首个公测版">Mostro 发布首个公测版&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro">Mostro&lt;/a>，基于 Nostr 构建的点对点 Bitcoin 交易所，发布了&lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.1.0">移动应用 v1.1.0&lt;/a>，这是该项目经过三年开发后的首个公测版。该应用使用户能够直接通过 Nostr 进行订单协调来交易 Bitcoin，使用 Lightning 进行结算，无需托管中介。&lt;/p>
&lt;p>此版本引入了推送通知，改善了 Android 后台可靠性，提供可选的日志系统让用户在出现问题时捕获和共享诊断数据，使用增量初始化实现更顺畅的 relay 更新，以及带有国际化支持的第二阶段 UI 改进。该应用可在 &lt;a href="https://zapstore.dev">Zapstore&lt;/a> 和 &lt;a href="https://github.com/MostroP2P/mobile/releases/tag/v1.1.0">GitHub 直接下载&lt;/a>获取。&lt;/p>
&lt;p>Mostro 与 Shopstr 和 Plebeian Market 一起成为 Nostr 原生商务应用，其独特之处在于专注于法币兑 Bitcoin 的交换协调。底层的 &lt;a href="https://github.com/MostroP2P/mostro">Mostro 守护进程&lt;/a>通过 Nostr relay 处理订单匹配和争议解决。&lt;/p>
&lt;h3 id="opensats-第十六波-bitcoin-资助">OpenSats 第十六波 Bitcoin 资助&lt;/h3>
&lt;p>&lt;a href="https://opensats.org/blog/sixteenth-wave-of-bitcoin-grants">OpenSats&lt;/a> 宣布向 17 个开源项目提供资助。与 Nostr 相关的亮点：&lt;a href="https://github.com/minibits-cash/minibits_wallet">Minibits Wallet&lt;/a>，这款支持 &lt;a href="https://nostrcompass.org/zh/topics/nip-60/">NIP-60&lt;/a> 钱包 event 和 nutzap 集成的 Android &lt;a href="https://nostrcompass.org/zh/topics/cashu/">Cashu&lt;/a> 钱包，获得了续期资助。Minibits 使用 Nostr event 存储 ecash 代币状态，使钱包备份可通过 relay 同步在设备间移植。&lt;/p>
&lt;h3 id="nostrpressnostr-个人资料转静态博客">NostrPress：Nostr 个人资料转静态博客&lt;/h3>
&lt;p>&lt;a href="https://github.com/besoeasy/NostrPress">NostrPress&lt;/a>（&lt;a href="https://blog.besoeasy.com">blog.besoeasy.com&lt;/a>）是一款新工具，可将 Nostr 个人资料转换为完全静态的博客，可部署到任何地方。用户通过任何客户端在 Nostr 上发布文章，NostrPress 从这些 event 生成独立网站，包含本地媒体托管和 RSS 订阅源。&lt;/p>
&lt;p>NostrPress 使用 Nunjucks 模板和 JavaScript 构建，生成零平台锁定的网站。生成的输出是纯 HTML/CSS，可托管在任何静态文件服务器、GitHub Pages、Netlify 或个人 VPS 上。该工具与 &lt;a href="https://github.com/nostrband/nostrsite">Npub.pro&lt;/a> 和 &lt;a href="https://github.com/servus-social/servus">Servus&lt;/a> 一起成为将 Nostr 内容转换为传统网站的选择。&lt;/p>
&lt;h3 id="antiprimalprimal-缓存的标准兼容网关">Antiprimal：Primal 缓存的标准兼容网关&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/antiprimal">antiprimal&lt;/a>（&lt;a href="https://antiprimal.net">antiprimal.net&lt;/a>），Alex Gleason 和 Soapbox 团队的新项目，是一个 WebSocket 网关，将 Primal 的专有缓存服务器桥接到标准 Nostr 协议消息。Primal 通过 &lt;code>wss://cache.primal.net/v1&lt;/code> 提供 event 统计、内容搜索和 Web of Trust 计算等功能，但访问这些功能需要使用非标准 &lt;code>cache&lt;/code> 字段的专有消息格式，标准 Nostr 客户端无法使用。Antiprimal 将标准 NIP 请求转换为 Primal 的格式并转换回响应。&lt;/p>
&lt;p>该网关支持 &lt;a href="https://nostrcompass.org/zh/topics/nip-45/">NIP-45&lt;/a> COUNT 查询（反应、回复、转发、zap 计数、关注者计数）、&lt;a href="https://github.com/nostr-protocol/nips/blob/master/50.md">NIP-50&lt;/a> 搜索、&lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a> relay 信息，以及 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/85.md">NIP-85&lt;/a> 用于 Primal 预计算 Web of Trust 数据的 Trusted Assertions。配套机器人将 NIP-85 kind 30382（用户统计）和 kind 30383（event 互动）event 发布到可配置的 relay。该项目使用 TypeScript 基于 Bun 构建，使用 Nostrify 库。创建于 2 月 6 日，开发前三天已有 53 次提交，已在 antiprimal.net 上线。&lt;/p>
&lt;h3 id="ikarossignal-和-nostr-的-ai-代理消息网关">Ikaros：Signal 和 Nostr 的 AI 代理消息网关&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/ikaros">Ikaros&lt;/a>，Soapbox 团队的新项目，是一个消息网关，使 AI 代理能够通过 Signal 和 Nostr 加密 DM 进行通信。该桥接使用 &lt;a href="https://agentclientprotocol.org">Agent Client Protocol&lt;/a>（ACP）将任何 ACP 兼容的 AI 编程助手连接到真实的消息网络。本周三个 pull request 构成了该项目的初始构建。&lt;/p>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/ikaros/-/merge_requests/1">PR #1&lt;/a> 实现了完整的 &lt;a href="https://nostrcompass.org/zh/topics/nip-04/">NIP-04&lt;/a> 加密 DM 适配器，包含发送/接收支持、带显式刷新的响应缓冲、&lt;code>nsec&lt;/code> 和十六进制私钥格式、多 relay 发布与自动重连，以及交互式配置向导。该适配器使用 nostr-tools v2.23.0 并将 ACP SDK 更新至 v0.14.1。&lt;/p>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/ikaros/-/merge_requests/2">PR #2&lt;/a> 修复了由会话更新竞态条件导致的静默消息丢失：在会话注册到映射之前到达的传入通知被静默丢弃，修复方案缓冲这些通知并在注册完成后重放。&lt;a href="https://gitlab.com/soapbox-pub/ikaros/-/merge_requests/3">PR #3&lt;/a> 在代理交互中添加了 Signal 用户和群组名称/UUID 元数据，让 AI 代理知道它正在与谁交谈以及在哪个群组中。该项目开辟了新的设计空间：可通过 Nostr DM 寻址的 AI 代理也可从 Signal 访问，反之亦然。&lt;/p>
&lt;h3 id="kind-0-瘦身运动">Kind 0 瘦身运动&lt;/h3>
&lt;p>vitorpamplona 本周开启了一系列 PR，提议系统性地将数据从 kind 0（用户元数据）event 提取到专用 event 类型中。该运动解决了一个日益严重的问题：kind 0 event 随时间积累了大多数客户端不使用的字段，使每次个人资料获取的体积膨胀。&lt;/p>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2216">PR #2216&lt;/a>（已合并）将身份 tag（&lt;code>i&lt;/code> tag）从 kind 0 移至新的 kind 10011，因为这些 tag 的采用率极低。&lt;a href="https://github.com/nostr-protocol/nips/pull/2213">PR #2213&lt;/a> 提议将 &lt;a href="https://nostrcompass.org/zh/topics/nip-05/">NIP-05&lt;/a> 验证移至 kind 10008，这将使用户能够拥有多个 NIP-05 标识符并允许按 NIP-05 地址过滤 event。&lt;a href="https://github.com/nostr-protocol/nips/pull/2217">PR #2217&lt;/a> 提议将 Lightning 地址（lud06/lud16）提取到新的 kind，从而使所有 kind 0 用户不再需要携带仅与 Lightning 集成客户端相关的 zap 相关字段。&lt;/p>
&lt;p>这些提案重新引发了关于 kind 0 结构更广泛问题的讨论，包括 &lt;a href="https://github.com/nostr-protocol/nips/pull/1770">PR #1770&lt;/a>，即用结构化 tag 替换 kind 0 content 中字符串化 JSON 的长期提案。&lt;/p>
&lt;h3 id="nip-70-relay-支持对加密消息安全至关重要">NIP-70 Relay 支持对加密消息安全至关重要&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 协议的 White Noise 实现&lt;a href="https://blog.jgmontoya.com/2026/02/10/nip70-relay-status.html">发现了一个关键缺口&lt;/a>：relay 对 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/70.md">NIP-70&lt;/a>（受保护 Event）和 &lt;a href="https://nostrcompass.org/zh/topics/nip-42/">NIP-42&lt;/a>（认证）的支持不足。测试发现，包括 Damus、Primal 和 nos.lol 在内的主要公共 relay 直接以 &lt;code>blocked: event marked as protected&lt;/code> 错误拒绝受保护 event，而没有发起所需的认证挑战。&lt;/p>
&lt;p>这破坏了一项关键安全功能：NIP-70 可安全删除已使用的 MLS KeyPackage，防止&amp;quot;先收集后解密&amp;quot;攻击。如果 relay 不支持，加密消息协议就无法保护用户免受未来密钥泄露的影响。White Noise 已默认禁用 NIP-70，保留可选标志供使用支持 relay 的用户启用。&lt;/p>
&lt;p>&lt;strong>对 relay 运营者的呼吁：&lt;/strong> 请实现完整的 NIP-42 认证流程。收到受保护 event 时，应挑战客户端证明所有权，然后接受经验证的写入。未经认证就拒绝受保护 event 会破坏加密消息应用所依赖的协议安全保证。&lt;/p>
&lt;h2 id="版本发布">版本发布&lt;/h2>
&lt;h3 id="coracle-0629">Coracle 0.6.29&lt;/h3>
&lt;p>&lt;a href="https://github.com/coracle-social/coracle">Coracle&lt;/a>（&lt;a href="https://coracle.social">coracle.social&lt;/a>），hodlbod 的 Web 客户端，发布了 &lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.29">0.6.29&lt;/a>。此版本添加了话题和 kind 9802 高亮的评论显示。新的列表导航项提供从主 UI 快速访问用户策划列表的功能。底层方面，Coracle 升级到新版本的 Welshman，这是支撑 Coracle relay 管理和 event 处理的共享 Nostr 库。默认 relay 列表已刷新，Glitchtip 错误追踪已从代码库中移除。&lt;/p>
&lt;h3 id="igloo-desktop-v103">Igloo Desktop v1.0.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/FROSTR-ORG/igloo-desktop">Igloo Desktop&lt;/a>，基于 &lt;a href="https://nostrcompass.org/zh/topics/frost/">FROST&lt;/a> 的门限签名和密钥管理应用，发布了 &lt;a href="https://github.com/FROSTR-ORG/igloo-desktop/releases/tag/v1.0.3">v1.0.3&lt;/a>，包含大量安全加固。此版本引入了 IPC 验证、Electron 隔离和 SSRF 感知的 relay 检查，防御服务器端请求伪造。新的入门和份额导入流程简化了密钥分发，relay 规划包含了规范化和优先级合并，基于 preload 的 Electron API 架构改善了渲染进程与主进程之间的安全边界。签名者保活系统维护门限签名会话稳定性，恢复 UX 改进减少了密钥恢复的摩擦。&lt;/p>
&lt;h3 id="amber-v412-pre1">Amber v4.1.2-pre1&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber">Amber&lt;/a>，Android event 签名器，发布了 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.2-pre1">v4.1.2-pre1&lt;/a>，修复了 v4.1.1 引入的 relay 信任评分显示缺失问题，解决了非 Nostr 加密/解密请求的 JSON 解析问题，并将账户模型从 LiveData 迁移到 Flow 以实现更可预测的状态管理。此版本将 bunker 密钥切换为完整 UUID 并升级到 Gradle 插件 9。&lt;/p>
&lt;h3 id="mostro-mobile-v110-和-daemon-v0161">Mostro Mobile v1.1.0 和 Daemon v0.16.1&lt;/h3>
&lt;p>完整的移动版报道请参见&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-11-newsletter/#mostro-%e5%8f%91%e5%b8%83%e9%a6%96%e4%b8%aa%e5%85%ac%e6%b5%8b%e7%89%88">上方新闻部分&lt;/a>。服务器端，&lt;a href="https://github.com/MostroP2P/mostro">Mostro 守护进程&lt;/a>发布了 &lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.16.1">v0.16.1&lt;/a>，添加了启动时自动发布 NIP-01 kind 0 元数据的功能（&lt;a href="https://github.com/MostroP2P/mostro/pull/575">PR #575&lt;/a>），守护进程上线时会向网络公布其身份。此版本还修复了开发费用计算文档（&lt;a href="https://github.com/MostroP2P/mostro/pull/571">PR #571&lt;/a>）。&lt;/p>
&lt;h3 id="angor-v025">Angor v0.2.5&lt;/h3>
&lt;p>&lt;a href="https://github.com/block-core/angor">Angor&lt;/a>（&lt;a href="https://angor.io">angor.io&lt;/a>），基于 Bitcoin 和 Nostr 构建的去中心化 P2P 资金协议，发布了 &lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.5">v0.2.5&lt;/a>，包含三个已合并的 PR。&lt;a href="https://github.com/block-core/angor/pull/649">PR #649&lt;/a> 重新设计了资金管理部分（V2），用新界面替换了之前的布局，用于跟踪单个 UTXO 和投资头寸。&lt;a href="https://github.com/block-core/angor/pull/651">PR #651&lt;/a> 全面改造了 InvoiceView，更新了按钮样式、可关闭对话框、新的&amp;quot;复制地址&amp;quot;命令、地址监控取消支持和改进的投资流程处理。&lt;a href="https://github.com/block-core/angor/pull/652">PR #652&lt;/a> 在设置中添加了可配置的 &lt;a href="https://nostrcompass.org/zh/topics/nip-96/">NIP-96&lt;/a>（&lt;a href="https://github.com/nostr-protocol/nips/blob/master/96.md">规范&lt;/a>）图片服务器，让用户选择哪个媒体上传端点处理其项目图片和文档。&lt;a href="https://github.com/block-core/angor/releases/tag/v0.2.4">v0.2.4&lt;/a> 于前一周发布。&lt;/p>
&lt;h3 id="ridestr-v022-和-v023">Ridestr v0.2.2 和 v0.2.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a>，去中心化拼车平台，&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-04-newsletter/#ridestr-v020roadflare-%E7%89%88%E6%9C%AC">上周已报道&lt;/a>，在 v0.2.0&amp;quot;RoadFlare 版本&amp;quot;之后继续快速迭代，发布了 &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.2">v0.2.2&lt;/a>（Bridge Payment 热修复）和 &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.3">v0.2.3&lt;/a>。v0.2.2 热修复解决了跨铸造厂 &lt;a href="https://nostrcompass.org/zh/topics/cashu/">Cashu&lt;/a> 桥接支付在支付仍在处理或最终会成功时自动取消行程的错误，防止慢速结算导致的提前取消。此版本还修复了&amp;quot;我的位置&amp;quot;按钮的 UI 闪烁和触摸热区失效问题。v0.2.3 包含额外的错误修复。两个版本都包含 Ridestr（乘客应用）和 Drivestr（司机应用）的独立 APK。&lt;/p>
&lt;h3 id="nostr-php-194">Nostr PHP 1.9.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrver-se/nostr-php">Nostr PHP&lt;/a>（&lt;a href="https://nostr-php.dev">nostr-php.dev&lt;/a>），Nostr 协议的 PHP 辅助库，发布了 &lt;a href="https://github.com/nostrver-se/nostr-php/releases/tag/1.9.4">1.9.4&lt;/a>，为请求类添加了可配置的 &lt;code>timeout&lt;/code> 属性（&lt;a href="https://github.com/nostrver-se/nostr-php/pull/106">PR #106&lt;/a>）。这让开发者可以为 relay 连接和消息请求设置自定义超时时间，防止 relay 无响应或回复缓慢时的无限挂起。&lt;/p>
&lt;h3 id="zapstore-v100">Zapstore v1.0.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapstore/zapstore/releases/tag/1.0.0">Zapstore&lt;/a>（&lt;a href="https://zapstore.dev">zapstore.dev&lt;/a>），基于 Nostr 构建的无许可 Android 应用商店，经过数月的候选版本后&lt;strong>本周达到稳定 1.0 版本里程碑&lt;/strong>。&lt;/p>
&lt;p>1.0 版本包含关键的稳定性改进：安装按钮状态处理确保安装完成后立即显示删除按钮，用户友好的错误消息带可展开的技术详情，以及通过使用临时密钥的 Nostr 加密 DM 发送的&amp;quot;报告问题&amp;quot;按钮。此版本还提供了新的更新屏幕（带轮询和批量跟踪）、更好的下载看门狗处理停滞传输、基于设备性能的动态并发下载限制、更频繁的已安装包同步，以及改进的版本比较逻辑。团队修复了一个关键的 flutter_secure_storage 问题并增强了包管理器对边缘情况的处理。&lt;/p>
&lt;p>这一里程碑代表了 Nostr 首个专用应用分发平台的成熟，使开发者能够在没有中心化应用商店管控的情况下直接向用户发布 Android 应用。&lt;/p>
&lt;h3 id="zsp-v031">ZSP v0.3.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/zapstore/zsp">ZSP&lt;/a>，&lt;a href="https://github.com/zapstore/zapstore">Zapstore&lt;/a> 团队的 Go CLI 工具，用于替代 Zapstore 之前的签名和上传 Android 应用到 Nostr relay 的发布工具，发布了 &lt;a href="https://github.com/zapstore/zsp/releases/tag/v0.3.1">v0.3.1&lt;/a>。ZSP 处理从 GitHub、GitLab、Codeberg、F-Droid 或本地文件获取 APK，然后解析元数据，签名 Nostr event（通过私钥、&lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> bunker 或 &lt;a href="https://nostrcompass.org/zh/topics/nip-07/">NIP-07&lt;/a> 浏览器扩展），并将制品上传到 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 服务器。此版本添加了完整的离线模式用于无网络连接时的密钥库链接、Blossom 上传的 &lt;code>Content-Digest&lt;/code> 头以符合协议规范、修复了 F-Droid 仓库中 arm64-v8a APK 的检测、GitLab 尾部查询参数修复，以及完整的 &lt;code>.env&lt;/code> 文件配置支持。&lt;/p>
&lt;h3 id="damus-ios-117">Damus iOS 1.17&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a>，iOS Nostr 客户端，版本升级至 1.17（&lt;a href="https://github.com/damus-io/damus/pull/3606">PR #3606&lt;/a>）。此版本修复了 RelayPool 在临时租约释放后连接关闭的问题（&lt;a href="https://github.com/damus-io/damus/pull/3605">PR #3605&lt;/a>），该问题可能导致订阅意外断开。同时解决了在标签页之间切换时收藏时间线不显示 event 的错误（&lt;a href="https://github.com/damus-io/damus/pull/3603">PR #3603&lt;/a>）。&lt;/p>
&lt;h3 id="nak-v0183">nak v0.18.3&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>，Nostr army knife CLI，发布了 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.18.3">v0.18.3&lt;/a>，包含三个稳定性修复：防止 AUTH 挑战 tag 为 nil 或过短时的崩溃，在使用解析值之前检查 dateparser 错误，以及处理缺少 &lt;code>://&lt;/code> 分隔符的 Cashu 铸造厂 URL。&lt;/p>
&lt;h3 id="mi基于浏览器的本地-relay">Mi：基于浏览器的本地 Relay&lt;/h3>
&lt;p>&lt;a href="https://git.shakespeare.diy/npub1scvyzz02ayma34hesz62pdrd5nhsmxp74hjq8msmfs9khh3r3drsnw68d8/mi.git">Mi&lt;/a>（&lt;a href="https://mi.shakespeare.wtf">mi.shakespeare.wtf&lt;/a>），一个新的 &lt;a href="https://shakespeare.wtf">Shakespeare&lt;/a> MiniApp，是一个基于浏览器的本地 relay，在 IndexedDB 中归档用户的 Nostr event。Mi 从已连接的 relay 获取个人资料（kind 0）、联系人列表（kind 3）、relay 列表（kind 10002）和钱包 event 并存储在本地，为用户提供离线访问自己数据的能力。使用 React 和 nostr-tools 2.15.0 构建。&lt;/p>
&lt;h3 id="agora-v102">Agora v1.0.2&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/agora">Agora&lt;/a>（&lt;a href="https://agora.spot">agora.spot&lt;/a>），Soapbox 团队的去中心化行动主义和筹款平台，发布了 &lt;a href="https://gitlab.com/soapbox-pub/agora/-/releases/v1.0.2">v1.0.2&lt;/a>，提供可直接安装的 Android APK。这是 Compass 首次报道 Agora，该平台于 1 月 17 日上线，使命宣言为：&amp;ldquo;加入全球自由运动。向各地的行动者发送支持，并参与本地行动。&amp;rdquo;&lt;/p>
&lt;p>该平台以世界地图为中心，用户可按国家浏览，创建带位置标签的&amp;quot;行动&amp;quot;（抗议、运动、社区组织），并通过线程评论进行讨论。所有内容通过 Nostr relay 传播，因此没有中心化服务器可被关闭以压制协调活动。Agora 支持多语言（CI 强制翻译一致性），集成 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 媒体服务器用于上传，包含搜索、带全球/区域切换的话题标签浏览、用户个人资料和反应系统。v1.0.2 是当前 Android 版本，可直接下载 APK。&lt;/p>
&lt;h3 id="xonos-v016">xonos v0.1.6&lt;/h3>
&lt;p>&lt;a href="https://codeberg.org/xonos/xonos">xonos&lt;/a>，使用 Bevy 游戏引擎构建的实验性 3D Nostr 客户端，发布了 &lt;a href="https://codeberg.org/xonos/xonos/releases/tag/v0.1.6">v0.1.6&lt;/a>。xonos 在 3D 空间环境中渲染 Nostr event 并具有文字转语音功能，探索社交协议数据如何在传统 2D 界面之外运作。&lt;/p>
&lt;h2 id="项目更新">项目更新&lt;/h2>
&lt;h3 id="primal-android-扩展-nwc-基础设施">Primal Android 扩展 NWC 基础设施&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> 本周合并了 18 个 PR，继续&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-04-newsletter/#primal-android-%E5%8F%91%E5%B8%83-nwc-%E5%8A%A0%E5%AF%86">上周开始的&lt;/a> NWC 建设。&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/883">PR #883&lt;/a> 添加了跨两个钱包（Spark 和外部）的 NWC 连接支持，&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/879">PR #879&lt;/a> 实现了用于检查支付状态的 &lt;code>lookup_invoice&lt;/code> NWC 方法。&lt;/p>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/880">PR #880&lt;/a> 添加了 NWC 请求-响应审计日志用于调试钱包交互。&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/877">PR #877&lt;/a> 为 &lt;code>PrimalNwcService&lt;/code> 添加了多账户支持，使拥有多个个人资料的用户能够维护独立的钱包连接。&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/882">PR #882&lt;/a> 实现了过期预算保留的定期清理，防止过期的支付预留阻塞钱包操作。&lt;/p>
&lt;p>UI 工作包括钱包升级屏幕重新设计（&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/889">PR #889&lt;/a>）、钱包升级常见问题（&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/885">PR #885&lt;/a>）、入门期间设置 Lightning 地址（&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/888">PR #888&lt;/a>），以及修复非 Lightning 类型的 zap 交易显示为普通支付的问题（&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/887">PR #887&lt;/a>）。&lt;/p>
&lt;h3 id="divine-推出-api-优先视频信息流">diVine 推出 API 优先视频信息流&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>，短视频客户端，本周合并了 19 个 PR，转向 API 优先架构。&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1468">PR #1468&lt;/a> 引入了 API 优先视频信息流，&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1466">PR #1466&lt;/a> 添加了热门、最新和首页 API 端点。&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1433">PR #1433&lt;/a> 为高效信息流渲染索引了特定的视频控制器。&lt;/p>
&lt;p>个人资料处理通过 &lt;a href="https://github.com/divinevideo/divine-mobile/pull/1440">PR #1440&lt;/a> 改进，实现了查看其他个人资料时的缓存加新鲜数据模式，在确保数据新鲜度的同时减少加载时间。团队还发布了通知修复（&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1437">PR #1437&lt;/a>）、评论流程重构（&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1431">PR #1431&lt;/a>），以及通知屏幕的标签页滑动（&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1388">PR #1388&lt;/a>）。&lt;/p>
&lt;h3 id="white-noise密钥环统一和用户搜索">White Noise：密钥环统一和用户搜索&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise-rs">White Noise&lt;/a> 后端，&lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 协议的实现，本周合并了 4 个 PR。两个 PR 改进了密钥环处理：&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/468">PR #468&lt;/a> 通过 &lt;code>WhitenoiseConfig&lt;/code> 使密钥环服务标识符可配置，&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/475">PR #475&lt;/a> 在单个 &lt;code>keyring-core&lt;/code> crate 上统一了实现，使用平台原生存储替换了碎片化的平台特定代码。另外，&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/470">PR #470&lt;/a> 添加了用户搜索功能。&lt;/p>
&lt;h3 id="marmot-ts-提取参考聊天应用">Marmot TS 提取参考聊天应用&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> TypeScript SDK（&lt;a href="https://github.com/marmot-protocol/marmot-ts">marmot-ts&lt;/a>）合并了 &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/40">PR #40&lt;/a>，移除了内置参考聊天应用并将其拆分到独立仓库：&lt;a href="https://github.com/marmot-protocol/marmots-web-chat">marmots-web-chat&lt;/a>。新仓库创建于 2 月 6 日，是 Marmot TypeScript SDK 的参考实现，拥有独立的 CI 管道、标签式聊天视图和独立构建系统。这种分离让 SDK 专注于库的关注点，聊天应用则独立迭代 UX。&lt;/p>
&lt;p>一个开放的 PR（&lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/41">#41&lt;/a>）将 marmot-ts 迁移到 ts-mls v2.0.0，带来重新设计的 API，包含统一的上下文对象、新的消息处理工具（event 创建、读取、反序列化）、密钥包元数据辅助函数和删除 event 支持。&lt;/p>
&lt;h3 id="alby-hub-更新">Alby Hub 更新&lt;/h3>
&lt;p>&lt;a href="https://github.com/getAlby/hub">Alby Hub&lt;/a> 本周合并了 5 个 PR。&lt;a href="https://github.com/getAlby/hub/pull/2049">PR #2049&lt;/a> 在应用商店界面添加了 Alby CLI。&lt;a href="https://github.com/getAlby/hub/pull/2033">PR #2033&lt;/a> 修复了交易列表中无效 zap 数据的处理，&lt;a href="https://github.com/getAlby/hub/pull/2046">PR #2046&lt;/a> 从 LNClient 接口移除了未使用的 &lt;code>ListTransactions&lt;/code> 方法。&lt;/p>
&lt;h3 id="notedeck-推出-dashboard-和-agentium">Notedeck 推出 Dashboard 和 Agentium&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>，Damus 的跨平台 Nostr 客户端，本周合并了 6 个 PR。&lt;a href="https://github.com/damus-io/notedeck/pull/1247">PR #1247&lt;/a> 添加了初始 dashboard 应用。&lt;a href="https://github.com/damus-io/notedeck/pull/1293">PR #1293&lt;/a> 引入了 Agentium，一个多代理开发环境，将 Dave AI 助手转变为具有双 AI 模式和基于场景的代理管理的系统。&lt;a href="https://github.com/damus-io/notedeck/pull/1276">PR #1276&lt;/a> 添加了带 Signal 风格快捷键的多行消息编辑器，&lt;a href="https://github.com/damus-io/notedeck/pull/1278">PR #1278&lt;/a> 带来了媒体性能改进。值得关注的开放 PR 包括 &lt;a href="https://github.com/damus-io/notedeck/pull/1288">outbox 基础设施&lt;/a>和 &lt;a href="https://nostrcompass.org/zh/topics/nip-34/">NIP-34&lt;/a> &lt;a href="https://github.com/damus-io/notedeck/pull/1289">Git 应用规划&lt;/a>。&lt;/p>
&lt;h3 id="agora-推出重大-ui-改造">Agora 推出重大 UI 改造&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/agora">Agora&lt;/a> 本周与 v1.0.2 版本一同合并了 7 个 PR。&lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/106">PR #106&lt;/a> 是最大的，关闭了 11 个涵盖设置、个人资料编辑、地图交互、搜索结果、评论过滤和 Blossom 服务器管理的 UI 任务。该合并禁用了未认证用户的反应按钮（此前这些用户尝试在地图上对帖子反应时会遇到静默失败），修复了日期线地图平移，并在搜索结果中添加了匹配文本加粗显示。&lt;/p>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/108">PR #108&lt;/a> 在信息流帖子下方和线程页面添加了评论计数。&lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/107">PR #107&lt;/a> 添加了 event 加载失败时的自动重试，重试耗尽时显示显式重新加载按钮。&lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/104">PR #104&lt;/a> 将话题标签浏览默认改为全球范围，因为之前的国家范围默认经常返回零结果。&lt;/p>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/109">PR #109&lt;/a> 添加了 CI 步骤检查所有语言的翻译一致性，任何缺失值都会导致构建失败。&lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/110">PR #110&lt;/a> 裁剪信息流中的大型笔记以保持滚动节奏，&lt;a href="https://gitlab.com/soapbox-pub/agora/-/merge_requests/111">PR #111&lt;/a> 修复了因小字号导致的 iOS 移动端评论行动时的缩放问题。&lt;/p>
&lt;h3 id="clawstr-推出-cli-和-lightning-zap-按钮">Clawstr 推出 CLI 和 Lightning Zap 按钮&lt;/h3>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/clawstr">Clawstr&lt;/a>，AI 代理在 Nostr 上创建和管理社区的 Reddit 风格平台，本周合并了 3 个 PR。&lt;a href="https://gitlab.com/soapbox-pub/clawstr/-/merge_requests/11">PR #11&lt;/a> 将 AI 代理技能定义中的所有手动 nak 命令替换为新的 &lt;code>@clawstr/cli&lt;/code> 包（&lt;code>npx -y @clawstr/cli@latest&lt;/code>），用 CLI 命令取代手动 JSON event 构造，并添加了钱包操作（init、balance、zap、npc）和 &lt;a href="https://nostrcompass.org/zh/topics/nip-50/">NIP-50&lt;/a> 全文搜索。&lt;/p>
&lt;p>&lt;a href="https://gitlab.com/soapbox-pub/clawstr/-/merge_requests/13">PR #13&lt;/a> 添加了&amp;quot;For Humans&amp;quot;文档页面和 &lt;code>ProfileZapDialog&lt;/code> 组件。zap 按钮在用户配置了 Lightning 地址时显示在个人资料页面上，无需登录即可使用，直接通过 LNURL-pay 支持预设 sats 金额和二维码显示。&lt;a href="https://gitlab.com/soapbox-pub/clawstr/-/merge_requests/12">PR #12&lt;/a> 记录了 &lt;code>wallet sync&lt;/code> 命令，解释了发送到 Lightning 地址的支付如何由 NPC 持有，直到代理显式同步钱包。&lt;/p>
&lt;h2 id="nip-更新">NIP 更新&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>的最新变更：&lt;/p>
&lt;p>&lt;strong>已合并：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1561">NIP-45：HyperLogLog Relay 响应&lt;/a>&lt;/strong> - &lt;a href="https://nostrcompass.org/zh/topics/nip-45/">NIP-45（Event 计数）&lt;/a>现在支持 HyperLogLog (HLL) 近似计数。relay 可以在 COUNT 响应中返回 256 字节的 HLL 寄存器值。客户端合并来自多个 relay 的这些寄存器，通过取每个位置的最大值来计算近似基数，无需下载完整 event 集合。主要用例是关注者和反应计数，无需依赖单个 relay 作为权威来源。即使两个反应 event 消耗的带宽也超过 256 字节的 HLL 负载。客户端可应用 HyperLogLog++ 修正以提高小基数的准确度。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2216">NIP-39：身份 Tag 从 Kind 0 移出&lt;/a>&lt;/strong> - &lt;a href="https://nostrcompass.org/zh/topics/nip-39/">NIP-39&lt;/a> 身份声明 tag（&lt;code>i&lt;/code> tag）已从 kind 0 元数据 event 提取到新的专用 kind 10011。原因是几乎没有客户端支持这些 tag，但每次 kind 0 获取都要承担额外体积。这是 vitorpamplona 系列 kind 0 提取 PR 中的第一个（见&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-11-newsletter/#kind-0-%e7%98%a6%e8%ba%ab%e8%bf%90%e5%8a%a8">新闻部分&lt;/a>）。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>开放 PR 和讨论：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2214">NIP-XX：Nostr Relay Connect (NRC)&lt;/a>&lt;/strong> - woikos 提议通过公共中转 relay 进行加密隧道访问 Nostr relay 的协议。该机制支持访问 NAT 或防火墙后面的 relay，包括运行在家庭服务器或移动设备上的个人 relay。隧道使用 kind 24891/24892 event 和 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密，通过无法解密流量的中转 relay。一个实际应用：任何 Nostr 客户端都可以将本地存储（IndexedDB、SQLite）暴露为 relay 端点用于跨设备同步。标准 NIP-01 语义（REQ、EVENT、CLOSE、COUNT）透明地通过隧道传输。参考实现包括 Go（ORLY Relay）和 TypeScript（Smesh）。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2187">Nostr Web Tokens (NWT)&lt;/a>&lt;/strong> - pippellia-btc 提议 Nostr Web Tokens，一种用于在 Web 各方之间传递签名声明的 Nostr event 格式，灵感来自 JSON Web Tokens (JWT)。NWT 可以表示 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/98.md">NIP-98&lt;/a>（HTTP Auth）和 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom 授权 event&lt;/a>，为客户端提供令牌有效期和方式的灵活性。提供了参考 Go 库。PR 中链接了&lt;a href="https://github.com/pippellia-btc/nostr-web-tokens">视频解释&lt;/a>和与 NIP-98 及 Blossom Auth 的&lt;a href="https://github.com/pippellia-btc/nostr-web-tokens?tab=readme-ov-file#comparisons">详细对比&lt;/a>。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2210">NIP-47 简化&lt;/a>&lt;/strong> - rolznz 提议从 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47（Nostr Wallet Connect）&lt;/a>中移除 &lt;code>multi_&lt;/code> 方法，这些方法实现复杂且未获得采用。该 PR 还减少了加密和向后兼容处理中的重复，在&lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-04-newsletter/#nip-%E6%9B%B4%E6%96%B0">上周添加 hold invoice&lt;/a> 后清理了规范。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2213">NIP-05：移至独立 Event Kind&lt;/a>&lt;/strong> - vitorpamplona 提议将 NIP-05 验证从 kind 0 移至新的 kind 10008，支持每个用户拥有多个 NIP-05 标识符并按 NIP-05 地址过滤。属于 kind 0 瘦身运动的一部分。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2217">NIP-57：Lightning 地址从 Kind 0 移出&lt;/a>&lt;/strong> - vitorpamplona 提议根据 &lt;a href="https://nostrcompass.org/zh/topics/nip-57/">NIP-57&lt;/a> 将 lud06/lud16（Lightning 地址）从 kind 0 提取到专用 event kind，继续 kind 0 瘦身工作。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2165">个人资料超级定制&lt;/a>&lt;/strong> - fiatjaf 提议超越 kind 0 当前能力的扩展个人资料定制功能。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-深入解析nip-45event-计数与-hyperloglog">NIP 深入解析：NIP-45（Event 计数）与 HyperLogLog&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-45/">NIP-45&lt;/a>（&lt;a href="https://github.com/nostr-protocol/nips/blob/master/45.md">规范&lt;/a>）定义了客户端如何请求 relay 计算匹配过滤器的 event 数量，而无需传输 event 本身。本周合并的 &lt;a href="https://github.com/nostr-protocol/nips/pull/1561">HyperLogLog 支持&lt;/a>添加了一种概率数据结构，解决了一个根本问题：如何跨多个独立 relay 计数。&lt;/p>
&lt;p>&lt;strong>问题：&lt;/strong>&lt;/p>
&lt;p>在单个 relay 上计数 event 很简单：发送 COUNT 请求，获得一个数字。跨网络计数则更难。如果 relay A 报告 50 个反应，relay B 报告 40 个，总数并非 90，因为许多 event 同时存在于两个 relay 上。如果不下载所有 event 进行去重，客户端无法计算真实数量。&lt;/p>
&lt;p>&lt;strong>HyperLogLog：&lt;/strong>&lt;/p>
&lt;p>HyperLogLog (HLL) 是一种概率算法，使用固定内存量估算集合中不同元素的数量。NIP-45 实现使用 256 个各一字节的寄存器，无论计数多少 event 都只消耗 256 字节。该算法通过检查每个 event ID 的二进制表示并跟踪前导零的位置来工作。ID 以多个零开头的 event 在统计上是罕见的，因此它们的出现表明集合很大。&lt;/p>
&lt;p>&lt;strong>NIP-45 中的工作方式：&lt;/strong>&lt;/p>
&lt;p>relay 响应 COUNT 请求时可以包含一个 &lt;code>hll&lt;/code> 字段，其中包含 base64 编码的寄存器值：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>[&lt;span style="color:#e6db74">&amp;#34;COUNT&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;subscription_id&amp;gt;&amp;#34;&lt;/span>, {&lt;span style="color:#f92672">&amp;#34;count&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">4527&lt;/span>, &lt;span style="color:#f92672">&amp;#34;hll&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;base64 encoded 256 bytes&amp;gt;&amp;#34;&lt;/span>}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>客户端从多个 relay 收集 HLL 值，通过取每个寄存器位置的最大值来合并。合并后的 HLL 表示所有 relay event 集合的并集，自动处理去重。最终的基数估算从合并后的寄存器计算得出。&lt;/p>
&lt;p>&lt;strong>准确度：&lt;/strong>&lt;/p>
&lt;p>使用 256 个寄存器时，标准误差约为 5.2%。对于真实计数 1,000，估算值通常落在 948 到 1,052 之间。对于更大的计数，相对误差保持不变：真实计数 100,000 的估算值大约为 94,800 到 105,200。HyperLogLog++ 修正提高了小基数（约 200 以下）的准确度，基本算法在这个范围往往会高估。&lt;/p>
&lt;p>&lt;strong>意义：&lt;/strong>&lt;/p>
&lt;p>社交指标（关注者数量、反应数量、转发数量）是社交媒体客户端的核心功能。没有 HLL 时，客户端必须查询单个&amp;quot;可信&amp;quot;relay（使计数中心化）或从所有 relay 下载所有 event（浪费带宽）。HLL 让客户端以每个 relay 256 字节的总开销从多个 relay 获得良好的近似计数，与实际计数无关。即使两个反应 event 消耗的带宽也超过完整 HLL 负载。&lt;/p>
&lt;p>规范将寄存器数量固定为 256 以确保互操作性。所有 relay 产生的 HLL 值都可以被客户端合并，无论运行哪种 relay 实现。这种标准化意味着客户端只需实现一次 HLL 支持，就能受益于每个支持它的 relay。&lt;/p>
&lt;p>&lt;strong>当前状态：&lt;/strong>&lt;/p>
&lt;p>该 PR 由 fiatjaf 开启，在合并前已讨论数月。relay 实现需要在其 COUNT 处理器中添加 HLL 计算。客户端实现需要在计数聚合逻辑中添加 HLL 合并。&lt;/p>
&lt;h2 id="nip-深入解析nip-96http-文件存储与向-blossom-的过渡">NIP 深入解析：NIP-96（HTTP 文件存储）与向 Blossom 的过渡&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-96/">NIP-96&lt;/a>（&lt;a href="https://github.com/nostr-protocol/nips/blob/master/96.md">规范&lt;/a>）定义了 Nostr 客户端如何在 HTTP 媒体服务器上上传、下载和管理文件。目前标记为&amp;quot;不推荐&amp;quot;，建议使用 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a>（基于 BUD 的媒体托管），NIP-96 在本周仍然相关，因为 Angor v0.2.5 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-11-newsletter/#angor-v025">添加了 NIP-96 服务器配置&lt;/a>而 ZSP v0.3.1 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-02-11-newsletter/#zsp-v031">上传到 Blossom 服务器&lt;/a>，展示了正在进行的协议过渡。&lt;/p>
&lt;p>&lt;strong>NIP-96 的工作方式：&lt;/strong>&lt;/p>
&lt;p>客户端通过获取 &lt;code>/.well-known/nostr/nip96.json&lt;/code> 来发现文件服务器的功能，返回 API URL、支持的内容类型、大小限制和可用的媒体转换：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;api_url&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;https://file-server.example/api&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;download_url&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;https://cdn.example/files&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content_types&amp;#34;&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;image/jpeg&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;video/webm&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;audio/*&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;plans&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;free&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;is_nip98_required&amp;#34;&lt;/span>: &lt;span style="color:#66d9ef">true&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_byte_size&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">10485760&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;media_transformations&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;image&amp;#34;&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;resizing&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>上传时，客户端向 API URL 发送带有 &lt;a href="https://github.com/nostr-protocol/nips/blob/master/98.md">NIP-98&lt;/a> 授权头（证明上传者身份的已签名 Nostr event）的 &lt;code>multipart/form-data&lt;/code> POST 请求。服务器返回 &lt;a href="https://nostrcompass.org/zh/topics/nip-94/">NIP-94&lt;/a> 文件元数据结构，包含文件 URL、原始和转换后的 SHA-256 哈希、MIME 类型和尺寸：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;status&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;success&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;nip94_event&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;url&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;https://cdn.example/files/&amp;lt;hash&amp;gt;.png&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;ox&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;original-file-hash&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;x&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;transformed-file-hash&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;m&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;image/png&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;dim&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;800x600&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>下载使用 GET 请求到 &lt;code>&amp;lt;api_url&amp;gt;/&amp;lt;sha256-hash&amp;gt;&lt;/code>，可选查询参数用于服务器端转换（如图像缩放 &lt;code>?w=320&lt;/code>）。删除使用带 NIP-98 认证的 DELETE 请求，只有原始上传者才能删除其文件。文件列表端点返回用户上传的分页结果。&lt;/p>
&lt;p>用户发布 kind 10096 event 来声明其首选上传服务器，让客户端无需手动配置即可自动选择合适的服务器。&lt;/p>
&lt;p>&lt;strong>弃用原因：&lt;/strong>&lt;/p>
&lt;p>NIP-96 将文件 URL 绑定到特定服务器。如果 &lt;code>files.example.com&lt;/code> 下线，所有引用该服务器 URL 的 Nostr 笔记都会丢失其媒体。服务器就是地址，而地址是脆弱的。&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a>（Blobs Stored Simply on Mediaservers）反转了这一模式，将文件内容的 SHA-256 哈希作为规范标识符。Blossom URL 形如 &lt;code>https://blossom.example/&amp;lt;sha256&amp;gt;.png&lt;/code>，但任何托管相同文件的 Blossom 服务器都通过相同的哈希路径提供服务。如果一个服务器消失，客户端向另一个服务器查询相同的哈希。内容寻址默认使数据在服务器间可移植。&lt;/p>
&lt;p>Blossom 还简化了 API。NIP-96 使用 multipart 表单上传、JSON 响应、转换策略和发现端点。Blossom 使用普通 PUT 上传、GET 下载，以及签名的 Nostr event（而非 HTTP 头）进行授权。Blossom 规范分为模块化文档：BUD-01 涵盖服务器协议、授权和检索，BUD-02 涵盖 blob 上传，BUD-03 涵盖用户服务器，BUD-04 涵盖服务器间镜像。&lt;/p>
&lt;p>弃用于 2025 年 9 月通过 &lt;a href="https://github.com/nostr-protocol/nips/pull/2047">PR #2047&lt;/a> 完成，在 NIPs 索引中将 NIP-96 标记为&amp;quot;不推荐&amp;quot;。&lt;/p>
&lt;p>&lt;strong>实践中的过渡：&lt;/strong>&lt;/p>
&lt;p>nostr.build 和 void.cat 等服务器此前支持 NIP-96，已添加或迁移到 Blossom 端点。各客户端处于不同阶段：Angor 本周的 v0.2.5 版本为项目图片添加了 NIP-96 服务器配置，而 ZSP 的 v0.3.1 版本专门上传到 Blossom 服务器并带有 &lt;code>Content-Digest&lt;/code> 头以符合协议规范。Amethyst 和 Primal 支持 Blossom 上传。这种共存可能会持续到剩余的 NIP-96 实现完成迁移。&lt;/p>
&lt;p>&lt;strong>延续的内容：&lt;/strong>&lt;/p>
&lt;p>kind 10096 服务器偏好 event 对 Blossom 服务器选择仍然有用。NIP-94 文件元数据（kind 1063 event）无论使用哪种上传协议都能描述文件属性。NIP-96 用于下载 URL 的 SHA-256 哈希成为 Blossom 内容寻址的基础。NIP-96 的设计启发了 Blossom 的简化方向：去中心化网络上的媒体托管需要内容寻址存储来匹配 relay 层的抗审查能力。&lt;/p>
&lt;hr>
&lt;p>本周就到这里。正在构建什么？有新闻要分享？希望我们报道您的项目？&lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">通过 NIP-17 私信联系我们&lt;/a>或在 Nostr 上找到我们。&lt;/p></content:encoded></item><item><title>Nostr Compass #8</title><link>https://nostrcompass.org/zh/newsletters/2026-02-04-newsletter/</link><pubDate>Wed, 04 Feb 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-02-04-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> rust-nostr 发布重大 API 重设计，21 个 PR 全面改造 SDK 架构。Nostria 3.0 推出双窗格导航、列表管理和全新 UI。Vector 添加 SIMD 加速，实现 65 倍至 184 倍的速度提升，并支持 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 协议用于加密群组消息。Frostr 通过 TestFlight 将门限签名引入 iOS。Damus 实现 &lt;a href="https://nostrcompass.org/zh/topics/nip-19/">NIP-19 (Bech32 编码实体)&lt;/a> 中继提示以实现跨中继内容发现。Primal Android 添加 NWC 加密和钱包交易导出。nostr-tools 和 NDK 获得可靠性改进。NIP-82（软件应用程序）扩展覆盖 98% 的设备平台。NIPs 仓库合并了 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a> 的 hold invoice 支持。新的协议提案包括用于播客的 NIP-74、用于浏览器事件数据库的 NIP-DB，以及用于去中心化内容审核的 TRUSTed Filters 套件。新项目包括用于内容迁移的 Instagram to Nostr v2、启动去中心化 3D 打印市场的 Pod21、引入 AI 代理管理社区的 Clawstr，以及扩展直播和视频通话功能的 Shosho 和 NosCall。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="rust-nostr-发布重大-api-重设计">rust-nostr 发布重大 API 重设计&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> SDK 本周进行了重大架构改造，21 个合并的 PR 在整个库中引入了破坏性变更。此次重设计影响了大多数 Rust 开发者依赖的核心 API。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> rust-nostr 发布重大 API 重设计，21 个 PR 全面改造 SDK 架构。Nostria 3.0 推出双窗格导航、列表管理和全新 UI。Vector 添加 SIMD 加速，实现 65 倍至 184 倍的速度提升，并支持 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 协议用于加密群组消息。Frostr 通过 TestFlight 将门限签名引入 iOS。Damus 实现 &lt;a href="https://nostrcompass.org/zh/topics/nip-19/">NIP-19 (Bech32 编码实体)&lt;/a> 中继提示以实现跨中继内容发现。Primal Android 添加 NWC 加密和钱包交易导出。nostr-tools 和 NDK 获得可靠性改进。NIP-82（软件应用程序）扩展覆盖 98% 的设备平台。NIPs 仓库合并了 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a> 的 hold invoice 支持。新的协议提案包括用于播客的 NIP-74、用于浏览器事件数据库的 NIP-DB，以及用于去中心化内容审核的 TRUSTed Filters 套件。新项目包括用于内容迁移的 Instagram to Nostr v2、启动去中心化 3D 打印市场的 Pod21、引入 AI 代理管理社区的 Clawstr，以及扩展直播和视频通话功能的 Shosho 和 NosCall。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="rust-nostr-发布重大-api-重设计">rust-nostr 发布重大 API 重设计&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> SDK 本周进行了重大架构改造，21 个合并的 PR 在整个库中引入了破坏性变更。此次重设计影响了大多数 Rust 开发者依赖的核心 API。&lt;/p>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr/pull/1245">PR #1245&lt;/a> 重新设计了通知 API，&lt;a href="https://github.com/rust-nostr/nostr/pull/1244">PR #1244&lt;/a> 将 &lt;code>RelayNotification::Shutdown&lt;/code> 替换为 &lt;code>RelayStatus::Shutdown&lt;/code> 以实现更清晰的状态处理。签名器 API 现在通过 &lt;a href="https://github.com/rust-nostr/nostr/pull/1243">PR #1243&lt;/a> 与其他 SDK 模式保持一致。客户端和中继方法通过 &lt;a href="https://github.com/rust-nostr/nostr/pull/1242">PR #1242&lt;/a> 进行了清理，客户端选项现在使用构建器模式（&lt;a href="https://github.com/rust-nostr/nostr/pull/1241">PR #1241&lt;/a>）。&lt;/p>
&lt;p>消息发送 API 在 &lt;a href="https://github.com/rust-nostr/nostr/pull/1240">PR #1240&lt;/a> 中重新设计，REQ 取消订阅在 &lt;a href="https://github.com/rust-nostr/nostr/pull/1239">PR #1239&lt;/a> 中重新设计，中继移除在 &lt;a href="https://github.com/rust-nostr/nostr/pull/1229">PR #1229&lt;/a> 中重新设计。一个&lt;a href="https://github.com/rust-nostr/nostr/pull/1246">开放的 PR #1246&lt;/a> 添加了阻塞 API 支持以完善此次重设计。&lt;/p>
&lt;p>这些变更为 SDK 带来了一致性，但现有项目需要迁移工作。基于 rust-nostr 构建的开发者在升级前应仔细查看更新日志。&lt;/p>
&lt;h3 id="instagram-to-nostr-v2-实现内容迁移">Instagram to Nostr v2 实现内容迁移&lt;/h3>
&lt;p>一款新工具使创作者能够将现有内容从中心化平台迁移到 Nostr。&lt;a href="https://github.com/primalpaul1/instagram-to-nostr-v2">Instagram to Nostr v2&lt;/a> 支持从 Instagram、TikTok、Twitter 和 Substack 导入，无需访问用户的私钥。&lt;/p>
&lt;p>该工具解决了一个常见的入门障碍：不愿在新平台从头开始的用户现在可以保留他们的内容历史。它还支持向新用户赠送 Nostr 账户或向现有账户建议内容，使其有助于帮助他人过渡到该协议。&lt;/p>
&lt;h3 id="pod21去中心化-3d-打印网络">Pod21：去中心化 3D 打印网络&lt;/h3>
&lt;p>&lt;a href="https://github.com/gobrrrme/Pod21">Pod21&lt;/a> (&lt;a href="https://pod21.com">pod21.com&lt;/a>) 使用 Nostr 进行市场协调，连接 3D 打印机运营商和买家。该平台包括一个兼容 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17 (私密直接消息)&lt;/a> 的 DM 机器人来处理市场交互，允许买家通过加密直接消息请求打印和与制造商协商。&lt;/p>
&lt;p>制造商列出他们的打印能力和规格；买家浏览列表并通过机器人发起订单。该架构遵循与其他 Nostr 商务应用类似的模式：基于中继的发现、用于订单协调的加密消息，以及 Lightning 结算。Pod21 与 Ridestr 和 Shopstr 一起成为通过该协议协调现实世界交易的 Nostr 应用。&lt;/p>
&lt;h3 id="clawstrai-代理社交网络">Clawstr：AI 代理社交网络&lt;/h3>
&lt;p>&lt;a href="https://github.com/clawstr/clawstr">Clawstr&lt;/a> 作为一个 Reddit 风格的平台推出，AI 代理在 Nostr 上创建和管理社区。该平台使自主代理能够建立主题社区、策划内容并与用户互动。社区的功能类似于 subreddit，但由 AI 版主和策展人引导讨论。该架构使用 Nostr 的开放协议进行代理对代理和代理对人类的交互，为去中心化社交媒体上的社区形成建立了新模式。&lt;/p>
&lt;h2 id="版本发布">版本发布&lt;/h2>
&lt;h3 id="ridestr-v020roadflare-版本">Ridestr v0.2.0：RoadFlare 版本&lt;/h3>
&lt;p>&lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a> 发布了 &lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.0">v0.2.0&lt;/a>，名为「RoadFlare 版本」，引入了个人拼车网络。该功能让乘客可以将喜欢的司机添加到受信任的网络中。司机批准关注者并共享加密位置，使乘客能够看到受信任的司机何时在线且在附近。行程请求直接发送给已知司机。&lt;/p>
&lt;p>支付可靠性通过自动托管恢复、跨设备更好的钱包同步以及通过渐进式轮询实现的更快支付处理得到改善。&lt;a href="https://github.com/variablefate/ridestr/pull/37">PR #37&lt;/a> 添加了支持这些功能的第 5-6 阶段基础设施。&lt;a href="https://github.com/variablefate/ridestr/releases/tag/v0.2.1">v0.2.1&lt;/a> 随后发布了支付对话框错误和行程后「添加到收藏」流程的热修复。&lt;/p>
&lt;h3 id="nostria-30">Nostria 3.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostria-app/nostria">Nostria&lt;/a>，sondreb 为全球规模构建的跨平台客户端，发布了 3.0 版本，带来全新的 UI、新标志和数百个修复。此版本代表了六周密集开发周期的成果。&lt;/p>
&lt;p>双窗格导航是最大的用户体验变化，允许桌面用户在列表、详情和线程之间切换时减少上下文切换。新的首页部分提供所有可用功能的概览，所有页面共享统一的工具栏、布局和功能。&lt;/p>
&lt;p>列表管理是最重要的功能更新，贯穿整个应用程序。用户可以管理个人资料列表并在任何功能中过滤内容：直播、音乐或信息流。厌倦了线程中的垃圾信息？按收藏过滤只查看他们的回复。快速 Zaps 添加了一键 zapping，支持可配置的金额。复制/截图生成剪贴板截图以便在任何地方分享事件。静音词现在可以过滤个人资料字段（name、display_name、NIP-05），使用户能够用一个禁用词屏蔽所有桥接的个人资料。设置变为可搜索以加快配置更改。&lt;/p>
&lt;p>该版本添加了 BOLT11 和 BOLT12 支付请求渲染、文字大小和字体选择，以及消息部分的「自我备忘」消息功能，支持渲染引用的内容如文章和事件。新的分享对话框支持通过电子邮件、网站或直接消息快速分享给多个收件人。其他功能包括自定义表情符号集、兴趣（作为动态信息流的话题标签列表）、书签、公共中继信息流，以及完整的菜单自定义，包括 Nostria 图标打开的选项。&lt;/p>
&lt;p>可在 Android、iOS、Windows 和 &lt;a href="https://www.nostria.app/">nostria.app&lt;/a> 网页版上使用。&lt;/p>
&lt;h3 id="applesauce-v510">Applesauce v5.1.0&lt;/h3>
&lt;p>hzrd149 的 &lt;a href="https://github.com/hzrd149/applesauce">Applesauce&lt;/a> 库套件在所有包中发布了 v5.1.0。&lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-signers%405.1.0">applesauce-signers&lt;/a> 添加了对 Nostr Connect 远程签名器的 &lt;code>switch_relays&lt;/code> 和 &lt;code>ping&lt;/code> 方法的支持，对程序化管理签名器连接很有用。&lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-loaders%405.1.0">applesauce-loaders&lt;/a> 引入了用于并行异步加载的 &lt;code>loadAsyncMap&lt;/code>。&lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-react%405.1.0">applesauce-react&lt;/a> 为 &lt;code>useAction().run()&lt;/code> 添加了 padding 参数。&lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%405.1.0">applesauce-core&lt;/a> 更新了事件到存储的映射以直接处理字符串而无需 &lt;code>onlyEvents&lt;/code>。&lt;/p>
&lt;h3 id="nak-v0183">nak v0.18.3&lt;/h3>
&lt;p>fiatjaf 的 &lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>（Nostr Army Knife）发布了 &lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.18.3">v0.18.3&lt;/a>，包含来自 mattn 的稳定性修复。该版本防止了当铸造厂 URL 缺少 &lt;code>://&lt;/code> 分隔符时的崩溃，在使用日期值之前验证 dateparser 错误，并处理 AUTH 挑战标签解析中的边缘情况。这些防御性修复使 CLI 在处理格式错误的输入时更加健壮。&lt;/p>
&lt;h3 id="aegis-v037">Aegis v0.3.7&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZharlieW/Aegis">Aegis&lt;/a>，跨平台桌面签名器，发布了 &lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.3.7">v0.3.7&lt;/a>，添加了支持 &lt;a href="https://nostrcompass.org/zh/topics/nip-07/">NIP-07 (浏览器扩展接口)&lt;/a> 签名的 Nostr 应用浏览器支持。该版本记录 &lt;a href="https://nostrcompass.org/zh/topics/nip-04/">NIP-04 (加密直接消息)&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44 (版本化加密)&lt;/a> 加密事件，允许用户跟踪哪些应用程序请求加密操作。浏览器部分现在按平台过滤只显示 Web 应用。&lt;/p>
&lt;h3 id="bitchat-v151-ios">Bitchat v1.5.1 (iOS)&lt;/h3>
&lt;p>&lt;a href="https://github.com/permissionlesstech/bitchat">Bitchat&lt;/a>，使用 Nostr 和蓝牙网格的离线消息应用，发布了 &lt;a href="https://github.com/permissionlesstech/bitchat/releases/tag/v1.5.1">v1.5.1&lt;/a>，包含 iOS 安全加固。&lt;a href="https://github.com/permissionlesstech/bitchat/pull/1012">PR #1012&lt;/a> 在处理前验证 Nostr 事件签名，拒绝无效的 giftwrap 和嵌入数据包，限制超大负载，并阻止伪造的 BLE 广播发送者 ID。&lt;a href="https://github.com/permissionlesstech/bitchat/pull/998">PR #998&lt;/a> 通过将发送者 ID 绑定到连接 UUID 来修复 iOS BLE 网格身份验证，防止网格网络中的身份伪造。&lt;a href="https://github.com/permissionlesstech/bitchat/pull/972">PR #972&lt;/a> 添加了通知速率限制，以防止附近有多个网格设备时的对等发现洪水。&lt;/p>
&lt;h3 id="keychat-v1392">KeyChat v1.39.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/keychat-io/keychat-app">KeyChat&lt;/a> 发布了 &lt;a href="https://github.com/keychat-io/keychat-app/releases/tag/v1.39.2%2B6495">v1.39.2&lt;/a>，通过 &lt;a href="https://github.com/keychat-io/keychat-app/pull/148">PR #148&lt;/a> 添加了 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a> Nostr Wallet Connect 支持。用户现在可以在消息应用内连接外部 Lightning 钱包进行支付。该版本还添加了 macOS 桌面通知。&lt;/p>
&lt;h3 id="nostrmo-v350">Nostrmo v3.5.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/haorendashu/nostrmo">Nostrmo&lt;/a>，跨平台 Flutter 客户端，发布了 &lt;a href="https://github.com/haorendashu/nostrmo/releases/tag/3.5.0">v3.5.0&lt;/a>，全面改造其信息流系统。更新用可自定义的替代方案取代了固定信息流：通用信息流、提及信息流和中继信息流，每个都可以通过新的编辑页面进行配置。该版本实现了 outbox 模型支持以实现更好的事件路由，并扩展了本地中继功能，支持可配置的大小限制和订阅。&lt;/p>
&lt;h3 id="shosho-v0111">Shosho v0.11.1&lt;/h3>
&lt;p>&lt;a href="https://github.com/r0d8lsh0p/shosho-releases">Shosho&lt;/a>，Nostr 直播应用，发布了 &lt;a href="https://github.com/r0d8lsh0p/shosho-releases/releases/tag/v0.11.1">v0.11.1&lt;/a>，具有录制和 VOD 功能。更新添加了显示谁在观看直播的房间在场指示器、用于更好讨论组织的线程聊天对话，以及通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 在 iOS 上的 Nostr Connect 支持。主播现在可以保存他们的广播供以后观看，同时保持与观众的实时聊天互动。&lt;/p>
&lt;h3 id="noscall-v050">NosCall v0.5.0&lt;/h3>
&lt;p>&lt;a href="https://github.com/sanah9/noscall">NosCall&lt;/a>，Nostr 音频和视频通话应用，发布了 &lt;a href="https://github.com/sanah9/noscall/releases/tag/v0.5.0-release">v0.5.0&lt;/a>，支持按类别组织通话的联系人群组、用于连接优化的中继管理，以及用于改善 NAT 穿透的可配置 ICE 服务器设置。该版本还添加了深色模式支持。NosCall 使用 Nostr 进行通话信令和协调，实现无需中心化服务器的点对点通话。&lt;/p>
&lt;h3 id="divine-104">diVine 1.0.4&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>，rabble 的短视频循环客户端，在提交 Zapstore 之前发布了 &lt;a href="https://github.com/divinevideo/divine-mobile/releases/tag/1.0.4">1.0.4&lt;/a> 作为 Android 预发布 alpha 版本。该版本专注于测试 Nostr 密钥管理，包括 nsec 导入、使用 nsecBunker 和 Amber 的 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46 (Nostr Connect)&lt;/a> 远程签名，以及 nostrconnect:// URL 处理。团队正在征求关于中继兼容性和与其他客户端视频互操作性的反馈。&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1265">PR #1265&lt;/a> 修复了导致视频剪辑在应用更新后无法使用的 iOS 文件路径处理问题，改为存储相对路径而非绝对容器路径。&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1251">PR #1251&lt;/a> 修复了从评论查看个人资料时的导航问题。&lt;/p>
&lt;h3 id="zeus-v0122">Zeus v0.12.2&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a> 发布了 &lt;a href="https://github.com/ZeusLN/zeus/releases/tag/v0.12.2">v0.12.2&lt;/a> 稳定版，整合了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-01-28-newsletter/#zeus-v0122-beta---nwc-fixes">之前版本中报道的 NWC 修复&lt;/a>。&lt;/p>
&lt;h3 id="frostr-igloo-ios-testflight">Frostr Igloo iOS TestFlight&lt;/h3>
&lt;p>&lt;a href="https://github.com/FROSTR-ORG">Frostr&lt;/a> (&lt;a href="https://frostr.org/">frostr.org&lt;/a>) 在 &lt;a href="https://testflight.apple.com/join/72hjQe3J">TestFlight&lt;/a> 上推出了 &lt;a href="https://github.com/FROSTR-ORG/igloo-ios">Igloo for iOS&lt;/a>，将门限签名扩展到 Apple 设备。Frostr 使用 FROST（灵活的轮次优化 Schnorr 门限）签名将 nsec 密钥分割成分布在多个设备上的份额，实现具有容错能力的 k-of-n 签名。以「演示模式」加入的用户参与实时 2-of-2 门限签名实验，展示协议的实时协调能力。iOS 版本加入了 &lt;a href="https://github.com/FROSTR-ORG/igloo-android">Igloo for Android&lt;/a>（v0.1.2），后者于 12 月发布，支持 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55 (Android 签名器)&lt;/a> 用于跨应用签名请求。两个移动客户端补充了 &lt;a href="https://github.com/FROSTR-ORG/igloo-desktop">Igloo desktop&lt;/a> 和 &lt;a href="https://github.com/FROSTR-ORG/frost2x">Frost2x&lt;/a> 浏览器扩展。&lt;/p>
&lt;h2 id="项目更新">项目更新&lt;/h2>
&lt;h3 id="damus-实现-nip-19-中继提示">Damus 实现 NIP-19 中继提示&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus">Damus&lt;/a> 合并了 &lt;a href="https://github.com/damus-io/damus/pull/3477">PR #3477&lt;/a>，实现了用于事件获取的 &lt;a href="https://nostrcompass.org/zh/topics/nip-19/">NIP-19&lt;/a> 中继提示消费。该功能通过从 &lt;a href="https://nostrcompass.org/zh/topics/nip-10/">NIP-10 (回复线程)&lt;/a>、&lt;a href="https://nostrcompass.org/zh/topics/nip-18/">NIP-18 (转发)&lt;/a> 和 NIP-19 引用中提取提示，实现在用户配置池之外的中继上查看笔记。实现使用带引用计数清理的临时中继连接，避免永久扩展中继池。&lt;/p>
&lt;p>其他修复包括 Lightning 发票解析（&lt;a href="https://github.com/damus-io/damus/pull/3566">PR #3566&lt;/a>）、钱包视图加载（&lt;a href="https://github.com/damus-io/damus/pull/3554">PR #3554&lt;/a>）、中继列表时序（&lt;a href="https://github.com/damus-io/damus/pull/3553">PR #3553&lt;/a>），以及个人资料预加载以减少视觉「弹跳」（&lt;a href="https://github.com/damus-io/damus/pull/3550">PR #3550&lt;/a>）。一个&lt;a href="https://github.com/damus-io/damus/pull/3590">草稿 PR #3590&lt;/a> 显示 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 私密 DM 支持正在进行中。&lt;/p>
&lt;h3 id="primal-android-发布-nwc-加密">Primal Android 发布 NWC 加密&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app">Primal Android&lt;/a> 本周非常活跃，合并了 18 个专注于钱包基础设施的 PR。该应用现在与 Spark（Lightspark 的自托管 Lightning 协议）集成。&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/874">PR #874&lt;/a> 添加了 NWC 加密支持，&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/872">PR #872&lt;/a> 在连接建立时发送 NWC 信息事件。&lt;/p>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/870">PR #870&lt;/a> 支持钱包交易的 CSV 导出，对会计和税务目的很有用。&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/716">PR #716&lt;/a> 在笔记编辑器中添加了本地账户切换器。多个钱包恢复修复（&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/876">PR #876&lt;/a>、&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/875">PR #875&lt;/a>、&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/873">PR #873&lt;/a>）解决了使用非 Spark 钱包配置用户的边缘情况。&lt;/p>
&lt;h3 id="marmot-typescript-sdk-添加消息历史">Marmot TypeScript SDK 添加消息历史&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/marmot">Marmot&lt;/a> 协议的 TypeScript 实现继续开发。hzrd149 的 &lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/38">PR #38&lt;/a> 为参考聊天应用实现了带分页的消息历史持久化，&lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/39">PR #39&lt;/a> 改善了库的易用性。&lt;/p>
&lt;p>在 Rust 端，&lt;a href="https://github.com/marmot-protocol/mdk/pull/161">PR #161&lt;/a> 实现了可重试的状态处理以在失败时保留消息上下文，&lt;a href="https://github.com/marmot-protocol/mdk/pull/164">PR #164&lt;/a> 切换到 std::sync::Mutex 以避免 SQLite 的 tokio 崩溃。whitenoise-rs 后端添加了 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/418">Amber 集成&lt;/a>（&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/418">PR #418&lt;/a>），&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/467">升级到 MDK 和 nostr-sdk 0.44&lt;/a>（&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/467">PR #467&lt;/a>），并通过 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/460">PR #460&lt;/a> 引入了实时通知流，支持 NewMessage 和 GroupInvite 事件类型。&lt;/p>
&lt;h3 id="haven-添加定期-wot-刷新">HAVEN 添加定期 WoT 刷新&lt;/h3>
&lt;p>&lt;a href="https://github.com/bitvora/haven">HAVEN&lt;/a>，个人中继，合并了 &lt;a href="https://github.com/bitvora/haven/pull/108">PR #108&lt;/a>，添加了定期 &lt;a href="https://nostrcompass.org/zh/topics/web-of-trust/">Web of Trust&lt;/a> 刷新。该功能确保信任评分随着用户社交图谱的演变保持最新，随时间提高垃圾过滤的准确性。&lt;/p>
&lt;h3 id="nostr-tools">nostr-tools&lt;/h3>
&lt;p>&lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a>，核心 JavaScript 库，本周收到多项改进。提交包括&lt;a href="https://nostrcompass.org/zh/topics/nip-27/">修复 NIP-27 (文本笔记引用)&lt;/a> 提及中&lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/c2423f7f31853d97fef2e3d649204cec328e81d5">换行符后话题标签解析的修复&lt;/a>、&lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/ab802c8dbe35d29feb732ba54e82a346c21c32e2">带空闲跟踪的损坏中继对象自动清理&lt;/a>用于连接清理、&lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/be9b91318fea6a0cb154b8734a15b50a4c1e7638">消息队列移除&lt;/a>用于单线程性能优化，以及&lt;a href="https://github.com/nbd-wtf/nostr-tools/commit/05b1fba5113182ac0aa3c72d1f511cd956a7c139">源文件导出&lt;/a>用于更好的 TypeScript 导入。&lt;/p>
&lt;h3 id="ndk">NDK&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a> 发布了 &lt;a href="https://github.com/nostr-dev-kit/ndk/commit/26abea24726ed844fdd091744ac9f768f1a530a0">beta.71&lt;/a>，&lt;a href="https://github.com/nostr-dev-kit/ndk/commit/33e759508bc656dc45d3d77c741edf581af323f3">修复了设备睡眠/唤醒周期后的重新连接和陈旧连接处理&lt;/a>，解决了移动应用的可靠性问题。&lt;/p>
&lt;h3 id="notedeck">Notedeck&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a>，Damus 团队的桌面客户端，有一个&lt;a href="https://github.com/damus-io/notedeck/pull/1279">开放的 PR #1279&lt;/a> 添加 &lt;a href="https://nostrcompass.org/zh/topics/nip-34/">NIP-34 (Git 协作)&lt;/a> 查看器。这将支持在客户端内直接浏览发布到 Nostr 中继的 git 仓库、补丁和问题，使 Notedeck 成为基于 ngit 工作流程的潜在前端。&lt;/p>
&lt;h3 id="njump">njump&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/njump">njump&lt;/a>，Nostr Web 网关，通过 &lt;a href="https://github.com/fiatjaf/njump/pull/152">PR #152&lt;/a> 添加了对两种 &lt;a href="https://nostrcompass.org/zh/topics/nip-51/">NIP-51 (列表)&lt;/a> 事件类型的支持。该网关现在渲染 kind:30000 关注集（客户端可以在不同上下文中显示的用户分类分组）和 kind:39089 入门包（为分享和群组关注设计的策划个人资料集合）。这些添加让 njump 在用户分享 nevent 链接时显示社区策划的列表。&lt;/p>
&lt;h3 id="amethyst">Amethyst&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a>，Android 客户端，修复了阻止从播放器视图分享视频的错误（&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1695">PR #1695&lt;/a>）。「分享视频」选项无法显示是因为内容参数没有传递给控制按钮组件。用户现在可以直接从播放器将 Nostr 视频内容分享到其他应用。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1693">PR #1693&lt;/a> 修复了解析某些格式错误事件时发生的 Jackson JSON 反序列化崩溃。&lt;/p>
&lt;h3 id="jumble">Jumble&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a>，专注于中继信息流浏览的 Web 客户端，在 &lt;a href="https://github.com/CodyTseng/jumble/pull/743">PR #743&lt;/a> 中添加了通过剪贴板上传音频文件的功能。用户现在可以直接将音频文件粘贴到帖子编辑器中，文件会上传到配置的媒体服务器并将 URL 嵌入笔记。该功能与现有的图片粘贴功能相同。&lt;/p>
&lt;h3 id="flotilla">Flotilla&lt;/h3>
&lt;p>&lt;a href="https://github.com/coracle-social/flotilla">Flotilla&lt;/a>，hodlbod 的 &lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29 (基于中继的群组)&lt;/a> 社区客户端，通过 &lt;a href="https://github.com/coracle-social/flotilla/pull/270">PR #270&lt;/a> 发布了通知功能。更新将警报系统从基于锚点的轮询重构为 Web 的本地拉取通知和移动端的推送通知。该架构实现了提议的 NIP-9a 标准（见下文 &lt;a href="https://github.com/nostr-protocol/nips/pull/2194">PR #2194&lt;/a>），用户向中继注册 webhook 回调，当过滤器匹配时接收加密事件负载。&lt;/p>
&lt;h3 id="formstr">Formstr&lt;/h3>
&lt;p>&lt;a href="https://github.com/abh3po/nostr-forms">Formstr&lt;/a>，Nostr 原生表单应用，在 &lt;a href="https://github.com/abh3po/nostr-forms/pull/422">PR #422&lt;/a> 中添加了表单导入和加密表单支持。用户现在可以通过响应链接或其他 Formstr 实例导入现有表单。加密功能允许表单创建者限制响应，只有指定的接收者才能阅读提交内容，对收集敏感信息的调查很有用。&lt;/p>
&lt;h3 id="pollerama">Pollerama&lt;/h3>
&lt;p>&lt;a href="https://github.com/abh3po/nostr-polls">Pollerama&lt;/a> (&lt;a href="https://pollerama.fun">pollerama.fun&lt;/a>)，基于 &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a> 构建，通过 &lt;a href="https://github.com/abh3po/nostr-polls/pull/141">PR #141&lt;/a> 和 &lt;a href="https://github.com/abh3po/nostr-polls/pull/142">PR #142&lt;/a> 添加了 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> DM 分享投票功能。用户现在可以通过加密直接消息直接向联系人分享投票。&lt;/p>
&lt;h3 id="nostrability-schemata">Nostrability Schemata&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostrability/schemata">Nostrability schemata&lt;/a>，Nostr 事件的 JSON 验证模式集合，通过 &lt;a href="https://github.com/nostrability/schemata/pull/59">PR #59&lt;/a> 添加了 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59 (Gift Wrap)&lt;/a> 覆盖。更新包括 kind 13（seal）和 kind 1059（gift wrap）事件的模式，补充了现有的 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 模式覆盖。&lt;/p>
&lt;h3 id="vector">Vector&lt;/h3>
&lt;p>&lt;a href="https://github.com/VectorPrivacy/Vector">Vector&lt;/a>，使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a>、&lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a> 实现零元数据加密的隐私专注桌面消息应用，合并了 &lt;a href="https://github.com/VectorPrivacy/Vector/pull/39">PR #39&lt;/a>，引入了 SIMD 加速性能优化。十六进制编码快 65 倍，图像预览生成快达 38 倍，通过二进制搜索索引消息查找快 184 倍。该 PR 为 Apple Silicon 添加了 ARM64 NEON 内联函数，为 Windows 和 Linux 添加了带运行时检测的 x86_64 AVX2/SSE2。内存使用下降，消息结构从 472 字节减少到 128 字节，npub 存储通过驻留减少 99.6%。&lt;/p>
&lt;p>Vector v0.3.0（2025 年 12 月）集成了 &lt;a href="https://github.com/marmot-protocol/mdk">MDK (Marmot Development Kit)&lt;/a> 用于基于 MLS 协议的群组消息，为客户端带来了具有前向保密性的端到端加密群组。MIP-04 文件共享现在处理 MLS 群组的 imeta 附件，为与 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-01-28-newsletter/#marmot-protocol-updates">White Noise&lt;/a> 的互操作性而设计。该版本还引入了带有基于 WebXDC 的 P2P 多人游戏的 Mini Apps 平台、名为 The Nexus 的去中心化应用商店、用于应用内支付的 PIVX 钱包集成、带完整历史跟踪的消息编辑，以及图像上传期间 4 倍内存减少。&lt;/p>
&lt;h2 id="nip-更新">NIP 更新&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>的最新变更：&lt;/p>
&lt;p>&lt;strong>已合并：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1913">NIP-47：Hold Invoice 支持&lt;/a>&lt;/strong> - &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47 (Nostr Wallet Connect)&lt;/a> 现在支持 hold invoice，实现接收者必须明确结算或取消支付的高级支付工作流程。该 PR 添加了三个新的 RPC 方法：&lt;code>make_hold_invoice&lt;/code> 使用预生成的 preimage 和支付哈希创建 hold invoice，&lt;code>settle_hold_invoice&lt;/code> 通过提供原始 preimage 领取支付，&lt;code>cancel_hold_invoice&lt;/code> 使用支付哈希拒绝支付。新的 &lt;code>hold_invoice_accepted&lt;/code> 通知在付款人锁定支付时触发。这支持付费解锁内容、市场托管系统和支付网关等用例。&lt;a href="https://github.com/getAlby/hub/pull/1298">Alby Hub&lt;/a>、&lt;a href="https://github.com/getAlby/js-sdk/pull/382">Alby JS-SDK&lt;/a> 和 &lt;a href="https://github.com/relaystr/ndk/pull/147">dart NDK&lt;/a> 已在实现中。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2208">NIP-05：小写要求&lt;/a>&lt;/strong> - &lt;a href="https://nostrcompass.org/zh/topics/nip-05/">NIP-05 (域名验证)&lt;/a> 现在明确要求 &lt;code>nostr.json&lt;/code> 文件中的十六进制公钥和本地名称都使用小写。这在规范中是隐含的但未说明，导致某些实现使用混合大小写而其他实现规范化为小写时出现互操作性问题。验证 NIP-05 标识符的客户端现在应该拒绝任何包含大写字符的密钥或名称的 &lt;code>nostr.json&lt;/code> 响应。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2205">NIP-73：国家代码&lt;/a>&lt;/strong> - &lt;a href="https://nostrcompass.org/zh/topics/nip-73/">NIP-73 (地理标签)&lt;/a> 现在支持 ISO 3166 国家代码作为 geohash 的替代方案。事件可以包含 &lt;code>[&amp;quot;g&amp;quot;, &amp;quot;US&amp;quot;, &amp;quot;countryCode&amp;quot;]&lt;/code> 标签来指示国家级位置而无需精确坐标。这为不需要或不希望精确位置的应用程序提供了基于国家的内容过滤和发现。该 PR 还向规范文档添加了缺失的 geohash 示例。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>开放 PR 和讨论：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1336">NIP-82：软件应用程序&lt;/a>&lt;/strong> - franzap 宣布对此草案规范进行重大更新，该规范定义了如何使用 kind 30063 发布事件通过 Nostr 分发软件应用程序。更新现在覆盖全球约 98% 的设备平台，包括 macOS、Linux、Windows、FreeBSD、WASM 环境、VS Code 扩展、Chrome 扩展和 Web Bundles/PWA。团队接下来将专注于 Android、PWA 和 iOS 支持，邀请开发者汇聚到这个共享标准。Zapstore 计划在未来几周迁移到新格式。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2211">NIP-74：播客&lt;/a>&lt;/strong> - 定义播客节目（kind 30074）和剧集（kind 30075）的可寻址事件。节目包括标题、描述、类别和封面图像等元数据。剧集引用其父节目并包括封装 URL、时长和章节标记。该规范与 Podcasting 2.0 元数据标准集成，并包含用于通过 Lightning 实现 V4V（价值换价值）货币化的价值标签。像 &lt;a href="https://transmit.fm">transmit.fm&lt;/a> 这样的 Nostr 原生播客发布平台可以使用此格式直接发布到中继，使播客作者能够在没有中介的情况下分发内容。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2207">NIP-FR：仅朋友可见笔记&lt;/a>&lt;/strong> - 提议一种使用名为 ViewKey 的共享对称密钥发布仅对用户定义的朋友列表可见的笔记的机制。作者使用 NIP-44 用 ViewKey 加密笔记（kind 2044）。ViewKey 本身通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59 (Gift Wrap)&lt;/a> 一次性分发给每个朋友。拥有 ViewKey 的朋友可以解密和阅读笔记；其他人只能看到密文。当作者移除一个朋友时，ViewKey 会进行轮换：生成新密钥并通过 gift wrap 重新分发给所有剩余朋友，确保被移除的朋友无法访问未来的帖子。这种方法将内容加密（对称，高效）与密钥分发（非对称，逐友）分离，保持协议轻量级的同时实现了频繁请求的隐私功能。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrhub.io/e/1a451c1581888215ae5c311d36c8a7c7d9e5e81f1f4010de4afaf7fcbd553e90">NIP-DB：浏览器 Nostr 事件数据库接口&lt;/a>&lt;/strong> (&lt;a href="https://github.com/hzrd149/nostr-bucket/blob/master/nip.md">spec&lt;/a>) - 提议为提供本地 Nostr 事件存储的浏览器扩展提供标准的 &lt;code>window.nostrdb&lt;/code> 接口。API 包括添加事件、按 ID 或过滤器查询、计数匹配和订阅更新的方法。Web 应用程序可以使用此接口从本地缓存的事件读取而无需发起中继请求，减少带宽和延迟。hzrd149 的 &lt;a href="https://github.com/hzrd149/nostr-bucket">nostr-bucket&lt;/a> 浏览器扩展提供了参考实现，将接口注入所有浏览器标签。配套的 &lt;a href="https://github.com/hzrd149/window.nostrdb.js">polyfill 库&lt;/a> 使用 IndexedDB 为没有扩展的环境实现相同的 API。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://nostrhub.io/e/237667820943d1c8bbe7ab7732623ae51b337f177776ece439d4a8be84708eb7">TRUSTed Filters&lt;/a>&lt;/strong> - 用于去中心化内容审核的五个相关提案套件，基于 vitorpamplona 的已合并的 &lt;a href="https://github.com/nostr-protocol/nips/pull/1534">Trusted Assertions PR #1534&lt;/a>。核心规范引入 kind 17570 事件用于声明信任提供者偏好，允许用户指定他们信任哪些服务进行事件过滤和排名。信任提供者发布断言（kind 37571）、统计（kind 37572）和排名（kind 37573），客户端可以订阅。该系统使用插件架构，通过 W/w 标签指定过滤器类型和转换。这使得垃圾检测、信誉评分和内容排名等计算密集型操作能够在专用基础设施上运行，同时用户保持对信任哪些提供者的控制。该套件包括过滤器预设、用户排名、可信事件和插件定义的单独规范。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2194">NIP-9a：推送通知&lt;/a>&lt;/strong> - hodlbod 提议使用 kind 30390 注册事件的基于中继的推送通知标准。用户创建一个包含他们想接收事件过滤器和 webhook 回调 URL 的注册。注册加密到中继的 pubkey（来自其 NIP-11 &lt;code>self&lt;/code> 字段）。当匹配事件发生时，中继 POST 到回调，包含事件 ID（明文用于去重）和事件本身（NIP-44 加密到用户）。这种架构让中继推送通知同时保护事件内容免受中间推送服务器的影响。Flotilla 的 &lt;a href="https://github.com/coracle-social/flotilla/pull/270">PR #270&lt;/a> 实现了此标准。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/SigmaEnterprise/Catallax">Catallax&lt;/a>&lt;/strong> - 提议使用 kind 33400 事件的带托管的去中心化合同工作协议。系统定义三个角色：仲裁者宣布可用性和条款，赞助者创建带托管 Bitcoin 资金的任务，自由代理完成工作以领取支付。仲裁者在需要时解决争议。该协议实现无信任的自由职业工作协调，资金锁定直到交付物被接受或仲裁结束。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-深入解析nip-47-nostr-wallet-connect">NIP 深入解析：NIP-47 (Nostr Wallet Connect)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a> 定义了 Nostr Wallet Connect (NWC)，一种使用 Nostr 作为通信层进行远程 Lightning 钱包控制的协议。随着本周 hold invoice 支持的添加，NWC 现在涵盖了完整的 Lightning 操作范围。&lt;/p>
&lt;p>该协议通过简单的交换工作。钱包应用发布一个「钱包信息」事件（kind 13194）描述其功能。客户端应用发送加密请求（kind 23194）要求钱包执行支付发票、创建发票或检查余额等操作。钱包以加密结果（kind 23195）响应。&lt;/p>
&lt;p>NWC 在客户端和钱包之间使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密，使用专用密钥对进行钱包操作，与用户的主身份分开。这种分离意味着泄露 NWC 连接不会暴露用户的 Nostr 身份。&lt;/p>
&lt;p>&lt;strong>支持的方法：&lt;/strong>&lt;/p>
&lt;p>规范定义了核心 Lightning 操作的方法：&lt;code>pay_invoice&lt;/code> 发送支付，&lt;code>make_invoice&lt;/code> 生成用于接收的发票，&lt;code>lookup_invoice&lt;/code> 检查支付状态，&lt;code>get_balance&lt;/code> 返回钱包余额，&lt;code>list_transactions&lt;/code> 提供支付历史。新合并的 &lt;code>pay_keysend&lt;/code> 支持无发票支付，&lt;code>hold_invoice&lt;/code> 支持条件支付。&lt;/p>
&lt;p>&lt;strong>示例事件：&lt;/strong>&lt;/p>
&lt;p>钱包服务发布一个信息事件（kind 13194）宣传其功能：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">13194&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;wallet service pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;pay_invoice get_balance make_invoice lookup_invoice list_transactions notifications&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;encryption&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip44_v2&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;notifications&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;payment_received payment_sent&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;unix timestamp&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;wallet service signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>客户端发送加密请求（kind 23194）支付发票：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">23194&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;client ephemeral pubkey from connection URI secret&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;NIP-44 encrypted: {\&amp;#34;method\&amp;#34;: \&amp;#34;pay_invoice\&amp;#34;, \&amp;#34;params\&amp;#34;: {\&amp;#34;invoice\&amp;#34;: \&amp;#34;lnbc50n1...\&amp;#34;}}&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;wallet service pubkey&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;encryption&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;nip44_v2&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;unix timestamp&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;client ephemeral key signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>钱包服务响应（kind 23195）支付结果：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">23195&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;wallet service pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;NIP-44 encrypted: {\&amp;#34;result_type\&amp;#34;: \&amp;#34;pay_invoice\&amp;#34;, \&amp;#34;result\&amp;#34;: {\&amp;#34;preimage\&amp;#34;: \&amp;#34;...\&amp;#34;}, \&amp;#34;error\&amp;#34;: null}&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;client ephemeral pubkey&amp;gt;&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;request event id&amp;gt;&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;unix timestamp&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event hash&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;wallet service signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>响应中的 &lt;code>e&lt;/code> 标签引用原始请求，允许客户端将响应与其请求匹配。&lt;/p>
&lt;p>&lt;strong>Hold Invoice：&lt;/strong>&lt;/p>
&lt;p>本周的 &lt;a href="https://github.com/nostr-protocol/nips/pull/1913">PR #1913&lt;/a> 添加了 hold invoice 支持，实现托管式支付。与接收者通过释放 preimage 立即领取支付的标准发票不同，hold invoice 让接收者推迟此决定。当付款人发送到 hold invoice 时，资金沿支付路径锁定。然后接收者选择结算（释放 preimage 并领取资金）或取消（拒绝支付，将资金返还给付款人）。如果两种操作都没有发生，支付超时，资金自动返还。该 PR 添加了三个 NWC 方法：&lt;code>make_hold_invoice&lt;/code>、&lt;code>settle_hold_invoice&lt;/code> 和 &lt;code>cancel_hold_invoice&lt;/code>，加上 &lt;code>hold_invoice_accepted&lt;/code> 通知。这种机制为 Ridestr 的拼车托管和市场争议解决等应用提供动力。&lt;/p>
&lt;p>&lt;strong>当前实现：&lt;/strong>&lt;/p>
&lt;p>主要钱包支持 NWC：Zeus、Alby 和 Primal（从本周的 &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/874">PR #874&lt;/a> 开始）都实现了钱包端支持。在客户端方面，Damus、Amethyst 和大多数主要 Nostr 客户端可以连接到 NWC 钱包进行 zapping 和支付。&lt;/p>
&lt;p>该协议实现了关注点分离：用户可以在一个设备上运行钱包，同时从另一个设备与 Nostr 交互，Nostr 中继作为通信渠道。这种架构意味着移动客户端不需要直接持有资金，通过将钱包基础设施与社交客户端分开来提高安全性。&lt;/p>
&lt;p>&lt;strong>安全注意事项：&lt;/strong>&lt;/p>
&lt;p>NWC 连接应被视为敏感信息。虽然加密保护消息内容，但钱包 pubkey 和连接密钥必须妥善保管。应用程序应允许用户撤销连接并设置消费限额。该协议支持功能限制，因此钱包可以限制特定连接可以执行的操作。&lt;/p>
&lt;h2 id="nip-深入解析nip-59-gift-wrap">NIP 深入解析：NIP-59 (Gift Wrap)&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a> 定义了一种将任何 Nostr 事件封装在多层加密中的协议，向中继和观察者隐藏发送者身份。本周提出的仅朋友可见笔记（NIP-FR）和推送通知（NIP-9a）提案都依赖 gift wrapping，使其成为值得理解的基础隐私原语。&lt;/p>
&lt;p>&lt;strong>三个层次：&lt;/strong>&lt;/p>
&lt;p>Gift wrapping 使用三个嵌套结构：&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Rumor&lt;/strong>（未签名事件）：作为 Nostr 事件的原始内容，没有签名。rumor 不能直接发送到中继，因为中继拒绝未签名事件。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Seal&lt;/strong>（kind 13）：rumor 使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密并放入 kind 13 事件中。seal 由实际作者的密钥签名。这是作者身份的密码学证明。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Gift Wrap&lt;/strong>（kind 1059）：seal 被加密并放入由随机一次性密钥对签名的 kind 1059 事件中。gift wrap 包含用于路由到接收者的 &lt;code>p&lt;/code> 标签。&lt;/p>
&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>常见误解：可否认性&lt;/strong>&lt;/p>
&lt;p>规范提到未签名的 rumor 提供「可否认性」，但这具有误导性。seal 层由真实作者签名。当接收者解密 gift wrap 然后解密 seal 时，他们有谁发送消息的密码学证明。接收者甚至可以构建零知识证明来揭示发送者身份而不暴露自己的私钥。&lt;/p>
&lt;p>Gift wrap 实际提供的是&lt;strong>对观察者的发送者隐私&lt;/strong>：中继和第三方无法确定谁发送了消息，因为他们只能看到由随机密钥签名的 gift wrap。但接收者总是知道，并且可以证明。&lt;/p>
&lt;p>&lt;strong>示例事件：&lt;/strong>&lt;/p>
&lt;p>这是规范中的完整三层结构（发送「你今晚去派对吗？」）：&lt;/p>
&lt;p>Rumor（未签名，不能发布到中继）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1691518405&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Are you going to the party tonight?&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;611df01bfcf85c26ae65453b772d8f1dfd25c264621c0277e1fc1518686faef9&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;9dd003c6d3b73b74a85a9ab099469ce251653a7af76f523671ab828acd2a0ef9&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Seal（kind 13，由真实作者签名，包含加密的 rumor）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">13&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;611df01bfcf85c26ae65453b772d8f1dfd25c264621c0277e1fc1518686faef9&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;AqBCdwoS7/tPK+QGkPCadJTn8FxGkd24iApo3BR9/M0uw6n4RFAFSPAKKMgkzVMo...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1703015180&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;28a87d7c074d94a58e9e89bb3e9e4e813e2189f285d797b1c56069d36f59eaa7&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;02fc3facf6621196c32912b1ef53bac8f8bfe9db51c0e7102c073103586b0d29...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Gift wrap（kind 1059，由随机临时密钥签名，包含加密的 seal）：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1059&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;18b1a75918f1f2c90c23da616bce317d36e348bcf5f7ba55e75949319210c87c&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;AhC3Qj/QsKJFWuf6xroiYip+2yK95qPwJjVvFujhzSguJWb/6TlPpBW0CGFwfuf...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1703021488&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [[&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;166bf3765ebd1fc55decfe395beff2ea3b2a4e0a8946e7eb578512b555737c99&amp;#34;&lt;/span>]],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;5c005f3ccf01950aa8d131203248544fb1e41a0d698e846bd419cec3890903ac&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;35fabdae4634eb630880a1896a886e40fd6ea8a60958e30b89b33a93e6235df7...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>注意：seal 的 &lt;code>pubkey&lt;/code> 是真实作者（&lt;code>611df01...&lt;/code>），而 gift wrap 的 &lt;code>pubkey&lt;/code> 是随机一次性密钥（&lt;code>18b1a75...&lt;/code>）。中继只能看到 gift wrap，因此无法将消息归属于真实作者。&lt;/p>
&lt;p>&lt;strong>每层保护什么：&lt;/strong>&lt;/p>
&lt;p>Rumor 未签名，不能直接发布到中继。Seal 由真实作者签名，向接收者证明作者身份。Gift wrap 由随机一次性密钥签名，向中继和观察者隐藏真实作者。只有接收者才能解密两层以到达原始内容并验证作者在 seal 上的签名。&lt;/p>
&lt;p>&lt;strong>当前应用：&lt;/strong>&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17 (私密直接消息)&lt;/a> 使用 gift wrap 进行加密 DM，取代了旧的 NIP-04 方案。提议的NIP-FR（仅朋友可见笔记）使用Gift Wrapping向朋友分发ViewKey，朋友随后使用这些密钥解密加密的笔记。NIP-9a（推送通知）使用 gift wrap 原理加密通知负载。&lt;/p>
&lt;p>&lt;strong>元数据保护：&lt;/strong>&lt;/p>
&lt;p>时间戳应随机化以阻止时序分析。中继应在提供 kind 1059 事件之前要求 AUTH，并且只向标记的接收者提供。发送给多个接收者时，为每个人创建单独的 gift wrap。&lt;/p>
&lt;hr>
&lt;p>本周就到这里。正在构建什么？有新闻要分享？希望我们报道您的项目？&lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">通过 NIP-17 私信联系我们&lt;/a>或在 Nostr 上找到我们。&lt;/p></content:encoded></item><item><title>Nostr Compass #7</title><link>https://nostrcompass.org/zh/newsletters/2026-01-28-newsletter/</link><pubDate>Wed, 28 Jan 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-01-28-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> Ridestr 通过 &lt;a href="https://nostrcompass.org/zh/topics/cashu/">Cashu&lt;/a> 支付和加密位置共享将去中心化拼车服务引入 Nostr。Pomade 为多重签名签署者引入基于电子邮件的恢复功能。Damus 发布 &lt;a href="https://nostrcompass.org/zh/topics/negentropy/">negentropy&lt;/a> 实现可靠的私信同步。Amethyst 桌面应用添加搜索、书签和 zaps 功能。Amber v4.1.1 显示中继信任评分。Marmot 合并 MIP-03 并构建 TypeScript 参考聊天应用。diVine 添加 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 二维码身份验证和提及功能支持。新的 NIP 提案涉及社区管理、基于序列的同步和加密文件存储。我们还回顾了 Nostr 五年来每个一月的发展历程，追溯该协议从 2021 年少数早期采用者，到 2023 年 Damus 在 App Store 爆发式上架，再到 2025 年成熟客户端生态系统的演变过程。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="ridestr-将去中心化拼车服务引入-nostr">Ridestr 将去中心化拼车服务引入 Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a> 正在开发一款完全基于 Nostr 构建的点对点拼车应用，支持使用 Bitcoin 和 &lt;a href="https://nostrcompass.org/zh/topics/cashu/">Cashu&lt;/a> 进行司机与乘客之间的直接交易。该协议使用自定义事件类型（30173、3173-3175、30180/30181）来协调行程，同时通过渐进式位置披露和 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密保护隐私。&lt;/p>
&lt;p>系统通过精心设计的流程运作：司机通过 kind 30173 事件使用 geohash 编码的位置（约 5 公里精度）广播可用性，乘客通过 kind 3173 发送包含费用估算的行程请求，在行程开始前使用 HTLC 托管代币锁定支付。位置隐私通过渐进式披露得到保护——接送详情仅在司机到达时才显示，目的地在 PIN 验证后才共享。各方之间的所有通信都使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密保护隐私。&lt;/p>
&lt;p>Ridestr 通过带有 P2PK 签名的 HTLC 托管实现支付安全。当乘客接受司机的报价时，他们用支付哈希锁定 &lt;a href="https://nostrcompass.org/zh/topics/cashu/">Cashu&lt;/a> 代币，只有司机在行程完成后才能领取。该协议目前采用单一铸造厂架构，要求乘客和司机使用同一个 &lt;a href="https://nostrcompass.org/zh/topics/cashu/">Cashu&lt;/a> 铸造厂。该项目基于 Kotlin 的 Android 实现负责处理证明验证，并通过 NUT-07 状态检查恢复过期的证明。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> Ridestr 通过 &lt;a href="https://nostrcompass.org/zh/topics/cashu/">Cashu&lt;/a> 支付和加密位置共享将去中心化拼车服务引入 Nostr。Pomade 为多重签名签署者引入基于电子邮件的恢复功能。Damus 发布 &lt;a href="https://nostrcompass.org/zh/topics/negentropy/">negentropy&lt;/a> 实现可靠的私信同步。Amethyst 桌面应用添加搜索、书签和 zaps 功能。Amber v4.1.1 显示中继信任评分。Marmot 合并 MIP-03 并构建 TypeScript 参考聊天应用。diVine 添加 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 二维码身份验证和提及功能支持。新的 NIP 提案涉及社区管理、基于序列的同步和加密文件存储。我们还回顾了 Nostr 五年来每个一月的发展历程，追溯该协议从 2021 年少数早期采用者，到 2023 年 Damus 在 App Store 爆发式上架，再到 2025 年成熟客户端生态系统的演变过程。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="ridestr-将去中心化拼车服务引入-nostr">Ridestr 将去中心化拼车服务引入 Nostr&lt;/h3>
&lt;p>&lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a> 正在开发一款完全基于 Nostr 构建的点对点拼车应用，支持使用 Bitcoin 和 &lt;a href="https://nostrcompass.org/zh/topics/cashu/">Cashu&lt;/a> 进行司机与乘客之间的直接交易。该协议使用自定义事件类型（30173、3173-3175、30180/30181）来协调行程，同时通过渐进式位置披露和 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密保护隐私。&lt;/p>
&lt;p>系统通过精心设计的流程运作：司机通过 kind 30173 事件使用 geohash 编码的位置（约 5 公里精度）广播可用性，乘客通过 kind 3173 发送包含费用估算的行程请求，在行程开始前使用 HTLC 托管代币锁定支付。位置隐私通过渐进式披露得到保护——接送详情仅在司机到达时才显示，目的地在 PIN 验证后才共享。各方之间的所有通信都使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密保护隐私。&lt;/p>
&lt;p>Ridestr 通过带有 P2PK 签名的 HTLC 托管实现支付安全。当乘客接受司机的报价时，他们用支付哈希锁定 &lt;a href="https://nostrcompass.org/zh/topics/cashu/">Cashu&lt;/a> 代币，只有司机在行程完成后才能领取。该协议目前采用单一铸造厂架构，要求乘客和司机使用同一个 &lt;a href="https://nostrcompass.org/zh/topics/cashu/">Cashu&lt;/a> 铸造厂。该项目基于 Kotlin 的 Android 实现负责处理证明验证，并通过 NUT-07 状态检查恢复过期的证明。&lt;/p>
&lt;p>Ridestr 解决了大多数 Nostr 应用所回避的挑战：实时位置协调、带有争议解决的支付托管，以及物理世界交互的信誉系统。该项目目前处于测试阶段，证明了 Nostr 的事件模型可以支持点对点服务市场，而不仅仅是内容共享。&lt;/p>
&lt;h3 id="pomade-为多重签名签署者推出-alpha-版恢复系统">Pomade 为多重签名签署者推出 Alpha 版恢复系统&lt;/h3>
&lt;p>由 hodlbod 开发的 &lt;a href="https://github.com/coracle-social/pomade">Pomade&lt;/a> 基于现有的 &lt;a href="https://github.com/FROSTR-ORG">FROSTR&lt;/a> 生态系统，提供以恢复为核心的门限签名服务。通过 @frostr/bifrost 库使用 &lt;a href="https://nostrcompass.org/zh/topics/frost/">FROST&lt;/a>（灵活的轮次优化 Schnorr 门限）签名，Pomade 在门限密码学之上添加了基于电子邮件的恢复流程。系统使用 Shamir 秘密共享对用户的密钥进行分片，将份额分发到多个独立的签署者，并可配置阈值（2-of-3、3-of-5 等）。&lt;/p>
&lt;p>该协议完全通过 Nostr 运行，使用单一事件类型（28350）和 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密的有效载荷。签名时，客户端向至少 &lt;code>threshold&lt;/code> 个签署者请求部分签名，然后将这些签名聚合成有效的 Schnorr 签名。对于加密，签署者通过 ECDH 协作派生共享密钥，而无需任何一方知道完整密钥。&lt;/p>
&lt;p>恢复通过两种身份验证方法进行：基于密码的（使用 argon2id 并以签署者的 pubkey 作为盐）或电子邮件 OTP。为防止 OTP 恢复期间的中间人攻击，每个签署者使用客户端提供的前缀生成自己的验证码，要求用户独立向每个签署者进行身份验证。根据 &lt;a href="https://nostrcompass.org/zh/topics/nip-13/">NIP-13&lt;/a> 的规定，该协议要求注册事件具有工作量证明（20+ 位）以防止垃圾信息。&lt;/p>
&lt;p>信任模型是明确的：如果 &lt;code>threshold&lt;/code> 个签署者串通，他们可以窃取密钥。电子邮件提供商是完全受信任的，因为他们可以拦截 OTP。用户无法独立恢复完整的密钥；恢复需要 &lt;code>threshold&lt;/code> 个签署者的配合。该协议专为不熟悉密钥管理的新用户设计，明确建议用户在熟悉后迁移到自我托管。Pomade 警告称，鉴于其未经审计的 alpha 状态，存在&amp;quot;密钥丢失、被盗、拒绝服务或元数据泄露&amp;quot;的潜在风险。&lt;/p>
&lt;h2 id="版本发布">版本发布&lt;/h2>
&lt;h3 id="damus-发布-negentropy-实现可靠的私信同步">Damus 发布 Negentropy 实现可靠的私信同步&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/tree/v1.13">Damus v1.13&lt;/a> 发布了我们&lt;a href="https://nostrcompass.org/zh/newsletters/2026-01-21-newsletter/#damus-ios-client---open-prs">上周作为开放 PR 预览&lt;/a>的 negentropy 实现。&lt;a href="https://github.com/damus-io/damus/pull/3536">PR #3536&lt;/a> 向网络层添加了基础 &lt;a href="https://nostrcompass.org/zh/topics/negentropy/">negentropy&lt;/a> 支持，支持与支持该协议的中继进行集合协调。配套的 &lt;a href="https://github.com/damus-io/damus/pull/3547">PR #3547&lt;/a> 添加了下拉刷新私信同步功能，当标准 REQ 订阅失败时使用 negentropy 恢复丢失的消息。&lt;/p>
&lt;p>该实现采用保守的方式：正常的私信加载保持不变，&lt;a href="https://nostrcompass.org/zh/topics/negentropy/">negentropy&lt;/a> 作为用户手动刷新时的恢复机制可用。自动化测试通过生成一条带有旧时间戳的私信来演示修复效果，标准查询会错过这条消息，然后使用 &lt;a href="https://nostrcompass.org/zh/topics/negentropy/">negentropy&lt;/a> 同步成功检索它。虽然 &lt;a href="https://nostrcompass.org/zh/topics/negentropy/">negentropy&lt;/a> 支持需要兼容的中继，但该实现能够优雅地处理混合中继环境，在可用时使用该协议。&lt;/p>
&lt;h3 id="amber-v411---中继信任评分">Amber v4.1.1 - 中继信任评分&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.1">Amber v4.1.1&lt;/a> 发布了中继信任评分显示功能（&lt;a href="https://github.com/greenart7c3/Amber/pull/289">PR #289&lt;/a>），实现了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-01-21-newsletter/#nip-updates">上周可信中继声明 NIP 报道&lt;/a>中讨论的中继评估概念。信任评分现在显示在中继页面和 NostrConnect 连接请求中，帮助用户在授权连接前评估中继的可靠性。该版本还包括重新设计的登录/事件/权限界面以及对 &lt;code>switch_relays&lt;/code> 方法的支持。性能改进缓存了密钥库操作，解决了旧设备上报告的 20+ 秒加载时间问题。&lt;/p>
&lt;h3 id="nak-v0182---mcp-集成">nak v0.18.2 - MCP 集成&lt;/h3>
&lt;p>fiatjaf 的 &lt;a href="https://github.com/fiatjaf/nak">nak&lt;/a>（Nostr Army Knife）&lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.18.2">v0.18.2&lt;/a> 通过 &lt;code>nak mcp&lt;/code> 添加了 &lt;a href="https://nostrify.dev/mcp">Model Context Protocol&lt;/a> 支持，使 AI 代理能够在 Nostr 上搜索用户、发布笔记、提及用户，并使用 outbox 模型读取内容。该版本还引入了&lt;a href="https://github.com/fiatjaf/nak/blob/master/install.sh">一行安装程序&lt;/a>（&lt;code>curl -sSL https://raw.githubusercontent.com/fiatjaf/nak/master/install.sh | sh&lt;/code>），可下载预编译的二进制文件，消除了最终用户对 Go 工具链的要求。Bunker 模式现在支持 Unix 套接字和 &lt;code>switch_relays&lt;/code>。&lt;/p>
&lt;h3 id="zeus-v0122-beta---nwc-修复">Zeus v0.12.2 Beta - NWC 修复&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZeusLN/zeus/releases">Zeus v0.12.2-beta1&lt;/a> 发布了多项 NWC 修复，解决了&lt;a href="https://nostrcompass.org/zh/newsletters/2026-01-21-newsletter/#zeus-lightning-wallet-with-nostr-wallet-connect">上周 Zeus 报道&lt;/a>中涉及的问题。&lt;/p>
&lt;h2 id="项目更新">项目更新&lt;/h2>
&lt;h3 id="amethyst-桌面---第-2a-阶段发布">Amethyst 桌面 - 第 2A 阶段发布&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst">Amethyst&lt;/a> 推出了&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1676">桌面应用的第 2A 阶段&lt;/a>，为桌面体验添加了搜索、书签、Zaps、帖子详情视图和长文内容（阅读）功能。配套的 &lt;a href="https://github.com/vitorpamplona/amethyst/pull/1683">PR #1683&lt;/a> 添加了透明的事件广播反馈，用户现在可以看到事件在网络中传播时每个中继的实时状态，更容易诊断连接问题。&lt;/p>
&lt;h3 id="notedeck-进展日历应用和用户体验优化">Notedeck 进展：日历应用和用户体验优化&lt;/h3>
&lt;p>Damus 团队的 &lt;a href="https://github.com/damus-io/notedeck">Notedeck&lt;/a> 桌面客户端合并了自动隐藏工具栏行为（&lt;a href="https://github.com/damus-io/notedeck/pull/1268">PR #1268&lt;/a>），根据滚动速度响应，在移动视图上提供更多屏幕空间。一个&lt;a href="https://github.com/damus-io/notedeck/pull/1271">草稿 PR #1271&lt;/a> 添加了完整的 &lt;a href="https://nostrcompass.org/zh/topics/nip-52/">NIP-52&lt;/a> 日历应用，包含月/周/日/议程视图、RSVP 支持和日历事件的 &lt;a href="https://nostrcompass.org/zh/topics/nip-22/">NIP-22&lt;/a> 评论功能，目前通过功能标志进行测试。&lt;/p>
&lt;h3 id="jumble-添加社区模式">Jumble 添加社区模式&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble">Jumble&lt;/a>，这个以中继为中心的 Web 客户端，添加了&lt;a href="https://github.com/CodyTseng/jumble/pull/738">社区模式&lt;/a>和支持&lt;a href="https://github.com/CodyTseng/jumble/pull/736">通过环境变量设置中继集预设&lt;/a>，使部署主题实例（如 &lt;a href="https://nostr.moe/">nostr.moe&lt;/a>）变得更加容易。&lt;/p>
&lt;h3 id="shopstr-订单仪表板">Shopstr 订单仪表板&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> 用专用的&lt;a href="https://github.com/shopstr-eng/shopstr/pull/219">订单仪表板&lt;/a>取代了基于聊天的订单管理。新界面为商家提供了一个集中视图，可以跟踪订单状态、将消息标记为已读和管理履行，而无需滚动浏览聊天记录。此更新弃用了 IndexedDB 缓存，转而使用服务器端订单状态 API，并修改了订单私信的标签方式以实现更好的过滤。&lt;/p>
&lt;h3 id="formstr-添加网格问题">Formstr 添加网格问题&lt;/h3>
&lt;p>&lt;a href="https://github.com/abh3po/nostr-forms">Formstr&lt;/a>，这个 Nostr 原生表单应用，添加了&lt;a href="https://github.com/abh3po/nostr-forms/pull/419">网格问题&lt;/a>并&lt;a href="https://github.com/abh3po/nostr-forms/pull/410">重写了其 SDK&lt;/a> 以支持嵌入。针对&lt;a href="https://github.com/abh3po/nostr-forms/pull/418">非 NIP-07 签署者的修复&lt;/a>解决了使用 bunker 或本地签署者尝试以其身份提交表单的用户遇到的问题。&lt;/p>
&lt;h3 id="nostr-tools-升级加密依赖">nostr-tools 升级加密依赖&lt;/h3>
&lt;p>&lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a>，核心 JavaScript 库，&lt;a href="https://github.com/nbd-wtf/nostr-tools/pull/520">升级到 @noble/curves v2.0.1&lt;/a>，解决了 27 个文件中的破坏性 API 更改，并采用了最新经过审计的 noble 库。fiatjaf 还向 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 添加了 &lt;code>switch_relays&lt;/code> 支持，使 bunker 客户端能够动态更改中继连接。&lt;/p>
&lt;h3 id="zeus-正在开发-nip-87-铸造厂评价">Zeus 正在开发 NIP-87 铸造厂评价&lt;/h3>
&lt;p>&lt;a href="https://github.com/ZeusLN/zeus">Zeus&lt;/a> 有一个&lt;a href="https://github.com/ZeusLN/zeus/pull/3576">关于 NIP-87 铸造厂评价的开放 PR&lt;/a>，允许用户发现和评价根据 Nostr 关注列表过滤的 &lt;a href="https://nostrcompass.org/zh/topics/cashu/">Cashu&lt;/a> 铸造厂。评价包括星级评分，可以匿名提交或使用用户的 nsec 提交。&lt;/p>
&lt;h3 id="camelus-发布完整私信支持">Camelus 发布完整私信支持&lt;/h3>
&lt;p>&lt;a href="https://github.com/camelus-hq/camelus">Camelus&lt;/a>，一个基于 Flutter 的 Android 客户端，使用 Dart NDK 实现节能的移动性能，本周通过 20 多次提交添加了全面的私信功能。更新包括聊天分类、消息日期、乐观发送界面、自我备忘功能和正确的私信中继处理。&lt;/p>
&lt;h3 id="marmot-协议更新">Marmot 协议更新&lt;/h3>
&lt;p>我们&lt;a href="https://nostrcompass.org/zh/newsletters/2026-01-21-newsletter/#marmot-protocol-white-noise-encrypted-group-chat-library">上周作为开放 PR 报道&lt;/a>的 MIP-03 确定性提交解析现已合并。&lt;a href="https://github.com/marmot-protocol/mdk/pull/152">MDK PR #152&lt;/a> 确保所有基于 &lt;a href="https://nostrcompass.org/zh/topics/mls/">MLS&lt;/a> 的群聊在同一 epoch 收到多个有效提交时收敛到相同状态。&lt;/p>
&lt;p>配套的&lt;a href="https://github.com/marmot-protocol/marmot/pull/28">规范 PR #28&lt;/a> 添加了 init_key 生命周期要求，解决了实现审计中发现的空白：Welcome 消息中的私钥材料必须在处理后安全删除（归零、存储清理），新成员必须在 24 小时内执行自我更新以实现前向保密。&lt;/p>
&lt;p>TypeScript SDK（&lt;a href="https://github.com/marmot-protocol/marmot-ts">marmot-ts&lt;/a>）正在构建参考聊天应用。&lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/37">PR #37&lt;/a> 添加了群组创建/列表、带有发布/广播/删除流程的密钥包管理和二维码邀请。hzrd149 的&lt;a href="https://github.com/marmot-protocol/marmot-ts/pull/38">开放 PR #38&lt;/a> 实现了带有分页的消息历史持久化。whitenoise-rs 后端本周合并了 15 个 PR，包括多语言支持（&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/455">PR #455&lt;/a>）和 MIP-04 v2 媒体引用（&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/450">PR #450&lt;/a>）。&lt;/p>
&lt;h3 id="divine-添加-nostr-集成功能">diVine 添加 Nostr 集成功能&lt;/h3>
&lt;p>&lt;a href="https://github.com/divinevideo/divine-mobile">diVine&lt;/a>，短视频应用，持续快速进行 Nostr 集成。&lt;/p>
&lt;p>开放PR包括 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 二维码身份验证（&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1019">PR #1019&lt;/a>）和 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 加密私信（&lt;a href="https://github.com/divinevideo/divine-mobile/pull/834">PR #834&lt;/a>）。本周的活动集中在&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1098">提及功能支持&lt;/a>上，将 &lt;code>nostr:&lt;/code> URI 和 @提及转换为可点击的个人资料链接，&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1097">Classic Viners 头像回退&lt;/a>使用 Nostr 个人资料，以及视频编辑工具，包括&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1056">绘图&lt;/a>、&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1053">滤镜&lt;/a>和&lt;a href="https://github.com/divinevideo/divine-mobile/pull/1050">贴纸&lt;/a>。&lt;/p>
&lt;h2 id="nip-更新">NIP 更新&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>的最新变更：&lt;/p>
&lt;p>&lt;strong>已合并：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1534">可信中继声明&lt;/a>&lt;/strong> - 我们&lt;a href="https://nostrcompass.org/zh/newsletters/2026-01-21-newsletter/#nip-updates">上周报道&lt;/a>的中继信任评分标准化提案已合并。规范定义了 kind 30385 事件用于中继信任声明，涵盖可靠性、质量和可访问性的评分。合并前的讨论集中在信任评分应该是&amp;quot;全局的&amp;quot;（为所有用户计算一次）还是&amp;quot;个性化的&amp;quot;（相对于每个观察者的社交图谱）。像 &lt;a href="https://trust.nostr.band/">nostr.band 的 Trust Rank&lt;/a> 和 &lt;a href="https://github.com/Pretty-Good-Freedom-Tech/graperank-nodejs">GrapeRank&lt;/a> 这样的 PageRank 风格算法通过将通过假账户传递的任何排名除以机器人农场的规模来抵抗女巫攻击。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>开放 PR 和讨论：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Communikeys&lt;/strong> - 一个&lt;a href="https://nostrhub.io">全面的社区管理提案&lt;/a>，使用现有的 npub 作为社区标识符，而不是基于中继的方法。任何 npub 都可以通过发布 kind 10222 事件成为社区；出版物通过 kind 30222 事件指向社区。访问控制使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-58/">NIP-58&lt;/a> 徽章，支持委托成员管理和社区密钥的冷存储。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/2196">NIP-CF: Changes Feed&lt;/a>&lt;/strong> - 一个草案，提出基于序列的事件同步作为基于时间戳的 &lt;code>since&lt;/code> 过滤器的替代方案。问题在于：使用 &lt;code>since&lt;/code> 时间戳的标准 Nostr 同步可能会错过事件，原因包括多个事件共享相同的秒级精度时间戳、客户端和中继时钟漂移，或检查点不精确。NIP-CF 通过让中继为存储的事件分配单调递增的序列号来解决这个问题，提供严格的全序。客户端请求自特定序列号以来的变更，并按保证的顺序接收事件，具有永不错过事件的精确检查点。该提案还支持实时/连续模式，订阅在初始同步后保持打开以进行实时更新。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>&lt;a href="https://github.com/nostr-protocol/nips/pull/1947">NIP-XX: 加密文件同步&lt;/a>&lt;/strong> - 一个协议，定义了 kind 30800（加密文件）、30801（保险库索引）和 30802（共享文档），用于使用 Nostr 中继跨设备同步加密内容。该协议使本地优先的笔记应用能够提供端到端加密同步，而无需中心化服务器。文件内容、路径、名称和文件夹结构都使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 自加密进行加密，因此中继存储的是它们无法读取的数据块。图像等二进制附件使用 &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 服务器进行客户端加密。Kind 30802 通过加密到接收者的公钥来实现用户之间的文档共享。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nostr-五年来的一月">Nostr 五年来的一月&lt;/h2>
&lt;p>&lt;a href="https://nostrcompass.org/zh/newsletters/2025-12-31-newsletter/#december-recap-five-years-of-nostr-decembers">上个月的通讯&lt;/a>追溯了 Nostr 十二月的里程碑，从 fiatjaf 的第一个客户端发布到 Jack Dorsey 的催化性捐赠。本回顾记录了 2021 年到 2025 年每年一月发生的事情，聚焦于经过验证的技术发展。&lt;/p>
&lt;h3 id="2021-年-1-月早期开发">2021 年 1 月：早期开发&lt;/h3>
&lt;p>Nostr 的第三个月继续在 Branle 上进行开发，这是 fiatjaf 于 2020 年 12 月推出的 Vue.js 客户端。一小群早期采用者（可能少于 15 人）通过 Telegram 群组 &lt;a href="https://t.me/nostr_protocol">@nostr_protocol&lt;/a>（创建于 2020 年 11 月 16 日）进行协调，在一两个实验性中继上测试协议。命令行客户端 noscl 提供了终端交互方式。&lt;/p>
&lt;p>技术基础已经锁定：用户通过 secp256k1 公钥识别，帖子使用 Schnorr 签名进行加密签名，中继作为不相互通信的简单存储。这是刻意采用的 Bitcoin 原生密码学，这一设计选择将在多年后影响采用模式。&lt;/p>
&lt;h3 id="2022-年-1-月开发者发现">2022 年 1 月：开发者发现&lt;/h3>
&lt;p>2022 年 1 月开始时，Nostr 仍在 &lt;a href="https://news.ycombinator.com/item?id=29749061">Hacker News 首次亮相&lt;/a>（2021 年 12 月 31 日）的热度中，该帖子获得了 110 分和 138 条评论。在该帖子发布时，只有大约七个中继为整个网络提供动力，评论者指出&amp;quot;垃圾信息还不是问题，因为 nostr 还很新，没人使用它。&amp;ldquo;Robert C. Martin（&amp;ldquo;Uncle Bob&amp;rdquo;）称赞 Nostr 可能是&amp;quot;社交通信的终极解决方案。&amp;ldquo;讨论持续到一月，开发者们辩论中继架构与真正 P2P 的对比、抗审查与内容审核的平衡，以及简洁性能否扩展。&lt;/p>
&lt;p>HN 帖子引发了一波新的实现。Uncle Bob 本人于 1 月 18 日开始开发 &lt;a href="https://github.com/unclebob/more-speech">more-speech&lt;/a>，一个 Clojure 桌面客户端。fiatjaf 的 &lt;a href="https://github.com/nbd-wtf/go-nostr">go-nostr&lt;/a> 库（创建于 2021 年 1 月）和 &lt;a href="https://github.com/fiatjaf/noscl">noscl&lt;/a> 命令行客户端提供了 Go 工具，而 &lt;a href="https://github.com/nbd-wtf/nostr-tools">nostr-tools&lt;/a> 提供了 JavaScript 支持。到 2022 年 12 月，大约有 800 个个人资料有简介。Branle 仍然是主要的 Web 客户端，收到了包括私钥导入和多中继支持在内的更新。技术挑战显而易见：64 个字符的十六进制密钥不够直观，消息延迟令用户沮丧，社区质疑该架构能否处理 Twitter 级别的流量。&lt;/p>
&lt;h3 id="2023-年-1-月爆发">2023 年 1 月：爆发&lt;/h3>
&lt;p>2023 年 1 月将 Nostr 从实验变成了运动。Damus，William Casarin（jb55）开发的 iOS 客户端，经历了与苹果 App Store 审批流程的斗争。1 月 1 日被拒，1 月 26 日再次被拒，最终于 &lt;a href="https://www.coindesk.com/tech/2023/02/01/decentralized-social-media-project-nostrs-damus-gets-listed-on-apple-app-store">1 月 31 日获批&lt;/a>。该批准引发了连锁反应：Damus 立即登上美国社交网络排行榜第 10 名。Jack Dorsey &lt;a href="https://web.archive.org/web/20240304043638/https://www.theblock.co/post/207448/nostr-based-decentralized-twitter-alternative-damus-goes-live-on-apple-app-store">称其为&lt;/a>&amp;ldquo;开放协议的里程碑。&amp;rdquo;&lt;/p>
&lt;p>八天前的 1 月 23 日，&lt;a href="https://x.com/Snowden/status/1617623779626352640">Edward Snowden 宣布&lt;/a>他加入了 Nostr：&amp;ldquo;Nostr 的酷炫之处之一……除了抗审查，就是你不受 280 字符的限制。&amp;ldquo;作为 NSA 揭发者的背书在注重隐私的圈子里颇具分量，用户们立即开始通过 Lightning 向他发送 zaps。&lt;/p>
&lt;p>Web 客户端竞相接纳涌入的用户。&lt;a href="https://github.com/v0l/snort">Snort&lt;/a>，由 kieran 于 2022 年 12 月创建，作为功能丰富的 React 客户端崭露头角；1 月 13 日，Snort 通过 Nostr Plebs API 集成了 NIP-05 注册，让新用户在注册时可以申请人类可读的身份。&lt;a href="https://iris.to">Iris&lt;/a>，由 Martti Malmi（早期 Bitcoin 贡献者，收到了 Satoshi 发送的第二笔 Bitcoin 交易）全职开发，提供 Web 和移动界面，并在 iris.to 提供免费 NIP-05 身份。&lt;a href="https://github.com/monlovesmango/astral">Astral&lt;/a>，由 monlovesmango 使用 Quasar（Vue.js）作为 Branle 的分支构建，专注于中继管理，其中继分组功能让用户可以将中继组织成集合用于发布和过滤。iOS 客户端的 TestFlight 测试版在几小时内就满额了，Amethyst 主导了 Android 市场。&lt;/p>
&lt;p>基础设施努力跟上步伐。所有中继都由自掏腰包的爱好者运营。使用 Lightning 微支付的付费中继创建了自然的垃圾过滤，但引入了访问摩擦。&lt;a href="https://techcrunch.com/2023/02/02/damus-pulled-from-apples-app-store-in-china-after-two-days/">Damus 在获批仅两天后就从中国 App Store 下架&lt;/a>，据报道是应中国最高互联网监管机构的要求。&lt;/p>
&lt;h3 id="2024-年-1-月协议加固">2024 年 1 月：协议加固&lt;/h3>
&lt;p>2024 年 1 月专注于协议标准化和社区建设。&lt;a href="https://www.nostrphx.com/events">Nostr PHX&lt;/a> 于 1 月 5 日在凤凰城举行了当年首次聚会，汇集了当地的密码朋克。这是那年许多社区活动中的第一个，包括 BTC Prague（6 月）、里加的 Nostriga（8 月）和 Nostrasia。&lt;/p>
&lt;p>最重要的协议发展是 &lt;a href="https://github.com/nostr-protocol/nips/pull/716">NIP-59（Gift Wrap）&lt;/a>于 1 月 29 日合并，为加密通信提供元数据保护。Gift Wrap 基于 &lt;a href="https://github.com/paulmillr/nip44">NIP-44 的加密标准&lt;/a>（已于 2023 年 12 月&lt;a href="https://cure53.de/audit-report_nip44-implementations.pdf">由 Cure53 审计&lt;/a>），向中继隐藏发送者身份。该协议将加密消息包裹在由随机一次性使用密钥对签名的外部事件中。中继只能看到一次性公钥，而真正发送者的身份隐藏在只有接收者才能解密的加密有效载荷中。这可以防止中继运营者和网络观察者了解谁在与谁通信。时间戳也可以随机化以防止时序分析。&lt;/p>
&lt;p>生态系统扩展到社交媒体之外。&lt;a href="https://plebeian.market">Plebeian Market&lt;/a> 完全符合 &lt;a href="https://nostrcompass.org/zh/topics/nip-15/">NIP-15&lt;/a> 原生 Nostr 标准，实现跨店购物车和店铺浏览器以发现商家。&lt;a href="https://github.com/shopstr-eng/shopstr">Shopstr&lt;/a> 作为无需许可的市场出现，促进 Bitcoin 商务。&lt;a href="https://zap.stream/">Zap.stream&lt;/a>，由 kieran 构建，将直播带到 Nostr，支持每分钟 21 sats 的 Lightning 支付。开发工具随着 &lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a> 提供 TypeScript 抽象和 &lt;a href="https://github.com/rust-nostr/nostr">rust-nostr&lt;/a> 提供 Rust 绑定而成熟。&lt;a href="https://blog.zeusln.com/new-release-zeus-v0-8-1/">Zeus v0.8.1&lt;/a> 发布了 Nostr 联系人导入和持久 LND，为后续版本的 Nostr Wallet Connect 集成奠定了基础。&lt;/p>
&lt;p>然而基础设施的可持续性&lt;a href="https://arxiv.org/abs/2402.05709">仍然具有挑战性&lt;/a>。这一时期的学术研究发现，95% 的中继难以覆盖运营成本，20% 经历了显著的停机时间。付费中继的入场费平均不到 1,000 sats（约 0.45 美元），不足以维持运营。&lt;/p>
&lt;p>&lt;em>关于骗局的说明：在此期间推出的&amp;quot;Nostr Assets Protocol&amp;quot;和相关的&amp;rdquo;$NOSTR&amp;quot;代币&lt;a href="https://www.aicoin.com/en/article/377704">被 fiatjaf 公开谴责&lt;/a>为&amp;quot;100% 欺诈&amp;quot;和&amp;quot;亲和力骗局&amp;rdquo;，与实际的 Nostr 协议没有任何关系。&lt;/em>&lt;/p>
&lt;h3 id="2025-年-1-月客户端成熟">2025 年 1 月：客户端成熟&lt;/h3>
&lt;p>2025 年 1 月见证了整个生态系统持续的客户端开发。&lt;a href="https://www.nobsbitcoin.com/nostur-v1-17-0/">Nostur 1.17.0&lt;/a> 于 1 月 13 日发布，支持阅读状态的跨设备同步、&lt;a href="https://nostrcompass.org/zh/topics/frost/">FROST&lt;/a> 多重签名登录支持和优化的本地数据库性能。Amethyst 继续向 outbox 模型过渡，根据关注列表自动编译中继集，而不需要手动配置。&lt;/p>
&lt;p>主要客户端开始放弃使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-04/">NIP-04&lt;/a> 进行私信，转向 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 和提议的 &lt;a href="https://nostrcompass.org/zh/topics/nip-104/">NIP-104&lt;/a>，以增强加密和元数据保护。Gossip 模型（outbox/inbox 通信）随着生态系统趋向更高效的中继使用模式而获得采用。行业观察者预测这将是 Nostr 从小众协议过渡到主流认可的一年，可能会有一次引人注目的平台迁移使日活动量翻倍。&lt;/p>
&lt;h3 id="2026-年-1-月安全和签名基础设施">2026 年 1 月：安全和签名基础设施&lt;/h3>
&lt;p>2026 年 1 月在安全和签名基础设施方面取得了重大进展。&lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/2.6.18">Primal Android 2.6.18&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 远程签名和 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 本地签名器支持，与 Amber 和 Aegis 一起成为其他 Android 应用的完整签名中心。&lt;a href="https://github.com/permissionlesstech/bitchat/pulls">Bitchat 完成了 Cure53 安全审计&lt;/a>，这家公司也审计过 Signal 和 NIP-44，17 个以上的 PR 修复了关键发现，包括 DH 密钥清除和线程安全问题。Bitchat 和 Damus 都从 C Tor 迁移到 Rust Arti，以提高可靠性和内存安全性。&lt;/p>
&lt;p>协议工作继续进行，&lt;a href="https://github.com/nostr-protocol/nips/pull/1669">NIP-71&lt;/a>（可寻址视频事件）合并，后量子密码学 NIP 开始讨论如何使 Nostr 免受量子攻击。可信中继声明草案提议通过签名声明标准化中继信任评分。&lt;a href="https://github.com/marmot-protocol/mdk">Marmot Protocol&lt;/a> 通过 18 个合并的 PR 加固了其基于 &lt;a href="https://nostrcompass.org/zh/topics/mls/">MLS&lt;/a> 的加密消息，解决了审计发现的问题。&lt;/p>
&lt;p>现实世界的应用扩展了，&lt;a href="https://github.com/variablefate/ridestr">Ridestr&lt;/a> 使用 &lt;a href="https://nostrcompass.org/zh/topics/cashu/">Cashu&lt;/a> 托管和 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密开发去中心化拼车服务，&lt;a href="https://github.com/coracle-social/pomade">Pomade&lt;/a> 向 &lt;a href="https://nostrcompass.org/zh/topics/frost/">FROST&lt;/a> 门限签名添加基于电子邮件的恢复流程。Damus 发布了 &lt;a href="https://nostrcompass.org/zh/topics/negentropy/">negentropy&lt;/a> 以实现可靠的私信同步，而 Amethyst 的桌面应用达到了第 2A 阶段，支持搜索、书签和 zaps。&lt;/p>
&lt;h3 id="展望未来">展望未来&lt;/h3>
&lt;p>六年的一月揭示了 Nostr 从早期开发（2021 年）到公众发现（2022 年）到爆发式增长（2023 年）到协议加固（2024 年）到客户端成熟（2025 年）到安全基础设施（2026 年）的演变。对于任何观察过开放协议成长的人来说，这种模式都很熟悉：多年的安静建设，条件对齐时突然爆发，然后是让一切变得可靠的更长期工作。从七个中继和一个 Hacker News 帖子开始，现在是经过审计的基础设施，拥有真实的应用。2027 年的问题是：当有人叫车、发送加密消息或使用 Nostr 恢复丢失的密钥时，他们会知道自己在使用它吗？&lt;/p>
&lt;hr>
&lt;p>本周就到这里。正在构建什么？有新闻要分享？希望我们报道您的项目？&lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">通过 NIP-17 私信联系我们&lt;/a>或在 Nostr 上找到我们。&lt;/p></content:encoded></item><item><title>Nostr Compass #6</title><link>https://nostrcompass.org/zh/newsletters/2026-01-21-newsletter/</link><pubDate>Wed, 21 Jan 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-01-21-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您的 Nostr 周间指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> Bitchat 将 C Tor 替换为 Rust Arti 实现，以获得更好的可靠性和性能。nostrdb-rs 获得了流式折叠查询，支持零分配数据库操作。Listr 获得了重大重构，包括迁移至 NDK 3 测试版并在一年的休眠后进行了 AI 辅助维护。Zeus 合并了 17 个 PR，重点关注 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a>（用于远程 Lightning 控制的 Nostr 钱包连接）修复和 Cashu 改进，而 Primal Android 添加了钱包备份流程和 &lt;a href="https://nostrcompass.org/zh/topics/nip-92/">NIP-92&lt;/a>（用于正确宽高比的媒体尺寸）支持。一项新的 NIP 草案提议了 &lt;a href="https://nostrcompass.org/zh/topics/trusted-relay-assertions/">Trusted Relay Assertions&lt;/a> 以进行标准化的中继信任评分。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="bitchat-迁移至-rust-arti-以支持-tor">Bitchat 迁移至 Rust Arti 以支持 Tor&lt;/h3>
&lt;p>Bitchat 已从 C Tor 迁移至 &lt;a href="https://gitlab.torproject.org/tpo/core/arti">Arti&lt;/a>，这是 Tor 协议的 Rust 实现。&lt;a href="https://github.com/permissionlesstech/bitchat/pull/958">PR #958&lt;/a> 移除了 C Tor 依赖项并集成了 Arti，带来了内存安全保证和改进的可靠性。该变更消除了导致前台服务重启的休眠唤醒尝试，这是 C 实现中的一个长期存在的问题。&lt;/p>
&lt;p>&lt;strong>这对用户意味着什么：&lt;/strong> 更稳定的加密消息传递，特别是在移动设备上，断开连接次数更少。Rust 实现降低了崩溃风险，并减少了来自持续重新连接尝试的电池消耗。&lt;/p>
&lt;p>Arti 是 Tor 在 Rust 中的从头开始重写，由 Tor 项目开发，以通过内存安全提供更好的安全性，并更容易集成到应用程序中。对于 Bitchat，内存安全特性减少了处理加密消息和中继连接时的攻击面。此次迁移遵循了团队最近的 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-01-13-newsletter/#bitchat-completes-cure53-security-audit">Cure53 安全审计&lt;/a>（在第 5 期新闻简报中介绍），继续其安全改进。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您的 Nostr 周间指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> Bitchat 将 C Tor 替换为 Rust Arti 实现，以获得更好的可靠性和性能。nostrdb-rs 获得了流式折叠查询，支持零分配数据库操作。Listr 获得了重大重构，包括迁移至 NDK 3 测试版并在一年的休眠后进行了 AI 辅助维护。Zeus 合并了 17 个 PR，重点关注 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a>（用于远程 Lightning 控制的 Nostr 钱包连接）修复和 Cashu 改进，而 Primal Android 添加了钱包备份流程和 &lt;a href="https://nostrcompass.org/zh/topics/nip-92/">NIP-92&lt;/a>（用于正确宽高比的媒体尺寸）支持。一项新的 NIP 草案提议了 &lt;a href="https://nostrcompass.org/zh/topics/trusted-relay-assertions/">Trusted Relay Assertions&lt;/a> 以进行标准化的中继信任评分。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;h3 id="bitchat-迁移至-rust-arti-以支持-tor">Bitchat 迁移至 Rust Arti 以支持 Tor&lt;/h3>
&lt;p>Bitchat 已从 C Tor 迁移至 &lt;a href="https://gitlab.torproject.org/tpo/core/arti">Arti&lt;/a>，这是 Tor 协议的 Rust 实现。&lt;a href="https://github.com/permissionlesstech/bitchat/pull/958">PR #958&lt;/a> 移除了 C Tor 依赖项并集成了 Arti，带来了内存安全保证和改进的可靠性。该变更消除了导致前台服务重启的休眠唤醒尝试，这是 C 实现中的一个长期存在的问题。&lt;/p>
&lt;p>&lt;strong>这对用户意味着什么：&lt;/strong> 更稳定的加密消息传递，特别是在移动设备上，断开连接次数更少。Rust 实现降低了崩溃风险，并减少了来自持续重新连接尝试的电池消耗。&lt;/p>
&lt;p>Arti 是 Tor 在 Rust 中的从头开始重写，由 Tor 项目开发，以通过内存安全提供更好的安全性，并更容易集成到应用程序中。对于 Bitchat，内存安全特性减少了处理加密消息和中继连接时的攻击面。此次迁移遵循了团队最近的 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-01-13-newsletter/#bitchat-completes-cure53-security-audit">Cure53 安全审计&lt;/a>（在第 5 期新闻简报中介绍），继续其安全改进。&lt;/p>
&lt;p>该 PR 还为 ChatViewModel 和 BLEService 引入了全面的测试覆盖率，移除了死代码，并稳定了测试套件。蓝牙低能耗网格可靠性改进伴随 Tor 更改，解决了大传输失败。总体而言，这些变更改进了 Bitchat 对于离线网格网络场景的弹性，其中 Tor 提供互联网连接，同时本地 BLE 通信。&lt;/p>
&lt;h3 id="listr-通过-ai-驱动的维护重获新生">Listr 通过 AI 驱动的维护重获新生&lt;/h3>
&lt;p>JeffG 宣布了对 &lt;a href="https://github.com/erskingardner/listr">Listr&lt;/a> 的重大重构，这是在 &lt;a href="https://listr.lol">listr.lol&lt;/a> 提供的 Nostr 列表管理应用程序，该项目已休眠超过一年。使用 AI 协助，他完成了一次全面升级，包括迁移至 &lt;a href="https://github.com/nostr-dev-kit/ndk">NDK&lt;/a> 3 测试版、更新至最新版本的 Svelte 和 Vite，以及更新所有依赖项。重构添加了对跟随包的一流支持，为超过 50 项的列表实现了分页，并修复了在休眠期间积累的众多错误。&lt;/p>
&lt;p>&lt;strong>这对用户意味着什么：&lt;/strong> Listr 已重新上线，性能改进，用于管理跟随列表、内容集合和主题策展的新功能。分页修复使大列表实际可用。&lt;/p>
&lt;p>JeffG 指出，如果没有 AI 协助，这项维护工作可能永远不会发生，防止项目被遗弃。Listr 在 Nostr 上启用内容策展，允许用户创建、管理和共享个人资料、主题和资源的列表。该升级使应用程序与当前 Nostr 标准和客户端期望兼容，因为列表管理变得更加重要以用于协议上的内容发现。&lt;/p>
&lt;h2 id="nip-更新">NIP 更新&lt;/h2>
&lt;p>最近对 &lt;a href="https://github.com/nostr-protocol/nips">NIPs 存储库&lt;/a> 的更改：&lt;/p>
&lt;p>&lt;strong>已合并：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a>&lt;/strong> （基于中继的群组）- 中继密钥澄清 (&lt;a href="https://github.com/nostr-protocol/nips/pull/2190">#2190&lt;/a> - 已合并) 澄清了中继密钥是中继 URL 本身，而不是公钥。规范现在明确指出&amp;quot;中继密钥是中继的 WebSocket URL（例如，wss://groups.example.com）&amp;ldquo;以避免混淆。这影响了客户端如何识别哪个中继托管给定的群组，确保群组正确地归属于其托管中继。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>开放的 PR 和讨论：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>
&lt;p>&lt;strong>Trusted Relay Assertions&lt;/strong> - 一份 NIP 草案提议通过 kind 30385 事件标准化中继信任评分，其中包含从 &lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a>（中继发现和监控）指标、运营商声誉和用户报告计算的信任分数（0-100）。该规范将信任分为可靠性（正常运行时间、延迟）、质量（TLS、文档、运营商验证）和可访问性（司法管辖区、屏障、监视风险）组件。运营商验证包括通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a>（中继信息文档）、DNS TXT 记录和 .well-known 文件的加密签名。用户通过 kind 10385 事件声明受信任的声明提供者，使客户端能够查询多个提供者以获得不同的观点。该提议补充了 &lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a> 发现与评估，帮助 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a>（远程签名/Nostr Connect）评估连接 URI 中中继的可信度。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>后量子密码学&lt;/strong> - &lt;a href="https://github.com/nostr-protocol/nips/pull/2185">PR #2185&lt;/a>（开放）自 &lt;a href="https://nostrcompass.org/zh/newsletters/2026-01-13-newsletter/#nip-updates">第 5 期新闻简报&lt;/a> 推出量子抗性算法提议以来一直在演变。本周的讨论重点关注密码敏捷性的实现细节：客户端如何在迁移期间处理双签名、向后兼容性对于较旧的客户端，以及更大的量子抗性签名的性能影响。贡献者辩论是否只强制使用 ML-DSA-44 还是支持多种算法（ML-DSA-44、Falcon-512、Dilithium）以获得灵活性。共识倾向于分阶段的方法：可选的量子签名最初，仅在广泛的客户端支持和真实量子威胁出现后才成为强制性的。&lt;/p>
&lt;/li>
&lt;/ul>
&lt;h2 id="nip-深入讨论nip-11-和-nip-66">NIP 深入讨论：NIP-11 和 NIP-66&lt;/h2>
&lt;p>本周我们研究两个一起工作以启用中继发现和评估的 NIP：NIP-11 定义了中继如何描述自己，而 NIP-66 标准化了我们如何测量中继行为。总体而言，它们为中继信任评估系统奠定了基础。&lt;/p>
&lt;h3 id="nip-11zhtopicsnip-11中继信息文档">&lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a>：中继信息文档&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/11.md">NIP-11&lt;/a> 定义了中继通过 HTTP 提供的 JSON 文档，用以描述其能力、政策和运营商信息。当客户端连接到 &lt;code>wss://relay.example.com&lt;/code> 时，它可以获取 &lt;code>https://relay.example.com&lt;/code>（用 &lt;code>https://&lt;/code> 替换 &lt;code>wss://&lt;/code>）以检索中继的信息文档。&lt;/p>
&lt;p>该文档使用带有 &lt;code>Accept: application/nostr+json&lt;/code> 标头的标准 HTTP 内容协商。这允许中继向浏览器提供其正常网站，同时向 Nostr 客户端提供机器可读的元数据。响应包括中继软件名称和版本、运营商联系信息（公钥、电子邮件、备选联系方式）、支持的 NIP 和操作参数，如支付要求或内容限制。&lt;/p>
&lt;p>重要的是，基本的 NIP-11 文档是通过 HTTPS 提供的无符号 JSON，仅依赖 TLS 证书的真实性。这意味着任何控制中继网络服务器的人都可以修改文档，使运营商声明无法验证。Trusted Relay Assertions 提议通过通过中继的 &lt;code>self&lt;/code> 公钥字段引入签名证明来解决这一差距，启用类似于中继如何为认证机制使用签名事件的运营商身份的加密证明。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;name&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;relay.example.com&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;description&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;A general-purpose public relay&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;contact&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;admin@example.com&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;supported_nips&amp;#34;&lt;/span>: [&lt;span style="color:#ae81ff">1&lt;/span>, &lt;span style="color:#ae81ff">2&lt;/span>, &lt;span style="color:#ae81ff">4&lt;/span>, &lt;span style="color:#ae81ff">9&lt;/span>, &lt;span style="color:#ae81ff">11&lt;/span>, &lt;span style="color:#ae81ff">12&lt;/span>, &lt;span style="color:#ae81ff">16&lt;/span>, &lt;span style="color:#ae81ff">20&lt;/span>, &lt;span style="color:#ae81ff">22&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;software&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;git+https://github.com/relay/relay.git&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;version&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;1.2.3&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;limitation&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_message_length&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">16384&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_subscriptions&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">20&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_filters&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">100&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_limit&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">5000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_subid_length&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">100&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;min_prefix&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">4&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_event_tags&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">2000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;max_content_length&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">8196&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;min_pow_difficulty&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">0&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;auth_required&amp;#34;&lt;/span>: &lt;span style="color:#66d9ef">false&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;payment_required&amp;#34;&lt;/span>: &lt;span style="color:#66d9ef">false&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> },
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;payments_url&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;https://relay.example.com/payments&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;fees&amp;#34;&lt;/span>: {
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;admission&amp;#34;&lt;/span>: [{&lt;span style="color:#f92672">&amp;#34;amount&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">5000&lt;/span>, &lt;span style="color:#f92672">&amp;#34;unit&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;msats&amp;#34;&lt;/span>}],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;subscription&amp;#34;&lt;/span>: [{&lt;span style="color:#f92672">&amp;#34;amount&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1000&lt;/span>, &lt;span style="color:#f92672">&amp;#34;unit&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;msats&amp;#34;&lt;/span>, &lt;span style="color:#f92672">&amp;#34;period&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">2592000&lt;/span>}],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;publication&amp;#34;&lt;/span>: []
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> }
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>limitation&lt;/code> 对象告诉客户端中继执行哪些约束。&lt;code>max_message_length&lt;/code> 限制 WebSocket 帧大小，&lt;code>max_subscriptions&lt;/code> 限制每个连接的并发 REQ 订阅，&lt;code>max_filters&lt;/code> 限制每个 REQ 的过滤器，&lt;code>max_limit&lt;/code> 约束单个过滤器可以请求的事件数量。这些参数帮助客户端适应其行为至中继能力，避免因超过限制而断开连接。&lt;/p>
&lt;p>支付信息显示在 &lt;code>fees&lt;/code> 和 &lt;code>payments_url&lt;/code> 中。中继可以收取入场费（一次性访问）、订阅费（重复访问）或发布费（每个事件费用）。&lt;code>payments_url&lt;/code> 指向有关支付方法（通常是 Lightning 发票或 ecash 造币厂）的详细信息。付费中继使用这些字段在客户端尝试身份验证之前传达定价。&lt;/p>
&lt;p>&lt;code>supported_nips&lt;/code> 数组让客户端发现中继能力。如果中继列出 &lt;a href="https://nostrcompass.org/zh/topics/nip-50/">NIP-50&lt;/a>，客户端知道他们可以发送全文搜索查询。如果 &lt;a href="https://nostrcompass.org/zh/topics/nip-42/">NIP-42&lt;/a> 出现，客户端应该期望身份验证挑战。这种声明性能力广告启用了渐进式增强：客户端可以在可用的地方使用高级功能，同时在支持受限的中继上优雅地降级。&lt;/p>
&lt;p>运营商信息建立了责任制。&lt;code>pubkey&lt;/code> 字段在 Nostr 上识别中继运营商，启用通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> DM 或公开提及的直接通信。&lt;code>contact&lt;/code> 电子邮件提供了一个协议外的回退。总体而言，这些字段帮助用户为滥用报告、访问请求或技术问题联系运营商。&lt;/p>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a> 文档是自我报告的：中继描述他们声称支持的内容，而不一定是他们实际所做的。这就是 NIP-66 变得重要的地方。&lt;/p>
&lt;h3 id="nip-66zhtopicsnip-66中继发现和活跃性监控">&lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a>：中继发现和活跃性监控&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/66.md">NIP-66&lt;/a> 标准化了向 Nostr 发布中继监控数据的方式。监控服务持续测试中继的可用性、延迟、协议合规性和支持的 NIP。他们将结果发布为 kind 30166 事件，独立于中继自我报告提供实时中继状态。&lt;/p>
&lt;p>监控通过连接和发送测试订阅来检查中继可用性。延迟测量跟踪连接时间、订阅响应时间和事件传播延迟。协议合规性测试验证中继行为是否匹配规范，捕获实现错误或故意偏差。NIP 支持验证超越 &lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a> 声明，通过实际测试公布的功能是否正常工作。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a34b5c7d89e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;4e2d0bc6f8e7c3a5b9f1d2e3a4b5c6d7e8f9a0b1c2d3e4f5a6b7c8d9e0f1a2b3c4&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1736784000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30166&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rtt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;open&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;143&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1736784000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rtt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;read&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;89&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1736784000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;rtt&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;write&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;92&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1736784000&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;nips&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;1&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;2&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;4&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;9&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;11&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;12&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;geo&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;US&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;United States&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;New York&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;other&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;network&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;clearnet&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;other&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;payment_required&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;false&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;other&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;auth_required&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;false&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;{\&amp;#34;last_check\&amp;#34;: 1736784000, \&amp;#34;checks\&amp;#34;: 8760}&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;8b9c4d5e6a7f8b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>d&lt;/code> 标签包含中继 URL，使其成为参数化可替代事件。每个监控为每个中继发布一个事件，在测量更改时更新。多个监控可以跟踪同一中继，提供冗余和交叉验证。客户端查询多个监控公钥以获得关于中继健康的不同观点。&lt;/p>
&lt;p>往返时间 (rtt) 标签测量不同操作的延迟。&lt;code>rtt open&lt;/code> 跟踪 WebSocket 连接建立，&lt;code>rtt read&lt;/code> 测量订阅响应时间，&lt;code>rtt write&lt;/code> 测试事件发布速度。所有值都以毫秒为单位。客户端使用这些指标优先考虑低延迟中继以用于时间敏感的操作或降低慢速中继的优先级。&lt;/p>
&lt;p>&lt;code>nips&lt;/code> 标签列出实际验证的 NIP 支持，而不只是声称的支持。监控通过执行其功能来测试每个 NIP。如果中继在其 &lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a> 文档中声称 &lt;a href="https://nostrcompass.org/zh/topics/nip-50/">NIP-50&lt;/a> 搜索，但搜索查询失败，监控将从验证列表中省略 NIP-50。这提供了关于中继能力的绝对真实情况。&lt;/p>
&lt;p>地理信息帮助客户端选择附近的中继以获得更好的延迟和抗审查能力。&lt;code>geo&lt;/code> 标签包含国家代码、国家名称和地区。&lt;code>network&lt;/code> 标签区分了 Tor 隐藏服务或 I2P 端点的清网中继。总体而言，这些标签启用地理多样性：客户端可以连接到多个司法管辖区的中继以抵抗区域审查。&lt;/p>
&lt;p>监控数据为客户端中的中继选择器、资源管理器网站和 Trusted Relay Assertions 提议供电。通过将自我报告的 &lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a> 文档与测量的 &lt;a href="https://nostrcompass.org/zh/topics/nip-66/">NIP-66&lt;/a> 数据和计算的信任声明相结合，生态系统朝着知情的中继选择发展，而不是依赖硬编码的默认值或口碑推荐。&lt;/p>
&lt;h2 id="发布">发布&lt;/h2>
&lt;h3 id="0xchat-v153---增强的消息传递功能">0xchat v1.5.3 - 增强的消息传递功能&lt;/h3>
&lt;p>&lt;a href="https://github.com/0xchat-app/0xchat-app-main/releases/tag/v1.5.3-release">0xchat v1.5.3&lt;/a> 为 Telegram 风格的 Nostr 消息传递客户端带来了重大改进。该发布解决了 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a>（Android 签署者应用程序）合规性问题，这些问题阻止了通过 Amber 等外部签署者的适当事件签署。完全合规意味着 0xchat 现在正确委派签署操作，通过保持私钥隔离改进了安全性。&lt;/p>
&lt;p>该更新将 FileDropServer 和 BlossomServer 集成为默认媒体存储选项，为用户提供文件上传冗余。&lt;a href="https://github.com/hzrd149/blossom">Blossom&lt;/a> 提供了内容寻址存储，其中文件由其 SHA-256 哈希引用，确保完整性并在网络中启用去重复。自动草稿保存 Moments 防止了撰写长篇内容时的数据丢失，解决了用户在应用切换或连接中断期间丢失帖子的投诉。&lt;/p>
&lt;p>Cashu 钱包集成通过自动证明过滤获得了改进，该过滤从钱包视图中移除了已用令牌。这解决了令人困惑的 UX，其中用户看到无效证明与有效 ecash 混合在一起，使余额计算变得不可靠。过滤发生在客户端，在改进聊天中对等交易的支付体验的同时保持隐私。&lt;/p>
&lt;h3 id="amber-v410-预发布---ui-改版">Amber v4.1.0 预发布 - UI 改版&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.0-pre1">Amber v4.1.0-pre1&lt;/a> 到 &lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.1.0-pre3">v4.1.0-pre3&lt;/a> 为流行的 Android 事件签署者引入了重新设计的界面。登录屏幕现在清楚地显示哪个应用程序正在请求签名权限，解决了用户对授权流程的混淆。新的事件屏幕提供了应用程序要签署的数据的详细检查，允许用户在批准操作前做出明智的安全决定。&lt;/p>
&lt;p>权限管理获得了显著关注，带有改版的界面，显示每个连接的应用程序已获得哪些能力。用户可以撤销特定权限而无需完全断开连接，启用对签署委派的细粒度控制。使用更新的石英库重构的中继计数器提供了关于事件吞吐量和中继性能的实时统计信息。&lt;a href="https://github.com/nostr-protocol/nips/blob/master/46.md">NIP-46&lt;/a>（Nostr Connect）bunker 连接现在在连接失败时显示详细的错误消息，用可操作的诊断替换加密的超时错误。&lt;/p>
&lt;h2 id="值得注意的代码和文档更改">值得注意的代码和文档更改&lt;/h2>
&lt;p>&lt;em>这些是值得跟踪的合并 pull 请求和早期阶段的开发。某些是实验功能，可能在发布前演变。&lt;/em>&lt;/p>
&lt;h3 id="zeus带有-nostr-钱包连接的-lightning-钱包">Zeus（带有 Nostr 钱包连接的 Lightning 钱包）&lt;/h3>
&lt;p>Zeus 本周合并了 17 个 pull 请求，加强了其作为领先 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a> Nostr 钱包连接实现的地位。最显著的修复解决了导致与 Nostr 客户端互操作性问题的数据一致性和协议合规性问题。&lt;/p>
&lt;p>&lt;strong>交易历史修复&lt;/strong> - &lt;a href="https://github.com/ZeusLN/zeus/pull/3542">PR #3542&lt;/a> 解决了一个关键错误，其中 NWC 交易列表显示不正确或重复的条目。当 Zeus 缓存交易数据而没有正确处理事件更新时，就会发生这个问题，导致用户看到幽灵交易或丢失的付款。该修复实现了适当的事件去重复和缓存失效，确保交易历史准确反映 Lightning 节点状态。&lt;/p>
&lt;p>&lt;strong>协议合规&lt;/strong> - &lt;a href="https://github.com/ZeusLN/zeus/pull/3548">PR #3548&lt;/a> 解决了不完整的 &lt;code>getInfo&lt;/code> 响应，破坏了与期望完整 NIP-47 合规性的客户端的兼容性。某些 Nostr 客户端在接收缺少 &lt;code>block_height&lt;/code> 或 &lt;code>network&lt;/code> 等字段的部分响应时崩溃。PR 确保所有需要的字段即使在底层 Lightning 实现不提供它们时也返回合理的默认值，改进了 Zeus 在整个生态系统中的兼容性。&lt;/p>
&lt;p>&lt;strong>连接弹性&lt;/strong> - &lt;a href="https://github.com/ZeusLN/zeus/pull/3543">PR #3543&lt;/a> 为停滞的 Nostr 连接实现了超时通知。以前，用户在中继连接无声断开时无限期等待。现在 Zeus 在 30 秒无活动后显示清晰的超时消息，让用户重试或切换中继。&lt;a href="https://github.com/ZeusLN/zeus/pull/3541">PR #3541&lt;/a> 添加了后端验证以防止 NWC 在不兼容的 Lightning 实现上激活，在运行时崩溃之前捕获配置错误。&lt;/p>
&lt;p>&lt;strong>Cashu 竞态条件&lt;/strong> - &lt;a href="https://github.com/ZeusLN/zeus/pull/3531">PR #3531&lt;/a> 修复了 Cashu 令牌管理中的并发错误，其中同时造币操作可能损坏令牌数据库。竞态条件发生在多个线程在没有适当锁定的情况下更新令牌计数时，偶尔导致不正确的余额。该修复在关键部分周围添加了互斥锁保护，确保原子更新令牌状态。&lt;/p>
&lt;h3 id="primal-android客户端">Primal Android（客户端）&lt;/h3>
&lt;p>Primal Android 发布了 12 个合并 PR，显著改进了钱包安全性和媒体处理。钱包备份实现解决了最受欢迎的功能之一，而 NIP-92 支持改进了应用程序中的视觉体验。&lt;/p>
&lt;p>&lt;strong>钱包备份系统&lt;/strong> - 一个四 PR 系列 (&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/844">#844&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/845">#845&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/846">#846&lt;/a>, &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/848">#848&lt;/a>) 实现了全面的种子短语备份功能。用户现在可以通过安全流程导出其 12 个单词的助记词，该流程防止了截图、在钱包仪表板中显示备份状态，并引导现有用户完成迁移。该实现遵循 BIP-39 标准，并包括验证以防止用户因记录短语不正确而丢失资金。&lt;/p>
&lt;p>&lt;strong>媒体尺寸 (NIP-92)&lt;/strong> - &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/718">PR #718&lt;/a> 实现了 &lt;a href="https://nostrcompass.org/zh/topics/nip-92/">NIP-92&lt;/a> 支持，以获得正确的图像和视频宽高比。在没有尺寸元数据的情况下，客户端必须下载图像以确定其大小，在内容加载时导致布局跳动。NIP-92 将 &lt;code>dim&lt;/code> 标签（如 &lt;code>[&amp;quot;dim&amp;quot;, &amp;quot;1920x1080&amp;quot;]&lt;/code>）添加到文件元数据事件中，允许 Primal 在下载媒体前预留正确的空间。这消除了图像库中令人不安的重排，改进了感知性能。&lt;/p>
&lt;p>&lt;strong>远程签署者可靠性&lt;/strong> - &lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/841">PR #841&lt;/a> 修复了 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 连接问题，其中缺少 &lt;code>wss://&lt;/code> 前缀导致了无声失败。PR 在 bunker 连接设置期间验证中继 URI，当用户粘贴裸域时自动添加协议前缀。&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/843">PR #843&lt;/a> 解决了一个线程错误，其中不良网络条件导致回复作为根笔记发布，破坏了对话流程。该修复确保父事件 ID 在网络中断期间持续存在。&lt;/p>
&lt;h3 id="marmot-protocolwhite-noise加密群组聊天库">Marmot Protocol：White Noise（加密群组聊天库）&lt;/h3>
&lt;p>White Noise，为 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> Protocol 的加密群组聊天供电的 Rust 库，合并了六个 PR 以改进用户体验和安全性。这些变更使 Marmot 更接近与主流消息传递应用程序的功能奇偶性，同时保持其隐私优先的架构。&lt;/p>
&lt;p>&lt;strong>已读回执&lt;/strong> - &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/433">PR #433&lt;/a> 和 &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/436">#436&lt;/a> 为群组对话实现了消息读取跟踪。系统在单个设备内按用户按群组存储读取位置，启用未读计数徽章。该实现使用单调时间戳来跟踪每个对话的最后读取消息位置。这个基础功能启用了 UI 指示器，显示每个对话的未读消息计数。&lt;/p>
&lt;p>&lt;strong>对话固定&lt;/strong> - &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/442">PR #442&lt;/a> 通过 &lt;code>accounts_groups&lt;/code> 结合表中将帐户链接到群组的 &lt;code>pin_order&lt;/code> 字段添加了持久对话固定。固定的对话无论消息活动如何都在聊天列表顶部保持其位置，匹配用户对来自 Signal 和 WhatsApp 的期望。该实现使用整数排序允许无限制的固定与确定性排序。&lt;/p>
&lt;p>&lt;strong>确定性提交解决 (MIP-03)&lt;/strong> - &lt;a href="https://github.com/marmot-protocol/mdk/pull/152">PR #152&lt;/a>（开放）实现了 Marmot 改进提议 03，解决了分布式群组聊天中的关键提交竞态条件问题。当多个成员同时提交群组状态变更（添加/移除成员、改变权限）时，客户端可能会在提交排序上分歧，将群组分散成不兼容的状态。MIP-03 引入了时期快照和确定性赢家选择：具有最早 &lt;code>created_at&lt;/code> 时间戳的提交赢得，以字典 event ID 作为平局决胜者。这允许所有客户端通过回滚和重放收敛到相同的状态，即使在网络分区期间也保持群组连贯性。&lt;/p>
&lt;p>&lt;strong>安全加固&lt;/strong> - &lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/443">PR #443&lt;/a> 通过在 &lt;code>resolve_group_image_path&lt;/code> 中使用引用防止了不必要的密码学秘密复制。这减少了秘密可能从已释放堆分配中恢复的内存攻击窗口。&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/438">PR #438&lt;/a> 通过密钥环参数启用了 SQLCipher 数据库加密，保护消息历史处于静止状态。密钥环集成允许在平台密钥链中进行安全密钥存储而不是配置文件。&lt;/p>
&lt;h3 id="nostrdb-rs数据库库--开放-pr">nostrdb-rs（数据库库）- 开放 PR&lt;/h3>
&lt;p>&lt;strong>流式查询实现&lt;/strong> - &lt;a href="https://github.com/damus-io/nostrdb-rs/pull/58">PR #58&lt;/a>（开放）提议流式折叠查询以启用零分配数据库操作。该实现添加了 &lt;code>fold&lt;/code>、&lt;code>try_fold&lt;/code>、&lt;code>count&lt;/code>、&lt;code>any&lt;/code>、&lt;code>all&lt;/code> 和 &lt;code>find_map&lt;/code> 方法，这些方法将一次处理一个数据库结果，而无需将整个结果集实现到向量中。这种方法将减少内存消耗，并为常见查询模式启用早期终止。&lt;/p>
&lt;p>技术实现将低级查询结果回调 (&lt;code>ndb_query_visit&lt;/code>) 公开为有状态 Rust 访问者，将 &lt;code>ControlFlow&lt;/code> 变体映射到 C 访问者操作。合并后，应用程序代码将读起来像迭代器逻辑，同时接近数据库层运行。例如，计算匹配笔记将流式传输结果而不是收集它们，&lt;code>find_map&lt;/code> 将返回第一个有用的结果而无需处理剩余的行。&lt;/p>
&lt;p>nostrdb 为 Damus 和 Notedeck 供电，分别为 iOS/macOS 和桌面客户端。流式查询将启用高效的模式，如分页、条件过滤和存在检查。PR 更改 3 个文件，添加 +756，删除 -32，这是查询层的大量重构。nostrdb-rs 的用户在浏览大型时间线或在广泛事件数据库中搜索时会看到减少的内存使用。&lt;/p>
&lt;h3 id="nakcli-工具">nak（CLI 工具）&lt;/h3>
&lt;p>nak，fiatjaf 的命令行 Nostr 工具，合并了六个 PR，重点关注构建系统改进和新功能。&lt;a href="https://github.com/fiatjaf/nak/pull/91">PR #91&lt;/a> 实现了 Blossom 镜像功能，让 nak 充当 Blossom 媒体服务器的镜像。&lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 是一个与 Nostr 事件一起工作的内容寻址媒体存储协议。&lt;/p>
&lt;p>其余 PR 解决了 Windows、macOS 和 Linux 平台的构建系统兼容性，启用了 FUSE 文件系统支持以将 Nostr 事件作为本地目录挂载。&lt;/p>
&lt;h3 id="damusios-客户端--开放-pr">Damus（iOS 客户端）- 开放 PR&lt;/h3>
&lt;p>Damus 有 11 个开放 PR 探索重大架构改进。虽然这些还没有合并，但它们表明了 iOS Nostr 客户端开发的重要方向，特别是围绕隐私、同步效率和移动数据优化。&lt;/p>
&lt;p>&lt;strong>Tor 集成&lt;/strong> - &lt;a href="https://github.com/damus-io/damus/pull/3535">PR #3535&lt;/a> 直接将 Arti Tor 客户端嵌入 Damus，启用匿名中继连接而无需外部依赖。与 Orbot 或 Tor 浏览器方法不同，嵌入 Arti 为 iOS 沙箱和后台执行限制提供了无缝集成。Rust 实现为网络匿名化带来了内存安全，与 C Tor 相比减少了攻击面。用户可以按中继或全局切换 Tor 模式，客户端透明地处理电路管理。&lt;/p>
&lt;p>&lt;strong>Negentropy 同步协议&lt;/strong> - &lt;a href="https://github.com/damus-io/damus/pull/3536">PR #3536&lt;/a> 实现了 Negentropy，一个大幅改进同步效率的集合协调协议。Negentropy 交换紧凑指纹 (Merkle 树) 以识别客户端和中继之间的差异事件，而不是下载自上次连接以来的所有事件。对于遵循数百个公钥的用户，这将同步带宽从数 MB 减少到数 KB。该实现与 RelayPool 和 SubscriptionManager 集成，跨所有连接的中继启用自动高效同步。&lt;/p>
&lt;p>&lt;strong>低数据模式&lt;/strong> - &lt;a href="https://github.com/damus-io/damus/pull/3549">PR #3549&lt;/a> 添加了响应用户反馈关于带宽消耗的蜂窝数据节约功能。该模式禁用图像自动加载、视频预取并减少订阅限制。用户在计量连接上可以浏览文本内容而无需担心超过数据上限的恐惧。该实现尊重 iOS 低数据模式设置并为不同媒体类型提供了细粒度控制。&lt;/p>
&lt;p>&lt;strong>数据库优化&lt;/strong> - &lt;a href="https://github.com/damus-io/damus/pull/3548">PR #3548&lt;/a> 重新编写了用于更快查询和减少磁盘使用的 nostrdb 快照存储。该优化改变了数据库快照如何持久化到磁盘，改进了读取性能和写入放大。这解决了用户对大型事件数据库的电池消耗投诉。&lt;/p>
&lt;hr>
&lt;p>本周就到这里。正在构建什么？有新闻要分享？想让我们报道您的项目？&lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">通过 NIP-17 DM 联系&lt;/a>或在 Nostr 上找到我们。&lt;/p></content:encoded></item><item><title>Nostr 指南针 #5</title><link>https://nostrcompass.org/zh/newsletters/2026-01-13-newsletter/</link><pubDate>Tue, 13 Jan 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-01-13-newsletter/</guid><description>&lt;p>欢迎回到 Nostr 指南针，您每周的 Nostr 导览。&lt;/p>
&lt;p>&lt;strong>本周要闻：&lt;/strong> Bitchat 完成由 Cure53 进行的专业安全审计，该公司此前曾审计过 Signal 和 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a>，目前已有17个以上的 PR 合并修复了关键发现。&lt;a href="https://nostrcompass.org/zh/topics/nip-71/">NIP-71&lt;/a> 已合并，为协议带来可寻址视频 event。一项后量子密码学 NIP 开启了关于未来抵御量子攻击的讨论。Amethyst v1.05.0 发布了书签列表、语音消息和早期桌面版本，而 Nostur v1.25.3 改进了 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 私信功能，支持反应和回复。在库方面，rust-nostr 扩展了 &lt;a href="https://nostrcompass.org/zh/topics/nip-62/">NIP-62&lt;/a> 对 SQLite 和 LMDB 后端的支持，NDK 修复了订阅追踪的 bug。&lt;/p>
&lt;h2 id="news">新闻&lt;/h2>
&lt;h3 id="bitchat-completes-cure53-security-audit">Bitchat 完成 Cure53 安全审计&lt;/h3>
&lt;p>Bitchat 是一款结合 Nostr 和 Cashu 的 iOS 加密消息应用，已完成由 Cure53 进行的专业安全审计。Cure53 是业内最受尊敬的安全公司之一，此前曾审计过 Signal、Mullvad VPN，以及为现代 Nostr 私密消息奠定基础的 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密规范。&lt;/p>
&lt;p>审计发现了12个以上的安全问题（BCH-01-002 至 BCH-01-013）。Bitchat 团队以17个以上的 PR 作为回应。主要修复包括：&lt;/p>
&lt;p>&lt;strong>Noise 协议 DH 密钥清除&lt;/strong> - &lt;a href="https://github.com/permissionlesstech/bitchat/pull/928">PR #928&lt;/a> 修复了六处 Diffie-Hellman 共享密钥在密钥协商后未被清零的问题，恢复了前向保密性保证。当密钥在内存中保留的时间超过必要时，内存转储或冷启动攻击可能会危及过去的通信。&lt;/p>
&lt;p>&lt;strong>签名验证&lt;/strong> - 多个 PR 加强了密码验证路径，确保消息真实性检查不会被格式错误的输入绕过。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr 指南针，您每周的 Nostr 导览。&lt;/p>
&lt;p>&lt;strong>本周要闻：&lt;/strong> Bitchat 完成由 Cure53 进行的专业安全审计，该公司此前曾审计过 Signal 和 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a>，目前已有17个以上的 PR 合并修复了关键发现。&lt;a href="https://nostrcompass.org/zh/topics/nip-71/">NIP-71&lt;/a> 已合并，为协议带来可寻址视频 event。一项后量子密码学 NIP 开启了关于未来抵御量子攻击的讨论。Amethyst v1.05.0 发布了书签列表、语音消息和早期桌面版本，而 Nostur v1.25.3 改进了 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 私信功能，支持反应和回复。在库方面，rust-nostr 扩展了 &lt;a href="https://nostrcompass.org/zh/topics/nip-62/">NIP-62&lt;/a> 对 SQLite 和 LMDB 后端的支持，NDK 修复了订阅追踪的 bug。&lt;/p>
&lt;h2 id="news">新闻&lt;/h2>
&lt;h3 id="bitchat-completes-cure53-security-audit">Bitchat 完成 Cure53 安全审计&lt;/h3>
&lt;p>Bitchat 是一款结合 Nostr 和 Cashu 的 iOS 加密消息应用，已完成由 Cure53 进行的专业安全审计。Cure53 是业内最受尊敬的安全公司之一，此前曾审计过 Signal、Mullvad VPN，以及为现代 Nostr 私密消息奠定基础的 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密规范。&lt;/p>
&lt;p>审计发现了12个以上的安全问题（BCH-01-002 至 BCH-01-013）。Bitchat 团队以17个以上的 PR 作为回应。主要修复包括：&lt;/p>
&lt;p>&lt;strong>Noise 协议 DH 密钥清除&lt;/strong> - &lt;a href="https://github.com/permissionlesstech/bitchat/pull/928">PR #928&lt;/a> 修复了六处 Diffie-Hellman 共享密钥在密钥协商后未被清零的问题，恢复了前向保密性保证。当密钥在内存中保留的时间超过必要时，内存转储或冷启动攻击可能会危及过去的通信。&lt;/p>
&lt;p>&lt;strong>签名验证&lt;/strong> - 多个 PR 加强了密码验证路径，确保消息真实性检查不会被格式错误的输入绕过。&lt;/p>
&lt;p>&lt;strong>线程安全&lt;/strong> - &lt;a href="https://github.com/permissionlesstech/bitchat/pull/929">PR #929&lt;/a> 为 NostrTransport 中的已读回执队列添加了屏障同步，防止在高消息量下可能导致数据损坏或崩溃的竞态条件。&lt;/p>
&lt;p>&lt;strong>内存安全&lt;/strong> - &lt;a href="https://github.com/permissionlesstech/bitchat/pull/920">PR #920&lt;/a> 优化了消息去重器，在高消息吞吐量时获得更好的性能，同时避免内存耗尽。&lt;/p>
&lt;p>&lt;strong>输入验证&lt;/strong> - &lt;a href="https://github.com/permissionlesstech/bitchat/pull/919">PR #919&lt;/a> 加强了十六进制字符串解析，防止格式错误的输入导致崩溃，这是拒绝服务攻击的常见攻击向量。&lt;/p>
&lt;p>Bitchat 处理 Cashu 电子现金，因此专业安全审查至关重要。此次审计继去年的 &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot&lt;/a> 协议审计和验证加密层的 NIP-44 审计之后进行。&lt;/p>
&lt;h2 id="nip-updates">NIP 更新&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>的最新变更：&lt;/p>
&lt;p>&lt;strong>已合并：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-71/">NIP-71&lt;/a>&lt;/strong> - 可寻址视频 Event（&lt;a href="https://github.com/nostr-protocol/nips/pull/1669">#1669&lt;/a>）引入了 kind 34235（横向视频）和 34236（纵向视频）作为可寻址 event。必需的 &lt;code>d&lt;/code> tag 提供唯一标识符，因此视频元数据可以在不重新发布整个 event 的情况下更新。可选的 &lt;code>origin&lt;/code> tag 追踪导入来源。已在 Amethyst 和 nostrvine 中实现。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>开放中的 PR：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>后量子密码学&lt;/strong> - &lt;a href="https://github.com/nostr-protocol/nips/pull/2185">PR #2185&lt;/a> 提议为 Nostr 添加抗量子密码算法。该规范引入了 ML-DSA-44 和 Falcon-512 用于数字签名，目标是「超高价值 event」如应用程序和授权机构，而非个人用户。虽然 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 的对称加密（ChaCha20）是抗量子的，但其密钥交换使用的 secp256k1 ECDH 容易受到 Shor 算法的攻击。该提案包括 ML-KEM 用于密钥协商以解决这一缺口。这是一个早期提案，开启了关于 Nostr 长期安全的加密敏捷性讨论。&lt;/li>
&lt;li>&lt;strong>NIP-47 的 BOLT12&lt;/strong> - 经过137条评论和广泛讨论后，社区决定 BOLT12 offers 值得拥有自己的规范，而不是扩展 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a>。BOLT12 offers 相比 BOLT11 发票提供了显著升级，包括可重用性、通过盲路径提供更好的隐私性，以及可选的付款人信息。新的 NIP 将为 Nostr Wallet Connect 实现定义 &lt;code>make_offer&lt;/code>、&lt;code>pay_offer&lt;/code> 和 &lt;code>list_offers&lt;/code> 等方法。&lt;/li>
&lt;li>&lt;strong>音频轨道 NIP&lt;/strong> - &lt;a href="https://github.com/nostr-protocol/nips/pull/1043">PR #1043&lt;/a> 提议 kind 32100 用于音乐曲目，kind 32101 用于播客剧集，使音频内容获得与 NIP-71 为视频提供的同等一流待遇。目前，Wavlake、Zapstr 和 Stemstr 等音频平台各自使用专有 event 格式，导致生态系统碎片化。通用标准将实现互操作性，让用户可以从任何兼容客户端发现和播放音频。&lt;/li>
&lt;li>&lt;strong>NIP-A3 通用支付目标&lt;/strong> - &lt;a href="https://github.com/nostr-protocol/nips/pull/2119">PR #2119&lt;/a> 提议使用 RFC-8905 &lt;code>payto:&lt;/code> URI 的 kind 10133 event 来公开跨多个网络的支付选项。这种抽象方式不是为 Bitcoin、Lightning、Cashu 或传统支付渠道创建单独的 event kind，而是让客户端解析标准化的 tag 并调用原生支付处理程序。这种方法具有前瞻性，因为新的支付方式只需要一个 &lt;code>payto:&lt;/code> URI 方案。&lt;/li>
&lt;/ul>
&lt;h2 id="nip-deep-dive-nip-51-and-nip-65">NIP 深度解析：NIP-51 和 NIP-65&lt;/h2>
&lt;p>本周我们介绍两个存储用户偏好的 NIP：NIP-51 用于组织内容，NIP-65 用于组织 relay 连接。两者都使用可替换 event，意味着每次新发布都会覆盖之前的版本。&lt;/p>
&lt;h3 id="nip-51-lists">&lt;a href="https://nostrcompass.org/zh/topics/nip-51/">NIP-51&lt;/a>：列表&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/51.md">NIP-51&lt;/a> 定义了多种列表类型，用于组织对 event、用户、hashtag 和其他内容的引用。Amethyst v1.05.0 添加了书签支持，这是了解列表工作原理的好时机。&lt;/p>
&lt;p>该规范定义了几种列表 kind，每种都有不同的用途。Kind 10000 是您的屏蔽列表，用于隐藏用户、帖子或词语。Kind 10001 将 event 置顶以在您的个人资料上展示。Kind 30003 存储书签，这正是 Amethyst 现在支持的功能。其他 kind 处理关注集（30000）、精选文章集合（30004）、hashtag 兴趣（30015）和自定义表情符号集（30030）。&lt;/p>
&lt;p>列表通过 tag 引用内容。书签列表使用 &lt;code>e&lt;/code> tag 表示特定 event，使用 &lt;code>a&lt;/code> tag 表示可寻址内容如文章：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;ae3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1736784000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">30003&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;d&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;saved-articles&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;abc123def456...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;a&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;30023:author-pubkey:article-id&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;encrypted-private-bookmarks&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;908a15e46fb4d8675bab026fc230a0e3542bfade63da02d542fb78b2a8513fcd0092619a2c8c1221e581946e0191f2af505dfdf8657a414dbca329186f009262&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>d&lt;/code> tag 提供唯一标识符，因此您可以在同一 kind 下维护多个书签集，如「saved-articles」、「read-later」或「favorites」。&lt;/p>
&lt;p>列表支持公开和私密项目。公开项目出现在 tags 数组中，任何获取该 event 的人都可见。私密项目放在 &lt;code>content&lt;/code> 字段中，使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a> 加密给自己。这种双重结构让您可以保留公开书签同时附加私密笔记，或维护一个屏蔽列表而不暴露您屏蔽了谁。要加密给自己，请使用 NIP-44 并将您自己的 pubkey 作为接收者。&lt;/p>
&lt;p>10000 系列 kind 是可替换的，意味着 relay 每个 pubkey 只保留一个 event。30000 系列是参数化可替换的，允许每个 pubkey 和 &lt;code>d&lt;/code> tag 组合一个 event。在这两种情况下，更新列表意味着发布完整的替换；您无法发送增量更改。客户端在修改列表时应保留未知的 tag，以避免覆盖其他应用程序添加的数据。&lt;/p>
&lt;h3 id="nip-65-relay-list-metadata">&lt;a href="https://nostrcompass.org/zh/topics/nip-65/">NIP-65&lt;/a>：Relay 列表元数据&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/65.md">NIP-65&lt;/a> 定义了 kind 10002 event，用于公告用户偏好用于读取和写入的 relay。这帮助其他用户和客户端找到您的内容。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;bd2217a96b5835b59f9a6a42d8d8a36f8c9b7d4e5f0a1b2c3d4e5f6a7b8c9d0e1&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1736784000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">10002&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;r&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.damus.io&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;read&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;r&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://nos.lol&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;r&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.nostr.band&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;write&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f1c2d3e4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6e7f8a9b0c1d2&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每个 &lt;code>r&lt;/code> tag 包含一个 relay URL 和一个可选标记。&lt;code>write&lt;/code> 标记指定您的发件箱：您发布内容的 relay。&lt;code>read&lt;/code> 标记指定您的收件箱：您检查提及、回复和标签的 relay。省略标记表示两者都是。&lt;/p>
&lt;p>当 Alice 想找到 Bob 的帖子时，她的客户端获取 Bob 的 kind 10002，提取他的 write relay（他的发件箱），并在那里订阅。当 Alice 回复 Bob 时，她的客户端发布到他的 read relay（他的收件箱），这样他就能看到提及。这种 relay 感知路由是「发件箱模型」，它将用户分布在许多 relay 上，而不是让所有人集中在少数几个中心服务器上。&lt;/p>
&lt;p>NIP-65 处理公开内容路由，但私信使用单独的列表。&lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 为 DM 收件箱 relay 定义了 kind 10050，使用 &lt;code>relay&lt;/code> tag 而不是 &lt;code>r&lt;/code> tag。当向某人发送私信时，客户端查找接收者的 kind 10050 event 并在那里发布加密的礼物包装消息。这种分离使 DM 路由与公开内容路由区分开来，并让用户可以为私密通信和公开通信指定不同的 relay。&lt;/p>
&lt;p>发件箱模型提高了抗审查能力，因为没有单个 relay 需要存储或服务所有人的内容。客户端维护与关注用户的 NIP-65 event 中列出的 relay 的连接，在发现新账户时动态连接到新的 relay。NIP-65 补充了其他 NIP 中的 relay 提示。当您用 &lt;code>[&amp;quot;p&amp;quot;, &amp;quot;pubkey&amp;quot;, &amp;quot;wss://hint.relay&amp;quot;]&lt;/code> 标记某人时，提示告诉客户端在哪里查找该特定引用。NIP-65 提供权威的、用户控制的列表，而提示提供嵌入在单个 event 中的快捷方式。&lt;/p>
&lt;p>为获得最佳效果，请保持您的 relay 列表最新，因为过时的条目会使您更难被找到。规范建议每个类别使用两到四个 relay。列出太多 relay 会给每个想要获取您内容的客户端带来负担，减慢他们的体验并增加网络负载。客户端缓存 NIP-65 event 并定期刷新以跟上用户偏好的更新。&lt;/p>
&lt;h2 id="releases">版本发布&lt;/h2>
&lt;p>&lt;strong>Amethyst v1.05.0&lt;/strong> - 这款流行的 Android 客户端&lt;a href="https://github.com/vitorpamplona/amethyst/releases">发布重大更新&lt;/a>，带来多项主要功能。&lt;a href="https://nostrcompass.org/zh/topics/nip-51/">NIP-51&lt;/a> kind 30003 书签列表让用户可以保存帖子以供稍后参考，跨兼容客户端同步。语音消息现在可以在私信和普通帖子中使用，带有波形可视化、媒体服务器选择和上传进度指示器。&lt;a href="https://nostrcompass.org/zh/topics/web-of-trust/">Web of Trust&lt;/a> 分数现在在界面中可见，帮助用户了解算法如何相对于其社交图谱评估账户。&lt;a href="https://nostrcompass.org/zh/topics/quartz/">Quartz&lt;/a> 数据库迁移作为 OpenSats 资助的 Kotlin Multiplatform 工作的一部分，提高了查询性能。早期桌面版本通过 Compose Multiplatform 将 Amethyst 带到 Windows、macOS 和 Linux，与 Android 应用共享相同的代码库。新用户引导流程为首次使用 Nostr 的用户提供流畅的体验。&lt;/p>
&lt;p>&lt;strong>Nostur v1.25.3&lt;/strong> - 这款 iOS 和 macOS 客户端&lt;a href="https://github.com/nostur-com/nostur-ios-public/releases">专注于私密消息&lt;/a>，改进了 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a>。DM 对话现在支持反应和回复，将公开帖子的互动性带入加密消息中。对话视图经过重新设计，具有更好的线程显示，多消息交流更容易跟踪，时间戳在 DM 列表中显示「多久之前」以便快速浏览。桌面用户获得多列布局，可以并排查看多个 feed 或对话。&lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 远程签名器支持允许用户将私钥保存在专用签名器应用中，如 Amber 或 nsec.app。其他修复恢复了 iOS 15 和 iOS 16 上的 DM 功能，解决了通知延迟问题，并添加了配置哪些 relay 接收已发布 DM 的功能。&lt;/p>
&lt;h2 id="notable-code-and-documentation-changes">值得关注的代码和文档变更&lt;/h2>
&lt;p>&lt;em>这些是开放的 PR 和早期工作，非常适合在合并前获得反馈。如果有什么吸引您的注意，请考虑审查或评论！&lt;/em>&lt;/p>
&lt;h3 id="citrine-android-relay">Citrine（Android Relay）&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Citrine/pull/89">PR #89&lt;/a> 修复了这款 Android 个人 relay 应用中的 SQL 注入漏洞。该问题允许格式错误的 event 数据执行任意数据库查询，对于任何存储和处理不可信输入的应用来说都是严重缺陷。修复通过使用参数化查询正确清理了所有数据库操作。目前还没有标记版本发布，因此用户需要等待下一个版本或从源代码构建。&lt;a href="https://github.com/greenart7c3/Citrine/pull/90">PR #90&lt;/a> 通过数据库级过滤和分页优化了 ContentProvider 查询性能，减少了 Amethyst 等外部应用通过 Android 进程间通信层访问 Citrine event 数据库时的延迟。&lt;/p>
&lt;h3 id="rust-nostr-library">rust-nostr（库）&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-62/">NIP-62&lt;/a>（消失请求）支持正在 rust-nostr 的数据库后端中扩展。&lt;a href="https://github.com/rust-nostr/nostr/pull/1180">PR #1180&lt;/a> 两周前合并，为 SQLite 添加了 NIP-62 支持，处理 &lt;code>ALL_RELAYS&lt;/code> 消失请求，因为数据库层不知道特定的 relay URL。&lt;a href="https://github.com/rust-nostr/nostr/pull/1210">PR #1210&lt;/a> 将此扩展到 LMDB 后端，确保消失请求持久化到磁盘并在 relay 重启后保持。浏览器环境的 IndexedDB 实现也在进行中。这些变更共同为开发者提供了跨 SQLite、LMDB 和即将推出的浏览器存储的一致 NIP-62 支持。&lt;/p>
&lt;h3 id="ndk-nostr-development-kit">NDK（Nostr Development Kit）&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-dev-kit/ndk/pull/375">PR #375&lt;/a> 修复了 seenEvents 跟踪系统中的 bug。该问题导致某些订阅模式错误地将 event 标记为已见，当用户打开新订阅或重新连接到 relay 时导致内容丢失。修复确保 event 在订阅生命周期中被准确跟踪，这对于根据用户导航动态订阅和取消订阅的应用程序尤其重要。NDK 已升级到 beta.70 并包含此修复。&lt;/p>
&lt;h3 id="damus-ios">Damus（iOS）&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/pull/3515">PR #3515&lt;/a> 修复了影响 iOS 17 用户的启动崩溃问题。该问题源于 &lt;code>NdbUseLock&lt;/code> 中的算术溢出，这是一个后备类，因为 Swift Mutex 在 iOS 17 上不可用。修复用 &lt;code>NSLock&lt;/code> 替换了之前的同步方法，它在 iOS 17 上可用并正确处理剩余的竞态条件。iOS 18+ 用户不受影响，因为他们可以访问原生 Swift Mutex 实现。&lt;/p>
&lt;p>另外，一批长文章改进通过 &lt;a href="https://github.com/damus-io/damus/pull/3509">PR #3509&lt;/a> 落地。阅读进度条跟踪您在文章中的位置，预估阅读时间显示在预览中，棕褐色模式和可调节行高设置提供更舒适的阅读体验。专注模式在向下滚动时自动隐藏导航界面，点击时恢复，减少视觉干扰以实现无干扰阅读。多项修复解决了 markdown 内容中的图片显示问题，并确保文章从顶部打开而不是中间。&lt;/p>
&lt;h3 id="zapstream-live-streaming">Zap.stream（直播）&lt;/h3>
&lt;p>YouTube 和 Kick 聊天集成将外部流媒体平台的消息桥接到 Nostr。同时在 YouTube、Kick 和 Zap.stream 上直播的主播现在可以在统一视图中看到所有聊天消息，每个平台的消息与原生 Nostr 评论一起显示。这消除了想要使用 Nostr 进行直播但无法放弃已建立平台上观众的创作者的主要摩擦点。集成显示每条消息来自哪个平台，并处理连接外部账户的认证流程。&lt;/p>
&lt;h3 id="chachi-nip-29-groups">Chachi（NIP-29 群组）&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a> 群聊客户端本周合并了六个 PR。安全更新解决了 &lt;a href="https://github.com/purrgrammer/chachi/pull/89">CVE-2026-22029&lt;/a>，这是 react-router 中的 XSS 漏洞，可能导致开放重定向攻击；修复更新到 react-router-dom 6.30.0。&lt;a href="https://github.com/purrgrammer/chachi/pull/92">PR #92&lt;/a> 为群聊添加了分页消息加载，因此长对话可以增量加载而不是一次性加载。&lt;a href="https://github.com/purrgrammer/chachi/pull/91">PR #91&lt;/a> 修复了几个 NIP-29 bug，包括导致初始加载时群组名称为空白的竞态条件和导致成员视图崩溃的未定义参与者列表。翻译覆盖现在涵盖所有31种支持的语言，每种1060个键。&lt;/p>
&lt;h3 id="0xchat-messaging">0xchat（消息）&lt;/h3>
&lt;p>这款 Telegram 风格的消息客户端改进了 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 合规性，在使用外部签名应用时正确保存签名器包名称，修复了应用在重启后丢失要使用哪个签名器的追踪问题。NIP-17 回复处理现在正确包含用于线程的 &lt;code>e&lt;/code> tag，确保回复在跨客户端时出现在正确的对话上下文中。性能优化解决了消息列表中的滚动卡顿，这是加载长聊天历史时的常见痛点。草稿自动保存防止在编写过程中导航离开时消息丢失，文件存储选项现在包括默认的 FileDropServer 和 BlossomServer 端点。&lt;/p>
&lt;h3 id="primal-ios">Primal（iOS）&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 远程签名器支持通过 &lt;a href="https://github.com/PrimalHQ/primal-ios-app/pull/184">PR #184&lt;/a> 在 iOS 上落地，完成了几周前从 Android 开始的跨平台推出。用户现在可以将私钥保存在专用 bunker 服务中，如 nsec.app 或自托管的 nsecBunker 实例，通过 Nostr relay 连接来签署 event，而无需将密钥暴露给客户端应用。这种分离改善了想要使用 Primal 功能同时保持更严格密钥管理实践的用户的安全态势。实现包括用于 bunker 连接 URI 的二维码扫描，并处理通过加密 relay 消息的 NIP-46 请求/响应流程。&lt;/p>
&lt;hr>
&lt;p>本周就到这里。正在构建什么？有新闻要分享？想让我们报道您的项目？&lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">通过 NIP-17 私信联系我们&lt;/a>或在 Nostr 上找到我们。&lt;/p></content:encoded></item><item><title>Nostr Compass #4</title><link>https://nostrcompass.org/zh/newsletters/2026-01-07-newsletter/</link><pubDate>Wed, 07 Jan 2026 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2026-01-07-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您每周的 Nostr 协议生态系统指南。&lt;/p>
&lt;p>&lt;strong>本周要闻：&lt;/strong> Primal Android 发布了 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 远程签名和 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 本地签名者支持，使其成为其他 Android 应用的完整签名中心。&lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot Protocol&lt;/a> 团队针对安全审计发现的问题，合并了 18 个 PR 来强化基于 &lt;a href="https://nostrcompass.org/zh/topics/mls/">MLS&lt;/a> 的加密消息功能。Citrine 发布 v1.0 版本，Applesauce 整个库套件发布 v5.0 版本。TENEX 在 Nostr 上构建 AI 代理监督功能，Jumble 添加了智能中继池。一个 NIP-55 规范修复澄清了 &lt;code>nip44_encrypt&lt;/code> 的返回字段，一个 &lt;a href="https://nostrcompass.org/zh/topics/nip-50/">NIP-50&lt;/a> PR 提议了用于高级搜索的查询表达式扩展。在我们的深度解析中，我们解释了 &lt;a href="https://nostrcompass.org/zh/topics/nip-04/">NIP-04&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a>：为什么传统加密存在安全缺陷，以及现代替代方案如何修复这些问题。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;p>&lt;strong>Primal Android 成为完整签名中心&lt;/strong> - &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/2.6.18">2.6.18 版本&lt;/a>添加了 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 远程签名和 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 本地签名功能，将 Primal 转变为其他 Nostr 应用的完整签名器。通过 NIP-46 的远程签名允许用户通过 Nostr 中继连接到 bunker 服务，使私钥完全不存储在设备上。通过 NIP-55 的本地签名将 Primal 作为 Android 内容提供者公开，因此像 Amethyst 或 Citrine 这样的应用可以请求签名而无需接触私钥。&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/839">多个后续 PR&lt;/a> 修复了与 NIP-55 规范的十六进制公钥要求的兼容性问题，并改进了格式错误的 &lt;code>nostrconnect://&lt;/code> URI 的解析。此版本还包括媒体预缓存以实现更流畅的滚动、改进的帖子线程加载时间和头像预缓存。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您每周的 Nostr 协议生态系统指南。&lt;/p>
&lt;p>&lt;strong>本周要闻：&lt;/strong> Primal Android 发布了 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 远程签名和 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 本地签名者支持，使其成为其他 Android 应用的完整签名中心。&lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot Protocol&lt;/a> 团队针对安全审计发现的问题，合并了 18 个 PR 来强化基于 &lt;a href="https://nostrcompass.org/zh/topics/mls/">MLS&lt;/a> 的加密消息功能。Citrine 发布 v1.0 版本，Applesauce 整个库套件发布 v5.0 版本。TENEX 在 Nostr 上构建 AI 代理监督功能，Jumble 添加了智能中继池。一个 NIP-55 规范修复澄清了 &lt;code>nip44_encrypt&lt;/code> 的返回字段，一个 &lt;a href="https://nostrcompass.org/zh/topics/nip-50/">NIP-50&lt;/a> PR 提议了用于高级搜索的查询表达式扩展。在我们的深度解析中，我们解释了 &lt;a href="https://nostrcompass.org/zh/topics/nip-04/">NIP-04&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a>：为什么传统加密存在安全缺陷，以及现代替代方案如何修复这些问题。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;p>&lt;strong>Primal Android 成为完整签名中心&lt;/strong> - &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/2.6.18">2.6.18 版本&lt;/a>添加了 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 远程签名和 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 本地签名功能，将 Primal 转变为其他 Nostr 应用的完整签名器。通过 NIP-46 的远程签名允许用户通过 Nostr 中继连接到 bunker 服务，使私钥完全不存储在设备上。通过 NIP-55 的本地签名将 Primal 作为 Android 内容提供者公开，因此像 Amethyst 或 Citrine 这样的应用可以请求签名而无需接触私钥。&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/839">多个后续 PR&lt;/a> 修复了与 NIP-55 规范的十六进制公钥要求的兼容性问题，并改进了格式错误的 &lt;code>nostrconnect://&lt;/code> URI 的解析。此版本还包括媒体预缓存以实现更流畅的滚动、改进的帖子线程加载时间和头像预缓存。&lt;/p>
&lt;p>&lt;strong>Marmot Protocol 在审计后强化安全性&lt;/strong> - &lt;a href="https://github.com/marmot-protocol/mdk">Marmot 开发工具包&lt;/a>（mdk）实现了基于 &lt;a href="https://nostrcompass.org/zh/topics/nip-104/">NIP-104&lt;/a> MLS 的端到端加密消息，本周收到了大量安全修复。18 个合并的拉取请求解决了审计发现的问题，包括：&lt;a href="https://github.com/marmot-protocol/mdk/pull/97">加密群组图片的哈希验证&lt;/a>以防止存储层 blob 替换攻击、&lt;a href="https://github.com/marmot-protocol/mdk/pull/110">待处理欢迎消息的分页&lt;/a>以防止内存耗尽、&lt;a href="https://github.com/marmot-protocol/mdk/pull/112">错误消息中的 MLS Group ID 泄露&lt;/a>，以及&lt;a href="https://github.com/marmot-protocol/mdk/pull/98">密钥包的 base64 编码强制执行&lt;/a>。&lt;a href="https://github.com/marmot-protocol/marmot/pull/20">Marmot 规范本身也已更新&lt;/a>，包含 MIP-04 v2 版本控制和安全改进。活跃的 PR 继续解决 nonce 重用、密钥清零和缓存污染等问题。&lt;/p>
&lt;p>&lt;strong>Nostrability 跟踪中继提示支持&lt;/strong> - 新的&lt;a href="https://github.com/nostrability/nostrability/issues/270">中继提示兼容性跟踪器&lt;/a>记录了客户端在整个生态系统中如何构建和使用中继提示。跟踪器显示，虽然大多数客户端现在按照 &lt;a href="https://nostrcompass.org/zh/topics/nip-10/">NIP-10&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/topics/nip-19/">NIP-19&lt;/a> 构建提示，但使用情况差异很大：一些客户端在发出事件中包含提示，但不使用传入的提示进行获取。六个客户端因完整实现而获得&amp;quot;完整&amp;quot;级别状态。该跟踪器对于检查互操作性的开发者和想知道为什么某些客户端能找到其他客户端找不到的内容的用户都很有用。&lt;/p>
&lt;p>&lt;strong>Nostria 2.0 发布跨平台功能大更新&lt;/strong> - &lt;a href="https://nostria.app">Nostria&lt;/a> 客户端于 12 月 30 日&lt;a href="#ZgotmplZ">发布了 2.0 版本&lt;/a>，在 iOS（TestFlight）、Android（Play Store）、Web 和 Windows 上增加了重大更新。该版本添加了原生音乐支持，包括播放列表创建、曲目上传、基于 zap 的艺术家支付，以及带功能均衡器的 WinAmp 风格播放器。直播功能获得了游戏 API 集成，在游戏直播期间显示丰富的元数据。新的摘要功能可生成每小时、每日或每周的活动摘要作为压缩时间线视图。发现部分提供策划列表，用于查找内容和个人资料。媒体发布通过自动生成短视频帖子简化，以实现跨客户端可发现性。远程签名器连接现在可以通过扫描二维码工作，无需手动配置。个人资料发现解决了一个常见的 Nostr 痛点：当用户在中继之间迁移而没有携带元数据时，Nostria 会定位他们的个人资料并将其重新发布到当前中继。高级订阅用户获得 YouTube 频道集成、私人备忘录、分析仪表板，以及带有合并/恢复选项的自动关注列表备份。&lt;/p>
&lt;h2 id="nip-更新">NIP 更新&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>的最新变更：&lt;/p>
&lt;p>&lt;strong>已合并：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a>&lt;/strong> - 修复了 &lt;code>nip44_encrypt&lt;/code> 方法的返回字段（&lt;a href="https://github.com/nostr-protocol/nips/pull/2184">#2184&lt;/a>）。Android 签名器现在必须在 &lt;code>signature&lt;/code> 字段（与 &lt;code>nip44_decrypt&lt;/code> 匹配）中返回加密的有效载荷，而不是单独的字段。这使规范与 Amber 和 Primal 中的现有实现保持一致。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>开放的 PR：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-50/">NIP-50&lt;/a>&lt;/strong> - 查询表达式扩展（&lt;a href="https://github.com/nostr-protocol/nips/pull/2182">#2182&lt;/a>）提议使用结构化查询表达式扩展 NIP-50 搜索。该 PR 添加了 &lt;code>kind:1&lt;/code>、&lt;code>author:npub1...&lt;/code> 等运算符和布尔组合（&lt;code>AND&lt;/code>、&lt;code>OR&lt;/code>、&lt;code>NOT&lt;/code>），使得在简单文本匹配之外可以进行更精确的搜索查询。这将允许客户端构建高级搜索界面，同时保持与基本搜索字符串的向后兼容性。&lt;/li>
&lt;/ul>
&lt;h2 id="nip-深度解析nip-04-和-nip-44">NIP 深度解析：NIP-04 和 NIP-44&lt;/h2>
&lt;p>本周我们介绍 Nostr 的加密标准：您仍会遇到的传统 NIP-04，以及修复关键安全缺陷的现代替代方案 NIP-44。&lt;/p>
&lt;h3 id="nip-04zhtopicsnip-04加密私信传统">&lt;a href="https://nostrcompass.org/zh/topics/nip-04/">NIP-04&lt;/a>：加密私信（传统）&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/04.md">NIP-04&lt;/a> 是 Nostr 首次尝试加密消息，使用 kind 4 事件。虽然实现简单，但存在已知的安全弱点，已被弃用，推荐使用 NIP-44。&lt;/p>
&lt;p>&lt;strong>工作原理：&lt;/strong> NIP-04 使用 ECDH（椭圆曲线 Diffie-Hellman）在发送者和接收者之间派生共享密钥，然后使用 AES-256-CBC 加密。&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;event-id&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;sender-pubkey&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1736200000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">4&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [[&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;recipient-pubkey&amp;gt;&amp;#34;&lt;/span>]],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;base64-ciphertext?iv=base64-iv&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;signature&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>加密流程：&lt;/p>
&lt;ol>
&lt;li>计算共享点：&lt;code>shared = ECDH(sender_privkey, recipient_pubkey)&lt;/code>&lt;/li>
&lt;li>派生密钥：&lt;code>key = SHA256(shared_x_coordinate)&lt;/code>&lt;/li>
&lt;li>生成随机 16 字节 IV&lt;/li>
&lt;li>加密：&lt;code>ciphertext = AES-256-CBC(key, iv, plaintext)&lt;/code>&lt;/li>
&lt;li>格式化内容：&lt;code>base64(ciphertext)?iv=base64(iv)&lt;/code>&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>安全问题：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>无认证：&lt;/strong> AES-CBC 提供机密性但不提供完整性。控制中继的攻击者可以修改密文位，导致明文发生可预测的变化（位翻转攻击）。&lt;/li>
&lt;li>&lt;strong>IV 明文传输：&lt;/strong> 初始化向量与密文一起传输，可预测 IV 的 CBC 模式容易受到选择明文攻击。&lt;/li>
&lt;li>&lt;strong>无填充验证：&lt;/strong> 实现在处理 PKCS#7 填充方面存在差异，可能导致填充预言攻击。&lt;/li>
&lt;li>&lt;strong>元数据暴露：&lt;/strong> 发送者公钥、接收者公钥和时间戳对中继都是可见的。&lt;/li>
&lt;li>&lt;strong>密钥重用：&lt;/strong> 双方之间的所有消息永远使用相同的共享密钥。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>为什么仍然存在：&lt;/strong> 许多旧客户端和中继只支持 NIP-04。在与传统系统交互时会遇到它。像 Amber 这样的签名器和 Primal 等应用仍然实现 &lt;code>nip04_encrypt&lt;/code>/&lt;code>nip04_decrypt&lt;/code> 以保持向后兼容性。&lt;/p>
&lt;h3 id="nip-44zhtopicsnip-44版本化加密">&lt;a href="https://nostrcompass.org/zh/topics/nip-44/">NIP-44&lt;/a>：版本化加密&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/44.md">NIP-44&lt;/a> 是现代加密标准，旨在修复 NIP-04 众所周知的缺陷。Cure53 对 NIP-44 实现的安全审计发现了 10 个问题（包括时序攻击和前向保密问题），这些问题在规范最终确定之前已得到解决。它使用 ChaCha20-Poly1305 以及适当的密钥派生和认证加密。&lt;/p>
&lt;p>&lt;strong>相比 NIP-04 的主要改进：&lt;/strong>&lt;/p>
&lt;table>
 &lt;thead>
 &lt;tr>
 &lt;th style="text-align: left">方面&lt;/th>
 &lt;th style="text-align: left">NIP-04&lt;/th>
 &lt;th style="text-align: left">NIP-44&lt;/th>
 &lt;/tr>
 &lt;/thead>
 &lt;tbody>
 &lt;tr>
 &lt;td style="text-align: left">密码算法&lt;/td>
 &lt;td style="text-align: left">AES-256-CBC&lt;/td>
 &lt;td style="text-align: left">XChaCha20-Poly1305&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">认证&lt;/td>
 &lt;td style="text-align: left">无&lt;/td>
 &lt;td style="text-align: left">Poly1305 MAC&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">密钥派生&lt;/td>
 &lt;td style="text-align: left">SHA256(shared_x)&lt;/td>
 &lt;td style="text-align: left">HKDF 带盐值&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">Nonce&lt;/td>
 &lt;td style="text-align: left">16 字节 IV，重用模式&lt;/td>
 &lt;td style="text-align: left">24 字节随机 nonce&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">填充&lt;/td>
 &lt;td style="text-align: left">PKCS#7（泄露长度）&lt;/td>
 &lt;td style="text-align: left">填充到 2 的幂次&lt;/td>
 &lt;/tr>
 &lt;tr>
 &lt;td style="text-align: left">版本控制&lt;/td>
 &lt;td style="text-align: left">无&lt;/td>
 &lt;td style="text-align: left">版本字节前缀&lt;/td>
 &lt;/tr>
 &lt;/tbody>
&lt;/table>
&lt;p>&lt;strong>加密流程：&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>会话密钥：&lt;/strong> 为每对发送者-接收者派生稳定密钥：&lt;/p>
&lt;pre tabindex="0">&lt;code>shared_x = ECDH(sender_privkey, recipient_pubkey).x
conversation_key = HKDF-SHA256(
 ikm = shared_x,
 salt = &amp;#34;nip44-v2&amp;#34;,
 info = &amp;#34;&amp;#34;
)
&lt;/code>&lt;/pre>&lt;/li>
&lt;li>
&lt;p>&lt;strong>消息密钥：&lt;/strong> 对于每条消息，生成随机 32 字节 nonce 并派生加密/认证密钥：&lt;/p>
&lt;pre tabindex="0">&lt;code>keys = HKDF-SHA256(
 ikm = conversation_key,
 salt = nonce,
 info = &amp;#34;nip44-v2&amp;#34;
)
chacha_key = keys[0:32]
chacha_nonce = keys[32:44]
hmac_key = keys[44:76]
&lt;/code>&lt;/pre>&lt;/li>
&lt;li>
&lt;p>&lt;strong>填充明文：&lt;/strong> 填充到下一个 2 的幂次（最小 32 字节）以隐藏消息长度：&lt;/p>
&lt;pre tabindex="0">&lt;code>padded = [length_u16_be] + [plaintext] + [zeros to next power of 2]
&lt;/code>&lt;/pre>&lt;/li>
&lt;li>
&lt;p>&lt;strong>加密和认证：&lt;/strong>&lt;/p>
&lt;pre tabindex="0">&lt;code>ciphertext = XChaCha20(chacha_key, chacha_nonce, padded)
mac = HMAC-SHA256(hmac_key, nonce + ciphertext)
&lt;/code>&lt;/pre>&lt;/li>
&lt;li>
&lt;p>&lt;strong>格式化有效载荷：&lt;/strong>&lt;/p>
&lt;pre tabindex="0">&lt;code>payload = [version=0x02] + [nonce] + [ciphertext] + [mac]
content = base64(payload)
&lt;/code>&lt;/pre>&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>版本字节：&lt;/strong> 第一个字节（&lt;code>0x02&lt;/code>）表示加密版本。这允许未来升级而不破坏现有消息。版本 &lt;code>0x01&lt;/code> 是早期草案，从未广泛部署。&lt;/p>
&lt;p>&lt;strong>解密：&lt;/strong>&lt;/p>
&lt;ol>
&lt;li>解码 base64，检查版本字节是否为 &lt;code>0x02&lt;/code>&lt;/li>
&lt;li>提取 nonce（字节 1-32）、密文和 MAC（最后 32 字节）&lt;/li>
&lt;li>使用接收者的私钥和发送者的公钥派生会话密钥&lt;/li>
&lt;li>从会话密钥和 nonce 派生消息密钥&lt;/li>
&lt;li>解密前验证 MAC（如果无效则拒绝）&lt;/li>
&lt;li>解密密文，提取长度前缀，返回未填充的明文&lt;/li>
&lt;/ol>
&lt;p>&lt;strong>安全特性：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>认证加密：&lt;/strong> Poly1305 MAC 确保在解密前检测到任何篡改&lt;/li>
&lt;li>&lt;strong>前向保密（部分）：&lt;/strong> 每条消息使用唯一的 nonce，因此泄露一条消息不会暴露其他消息。但是，泄露私钥仍会暴露所有过去的消息（无棘轮机制）。&lt;/li>
&lt;li>&lt;strong>长度隐藏：&lt;/strong> 2 的幂次填充隐藏确切的消息长度&lt;/li>
&lt;li>&lt;strong>时序攻击抵抗：&lt;/strong> MAC 验证使用常量时间比较&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>实际使用：&lt;/strong> NIP-44 是以下功能的加密层：&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 私密私信（在 gift wrap 内）&lt;/li>
&lt;li>&lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 远程签名器通信&lt;/li>
&lt;li>&lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a> seal 加密&lt;/li>
&lt;li>&lt;a href="https://nostrcompass.org/zh/topics/nip-104/">Marmot Protocol&lt;/a> 群组消息，其中 NIP-44 使用从 MLS exporter secret 派生的密钥包装 MLS 加密内容&lt;/li>
&lt;li>任何需要安全点对点加密的应用&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>迁移指南：&lt;/strong> 新应用应专门使用 NIP-44。为了向后兼容，在回退到 NIP-04 之前，检查联系人的客户端是否支持 NIP-44（通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-89/">NIP-89&lt;/a> 应用元数据或中继支持）。接收消息时，首先尝试 NIP-44 解密，然后对传统内容回退到 NIP-04。&lt;/p>
&lt;h2 id="版本发布">版本发布&lt;/h2>
&lt;p>&lt;strong>Primal Android v2.6.18&lt;/strong> - &lt;a href="https://github.com/PrimalHQ/primal-android-app/releases/tag/2.6.18">完整版本&lt;/a>添加了 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 远程签名和 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 本地签名，将 Primal 转变为其他 Android 应用的签名中心。性能改进包括媒体预缓存、头像预缓存和更快的帖子线程加载。错误修复解决了个人简介中的自我提及、媒体画廊崩溃和直播标题回退问题。在 iOS 上，Primal 使用后台音频播放来保持应用活跃以接收 NIP-46 签名请求；用户可以在设置中更改声音或完全静音。&lt;/p>
&lt;p>&lt;strong>Mostro v0.15.6&lt;/strong> - &lt;a href="https://nostrcompass.org/zh/topics/nip-69/">NIP-69&lt;/a> P2P 比特币交易平台的&lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.15.6">最新版本&lt;/a>完成了第 4 阶段审计事件的开发基金实现。开发费用支付现在通过每次成功支付后发布的 kind 38383 Nostr 事件进行跟踪，使第三方验证和分析成为可能。买家/卖家消息的金额计算已修复，溢价逻辑已与 lnp2pbot 参考实现对齐。&lt;/p>
&lt;p>&lt;strong>Aegis v0.3.5&lt;/strong> - 跨平台签名器&lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.3.5">添加了深色模式&lt;/a>、改进的应用图标显示和更简洁的 UI 布局。错误修复解决了 iOS iCloud Private Relay 冲突和事件解析问题。此版本还改进了事件 JSON 传递给 Rust 签名函数的方式。&lt;/p>
&lt;p>&lt;strong>Citrine v1.0.0&lt;/strong> - Android 中继应用&lt;a href="https://github.com/greenart7c3/Citrine/releases/tag/v1.0.0">达到 1.0 版本&lt;/a>。Citrine 让您可以直接在 Android 设备上运行个人 Nostr 中继，对于本地缓存、备份或作为 NIP-55 配套工具很有用。此版本添加了崩溃报告处理程序，提高了数据库查询效率，并通过 Crowdin 更新了翻译。&lt;/p>
&lt;p>&lt;strong>Applesauce v5.0.0&lt;/strong> - hzrd149 的 TypeScript 库套件&lt;a href="https://github.com/hzrd149/applesauce/releases">发布了重大版本&lt;/a>，带来了专注于正确性和简洁性的破坏性更改。核心包现在&lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-core%405.0.0">默认验证事件签名&lt;/a>，并将坐标方法重命名为使用更清晰的&amp;quot;地址&amp;quot;术语（&lt;code>parseCoordinate&lt;/code> → &lt;code>parseReplaceableAddress&lt;/code>）。中继包将&lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-relay%405.0.0">默认重试次数从 10 次降低到 3 次&lt;/a>，默认忽略无法访问的中继，并添加了 &lt;code>createUnifiedEventLoader&lt;/code> 以简化事件获取。钱包包获得了 &lt;a href="https://nostrcompass.org/zh/topics/nip-87/">NIP-87&lt;/a> &lt;a href="https://github.com/hzrd149/applesauce/releases/tag/applesauce-wallet%405.0.0">Cashu 铸币厂发现&lt;/a>功能。各包中直接的 &lt;code>nostr-tools&lt;/code> 依赖已被移除，减少了包大小和版本冲突。&lt;/p>
&lt;h2 id="值得关注的代码和文档更改">值得关注的代码和文档更改&lt;/h2>
&lt;p>&lt;em>这些是开放的拉取请求和早期阶段的工作，非常适合在合并前获得反馈。如果有什么引起您的注意，请考虑审查或评论！&lt;/em>&lt;/p>
&lt;h3 id="damus-ios">Damus (iOS)&lt;/h3>
&lt;p>一系列 PR 改进了长文章体验。&lt;a href="https://github.com/damus-io/damus/pull/3496">阅读用户体验改进&lt;/a>添加了进度条、预估阅读时间、复古模式、可调行高，以及滚动时隐藏导航的专注模式。&lt;a href="https://github.com/damus-io/damus/pull/3489">图片修复&lt;/a>确保 markdown 内容中的图片通过将独立图片预处理为块级元素来显示正确的宽高比。&lt;a href="https://github.com/damus-io/damus/pull/3497">长文章预览卡片&lt;/a>将内联的 &lt;code>@naddr1...&lt;/code> 文本替换为显示文章标题和元数据的丰富预览卡片。新的&lt;a href="https://github.com/damus-io/damus/pull/3508">中继集成测试套件&lt;/a>添加了 137 个网络相关测试，包括 &lt;a href="https://nostrcompass.org/zh/topics/nip-01/">NIP-01&lt;/a> 协议验证和降级网络条件下的行为（3G 模拟）。&lt;/p>
&lt;h3 id="bitchat加密消息">Bitchat（加密消息）&lt;/h3>
&lt;p>iOS Nostr+Cashu 消息应用的安全强化。&lt;a href="https://github.com/permissionlesstech/bitchat/pull/928">Noise 协议 DH 密钥清除&lt;/a>修复了六个 Diffie-Hellman 密钥协商后共享密钥未被清零的位置，恢复了前向保密保证。&lt;a href="https://github.com/permissionlesstech/bitchat/pull/929">读取回执队列的线程安全&lt;/a>为 NostrTransport 添加了屏障同步以防止竞态条件。&lt;a href="https://github.com/permissionlesstech/bitchat/pull/920">消息去重器优化&lt;/a>改善了高消息量下的性能，&lt;a href="https://github.com/permissionlesstech/bitchat/pull/919">十六进制字符串解析强化&lt;/a>防止格式错误输入导致的崩溃。&lt;/p>
&lt;h3 id="frostr阈值签名">Frostr（阈值签名）&lt;/h3>
&lt;p>基于 &lt;a href="https://nostrcompass.org/zh/topics/frost/">FROST&lt;/a> 的阈值签名协议&lt;a href="https://github.com/FROSTR-ORG/igloo-desktop/pull/62">添加了二维码显示&lt;/a>，用于在引导过程和签名器界面中显示群组凭证和份额凭证。这使得在多个设备之间分发密钥份额时设置更加简单，让用户可以扫描凭证而不是手动复制长字符串。&lt;/p>
&lt;h3 id="marmot-mdk库">Marmot mdk（库）&lt;/h3>
&lt;p>除了上述安全修复之外，活跃的 PR 继续解决剩余的审计发现：&lt;a href="https://github.com/marmot-protocol/mdk/pull/109">用于清零的 Secret&lt;T> 类型&lt;/a>引入了一个包装类型，在 drop 时自动清零敏感数据，&lt;a href="https://github.com/marmot-protocol/mdk/pull/111">消息查询分页&lt;/a>防止加载聊天历史时的内存耗尽，&lt;a href="https://github.com/marmot-protocol/mdk/pull/102">加密存储&lt;/a>为存储群组状态和消息的 SQLite 数据库添加了静态加密。&lt;/p>
&lt;h3 id="amethyst-android">Amethyst (Android)&lt;/h3>
&lt;p>Android 客户端忙碌的一周稳定性修复。&lt;a href="https://github.com/vitorpamplona/amethyst/commit/2c42796">宽松的 JSON 解析&lt;/a>通过使 Kotlin Serialization 更宽容来防止格式错误事件导致的崩溃。事件验证现在&lt;a href="https://github.com/vitorpamplona/amethyst/commit/40f9622">在处理前检查 kind 字段大小&lt;/a>以避免过大值导致的异常。信任分数 UI 获得了更小的图标以减少视觉干扰，&lt;a href="https://github.com/vitorpamplona/amethyst/commit/69c53ac">改进的错误日志&lt;/a>有助于诊断中继连接问题。通过 Crowdin 更新了翻译，并解决了多个 SonarQube 警告。&lt;/p>
&lt;h3 id="tenexai-代理">TENEX（AI 代理）&lt;/h3>
&lt;p>Nostr 原生 AI 代理框架本周有 81 个提交，构建自主能力。新的&lt;a href="https://github.com/tenex-chat/tenex/pull/48">代理监督系统&lt;/a>实现了行为启发式来监控代理动作并在需要时进行干预。&lt;a href="https://github.com/tenex-chat/tenex/commit/b244c10">委托透明度&lt;/a>在委托记录中添加了用户干预日志，以便用户可以审计代理代表他们做了什么。&lt;a href="https://github.com/tenex-chat/tenex/pull/47">LLM 提供商注册表&lt;/a>被模块化以便更容易集成不同的 AI 后端。跨项目对话支持让代理可以在多个基于 Nostr 的项目中维护上下文。&lt;/p>
&lt;h3 id="jumbleweb-客户端">Jumble（Web 客户端）&lt;/h3>
&lt;p>专注于中继的 Web 客户端添加了多项用户体验改进。&lt;a href="https://github.com/CodyTseng/jumble/commit/695f2fe">智能中继池&lt;/a>根据使用模式智能管理连接。&lt;a href="https://github.com/CodyTseng/jumble/commit/917fcd9">实时动态开关&lt;/a>让用户可以在实时流和手动刷新之间切换。&lt;a href="https://github.com/CodyTseng/jumble/commit/d1b3a8c">自动显示新帖子&lt;/a>在顶部展示新鲜内容，无需重新加载页面。关注动态和通知的&lt;a href="https://github.com/CodyTseng/jumble/commit/fd9f41c">持久缓存&lt;/a>改善了回访时的加载时间。用户现在可以通过设置&lt;a href="https://github.com/CodyTseng/jumble/commit/53a67d8">更改默认中继&lt;/a>。&lt;/p>
&lt;hr>
&lt;p>本周就到这里。正在构建什么？有新闻要分享？希望我们报道您的项目？&lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">通过 NIP-17 私信联系我们&lt;/a>或在 Nostr 上找到我们。&lt;/p></content:encoded></item><item><title>Nostr Compass #3</title><link>https://nostrcompass.org/zh/newsletters/2025-12-31-newsletter/</link><pubDate>Wed, 31 Dec 2025 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2025-12-31-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 协议生态指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> 在 2025 年收官之际，我们回顾 Nostr 演进中五个十二月的关键里程碑。从 2020 年 12 月 fiatjaf 发布首个客户端，到 2022 年 12 月 Jack Dorsey 关键性的 14 BTC 捐赠，再到本月 NIP-55 签名器的扩散以及 NDK 162 倍缓存提速，十二月持续成为协议转折点。本期特别回顾按年份梳理这段技术历史，记录协议如何从两个实验性 relay 成长为横跨 50 个国家的 2500 多个节点。此外还有：Amethyst 的桌面模块借助 Quartz 初具形态，Notedeck 增加消息功能，Citrine 可托管 Web 应用，以及 NIP-54 为非拉丁文字修复国际化问题。&lt;/p>
&lt;h2 id="12-月回顾nostr-五个十二月">12 月回顾：Nostr 五个十二月&lt;/h2>
&lt;p>今年是 Nostr 诞生第五年。fiatjaf 于 2020 年 11 月 7 日发起该协议，而此后的每一个十二月都标记了其演进中的不同阶段：从概念验证，到全球运动，再到生产级生态系统。下面这篇技术回顾覆盖 2020 年 12 月到 2025 年 12 月，这些奠基年份共同塑造了 Nostr 的基础，并催化了它的突破时刻。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您的每周 Nostr 协议生态指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> 在 2025 年收官之际，我们回顾 Nostr 演进中五个十二月的关键里程碑。从 2020 年 12 月 fiatjaf 发布首个客户端，到 2022 年 12 月 Jack Dorsey 关键性的 14 BTC 捐赠，再到本月 NIP-55 签名器的扩散以及 NDK 162 倍缓存提速，十二月持续成为协议转折点。本期特别回顾按年份梳理这段技术历史，记录协议如何从两个实验性 relay 成长为横跨 50 个国家的 2500 多个节点。此外还有：Amethyst 的桌面模块借助 Quartz 初具形态，Notedeck 增加消息功能，Citrine 可托管 Web 应用，以及 NIP-54 为非拉丁文字修复国际化问题。&lt;/p>
&lt;h2 id="12-月回顾nostr-五个十二月">12 月回顾：Nostr 五个十二月&lt;/h2>
&lt;p>今年是 Nostr 诞生第五年。fiatjaf 于 2020 年 11 月 7 日发起该协议，而此后的每一个十二月都标记了其演进中的不同阶段：从概念验证，到全球运动，再到生产级生态系统。下面这篇技术回顾覆盖 2020 年 12 月到 2025 年 12 月，这些奠基年份共同塑造了 Nostr 的基础，并催化了它的突破时刻。&lt;/p>
&lt;h3 id="2020-年-12-月起源">2020 年 12 月：起源&lt;/h3>
&lt;p>Nostr 存在后的第一个完整月份里，fiatjaf 发布了 &lt;a href="https://github.com/fiatjaf/branle">Branle&lt;/a>，这是协议的首个客户端，基于 Quasar（Vue.js）和 absurd-sql 构建，用于本地存储。fiatjaf 当时已经确立了核心架构：用户以 secp256k1 公钥作为身份，所有帖子都带有密码学签名，relay 作为彼此不通信的无状态存储层存在。一个或两个实验性 relay 为一小批早期采用者提供服务，他们在 11 月 16 日启动的 Telegram 群组 &lt;a href="https://t.me/nostr_protocol">@nostr_protocol&lt;/a> 中协作。最初的&lt;a href="https://fiatjaf.com/nostr.html">文档&lt;/a>将其描述为“能够创建抗审查全球社交网络的最简单开放协议”，而这一前提还需要再过两年才被真正证明。&lt;/p>
&lt;h3 id="2021-年-12-月早期开发">2021 年 12 月：早期开发&lt;/h3>
&lt;p>2021 年 12 月 31 日，Nostr 由 Cameri 提交到 &lt;a href="https://news.ycombinator.com/item?id=29749061">Hacker News 首页&lt;/a>，获得 110 分和 138 条评论。这标志着协议首次在更广泛的开发者社区中获得显著曝光。网络大约运行在七个 relay 上，用户不到 1000 人。Branle 收到多项更新，包括私钥导入功能（12 月 31 日）和多 relay 支持。命令行客户端 noscl 则提供了基于终端的交互方式。协议规范当时仍存在于 fiatjaf 的文档中，而正式的 &lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>要到 2022 年 5 月才会创建。正如 fiatjaf 所说，当时的协议仍然“还在开发中”。&lt;/p>
&lt;h3 id="2022-年-12-月临界点">2022 年 12 月：临界点&lt;/h3>
&lt;p>2022 年 12 月让 Nostr 从小众实验变成主流运动。催化剂出现在 12 月 15 日，Jack Dorsey 在发现该协议后，宣布它“百分之百就是我们原本希望 Bluesky 成为的东西，只是不是由一家公司开发出来”，并向 fiatjaf 捐赠了 &lt;a href="https://www.coindesk.com/tech/2022/12/15/jack-dorsey-gives-decentralized-social-network-nostr-14-btc-in-funding">14.17171699 BTC&lt;/a>（约 24.5 万至 25 万美元）。12 月 16 日，fiatjaf 宣布将资金与 Damus 开发者 William Casarin（jb55）分配使用，Dorsey 也验证了自己的 Nostr 账户（npub：&lt;code>npub1sg6plzptd64u62a878hep2kev88swjh3tw00gjsfl8f237lmu63q0uf63m&lt;/code>）。这笔资金几乎在一夜之间赋予了项目正当性。&lt;/p>
&lt;p>同一周，Twitter 的混乱加速了采用。12 月 14 日至 15 日，《纽约时报》、CNN 和《华盛顿邮报》的知名记者遭遇封禁。12 月 18 日，Twitter &lt;a href="https://techcrunch.com/2022/12/18/twitter-wont-let-you-post-your-facebook-instagram-and-mastodon-handles/">宣布禁止&lt;/a>推广 Nostr、Mastodon 及其他平台的账户。该政策在次日因反弹而撤回。这波出走潮推动更多用户开始寻找替代方案。&lt;/p>
&lt;p>协议开发也迅速升温。12 月 16 日，&lt;a href="https://nostrcompass.org/zh/topics/nip-19/">NIP-19&lt;/a> 合并（&lt;a href="https://github.com/nostr-protocol/nips/pull/57">#57&lt;/a>），引入了 bech32 编码标识符（npub、nsec、note、nprofile、nevent），使密钥变得可读且彼此可区分。NIPs 仓库当月记录了 36 次以上提交，其中包括 NIP-40 和 NIP-07 的更新。客户端也开始扩散：Damus 的 TestFlight beta 在数小时内满员，Astral 从 Branle 分叉以支持资料创建，Snort 作为“快速、抗审查”的 Web 客户端上线，Vitor Pamplona 则开始开发 Amethyst。Alby v1.22.1“Kemble&amp;rsquo;s Cascade of Stars”于 12 月 22 日发布，加入 NIP-19 支持。截至 12 月 7 日，Nostr 约有 800 名拥有资料的用户；当 Damus 于 2023 年 1 月 31 日登陆 App Store 后，增长闸门彻底打开，到 2023 年 6 月用户规模已超过 31.5 万。&lt;/p>
&lt;h3 id="2023-年-12-月生态成熟">2023 年 12 月：生态成熟&lt;/h3>
&lt;p>2023 年 12 月成为 Nostr 协议安全性的关键转折点。12 月 20 日，&lt;a href="https://github.com/nostr-protocol/nips/pull/746">NIP-44 第三次修订版合并&lt;/a>，此前一项独立的 Cure53 安全审计（NOS-01）在 TypeScript、Go 和 Rust 实现中发现了 10 个问题，包括时序攻击和前向保密相关隐患。更新后的规范用 ChaCha20 与 HMAC-SHA256 取代了存在缺陷的 &lt;a href="https://nostrcompass.org/zh/topics/nip-04/">NIP-04&lt;/a> 加密，建立起如今支撑 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 私密私信和 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a> Gift Wrap 的密码学基础。同一周，OpenSats 于 12 月 21 日&lt;a href="https://opensats.org/blog/nostr-grants-december-2023">宣布第四批资助&lt;/a>，为 Lume、noStrudel、ZapThreads 以及一项独立的 NIP-44 审计等七个项目提供资金。这延续了其在 2023 年 7 月&lt;a href="https://opensats.org/blog/nostr-grants-july-2023">第一批资助&lt;/a>中对 Damus、Coracle、Iris 等项目的支持，使 Nostr Fund 总分配额达到约 340 万美元，覆盖 39 项资助。&lt;/p>
&lt;p>这个月也暴露了生态可持续性的紧张关系。12 月 28 日，William Casarin（jb55）在 &lt;a href="https://stacker.news/items/368863">Stacker News&lt;/a> 上发文称，2024 年“很可能将是 Damus 的最后一年”，理由是“nostr 客户端赚不到钱”，而苹果对应用内 zap 的限制严重压缩了变现空间。Damus 团队此前曾拒绝风投资金。与此同时，&lt;a href="https://github.com/getAlby/nostr-wallet-connect/releases/tag/0.4.1">Nostr Wallet Connect v0.4.1&lt;/a> 于 12 月 26 日发布，在 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a> 基础上扩展了 &lt;code>pay_keysend&lt;/code>、&lt;code>make_invoice&lt;/code>、&lt;code>lookup_invoice&lt;/code>、&lt;code>list_transactions&lt;/code>、&lt;code>get_balance&lt;/code> 和 &lt;code>get_info&lt;/code> 方法，为后来成为客户端标准能力的钱包集成打下基础。&lt;/p>
&lt;h3 id="2024-年-12-月协议推进">2024 年 12 月：协议推进&lt;/h3>
&lt;p>2024 年 12 月以 &lt;a href="https://damus.io/notedeck/">Notedeck Alpha 发布&lt;/a>开场，该版本在 11 月 30 日上线，是 Damus 团队的 Rust 桌面客户端，具备多栏界面和多账户支持。它面向 Linux、macOS 和 Windows 构建，Android 计划在 2025 年推出，最初提供给 Damus Purple 订阅者，代表着团队从 iOS 向外扩展的重要战略。两周后，OpenSats 于 12 月 16 日&lt;a href="https://opensats.org/blog/9th-wave-of-nostr-grants">宣布第九批资助&lt;/a>，资助了 AlgoRelay（首个用于个性化信息流的算法 relay）、Pokey（在受限网络下使用蓝牙 mesh 的 Android 应用）、Nostr Safebox（&lt;a href="https://nostrcompass.org/zh/topics/nip-60/">NIP-60&lt;/a> &lt;a href="https://nostrcompass.org/zh/topics/cashu/">Cashu&lt;/a> 代币存储）以及 LumiLumi（轻量且注重可访问性的 Web 客户端），将 Nostr Fund 总分配额推高到约 900 万美元，同比增加 67%。&lt;/p>
&lt;p>当月还见证了客户端生态的显著成熟。&lt;a href="https://github.com/mikedilger/gossip/releases/tag/v0.13.0">Gossip 0.13.0&lt;/a> 于 12 月 23 日发布，支持 File Metadata（&lt;a href="https://nostrcompass.org/zh/topics/nip-92/">NIP-92&lt;/a>/&lt;a href="https://nostrcompass.org/zh/topics/nip-94/">NIP-94&lt;/a>）、Blossom 集成以及 &lt;a href="https://nostrcompass.org/zh/topics/nip-50/">NIP-50&lt;/a> relay 搜索。&lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.5.0">Coracle 0.5.0&lt;/a> 于 12 月 12 日发布，加入重做后的新手引导和 nostr-editor 集成。协议开发仍然活跃，12 月 9 日至 22 日间共有 30 个 pull request 提交，其中 10 个合并，包括 &lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 重写为仅使用 NIP-44 加密，以及 &lt;a href="https://nostrcompass.org/zh/topics/nip-104/">NIP-104&lt;/a> 持续推进，以实现接近 Signal 级别的双棘轮加密。网络统计显示，受信任 pubkey event 日活超过 22.4 万，新建带联系人列表的资料数量同比增长 4 倍，公开写作类 event 增长 50%。&lt;/p>
&lt;h3 id="2025-年-12-月生态扩张">2025 年 12 月：生态扩张&lt;/h3>
&lt;p>2025 年 12 月带来了持续的协议成熟与生态扩张。12 月 21 日，OpenSats &lt;a href="https://opensats.org/blog/fourteenth-wave-of-nostr-grants">宣布第十四批 Nostr 资助&lt;/a>，资助三个项目：YakiHonne（支持长文创作门户并集成 &lt;a href="https://nostrcompass.org/zh/topics/cashu/">Cashu&lt;/a>/Nutzaps 支付的多平台客户端）、Quartz（Vitor Pamplona 的 Kotlin Multiplatform 库，为 Amethyst 提供支持并将启用 iOS 版本）以及 Nostr Feedz（由 PlebOne 开发的 RSS 与 Nostr 双向集成）。Dart NDK 和 Mattn 的 nostr-relay 获得续期资助。&lt;/p>
&lt;p>协议演进继续推进。&lt;a href="https://nostrcompass.org/zh/topics/nip-be/">NIP-BE&lt;/a>（蓝牙低功耗消息，&lt;a href="https://github.com/nostr-protocol/nips/pull/1979">#1979&lt;/a>）已于 11 月合并，使离线设备同步成为可能。&lt;a href="https://nostrcompass.org/zh/topics/nip-a4/">NIP-A4&lt;/a>（公开消息，kind 24，&lt;a href="https://github.com/nostr-protocol/nips/pull/1988">#1988&lt;/a>）在本月稍后落地，定义了使用 &lt;code>q&lt;/code> 标签以避免线程复杂性的通知屏消息。&lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a> 获得重大澄清（&lt;a href="https://github.com/nostr-protocol/nips/pull/2106">#2106&lt;/a>），引入 &lt;code>hidden&lt;/code> 标签，用于真正私密且不可发现的群组。&lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 规范也进行了修订（&lt;a href="https://github.com/nostr-protocol/nips/pull/2166">#2166&lt;/a>），修正了开发者在后台进程中调用 &lt;code>get_public_key&lt;/code> 的常见实现错误。&lt;/p>
&lt;p>客户端侧也有明显进展。&lt;a href="https://nostrcompass.org/en/newsletters/2025-12-24-newsletter/#news">Primal Android 在第2期周刊中报道&lt;/a>通过八个已合并 PR 成为完整的 NIP-55 签名器，实现了 &lt;code>LocalSignerContentProvider&lt;/code>，加入 Amber 和 Aegis，成为 Android 平台的签名选项之一。&lt;a href="https://nostrcompass.org/en/newsletters/2025-12-24-newsletter/#notable-code-and-documentation-changes">NDK 库在第2期周刊中报道&lt;/a>通过消除重复写入和不必要的 LRU 缓存查询，将缓存查询速度提升了 162 倍（约 3690ms 降至约 22ms）（&lt;a href="https://github.com/nostr-dev-kit/ndk/pull/371">PR #371&lt;/a>、&lt;a href="https://github.com/nostr-dev-kit/ndk/pull/372">PR #372&lt;/a>）。Shopstr 推出了 &lt;a href="https://nostrcompass.org/en/newsletters/2025-12-24-newsletter/#news">Zapsnags&lt;/a>，用于通过 zap 实现闪购。White Noise 发布了 &lt;a href="https://nostrcompass.org/zh/topics/mip-05/">MIP-05&lt;/a> 隐私保护推送通知。完整内容可参见&lt;a href="https://nostrcompass.org/en/newsletters/2025-12-17-newsletter/">第1期周刊&lt;/a>和&lt;a href="https://nostrcompass.org/en/newsletters/2025-12-24-newsletter/">第2期周刊&lt;/a>。&lt;/p>
&lt;hr>
&lt;p>五年前，fiatjaf 把 Branle 发布给分布在两个实验性 relay 上的少数用户。今天，这一协议已支撑 140 多个客户端、遍布 50 个国家的 2500 多个 relay，以及不断增长、连接数十万密钥对的信任网络。十二月持续作为重大发布的高峰期，本月蓝牙消息、Android 签名器扩散和基础设施资助再次表明，跨平台工具链仍在获得持续投入。&lt;/p>
&lt;h2 id="新闻">新闻&lt;/h2>
&lt;p>&lt;strong>Amethyst Desktop 初具形态&lt;/strong> - OpenSats 第十四批资助中的 Quartz 项目已经开始产生成果。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1625">PR #1625&lt;/a> 为 Amethyst 创建了完整的 &lt;code>:desktopApp&lt;/code> 模块，使用 Compose Multiplatform，并让登录页和全局信息流页面在 Desktop JVM 上可用。该架构把 &lt;code>:commons&lt;/code> 模块转换为 Kotlin Multiplatform，采用清晰的 source set 结构（&lt;code>commonMain&lt;/code>、&lt;code>jvmAndroid&lt;/code>、&lt;code>androidMain&lt;/code>、&lt;code>jvmMain&lt;/code>），使 Android 和桌面端可以共享 UI 组件，同时将平台特定决策留给各自目标。这为未来通过同一 Kotlin Multiplatform 路径支持 iOS 奠定了基础。&lt;/p>
&lt;p>&lt;strong>Amethyst 语音回复&lt;/strong> - davotoula 的圣诞交付：&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1622">PR #1622&lt;/a> 增加了专门的语音回复界面，包含波形可视化、重新录制支持、媒体服务器选择和上传进度指示。用户现在可以用音频回复根语音消息和语音回复。&lt;/p>
&lt;p>&lt;strong>Notedeck 增加消息功能&lt;/strong> - Damus 的桌面客户端 Notedeck 在 &lt;a href="https://github.com/damus-io/notedeck/pull/1223">PR #1223&lt;/a> 中加入了消息功能，从浏览时间线扩展到了直接通信。&lt;/p>
&lt;p>&lt;strong>Citrine 可托管 Web 应用&lt;/strong> - Citrine 现在可以&lt;a href="https://github.com/greenart7c3/Citrine/pull/81">托管 Web 应用&lt;/a>，把你的手机变成本地优先的 Nostr Web 服务器。另一个 &lt;a href="https://github.com/greenart7c3/Citrine/pull/85">PR #85&lt;/a> 在网络恢复时加入自动重连和 event 广播，并覆盖多个 Android API 级别的完整测试。&lt;/p>
&lt;p>&lt;strong>Nostrability 开发者工具包注册表&lt;/strong> - &lt;a href="https://github.com/nostrability/nostrability/issues/264">Developer Kits &amp;amp; Tooling&lt;/a> 跟踪器维护着一个涵盖多种语言（TypeScript、Rust、Python、Go、Dart、Swift 等）的 SDK、库和开发工具精选注册表。如果你刚接触 Nostr 开发，它是为你的技术栈寻找合适工具包的不错起点。&lt;/p>
&lt;h2 id="nip-更新">NIP 更新&lt;/h2>
&lt;p>最近 &lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a>中的变更：&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-54/">NIP-54&lt;/a>&lt;/strong> - Wiki &lt;code>d&lt;/code> 标签规范化的关键国际化修复（&lt;a href="https://github.com/nostr-protocol/nips/pull/2177">#2177&lt;/a>）。此前的规则会把所有非 ASCII 字符转换为 &lt;code>-&lt;/code>，导致日文、中文、阿拉伯文、西里尔文及其他文字无法正常工作。更新后的规范保留 UTF-8 字母，仅对有大小写变体的字符执行小写化，并附带了完整示例：&lt;code>&amp;quot;ウィキペディア&amp;quot;&lt;/code> 保持为 &lt;code>&amp;quot;ウィキペディア&amp;quot;&lt;/code>，&lt;code>&amp;quot;Москва&amp;quot;&lt;/code> 变为 &lt;code>&amp;quot;москва&amp;quot;&lt;/code>，而像 &lt;code>&amp;quot;日本語 Article&amp;quot;&lt;/code> 这样的混合文字会规范化为 &lt;code>&amp;quot;日本語-article&amp;quot;&lt;/code>。&lt;/li>
&lt;/ul>
&lt;h2 id="版本发布">版本发布&lt;/h2>
&lt;p>&lt;strong>Zapstore 1.0-rc1&lt;/strong> - 基于 Nostr 的免许可应用商店发布了新架构的&lt;a href="https://github.com/zapstore/zapstore/releases/tag/1.0-rc1">首个候选版本&lt;/a>，包含完整 UI 刷新、重写且错误处理更完善的包管理器、用于精选发现的 App Stacks、重新设计的个人资料页、后台更新检查，以及发布列表的无限滚动。&lt;/p>
&lt;p>&lt;strong>KeyChat v1.38.1&lt;/strong> - 基于 MLS 的加密消息应用&lt;a href="https://github.com/keychat-io/keychat-app/releases/tag/v1.38.1%2B6489">加入 UnifiedPush 支持&lt;/a>，用于 Android 和 Linux 推送通知，并为隐私相关操作增加生物识别认证。可用于 Android、Windows、macOS 和 Linux。&lt;/p>
&lt;p>&lt;strong>Alby Go v2.0.0&lt;/strong> - 移动 Lightning 钱包伴侣应用&lt;a href="https://github.com/getAlby/go/releases/tag/v2.0.0">发布视觉重设计&lt;/a>，包含新 logo、更新后的配色、重做的地址簿以及改进的金额输入键盘。BTC Map 现在可从首页访问，交易描述也会显示在通知中。&lt;/p>
&lt;p>&lt;strong>nak v0.17.4&lt;/strong> - fiatjaf 的命令行 Nostr 工具已&lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.17.4">发布&lt;/a>，延续了上周 v0.17.3 对 Linux 上 LMDB 限制问题的修复。&lt;/p>
&lt;h2 id="值得关注的代码与文档变更">值得关注的代码与文档变更&lt;/h2>
&lt;p>&lt;em>值得关注的开放 PR 与早期阶段工作。&lt;/em>&lt;/p>
&lt;h3 id="damusios">Damus（iOS）&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/pull/3477">NIP-19 relay 提示&lt;/a>实现了 event 获取时对 relay hint 的消费。当用户打开 nevent、nprofile 或 naddr 链接时，Damus 现在会从 bech32 TLV 数据中提取 relay hint，并连接临时 relay 去获取不在用户 relay 池中的内容。实现包含基于引用计数的清理逻辑，以避免并发查找时的竞争条件。&lt;a href="https://github.com/damus-io/damus/pull/3474">图片 URL 检测&lt;/a>会把粘贴的图片 URL 自动转换为编辑器中的预览缩略图，并在多图时显示轮播位置标记。&lt;a href="https://github.com/damus-io/damus/pull/3473">npub 粘贴转换&lt;/a>则会把粘贴的 npub/nprofile 字符串转换为 mention 链接，并异步解析资料。&lt;/p>
&lt;h3 id="amethystandroid">Amethyst（Android）&lt;/h3>
&lt;p>&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1627">Payment targets&lt;/a>添加了用于 &lt;a href="https://nostrcompass.org/zh/topics/nip-57/">NIP-57&lt;/a> zap 分账的 event 接口，让帖子可以指定多个接收者来共享收到的 zap，这对协作、收入分成或同时打赏内容创作者与所用工具都很有用。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1624">Quartz 功能对齐文档&lt;/a>新增了一张详细表格，用来跟踪 Android、Desktop JVM 和 iOS 三个目标的功能实现情况，并指出 iOS 仍缺少核心密码学（&lt;code>Secp256k1Instance&lt;/code>）、JSON 序列化和数据结构。&lt;/p>
&lt;h3 id="notedeck桌面">Notedeck（桌面）&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck/pull/1226">时间线过滤器重建&lt;/a>修复了一个 bug，即已取消关注的账户仍持续出现在信息流中。此前时间线过滤器只在联系人列表生成时构建一次，之后不再更新；该修复增加了 &lt;code>contact_list_timestamp&lt;/code> 跟踪和 &lt;code>invalidate()&lt;/code> 方法，以便在关注状态变化时触发重建。&lt;/p>
&lt;h3 id="citrineandroid-relay">Citrine（Android Relay）&lt;/h3>
&lt;p>&lt;a href="https://github.com/greenart7c3/Citrine/pull/86">ContentProvider API&lt;/a>通过 &lt;code>ContentResolver&lt;/code> 向其他 Android 应用暴露本地 relay 的 event 数据库。与 WebSocket 接口不同，后者要求应用维持持久连接并实现 Nostr relay 协议，而 ContentProvider 通过 Android 原生 IPC 机制提供直接的同步数据库访问。外部应用可以按 ID、pubkey、kind 或日期范围查询 event，也可以插入经验证的新 event，或删除 event，而无需自行管理 socket 连接。&lt;/p>
&lt;h3 id="rust-nostr库">rust-nostr（库）&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr/pull/1183">NIP-40 relay 级支持&lt;/a>在 relay builder 层增加了过期处理。过期 event 现在会在写入存储前被拒绝，并在发送给客户端前被过滤掉，从而不再需要每个数据库实现分别处理过期检查。&lt;/p>
&lt;h3 id="nakcli">nak（CLI）&lt;/h3>
&lt;p>&lt;a href="https://github.com/fiatjaf/nak/pull/91">Blossom 镜像&lt;/a>为该命令行工具实现了 blob 镜像功能。&lt;/p>
&lt;h3 id="mostrop2p-交易">Mostro（P2P 交易）&lt;/h3>
&lt;p>&lt;a href="https://github.com/MostroP2P/mostro/pull/559">开发者费用审计 event&lt;/a>通过 kind 8383 Nostr event 为开发基金付款增加了透明审计轨迹。实现会在成功支付费用后发布非阻塞审计 event，包含订单详情与支付哈希，同时出于隐私考虑排除买卖双方 pubkey。&lt;/p>
&lt;h3 id="mdkmarmot-development-kit">MDK（Marmot Development Kit）&lt;/h3>
&lt;p>三个安全审计修复已落地：&lt;a href="https://github.com/marmot-protocol/mdk/pull/40">Author verification&lt;/a>强制 rumor pubkey 与 MLS 发送者凭证一致，以防止冒充攻击。&lt;a href="https://github.com/marmot-protocol/mdk/pull/41">KeyPackage identity binding&lt;/a>验证凭证身份与 event 签名者匹配。&lt;a href="https://github.com/marmot-protocol/mdk/pull/42">Admin update validation&lt;/a>则防止空管理员集合与非成员管理员分配。&lt;/p>
&lt;h3 id="shopstrmarketplace">Shopstr（Marketplace）&lt;/h3>
&lt;p>&lt;a href="https://github.com/shopstr-eng/shopstr/pull/217">HODL invoice escrow&lt;/a>为实物商品实现了更少信任依赖的支付系统。该架构使用 Alby 的 &lt;code>makeHoldInvoice&lt;/code> 将买家资金锁定在其自己的钱包中，只有在商家确认库存后才触发结算。握手协议通过 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> 加密私信流转：买家发送订单请求，商家返回 HODL invoice，买家支付后资金被锁定，商家确认库存与发货，随后结算释放资金。多商家购物车支持把付款拆分给不同卖家。&lt;/p>
&lt;h3 id="jumbleweb-客户端">Jumble（Web 客户端）&lt;/h3>
&lt;p>&lt;a href="https://github.com/CodyTseng/jumble/pull/713">按 relay 的发现模式&lt;/a>增加了一个开关，用于在特定 relay 上隐藏已关注用户的帖子，从而支持基于语言的发现型信息流，例如 nostr.band/lang/*。该功能会过滤掉作者 pubkey 已出现在用户关注列表中的帖子，并把每个 relay URL 的开关状态持久化到 localStorage。&lt;/p>
&lt;h3 id="white-noise加密消息">White Noise（加密消息）&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/937">媒体上传重试&lt;/a>为失败上传增加了重试选项。&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/927">个人资料编辑警告&lt;/a>提醒用户注意资料变更。在后端，&lt;a href="https://github.com/marmot-protocol/whitenoise-rs/pull/422">whitenoise-rs&lt;/a>修复了 AccountGroup 创建过程中的竞争条件。&lt;/p>
&lt;h3 id="npubcashlightning-address-服务">npub.cash（Lightning Address 服务）&lt;/h3>
&lt;p>&lt;a href="https://github.com/cashubtc/npubcash-server/pull/40">v3 重写&lt;/a>将 monorepo 和服务器迁移到 Bun，增加 SQLite 支持，移除对 v1 的兼容，加入 LUD-21，并增加 mint quote 的实时更新。&lt;/p>
&lt;h3 id="nostr-java库">nostr-java（库）&lt;/h3>
&lt;p>&lt;a href="https://github.com/tcheeric/nostr-java/releases/tag/v1.1.1">v1.1.1&lt;/a>通过&lt;a href="https://github.com/tcheeric/nostr-java/pull/499">两个 PR&lt;/a>发布，包含 WebSocket 处理重构和更稳健的测试。&lt;/p>
&lt;h3 id="nips-仓库">NIPs 仓库&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/pull/2180">NIP-54 Djot 迁移&lt;/a>提出对 wiki 规范的另一项改动：把内容格式从 Asciidoc 切换为 Djot，这是一种语法更简洁的轻量标记语言。该 PR 为 wikilink 引入引用式链接，让 wiki 条目之间的交叉引用在源码中更易读。&lt;a href="https://github.com/nostr-protocol/nips/pull/2179">NIP-XX Quorum&lt;/a>则引入基于 FROST（Flexible Round-Optimized Schnorr Threshold signatures）的 Nostr 群组阈值多重签名治理。Quorum 是一个通过 T-of-N 方案在成员之间共享的 nsec，成员可以自己参与，也可以委托给代表委员会。当委员会发生变化时，旧 nsec 会失效，并分发新的 nsec，而旧委员会的最后一个动作就是对治理转换 event 进行签名。规范定义了成员类型（公开或私有）、选举和投票（普选、罢免投票）、可选的自然语言“法律”，以及关键的 quorum ontology，即 quorum 也可以成为其他 quorum 的成员，从而支持地方加入区域机构这类层级结构。其使用场景涵盖源代码开发、公司董事会、业委会和受管理的社区。&lt;/p>
&lt;hr>
&lt;p>本周以及今年的内容就到这里。你在构建什么？有新闻想分享？希望我们报道你的项目？&lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">通过 NIP-17 私信联系我们&lt;/a>，或直接在 Nostr 上找到我们。&lt;/p></content:encoded></item><item><title>Nostr Compass 第2期</title><link>https://nostrcompass.org/zh/newsletters/2025-12-24-newsletter/</link><pubDate>Wed, 24 Dec 2025 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2025-12-24-newsletter/</guid><description>&lt;p>欢迎回到 Nostr Compass，您的 Nostr 协议生态系统每周指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> 三个 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 签名器实现获得更新：Amber 添加了性能缓存，Aegis 获得 &lt;code>nostrsigner:&lt;/code> URI 支持，Primal Android 加入它们成为完整的本地签名器。Shopstr 推出通过 zaps 进行闪购的 &amp;ldquo;Zapsnags&amp;rdquo; 功能。Mostro 添加了开发基金。四项 NIP 更新已合并，包括公开消息（kind 24）和群组隐私改进。NDK 缓存查询速度提升 162 倍，Applesauce 添加了反应和 NIP-60 钱包支持，Tenex 引入了用于 AI 代理委托的 RAL 架构。在我们的深度解析中，我们解释了 &lt;a href="https://nostrcompass.org/zh/topics/nip-02/">NIP-02&lt;/a>（关注列表）和 &lt;a href="https://nostrcompass.org/zh/topics/nip-10/">NIP-10&lt;/a>（回复线程），这是构建社交时间线和对话的基础规范。&lt;/p>
&lt;h2 id="news">新闻动态&lt;/h2>
&lt;p>&lt;strong>Primal Android 成为 NIP-55 签名器&lt;/strong> - 在上周 &lt;a href="https://nostrcompass.org/zh/newsletters/2025-12-17-newsletter/#primal-android">Nostr Connect 支持&lt;/a> 的基础上，Primal 通过八个合并的拉取请求实现了完整的本地签名功能。该实现包括一个完整的 &lt;code>LocalSignerContentProvider&lt;/code>，通过 Android 的 content provider 接口向其他 Android 应用暴露签名操作，遵循 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 规范。架构清晰地分离了关注点：&lt;code>SignerActivity&lt;/code> 处理面向用户的审批流程，&lt;code>LocalSignerService&lt;/code> 管理后台操作，新的权限系统让用户控制哪些应用可以请求签名。这使 Primal 成为想要在一个应用中保管密钥同时使用其他应用获得不同 Nostr 体验的 Android 用户的 Amber 可行替代方案。&lt;/p>
&lt;p>&lt;strong>Shopstr Zapsnags：通过闪电网络进行闪购&lt;/strong> - Nostr 原生市场推出了 &lt;a href="https://github.com/shopstr-eng/shopstr/pull/211">&amp;ldquo;Zapsnags&amp;rdquo;&lt;/a>，这是一个闪购功能，让买家可以直接从社交信息流中通过单次 zap 购买商品。该实现过滤带有 &lt;code>#shopstr-zapsnag&lt;/code> 标签的 kind 1 笔记，并将其渲染为带有 &amp;ldquo;Zap to Buy&amp;rdquo; 按钮的产品卡片，而不是标准的购物车流程。当买家发送 zap 时，系统使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-57/">NIP-57&lt;/a> 生成支付请求，轮询 kind 9735 zap 收据以确认支付，然后使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> gift wrapping 加密收货信息后私密发送给卖家。该功能在本地存储买家详细信息以便重复购买，并包含一个用于创建闪购列表的商家仪表板。这是社交、支付和隐私原语的巧妙组合，展示了 Nostr 的可组合设计如何实现新颖的商业模式。&lt;/p></description><content:encoded>&lt;p>欢迎回到 Nostr Compass，您的 Nostr 协议生态系统每周指南。&lt;/p>
&lt;p>&lt;strong>本周：&lt;/strong> 三个 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 签名器实现获得更新：Amber 添加了性能缓存，Aegis 获得 &lt;code>nostrsigner:&lt;/code> URI 支持，Primal Android 加入它们成为完整的本地签名器。Shopstr 推出通过 zaps 进行闪购的 &amp;ldquo;Zapsnags&amp;rdquo; 功能。Mostro 添加了开发基金。四项 NIP 更新已合并，包括公开消息（kind 24）和群组隐私改进。NDK 缓存查询速度提升 162 倍，Applesauce 添加了反应和 NIP-60 钱包支持，Tenex 引入了用于 AI 代理委托的 RAL 架构。在我们的深度解析中，我们解释了 &lt;a href="https://nostrcompass.org/zh/topics/nip-02/">NIP-02&lt;/a>（关注列表）和 &lt;a href="https://nostrcompass.org/zh/topics/nip-10/">NIP-10&lt;/a>（回复线程），这是构建社交时间线和对话的基础规范。&lt;/p>
&lt;h2 id="news">新闻动态&lt;/h2>
&lt;p>&lt;strong>Primal Android 成为 NIP-55 签名器&lt;/strong> - 在上周 &lt;a href="https://nostrcompass.org/zh/newsletters/2025-12-17-newsletter/#primal-android">Nostr Connect 支持&lt;/a> 的基础上，Primal 通过八个合并的拉取请求实现了完整的本地签名功能。该实现包括一个完整的 &lt;code>LocalSignerContentProvider&lt;/code>，通过 Android 的 content provider 接口向其他 Android 应用暴露签名操作，遵循 &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 规范。架构清晰地分离了关注点：&lt;code>SignerActivity&lt;/code> 处理面向用户的审批流程，&lt;code>LocalSignerService&lt;/code> 管理后台操作，新的权限系统让用户控制哪些应用可以请求签名。这使 Primal 成为想要在一个应用中保管密钥同时使用其他应用获得不同 Nostr 体验的 Android 用户的 Amber 可行替代方案。&lt;/p>
&lt;p>&lt;strong>Shopstr Zapsnags：通过闪电网络进行闪购&lt;/strong> - Nostr 原生市场推出了 &lt;a href="https://github.com/shopstr-eng/shopstr/pull/211">&amp;ldquo;Zapsnags&amp;rdquo;&lt;/a>，这是一个闪购功能，让买家可以直接从社交信息流中通过单次 zap 购买商品。该实现过滤带有 &lt;code>#shopstr-zapsnag&lt;/code> 标签的 kind 1 笔记，并将其渲染为带有 &amp;ldquo;Zap to Buy&amp;rdquo; 按钮的产品卡片，而不是标准的购物车流程。当买家发送 zap 时，系统使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-57/">NIP-57&lt;/a> 生成支付请求，轮询 kind 9735 zap 收据以确认支付，然后使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a> gift wrapping 加密收货信息后私密发送给卖家。该功能在本地存储买家详细信息以便重复购买，并包含一个用于创建闪购列表的商家仪表板。这是社交、支付和隐私原语的巧妙组合，展示了 Nostr 的可组合设计如何实现新颖的商业模式。&lt;/p>
&lt;p>&lt;strong>Mostro 推出开发基金&lt;/strong> - &lt;a href="https://nostrcompass.org/zh/topics/nip-69/">NIP-69&lt;/a> P2P 比特币交易平台&lt;a href="https://github.com/MostroP2P/mostro/pull/555">实现了可配置的开发费用&lt;/a>以支持可持续维护。运营商可以将 &lt;code>dev_fee_percentage&lt;/code> 设置在 Mostro 交易费的 10-100% 之间（默认为 30%），在每次成功交易时自动路由到开发基金。该实现添加了三个数据库列（&lt;code>dev_fee&lt;/code>、&lt;code>dev_fee_paid&lt;/code>、&lt;code>dev_fee_payment_hash&lt;/code>）来跟踪贡献，并在守护进程启动时验证百分比。技术文档位于 &lt;a href="https://github.com/MostroP2P/mostro/blob/main/docs/DEV_FEE.md">&lt;code>docs/DEV_FEE.md&lt;/code>&lt;/a>。这种选择加入模式让运营商支持持续开发，同时保持费用分配的完全透明。&lt;/p>
&lt;h2 id="nip-updates">NIP 更新&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a> 的近期变更：&lt;/p>
&lt;p>&lt;strong>新增 NIPs：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-a4/">NIP-A4&lt;/a>（公开消息，kind 24）&lt;/strong> - 一种为广泛客户端支持设计的通知屏幕消息新 kind（&lt;a href="https://github.com/nostr-protocol/nips/pull/1988">#1988&lt;/a>）。与线程对话不同，这些消息没有聊天历史或消息链的概念。它们使用 &lt;code>q&lt;/code> 标签（引用）而不是 &lt;code>e&lt;/code> 标签以避免线程复杂性，使其非常适合出现在收件人通知信息流中而不创建对话状态的简单公开通知。&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>重要变更：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-29/">NIP-29&lt;/a>&lt;/strong> - 群组语义的重大澄清（&lt;a href="https://github.com/nostr-protocol/nips/pull/2106">#2106&lt;/a>）。&lt;code>closed&lt;/code> 标签现在意味着&amp;quot;无法写入&amp;quot;（非成员只读），与加入机制解耦。新的 &lt;code>hidden&lt;/code> 标签阻止中继向非成员提供元数据或成员事件，实现真正的私密群组，没有带外邀请就无法发现。&lt;code>private&lt;/code> 标签控制消息可见性，同时仍允许公开元数据用于发现。&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-51/">NIP-51&lt;/a>&lt;/strong> - 添加了 kind 30006 用于策展图片集（&lt;a href="https://github.com/nostr-protocol/nips/pull/2170">#2170&lt;/a>），遵循 30004（文章）和 30005（视频）的模式。已在 Nostria 中实现。&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a>&lt;/strong> - 澄清了 Android 签名器的连接启动（&lt;a href="https://github.com/nostr-protocol/nips/pull/2166">#2166&lt;/a>）。实现多用户会话的开发者误用了 &lt;code>get_public_key&lt;/code>，从后台进程调用它。更新后的规范建议仅在初始连接时调用一次，防止常见的实现陷阱。&lt;/li>
&lt;/ul>
&lt;h2 id="nip-deep-dive-nip-02-and-nip-10">NIP 深度解析：NIP-02 和 NIP-10&lt;/h2>
&lt;p>本周我们介绍两个对社交功能至关重要的 NIP：客户端如何知道您关注了谁以及对话如何形成线程。&lt;/p>
&lt;h3 id="nip-02zhtopicsnip-02关注列表">&lt;a href="https://nostrcompass.org/zh/topics/nip-02/">NIP-02&lt;/a>：关注列表&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/02.md">NIP-02&lt;/a> 定义了 kind 3 事件，用于存储您的关注列表。这个简单的机制驱动着使时间线成为可能的社交图谱。&lt;/p>
&lt;p>&lt;strong>结构：&lt;/strong> kind 3 事件包含列出关注公钥的 &lt;code>p&lt;/code> 标签：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;d7a8f...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a3b9c...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1734912000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">3&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;91cf9..af5f&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://alicerelay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;alice&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;14aeb..8dad&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://bobrelay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;bob&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;612ae..982b&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;e4f8a...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>每个 &lt;code>p&lt;/code> 标签有四个位置：标签名称、关注的公钥（十六进制）、可选的中继 URL 提示和可选的&amp;quot;昵称&amp;quot;（本地昵称）。中继提示告诉其他客户端在哪里找到该用户的事件。昵称让您可以为联系人分配易记的名称，而不依赖于他们自己声明的显示名称。&lt;/p>
&lt;p>&lt;strong>可替换行为：&lt;/strong> Kind 3 属于可替换范围（0, 3, 10000-19999），因此中继每个公钥仅保留最新版本。当您关注新用户时，您的客户端发布一个完整的新 kind 3，包含所有关注者加上新关注者。这意味着关注列表每次必须是完整的；您不能发布增量更新。&lt;/p>
&lt;p>&lt;strong>构建时间线：&lt;/strong> 要构建主页信息流，客户端获取用户的 kind 3，提取所有 &lt;code>p&lt;/code> 标签公钥，然后订阅来自这些作者的 kind 1 事件：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>[&lt;span style="color:#e6db74">&amp;#34;REQ&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;home&amp;#34;&lt;/span>, {&lt;span style="color:#f92672">&amp;#34;kinds&amp;#34;&lt;/span>: [&lt;span style="color:#ae81ff">1&lt;/span>], &lt;span style="color:#f92672">&amp;#34;authors&amp;#34;&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;91cf9...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;14aeb...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;612ae...&amp;#34;&lt;/span>], &lt;span style="color:#f92672">&amp;#34;limit&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">50&lt;/span>}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>中继返回匹配的笔记，客户端渲染它们。kind 3 中的中继提示帮助客户端知道要查询哪些中继以获取每个关注用户的内容。&lt;/p>
&lt;p>&lt;strong>昵称和身份：&lt;/strong> 昵称字段实现了去中心化命名方案。与其信任用户在其个人资料中声称的名称，您可以分配自己的标签。客户端可能显示 &amp;ldquo;alice (我的姐姐)&amp;quot;，其中 &amp;ldquo;alice&amp;rdquo; 来自她的 kind 0 个人资料，&amp;ldquo;我的姐姐&amp;rdquo; 是您的昵称。这提供了全局用户名无法提供的上下文。&lt;/p>
&lt;p>&lt;strong>实际考虑：&lt;/strong> 因为 kind 3 事件是可替换的且必须完整，客户端在更新时应保留未知标签。如果另一个客户端添加了您的客户端不理解的标签，盲目覆盖会丢失该数据。追加新关注而不是从头重建。&lt;/p>
&lt;h3 id="nip-10zhtopicsnip-10文本笔记线程">&lt;a href="https://nostrcompass.org/zh/topics/nip-10/">NIP-10&lt;/a>：文本笔记线程&lt;/h3>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips/blob/master/10.md">NIP-10&lt;/a> 规定了 kind 1 笔记如何相互引用形成回复线程。理解这一点对于构建对话视图至关重要。&lt;/p>
&lt;p>&lt;strong>问题：&lt;/strong> 当有人回复一条笔记时，客户端需要知道：这是回复什么的？对话的根是什么？谁应该被通知？NIP-10 通过 &lt;code>e&lt;/code> 标签（事件引用）和 &lt;code>p&lt;/code> 标签（公钥提及）回答这些问题。&lt;/p>
&lt;p>&lt;strong>标记标签（首选）：&lt;/strong> 现代客户端在 &lt;code>e&lt;/code> 标签中使用显式标记：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;f9c2e...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;a3b9c...&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1734912345&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;abc123...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;root&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;def456...&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;reply&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;91cf9...&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;14aeb...&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;说得好！我同意。&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;b7d3f...&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>&lt;code>root&lt;/code> 标记指向开始线程的原始笔记。&lt;code>reply&lt;/code> 标记指向正在回复的特定笔记。如果直接回复根，只使用 &lt;code>root&lt;/code>（不需要 &lt;code>reply&lt;/code> 标签）。这个区分对于渲染很重要：&lt;code>reply&lt;/code> 决定线程视图中的缩进，而 &lt;code>root&lt;/code> 将所有回复分组在一起。&lt;/p>
&lt;p>&lt;strong>线程规则：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>直接回复根：一个带有 &lt;code>root&lt;/code> 标记的 &lt;code>e&lt;/code> 标签&lt;/li>
&lt;li>回复一个回复：两个 &lt;code>e&lt;/code> 标签，一个 &lt;code>root&lt;/code> 和一个 &lt;code>reply&lt;/code>&lt;/li>
&lt;li>&lt;code>root&lt;/code> 在整个线程中保持不变；&lt;code>reply&lt;/code> 根据您回复的内容而变化&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>用于通知的公钥标签：&lt;/strong> 包含应被通知的每个人的 &lt;code>p&lt;/code> 标签。至少标记您回复笔记的作者。惯例是也包含来自父事件的所有 &lt;code>p&lt;/code> 标签（这样对话中的每个人都保持在循环中），加上您在内容中 @提及的任何用户。&lt;/p>
&lt;p>&lt;strong>中继提示：&lt;/strong> &lt;code>e&lt;/code> 和 &lt;code>p&lt;/code> 标签的第三个位置可以包含一个中继 URL，表示可能在哪里找到该事件或用户的内容。这帮助客户端获取引用的内容，即使它们没有连接到原始中继。&lt;/p>
&lt;p>&lt;strong>已弃用的位置标签：&lt;/strong> 早期 Nostr 实现从标签位置而不是标记推断含义：第一个 &lt;code>e&lt;/code> 标签是根，最后一个是回复，中间的是提及。这种方法已弃用，因为它会产生歧义。如果您看到没有标记的 &lt;code>e&lt;/code> 标签，它们可能来自旧客户端。现代实现应始终使用显式标记。&lt;/p>
&lt;p>&lt;strong>构建线程视图：&lt;/strong> 要显示线程，获取根事件，然后查询所有具有引用该根的 &lt;code>e&lt;/code> 标签的事件：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>[&lt;span style="color:#e6db74">&amp;#34;REQ&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;thread&amp;#34;&lt;/span>, {&lt;span style="color:#f92672">&amp;#34;kinds&amp;#34;&lt;/span>: [&lt;span style="color:#ae81ff">1&lt;/span>], &lt;span style="color:#f92672">&amp;#34;#e&amp;#34;&lt;/span>: [&lt;span style="color:#e6db74">&amp;#34;&amp;lt;root-event-id&amp;gt;&amp;#34;&lt;/span>]}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>按 &lt;code>created_at&lt;/code> 排序结果，使用 &lt;code>reply&lt;/code> 标记构建树结构。&lt;code>reply&lt;/code> 指向根的事件是顶级回复；&lt;code>reply&lt;/code> 指向另一个回复的事件是嵌套响应。&lt;/p>
&lt;h2 id="releases">版本发布&lt;/h2>
&lt;p>&lt;strong>Zeus v0.12.0&lt;/strong> - 在上周 &lt;a href="https://nostrcompass.org/zh/newsletters/2025-12-17-newsletter/#zeus-lightning-wallet">NWC 并行支付支持&lt;/a> 的基础上，闪电钱包的&lt;a href="https://github.com/ZeusLN/zeus/releases/tag/v0.12.0">重大版本&lt;/a>发布了完整的 &lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a> Nostr Wallet Connect 服务，支持自定义中继和预算跟踪。&lt;a href="https://github.com/ZeusLN/zeus/pull/3455">预算重新加载修复&lt;/a>确保连接使用当前限制。&lt;a href="https://github.com/ZeusLN/zeus/pull/3460">闪电地址复制&lt;/a>不再包含 &lt;code>lightning:&lt;/code> 前缀，修复了在 Nostr 个人资料字段中的粘贴问题。&lt;/p>
&lt;p>&lt;strong>Amber v4.0.6&lt;/strong> - Android &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 签名器&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.0.6">添加了签名操作的性能缓存&lt;/a>并改进了解密格式错误内容时的错误处理。连接可靠性通过中继连接事件的重试逻辑得到改善，多个崩溃修复解决了无效 &lt;code>nostrconnect://&lt;/code> URI 和权限屏幕交互的边缘情况。&lt;/p>
&lt;p>&lt;strong>nak v0.17.3&lt;/strong> - 命令行 Nostr 工具的&lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.17.3">最新版本&lt;/a>将 LMDB 构建限制在 Linux，修复了跨平台编译问题。&lt;/p>
&lt;p>&lt;strong>Aegis v0.3.4&lt;/strong> - 跨平台 Nostr 签名器&lt;a href="https://github.com/ZharlieW/Aegis/releases/tag/v0.3.4">添加了对&lt;/a> &lt;a href="https://nostrcompass.org/zh/topics/nip-55/">NIP-55&lt;/a> 中定义的 &lt;code>nostrsigner:&lt;/code> URI 方案的支持，与 Amber 的连接流程匹配。本地中继数据现在可以导入和导出用于备份，该版本还包括中继套接字错误的错误修复和本地中继界面的 UI 改进。&lt;/p>
&lt;h2 id="notable-code-and-documentation-changes">重要代码和文档变更&lt;/h2>
&lt;p>&lt;em>这些是开放的拉取请求和早期工作，非常适合在合并前获得反馈。如果有什么引起您的兴趣，考虑审查或评论！&lt;/em>&lt;/p>
&lt;h3 id="damus">Damus（iOS）&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/damus/pull/3469">静音列表持久化&lt;/a>修复了冷启动时静音列表被清除的问题。修复添加了防止应用初始化期间意外覆盖的保护措施。&lt;a href="https://github.com/damus-io/damus/pull/3457">个人资料流时序&lt;/a>消除了缓存个人资料出现前约 1 秒的延迟。以前，视图等待订阅任务重新启动；现在 &lt;code>streamProfile()&lt;/code> 立即从 NostrDB 产生缓存数据，消除了显示缩写公钥和占位符图像的窗口。&lt;/p>
&lt;h3 id="white-noise">White Noise（加密消息）&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/919">实时消息流&lt;/a>用基于流的架构替换了之前的轮询机制。新的 &lt;code>ChatStreamNotifier&lt;/code> 直接消费 Rust SDK 的消息流，保持时间顺序并高效处理增量更新。测试显示响应性显著改善。&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/921">聊天列表 API&lt;/a> 添加了 &lt;code>get_chat_list&lt;/code> 用于检索对话摘要，&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/905">稳定排序修复&lt;/a>通过使用 &lt;code>createdAt&lt;/code> 加消息 ID 作为决胜条件防止消息重新排序循环。&lt;/p>
&lt;h3 id="ndk">NDK（库）&lt;/h3>
&lt;p>两个拉取请求带来了显著的缓存性能改进。&lt;a href="https://github.com/nostr-dev-kit/ndk/pull/371">PR #371&lt;/a> 修复了一个错误，从 SQLite 缓存读取的事件会立即被写回，导致应用启动时 100% 重复写入。修复添加了 &lt;code>fromCache&lt;/code> 保护并通过内存中的 Set 实现 O(1) 重复检查。对于小结果集（&amp;lt;100 事件），直接 JSON 传输取代二进制编码开销。&lt;a href="https://github.com/nostr-dev-kit/ndk/pull/372">PR #372&lt;/a> 移除了缓存事件不必要的 &lt;code>seenEvent&lt;/code> 调用。LRU 缓存查找每个事件花费 0.24-0.64ms；对于 5,700 个缓存事件，这增加了约 1.4 秒的开销。结果：缓存查询从约 3,690ms 降至约 22ms（快 162 倍）。&lt;/p>
&lt;h3 id="rust-nostr">rust-nostr（库）&lt;/h3>
&lt;p>&lt;a href="https://github.com/rust-nostr/nostr/pull/1176">多过滤器 REQ 支持&lt;/a>在之前的重构中被移除后恢复。SDK 再次接受订阅请求的 &lt;code>Vec&amp;lt;Filter&amp;gt;&lt;/code>，实现将多个过滤条件与 OR 逻辑组合的高效查询。&lt;a href="https://github.com/rust-nostr/nostr/pull/1156">中继来源&lt;/a>被添加到 &lt;code>stream_events*&lt;/code> 方法，因此每个流式事件现在包括它来自的 &lt;code>RelayUrl&lt;/code> 和表示成功或失败的 &lt;code>Result&lt;/code>，对于跟踪中继可靠性和调试连接问题很有用。&lt;a href="https://github.com/rust-nostr/nostr/pull/1179">安全修复&lt;/a>在 RUSTSEC-2024-0421 之后移除了 &lt;code>url-fork&lt;/code> 依赖，消除了一个已知漏洞。&lt;/p>
&lt;h3 id="applesauce">Applesauce（库）&lt;/h3>
&lt;p>驱动 &lt;a href="https://github.com/hzrd149/nostrudel">noStrudel&lt;/a> 的 TypeScript 库本周有重大开发。新模型包括&lt;a href="https://github.com/hzrd149/applesauce">反应系统&lt;/a>和用户群组转换。钱包功能通过 NIP-60 支持、发送标签和改进的代币恢复工具得到扩展。新的 &lt;code>user.directMessageRelays$&lt;/code> 属性暴露了 DM 中继配置。所有操作都被重构为使用异步接口（移除异步生成器），错误修复解决了加密内容恢复和基于时间的事件过滤边缘情况。&lt;/p>
&lt;h3 id="tenex">Tenex（AI 代理）&lt;/h3>
&lt;p>基于 Nostr 构建的&lt;a href="https://github.com/tenex-chat/tenex">多代理协调系统&lt;/a>在&lt;a href="https://github.com/pablof7z/tenex/pull/38">五个合并的 PR&lt;/a> 中引入了 RAL（请求-操作-生命周期）架构。RAL 使代理能够在委托任务时暂停并在结果到达时恢复，具有对话范围的状态持久化。委托工具（&lt;code>delegate&lt;/code>、&lt;code>ask&lt;/code>、&lt;code>delegate_followup&lt;/code>、&lt;code>delegate_external&lt;/code>）现在发布 Nostr 事件并返回停止信号而不是阻塞。重构包括 AI SDK v6 迁移、用于确定性 LLM 交互记录的 VCR 测试基础设施和多模态图像支持。&lt;/p>
&lt;hr>
&lt;p>本周就到这里。正在构建什么？有新闻要分享？希望我们报道您的项目？&lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">通过 NIP-17 私信联系我们&lt;/a>或在 Nostr 上找到我们。&lt;/p></content:encoded></item><item><title>Nostr Compass 第1期</title><link>https://nostrcompass.org/zh/newsletters/2025-12-17-newsletter/</link><pubDate>Mon, 15 Dec 2025 00:00:00 +0000</pubDate><guid>https://nostrcompass.org/zh/newsletters/2025-12-17-newsletter/</guid><description>&lt;p>欢迎阅读 Nostr Compass，这是一份专注于 Nostr 协议生态系统的周刊。我们的使命是让开发者、中继运营者和建设者了解网络中的重要发展动态。我们以技术准确性、中立性和深度记录协议演进，涵盖从 NIP 提案到客户端发布再到实现最佳实践的各个方面。&lt;/p>
&lt;p>Nostr Compass 的灵感来自 &lt;a href="https://bitcoinops.org/">Bitcoin Optech&lt;/a>，他们多年来致力于推进比特币技术知识，为以协议为中心的新闻通讯树立了标杆。我们感谢他们的榜样，并希望为 Nostr 生态系统带来同样的严谨态度。&lt;/p>
&lt;p>本创刊号确立了我们的周刊格式。每周三，我们将为您带来 NIP 更新、版本发布说明、开发亮点和技术指南。无论您是在构建客户端、运营中继还是为协议做贡献，Nostr Compass 都致力于成为您了解生态系统动态的可靠信息来源。&lt;/p>
&lt;h2 id="什么是-nostr">什么是 Nostr？&lt;/h2>
&lt;p>&lt;em>由于这是我们的创刊号，我们从 Nostr 的工作原理入门开始。老读者可以&lt;a href="https://nostrcompass.org/zh/newsletters/2025-12-17-newsletter/#%e6%96%b0%e9%97%bb%e5%8a%a8%e6%80%81">跳到下一节&lt;/a>。&lt;/em>&lt;/p>
&lt;p>Nostr（Notes and Other Stuff Transmitted by Relays，即&amp;quot;通过中继传输的笔记和其他内容&amp;quot;）是一个用于社交网络和消息传递的去中心化协议。与传统平台不同，Nostr 没有中央服务器、没有控制它的公司，也没有单点故障。用户通过加密密钥对拥有自己的身份，内容通过任何人都可以运行的独立中继服务器进行流转。&lt;/p>
&lt;p>&lt;strong>工作原理：&lt;/strong> 用户生成一个密钥对（私钥称为 nsec，公钥称为 npub）。私钥用于签署称为&amp;quot;事件&amp;quot;的消息，公钥则作为您的身份标识。事件被发送到中继，中继存储并转发给其他用户。由于您控制着自己的密钥，您可以在不同客户端或中继之间切换而不会丢失身份或关注者。&lt;/p>
&lt;p>&lt;strong>意义何在：&lt;/strong> Nostr 通过中继多样性提供抗审查能力（如果一个中继封禁您，其他中继仍可提供您的内容）、可移植性（您的身份可在任何 Nostr 应用中使用）和互操作性（所有 Nostr 客户端使用相同的协议）。没有算法决定您看什么，没有广告，也没有数据采集。&lt;/p>
&lt;p>&lt;strong>当前生态系统：&lt;/strong> Nostr 支持微博客（类似 Twitter/X）、长文内容（类似 Medium）、私信、市场、直播等功能。客户端包括 Damus（iOS）、Amethyst（Android）、Primal、Coracle 等数十种。闪电网络集成通过&amp;quot;zaps&amp;quot;实现即时支付。协议通过 NIPs（Nostr Implementation Possibilities，即 Nostr 实现可能性）持续演进，这是社区驱动的规范，用于扩展功能。&lt;/p>
&lt;h2 id="news">新闻动态&lt;/h2>
&lt;p>&lt;strong>NIP-BE 合并：蓝牙低功耗支持&lt;/strong> - 协议新增了一项重要能力，&lt;a href="https://github.com/nostr-protocol/nips/pull/1979">已合并到协议中&lt;/a>。&lt;a href="https://nostrcompass.org/zh/topics/nip-be/">NIP-BE&lt;/a> 规定了 Nostr 应用如何通过蓝牙低功耗进行通信和同步。这使离线应用能够在没有互联网连接的情况下跨附近设备同步数据。该规范将 WebSocket 中继模式适配到 BLE 的约束条件，使用 DEFLATE 压缩和分块消息来处理 BLE 的小 MTU 大小（20-256 字节）。设备根据 UUID 比较协商角色，UUID 较高的设备成为 GATT 服务器。&lt;/p></description><content:encoded>&lt;p>欢迎阅读 Nostr Compass，这是一份专注于 Nostr 协议生态系统的周刊。我们的使命是让开发者、中继运营者和建设者了解网络中的重要发展动态。我们以技术准确性、中立性和深度记录协议演进，涵盖从 NIP 提案到客户端发布再到实现最佳实践的各个方面。&lt;/p>
&lt;p>Nostr Compass 的灵感来自 &lt;a href="https://bitcoinops.org/">Bitcoin Optech&lt;/a>，他们多年来致力于推进比特币技术知识，为以协议为中心的新闻通讯树立了标杆。我们感谢他们的榜样，并希望为 Nostr 生态系统带来同样的严谨态度。&lt;/p>
&lt;p>本创刊号确立了我们的周刊格式。每周三，我们将为您带来 NIP 更新、版本发布说明、开发亮点和技术指南。无论您是在构建客户端、运营中继还是为协议做贡献，Nostr Compass 都致力于成为您了解生态系统动态的可靠信息来源。&lt;/p>
&lt;h2 id="什么是-nostr">什么是 Nostr？&lt;/h2>
&lt;p>&lt;em>由于这是我们的创刊号，我们从 Nostr 的工作原理入门开始。老读者可以&lt;a href="https://nostrcompass.org/zh/newsletters/2025-12-17-newsletter/#%e6%96%b0%e9%97%bb%e5%8a%a8%e6%80%81">跳到下一节&lt;/a>。&lt;/em>&lt;/p>
&lt;p>Nostr（Notes and Other Stuff Transmitted by Relays，即&amp;quot;通过中继传输的笔记和其他内容&amp;quot;）是一个用于社交网络和消息传递的去中心化协议。与传统平台不同，Nostr 没有中央服务器、没有控制它的公司，也没有单点故障。用户通过加密密钥对拥有自己的身份，内容通过任何人都可以运行的独立中继服务器进行流转。&lt;/p>
&lt;p>&lt;strong>工作原理：&lt;/strong> 用户生成一个密钥对（私钥称为 nsec，公钥称为 npub）。私钥用于签署称为&amp;quot;事件&amp;quot;的消息，公钥则作为您的身份标识。事件被发送到中继，中继存储并转发给其他用户。由于您控制着自己的密钥，您可以在不同客户端或中继之间切换而不会丢失身份或关注者。&lt;/p>
&lt;p>&lt;strong>意义何在：&lt;/strong> Nostr 通过中继多样性提供抗审查能力（如果一个中继封禁您，其他中继仍可提供您的内容）、可移植性（您的身份可在任何 Nostr 应用中使用）和互操作性（所有 Nostr 客户端使用相同的协议）。没有算法决定您看什么，没有广告，也没有数据采集。&lt;/p>
&lt;p>&lt;strong>当前生态系统：&lt;/strong> Nostr 支持微博客（类似 Twitter/X）、长文内容（类似 Medium）、私信、市场、直播等功能。客户端包括 Damus（iOS）、Amethyst（Android）、Primal、Coracle 等数十种。闪电网络集成通过&amp;quot;zaps&amp;quot;实现即时支付。协议通过 NIPs（Nostr Implementation Possibilities，即 Nostr 实现可能性）持续演进，这是社区驱动的规范，用于扩展功能。&lt;/p>
&lt;h2 id="news">新闻动态&lt;/h2>
&lt;p>&lt;strong>NIP-BE 合并：蓝牙低功耗支持&lt;/strong> - 协议新增了一项重要能力，&lt;a href="https://github.com/nostr-protocol/nips/pull/1979">已合并到协议中&lt;/a>。&lt;a href="https://nostrcompass.org/zh/topics/nip-be/">NIP-BE&lt;/a> 规定了 Nostr 应用如何通过蓝牙低功耗进行通信和同步。这使离线应用能够在没有互联网连接的情况下跨附近设备同步数据。该规范将 WebSocket 中继模式适配到 BLE 的约束条件，使用 DEFLATE 压缩和分块消息来处理 BLE 的小 MTU 大小（20-256 字节）。设备根据 UUID 比较协商角色，UUID 较高的设备成为 GATT 服务器。&lt;/p>
&lt;p>&lt;strong>MIP-05：隐私保护推送通知&lt;/strong> - &lt;a href="https://nostrcompass.org/zh/topics/marmot/">Marmot 协议&lt;/a> 发布了 &lt;a href="https://nostrcompass.org/zh/topics/mip-05/">MIP-05&lt;/a>（&lt;a href="https://github.com/marmot-protocol/mips/blob/main/mip-05.md">规范&lt;/a>），这是一个保护隐私的推送通知规范。传统推送系统需要服务器知道设备令牌和用户身份；MIP-05 通过使用 ECDH+HKDF 和 ChaCha20-Poly1305 加密设备令牌来解决这个问题，使用临时密钥防止关联。三事件 gossip 协议（kinds 447-449）在群组成员之间同步加密令牌，通知使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a> gift wrapping 和诱饵令牌来隐藏群组大小。这使 WhiteNoise 和其他 Marmot 客户端能够在不损害用户隐私的情况下提供及时通知。&lt;/p>
&lt;p>&lt;strong>Blossom BUD-10：新 URI 方案&lt;/strong> - &lt;a href="https://nostrcompass.org/zh/topics/blossom/">Blossom&lt;/a> 媒体协议通过 &lt;a href="https://nostrcompass.org/zh/topics/bud-10/">BUD-10&lt;/a>（&lt;a href="https://github.com/hzrd149/blossom/blob/master/buds/10.md">规范&lt;/a>）获得自定义 URI 方案。新的 &lt;code>blossom:&amp;lt;sha256&amp;gt;.ext&lt;/code> 格式嵌入文件哈希、扩展名、大小、多个服务器提示和用于 &lt;a href="https://nostrcompass.org/zh/topics/bud-03/">BUD-03&lt;/a> 服务器发现的作者公钥。这使 blob 链接比静态 HTTP URL 更具弹性，能够自动在服务器之间进行回退。&lt;/p>
&lt;p>&lt;strong>Shopstr 市场更新&lt;/strong> - Nostr 原生市场&lt;a href="https://github.com/shopstr-eng/shopstr/pull/202">实现了 Nostr Wallet Connect&lt;/a>（&lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a>）支付功能，使用 &lt;a href="https://nostrcompass.org/zh/topics/nip-40/">NIP-40&lt;/a> &lt;a href="https://github.com/shopstr-eng/shopstr/pull/203">添加了商品过期功能&lt;/a>，并为卖家引入了&lt;a href="https://github.com/shopstr-eng/shopstr/pull/210">折扣码&lt;/a>。&lt;/p>
&lt;h2 id="nip-updates">NIP 更新&lt;/h2>
&lt;p>&lt;a href="https://github.com/nostr-protocol/nips">NIPs 仓库&lt;/a> 的近期变更：&lt;/p>
&lt;p>&lt;strong>新增 NIPs：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-be/">NIP-BE&lt;/a>&lt;/strong> - 蓝牙低功耗消息传递和设备同步（&lt;a href="https://github.com/nostr-protocol/nips/pull/1979">#1979&lt;/a>）&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-63/">NIP-63&lt;/a>&lt;/strong> - 付费墙/付费内容标准，用于处理协议内的门控内容（&lt;a href="https://github.com/nostr-protocol/nips/pull/2156">#2156&lt;/a>）&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>重要变更：&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-24/">NIP-24&lt;/a>&lt;/strong> - 在 Kind 0 用户元数据中添加可选的 &lt;code>languages&lt;/code> 数组，允许用户使用 IETF BCP 47 标签指定多种首选语言，以改进内容发现和中继匹配（&lt;a href="https://github.com/nostr-protocol/nips/pull/2159">#2159&lt;/a>）&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-69/">NIP-69&lt;/a>&lt;/strong> - 为 P2P 交易添加订单过期支持，包含 &lt;code>expires_at&lt;/code> 和 &lt;code>expiration&lt;/code> 标签（&lt;a href="https://github.com/nostr-protocol/nips/pull/2118">#2118&lt;/a>）&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-59/">NIP-59&lt;/a>&lt;/strong> - Gift wrap 事件现在可以通过 NIP-09/NIP-62 请求删除（&lt;a href="https://github.com/nostr-protocol/nips/pull/2131">#2131&lt;/a>）&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-51/">NIP-51&lt;/a>&lt;/strong> - 从通用书签中移除了 hashtag 和 URL 标签；hashtags 现在使用 kind 30015（&lt;a href="https://github.com/nostr-protocol/nips/pull/2133">#2133&lt;/a>）&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-18/">NIP-18&lt;/a>&lt;/strong> - 改进了可替换事件的通用转发，支持 &lt;code>a&lt;/code> 标签（&lt;a href="https://github.com/nostr-protocol/nips/pull/2132">#2132&lt;/a>）&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-17/">NIP-17&lt;/a>&lt;/strong> - 改进措辞并为私信添加 kind 7 反应支持（&lt;a href="https://github.com/nostr-protocol/nips/pull/2098">#2098&lt;/a>）&lt;/li>
&lt;li>&lt;strong>&lt;a href="https://nostrcompass.org/zh/topics/nip-11/">NIP-11&lt;/a>&lt;/strong> - 添加 &lt;code>self&lt;/code> 字段用于中继公钥标识（&lt;a href="https://github.com/nostr-protocol/nips/pull/1764">#1764&lt;/a>）&lt;/li>
&lt;/ul>
&lt;h2 id="nip-deep-dive-nip-01-and-nip-19">NIP 深度解析：NIP-01 和 NIP-19&lt;/h2>
&lt;p>在本创刊号中，我们介绍两个每位 Nostr 开发者都应该了解的基础 NIP。请参阅我们的主题页面 &lt;a href="https://nostrcompass.org/zh/topics/nip-01/">NIP-01&lt;/a> 和 &lt;a href="https://nostrcompass.org/zh/topics/nip-19/">NIP-19&lt;/a>。&lt;/p>
&lt;h3 id="nip-01基础协议">NIP-01：基础协议&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-01/">NIP-01&lt;/a> 定义了核心协议。Nostr 中的一切都建立在这个规范之上。&lt;/p>
&lt;p>&lt;strong>事件&lt;/strong> 是唯一的对象类型。每个事件包含：&lt;/p>
&lt;ul>
&lt;li>&lt;code>id&lt;/code>：序列化事件的 SHA256 哈希（事件的唯一标识符）&lt;/li>
&lt;li>&lt;code>pubkey&lt;/code>：创建者的公钥（32 字节十六进制，secp256k1）&lt;/li>
&lt;li>&lt;code>created_at&lt;/code>：Unix 时间戳&lt;/li>
&lt;li>&lt;code>kind&lt;/code>：整数，表示事件类型&lt;/li>
&lt;li>&lt;code>tags&lt;/code>：数组的数组，用于元数据&lt;/li>
&lt;li>&lt;code>content&lt;/code>：载荷（解释取决于 kind）&lt;/li>
&lt;li>&lt;code>sig&lt;/code>：Schnorr 签名，证明公钥创建了此事件&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Kinds&lt;/strong> 决定中继如何存储事件：&lt;/p>
&lt;ul>
&lt;li>常规事件（1, 2, 4-44, 1000-9999）：正常存储，保留所有版本&lt;/li>
&lt;li>可替换事件（0, 3, 10000-19999）：每个公钥仅保留最新版本&lt;/li>
&lt;li>临时事件（20000-29999）：不存储，仅转发给订阅者&lt;/li>
&lt;li>可寻址事件（30000-39999）：每个公钥 + kind + &lt;code>d&lt;/code> 标签组合的最新版本&lt;/li>
&lt;/ul>
&lt;p>Kind 0 是用户元数据（个人资料），kind 1 是文本笔记（基本帖子），kind 3 是关注列表。&lt;/p>
&lt;p>&lt;strong>Kind 1：文本笔记&lt;/strong> 是社交 Nostr 的核心。kind 1 事件是短文帖子，类似于推文。&lt;code>content&lt;/code> 字段包含消息文本（纯文本，但客户端通常渲染 markdown）。标签启用回复、提及和引用：&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-json" data-lang="json">&lt;span style="display:flex;">&lt;span>{
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;id&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;32-byte-hex&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;pubkey&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;32-byte-hex&amp;gt;&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;created_at&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1734480000&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;kind&amp;#34;&lt;/span>: &lt;span style="color:#ae81ff">1&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;content&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;Hello Nostr! Check out @jb55&amp;#39;s work on Damus.&amp;#34;&lt;/span>,
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;tags&amp;#34;&lt;/span>: [
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;e&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;replied-to-event-id&amp;gt;&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;wss://relay.example.com&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;reply&amp;#34;&lt;/span>],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> [&lt;span style="color:#e6db74">&amp;#34;p&amp;#34;&lt;/span>, &lt;span style="color:#e6db74">&amp;#34;&amp;lt;jb55-pubkey&amp;gt;&amp;#34;&lt;/span>]
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> ],
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span> &lt;span style="color:#f92672">&amp;#34;sig&amp;#34;&lt;/span>: &lt;span style="color:#e6db74">&amp;#34;&amp;lt;64-byte-hex&amp;gt;&amp;#34;&lt;/span>
&lt;/span>&lt;/span>&lt;span style="display:flex;">&lt;span>}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>带有 &amp;ldquo;reply&amp;rdquo; 标记的 &lt;code>e&lt;/code> 标签表示这是一个回复（参见 &lt;a href="https://nostrcompass.org/zh/topics/nip-10/">NIP-10&lt;/a> 了解线程约定）。&lt;code>p&lt;/code> 标签提及一个用户，使客户端能够通知他们并渲染他们的名字而不是原始公钥。客户端获取被提及用户的 kind 0 事件以获取其显示名称和头像。&lt;/p>
&lt;p>要构建时间线，客户端订阅来自关注公钥的 kind 1 事件：&lt;code>[&amp;quot;REQ&amp;quot;, &amp;quot;feed&amp;quot;, {&amp;quot;kinds&amp;quot;: [1], &amp;quot;authors&amp;quot;: [&amp;quot;&amp;lt;pubkey1&amp;gt;&amp;quot;, &amp;quot;&amp;lt;pubkey2&amp;gt;&amp;quot;, ...], &amp;quot;limit&amp;quot;: 50}]&lt;/code>。中继返回匹配的笔记，客户端按时间顺序渲染它们。&lt;/p>
&lt;p>&lt;strong>可寻址事件&lt;/strong>（30000-39999）的工作方式类似于可替换事件，但使用 &lt;code>d&lt;/code> 标签作为额外标识符。中继仅保留每个公钥 + kind + d 标签组合的最新版本。这支持可编辑文章、商品列表，或需要每个用户多个可替换项目的任何场景。&lt;/p>
&lt;p>&lt;strong>标签&lt;/strong> 是数组，第一个元素是标签名称。标准单字母标签（&lt;code>e&lt;/code>、&lt;code>p&lt;/code>、&lt;code>a&lt;/code>、&lt;code>d&lt;/code>、&lt;code>t&lt;/code>）被中继索引以便高效查询。例如，&lt;code>[&amp;quot;e&amp;quot;, &amp;quot;&amp;lt;event-id&amp;gt;&amp;quot;]&lt;/code> 引用另一个事件，&lt;code>[&amp;quot;p&amp;quot;, &amp;quot;&amp;lt;pubkey&amp;gt;&amp;quot;]&lt;/code> 引用一个用户。&lt;/p>
&lt;p>&lt;strong>客户端-中继通信&lt;/strong> 使用 WebSocket 连接，消息为 JSON 数组。第一个元素标识消息类型。&lt;/p>
&lt;p>从客户端到中继：&lt;/p>
&lt;ul>
&lt;li>&lt;code>[&amp;quot;EVENT&amp;quot;, &amp;lt;event&amp;gt;]&lt;/code> - 向中继发布事件&lt;/li>
&lt;li>&lt;code>[&amp;quot;REQ&amp;quot;, &amp;lt;sub-id&amp;gt;, &amp;lt;filter&amp;gt;, ...]&lt;/code> - 订阅匹配过滤器的事件&lt;/li>
&lt;li>&lt;code>[&amp;quot;CLOSE&amp;quot;, &amp;lt;sub-id&amp;gt;]&lt;/code> - 结束订阅&lt;/li>
&lt;/ul>
&lt;p>从中继到客户端：&lt;/p>
&lt;ul>
&lt;li>&lt;code>[&amp;quot;EVENT&amp;quot;, &amp;lt;sub-id&amp;gt;, &amp;lt;event&amp;gt;]&lt;/code> - 传递匹配订阅的事件&lt;/li>
&lt;li>&lt;code>[&amp;quot;EOSE&amp;quot;, &amp;lt;sub-id&amp;gt;]&lt;/code> - &amp;ldquo;存储事件结束&amp;rdquo; - 中继已发送所有历史匹配，现在只会发送新到达的事件&lt;/li>
&lt;li>&lt;code>[&amp;quot;OK&amp;quot;, &amp;lt;event-id&amp;gt;, &amp;lt;true|false&amp;gt;, &amp;lt;message&amp;gt;]&lt;/code> - 确认事件是否被接受或拒绝（及原因）&lt;/li>
&lt;li>&lt;code>[&amp;quot;NOTICE&amp;quot;, &amp;lt;message&amp;gt;]&lt;/code> - 来自中继的人类可读消息&lt;/li>
&lt;/ul>
&lt;p>订阅流程：客户端发送带有订阅 ID 和过滤器的 &lt;code>REQ&lt;/code>，中继响应匹配的 &lt;code>EVENT&lt;/code> 消息，然后发送 &lt;code>EOSE&lt;/code> 表示历史记录已发送完毕。&lt;code>EOSE&lt;/code> 之后，任何新的 &lt;code>EVENT&lt;/code> 消息都是实时的。客户端完成后发送 &lt;code>CLOSE&lt;/code>。&lt;/p>
&lt;p>&lt;strong>过滤器&lt;/strong> 指定要检索哪些事件。过滤器对象可以包括：&lt;code>ids&lt;/code>（事件 ID）、&lt;code>authors&lt;/code>（公钥）、&lt;code>kinds&lt;/code>（事件类型）、&lt;code>#e&lt;/code>/&lt;code>#p&lt;/code>/&lt;code>#t&lt;/code>（标签值）、&lt;code>since&lt;/code>/&lt;code>until&lt;/code>（时间戳）和 &lt;code>limit&lt;/code>（最大结果数）。一个过滤器内的所有条件使用 AND 逻辑。您可以在 &lt;code>REQ&lt;/code> 中包含多个过滤器，它们使用 OR 逻辑组合 - 这对于在一次订阅中获取不同事件类型很有用。&lt;/p>
&lt;h3 id="nip-19bech32-编码标识符">NIP-19：Bech32 编码标识符&lt;/h3>
&lt;p>&lt;a href="https://nostrcompass.org/zh/topics/nip-19/">NIP-19&lt;/a> 定义了您在 Nostr 中随处可见的人类友好格式：npub、nsec、note 等。这些不在协议本身使用（协议使用十六进制），但对于分享和显示至关重要。&lt;/p>
&lt;p>&lt;strong>为什么使用 bech32？&lt;/strong> 原始十六进制密钥容易复制出错且难以视觉区分。Bech32 编码添加了人类可读的前缀和校验和。您可以立即区分 &lt;code>npub&lt;/code>（公钥）、&lt;code>nsec&lt;/code>（私钥）或 &lt;code>note&lt;/code>（事件 ID）。&lt;/p>
&lt;p>&lt;strong>基本格式&lt;/strong> 编码原始 32 字节值：&lt;/p>
&lt;ul>
&lt;li>&lt;code>npub&lt;/code> - 公钥（您的身份，可安全分享）&lt;/li>
&lt;li>&lt;code>nsec&lt;/code> - 私钥（保密，用于签名）&lt;/li>
&lt;li>&lt;code>note&lt;/code> - 事件 ID（引用特定事件）&lt;/li>
&lt;/ul>
&lt;p>示例：十六进制公钥 &lt;code>3bf0c63fcb93463407af97a5e5ee64fa883d107ef9e558472c4eb9aaaefa459d&lt;/code> 变为 &lt;code>npub180cvv07tjdrrgpa0j7j7tmnyl2yr6yr7l8j4s3evf6u64th6gkwsyjh6w6&lt;/code>。&lt;/p>
&lt;p>&lt;strong>可分享标识符&lt;/strong> 使用 TLV（类型-长度-值）编码包含元数据：&lt;/p>
&lt;ul>
&lt;li>&lt;code>nprofile&lt;/code> - 带有中继提示的个人资料（帮助客户端找到用户）&lt;/li>
&lt;li>&lt;code>nevent&lt;/code> - 带有中继提示、作者公钥和 kind 的事件&lt;/li>
&lt;li>&lt;code>naddr&lt;/code> - 可寻址事件引用（公钥 + kind + d 标签 + 中继）&lt;/li>
&lt;/ul>
&lt;p>这些解决了一个关键问题：如果有人分享一个笔记 ID，您如何知道哪个中继有它？&lt;code>nevent&lt;/code> 将事件 ID 与建议的中继捆绑在一起，使分享更可靠。&lt;/p>
&lt;p>&lt;strong>重要提示：&lt;/strong> 永远不要在协议本身使用 bech32 格式。事件、中继消息和 NIP-05 响应必须使用十六进制。Bech32 纯粹用于人类界面：显示、复制/粘贴、二维码和 URL。&lt;/p>
&lt;h2 id="releases">版本发布&lt;/h2>
&lt;p>&lt;strong>Amber v4.0.4&lt;/strong> - Android 签名应用修复了 NullPointerException，改进了活动屏幕的性能，并为某些事件类型添加了翻译。之前的 v4.0.3 版本添加了改进的加密/解密 UI、账户导出/导入、每账户中继处理、bunker ping 支持和崩溃报告。&lt;a href="https://github.com/greenart7c3/Amber/releases/tag/v4.0.4">发布说明&lt;/a>&lt;/p>
&lt;p>&lt;strong>Coracle 0.6.28&lt;/strong> - Web 客户端的错误修复版本。修复了主题信息流、禁用 imgproxy 时的图像处理，以及非链接高亮源的链接化问题。&lt;a href="https://github.com/coracle-social/coracle/releases/tag/0.6.28">发布说明&lt;/a>&lt;/p>
&lt;p>&lt;strong>Flotilla v1.6.2&lt;/strong> - 类 Discord 的社区客户端修复了模态滚动和样式问题。本周期的早期版本添加了可选的通知徽章和声音、改进的链接渲染、邀请链接的二维码扫描，以及简化的钱包设置。&lt;a href="https://github.com/coracle-social/flotilla/releases/tag/1.6.2">发布说明&lt;/a>&lt;/p>
&lt;p>&lt;strong>nak v0.17.2&lt;/strong> - 命令行 Nostr 工具添加了新的 &lt;code>nip&lt;/code> 命令用于快速 NIP 参考查询，以及 git 仓库处理和 stdin 事件处理的修复。&lt;a href="https://github.com/fiatjaf/nak/releases/tag/v0.17.2">发布说明&lt;/a>&lt;/p>
&lt;p>&lt;strong>White Noise v0.2.1&lt;/strong> - 基于 MLS 的加密消息应用的重大版本，添加了通过 Blossom 的图像分享、后台同步、推送通知、8 种语言本地化和群组成员管理。&lt;a href="https://github.com/marmot-protocol/whitenoise/releases/tag/v0.2.1%2B14">发布说明&lt;/a>&lt;/p>
&lt;p>&lt;strong>Amethyst v1.04.2&lt;/strong> - 功能版本，引入了关注列表/包、新的时间线过滤器、图片库和 H.265 视频压缩（文件小 50%）。完成了 Kotlin 多平台迁移。&lt;a href="https://github.com/vitorpamplona/amethyst/releases/tag/v1.04.2">发布说明&lt;/a>&lt;/p>
&lt;p>&lt;strong>Mostro v0.15.5&lt;/strong> - P2P 交易平台更新，支持 NIP-69 订单过期和改进的交易历史响应。&lt;a href="https://github.com/MostroP2P/mostro/releases/tag/v0.15.5">发布说明&lt;/a>&lt;/p>
&lt;p>&lt;strong>Nosflare v8.9.26&lt;/strong> - 构建在 Cloudflare 基础设施上的无服务器 Nostr 中继。此版本提供了关键热修复，解决了可能导致 websocket 故障的错误，确保依赖该中继的用户和应用程序获得更稳定的连接。&lt;a href="https://github.com/Spl0itable/nosflare/releases/tag/v8.9.26">发布说明&lt;/a>&lt;/p>
&lt;p>&lt;strong>Noscall v0.4.1&lt;/strong> - 基于 Nostr 的安全音视频通话应用。此版本改进了&amp;quot;我&amp;quot;页面的弹出 UI 并修复了几个已知问题，提高了稳定性和通话可靠性。&lt;a href="https://github.com/sanah9/noscall/releases/tag/v0.4.1-release">发布说明&lt;/a>&lt;/p>
&lt;p>&lt;strong>Gitplaza v0.25.0&lt;/strong> - 专注于 Git 相关活动的桌面 Nostr 客户端。此版本为收件箱信息流引入了高级 kind 过滤器，在过滤器中包含常规 zaps，并简化了标签文本格式。性能改进优化了评论树加载，减少了不必要的数据库查询，并使用缓存的评论分支以加快显示速度。&lt;a href="https://codeberg.org/dluvian/gitplaza/releases/tag/v0.25.0">发布说明&lt;/a>&lt;/p>
&lt;h2 id="notable-code-and-documentation-changes">重要代码和文档变更&lt;/h2>
&lt;h3 id="damus">Damus（iOS）&lt;/h3>
&lt;p>稳定性焦点，修复崩溃和 UI 问题：编辑视图的&lt;a href="https://github.com/damus-io/damus/pull/3377">光标跳跃修复&lt;/a>，使用 Swift 的 &lt;code>~Copyable&lt;/code> 类型进行事务安全的 &lt;a href="https://github.com/damus-io/damus/pull/3366">NostrDB 接口重新设计&lt;/a>，修复操作栏重新实例化的&lt;a href="https://github.com/damus-io/damus/pull/3341">线程 UI 稳定性&lt;/a>，来自 AttributeGraph 循环的&lt;a href="https://github.com/damus-io/damus/pull/3346">静音列表冻结&lt;/a>，以及来自跨线程事务清理的&lt;a href="https://github.com/damus-io/damus/pull/3334">个人资料崩溃&lt;/a>。还添加了 AI 编码代理的 &lt;a href="https://github.com/damus-io/damus/pull/3293">AGENTS.md&lt;/a> 指南。&lt;/p>
&lt;h3 id="notedeck">Notedeck（桌面/移动）&lt;/h3>
&lt;p>&lt;a href="https://github.com/damus-io/notedeck/pull/1191">安全密钥存储&lt;/a> 将 nsec 移至操作系统安全存储并自动迁移。&lt;a href="https://github.com/damus-io/notedeck/pull/1201">未来笔记过滤&lt;/a> 隐藏日期超前 24 小时以上的事件（反垃圾信息）。&lt;a href="https://github.com/damus-io/notedeck/pull/1183">nevent 复制&lt;/a> 现在包含中继提示。另有：&lt;a href="https://github.com/damus-io/notedeck/pull/1212">个人资料列快速添加&lt;/a>、&lt;a href="https://github.com/damus-io/notedeck/pull/1208">键盘导航&lt;/a>、&lt;a href="https://github.com/damus-io/notedeck/pull/1210">媒体加载优化&lt;/a>。&lt;/p>
&lt;h3 id="amethyst">Amethyst（Android）&lt;/h3>
&lt;p>[&lt;a href="https://nostrcompass.org/zh/topics/nip-46/">NIP-46&lt;/a> 远程签名](&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1555">https://github.com/vitorpamplona/amethyst/pull/1555&lt;/a>) 支持 Nostr Connect。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1586">书签组织&lt;/a> 带有公开/私密列表管理。&lt;a href="https://github.com/vitorpamplona/amethyst/pull/1596">strfry 兼容性&lt;/a> 修复中继信息解析边缘情况。&lt;/p>
&lt;h3 id="primal-android">Primal（Android）&lt;/h3>
&lt;p>&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/788">Nostr Connect 深度链接&lt;/a> 用于 &lt;code>nostrconnect://&lt;/code> URL。通过 bunker 连接的二维码扫描进行&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/787">远程登录&lt;/a>。&lt;a href="https://github.com/PrimalHQ/primal-android-app/pull/783">连接竞态条件修复&lt;/a>。&lt;/p>
&lt;h3 id="white-noise">White Noise（加密消息）&lt;/h3>
&lt;p>&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/890">应用数据保留修复&lt;/a> 禁用 Android 自动备份以保护隐私。&lt;a href="https://github.com/marmot-protocol/whitenoise/pull/861">聊天滚动行为&lt;/a> 在阅读历史记录时保留位置。&lt;/p>
&lt;h3 id="zeus">Zeus（闪电钱包）&lt;/h3>
&lt;p>[&lt;a href="https://nostrcompass.org/zh/topics/nip-47/">NIP-47&lt;/a> 并行支付](&lt;a href="https://github.com/ZeusLN/zeus/pull/3407">https://github.com/ZeusLN/zeus/pull/3407&lt;/a>) 改善批量 zap 吞吐量。&lt;/p>
&lt;h2 id="开发者最佳实践">开发者最佳实践&lt;/h2>
&lt;p>&lt;strong>防御性验证 Auth 事件&lt;/strong> - go-nostr 修复了当中继标签丢失时 &lt;a href="https://github.com/nbd-wtf/go-nostr/pull/182">NIP-42 验证中的 panic&lt;/a>。即使在您期望格式良好事件的认证流程中，也要在访问必需标签之前检查它们。&lt;/p>
&lt;p>&lt;strong>根据认证状态进行速率限制&lt;/strong> - khatru 添加了&lt;a href="https://github.com/fiatjaf/khatru/pull/57">基于 NIP-42 的速率限制&lt;/a>，允许中继对已认证和匿名连接应用不同的限制。考虑基于认证状态的分层限制，而不是一刀切的限制。&lt;/p>
&lt;p>&lt;strong>使用游标分页处理列表&lt;/strong> - Blossom 在 &lt;code>/list&lt;/code> 端点&lt;a href="https://github.com/hzrd149/blossom/pull/65">将基于日期的分页替换为基于游标的分页&lt;/a>。当项目共享时间戳时，基于日期的分页会失效；游标提供可靠的迭代。&lt;/p>
&lt;p>&lt;strong>事件类型的 Schema 验证&lt;/strong> - &lt;a href="https://github.com/nostrability/schemata">nostrability/schemata&lt;/a> 项目提供用于验证符合 NIP 的事件的 JSON schema。考虑在开发中集成 schema 验证，以在格式错误的事件到达中继之前捕获它们。&lt;/p>
&lt;hr>
&lt;p>本周就到这里。正在构建什么？有新闻要分享？希望我们报道您的项目？&lt;a href="nostr:npub1wav4fae3gyfy3xj298kxj2mj8phavz7vavps34przq02j7w902qq902923">通过 NIP-17 私信联系我们&lt;/a>或在 Nostr 上找到我们。&lt;/p></content:encoded></item></channel></rss>