Nostr 协议目前的缺憾(2):Relay 的设计

Robert’s MetaMask
Dec 27, 2023
cover

下面这张图很好展示了 Nostr 是如何工作的:

Image

可以看到 Nostr 的核心就是 relay, 而这个relay 的设计也可以认为是 Nostr 最具有特点的地方。

Nostr 是一个极简的设计:

  • 一个client 可以往任意多的relay 上投递任意的消息, relay 之间不进行转发
  • 只有在同一个relay 上的其他用户才能看到这些消息
  • client 订阅多个relay,把消息聚合呈现给用户 (client 也负责消除重复内容)


这个设计的原理就相当于题图里的公告栏,用公告栏来类比就容易理解了:

  • 你可以到任何公共栏去贴自己的消息
  • 注意到这个公告栏的人才有可能看到你的消息
  • 你要关注消息的话,就去你关注的各个公告栏上看


Nostr relay 的问题#

这带来的问题也很明显:

  • 不是所有的公告栏都会等同张贴你的消息: 有的可能不给你贴, 有的可能会被人撕掉或者覆盖掉, 有的公告栏内容太多可能泛滥了
  • 你要有目标对象的话,得知道去哪里贴。 如果你要给暗恋的女生贴一个海报表白,那么你得知道她可能会看那些公告栏, 如果你不知道她看哪些, 你贴遍了公告板也等于没贴
  • 如果要想让消息触及很多人, 你就得到处贴海报,这还是很辛苦的
  • 如果很多人都为了能让消息传播广,就到处贴海报,就会使得很多公告栏里海报泛滥


从现在的Nostr 生态看, 很多用户都会在热门的 Relay 上发布,往往每个用户都发布很多个relay。 这一个角度可以认为是去中心化的一种表现, 但另一个角度也可以认为是没有效率的体系。


个人relay 和 收费 relay#

你可以运行一个自己的个人relay, 优点有:

  • 自己的每个消息都发一份在自己的个人relay 上,这样确保自己的消息不会丢失 (这是nostr 最有价值的地方)
  • 让要给自己消息的人可以把消息直接发在自己的relay 上 (如果对方这样配合,那么这里就相当于自己的inbox)

一些付费的 relay 往往也是提供了类似的优点,相当于别人帮你管理了。 通常这些收费的还提供 NIP-5 绑定一个地址的服务,有些收费就存考这个 NIP-5来招徕用户。

我认为理想状态应该是每一个都运行自己的个人 relay,然后有一些群组的、社区的 relay 再结合部分带一定条件和要求的公共relay (而不是全部是完全公开的relay)结合起来 , 这样达到最好的隐私、自主和去中心化。


和Activity Pub 协议的对比#

如果Nostr 用户总是只在自己的个人relay 上发表消息的话,这个结构就很像 Activity Pub 协议的样子:

Image


或者可以认为 Activity Pub 是一个 Nostr 网络极端的样子 (当然Activity Pub 的设计没有采用 Key Pair 机制,这是一个大的区别):

Activity Pub:

Image

Nostr:

Image

ActivityPub 的极端去中心状况和 Nostr 的极端去中心状态是类似的,也就是每个人运行自己的Server (activity pub)或 relay (nostr)。 这种极端情况下两者高度类似。

Activity Pub 的主要缺点来自用户身份, 其用户是和Serve绑定的,因此除非自己运行自己的Server,还是有“寄人篱下” 的感觉, 而且在一个小众服务器上寄人篱下,也许还不如一个大公司的服务上。 DID 社区曾经有用 DID 来扩展Activity Pub 的提议, 但也只停留在提议和概念。

前文说到我认为 Nostr 的最大缺点是私钥和账户绑定的问题,这本质也是一个身份的问题。 有趣的是两者都没有拥抱 DID,而 DID 其实是解决两者问题的有效方法。


中心/统一 Relay 的做法#

中心化服务如Twitter 可以可以认为就是这Relay 是统一且中心化的。 而Farcaster 的relay 就是一个庞大的全网的统一的relay,虽然是可以去中心部署,但每个relay 都是类似全节点。 Lens Protocol 把用户全部部署到区块链上, Post 等可以在链下,但指向还是在区块链上的 ,因此也可以认为也是类似统一的 Relay。

中心化/统一 relay 效率无疑是高的,但也导致 censorship、隐私等传统中心化服务的问题。 即使这些号称去中心的系统,也面临中心化系统相同的问题。 而且,这种中心/统一 relay 的实现难度,大规模用户下的性能很难实现好,或者会成本很高。