这是Web3社交基建”三位一体“系列文章的第二篇。系列文章从以太坊世界计算机时代讲起,以币安 Greenfield 白皮书发布为”新三位一体“时代的转折点,讲述去中心化计算、去中心化存储、去中心化通讯三块基石各自在Web3生态中的支撑性作用。其中,去中心化计算长久以来以L1、L2之争位于中心焦点;去中心化存储的潜力已在币安的力推下昭告天下,而拼图的第三块,“去中心化通讯”,即将成为瞩目的下一个体量相当的新生潜力点。本系列文章以此为线索,进行探索。

Nostr 前沿图式:打开社交通讯协议的“众妙之门”

在系列的上一篇文章中,我们回顾了以太坊初生时代的“三位一体”构想,并以币安的 Greenfield 为案例探讨了去中心化存储的现行方案与发展方向。在这篇文章中,我们将以去中心化通讯赛道首个现象级协议“Nostr”为起点和分析对象,探寻在极端克制、充分体现了比特币原教旨主义精神的Nostr外,一个成熟的去中心化通讯将需要做好哪些准备。

在近一个月的沉淀后,Nostr协议上的最流行应用 Damus(达摩)扬起的尘土又纷纷回到了原点。Damus 成也极简,败也极简,协议的无政府主义所带来的相继是理想主义者的欢呼、大众彼此裹挟的涌入、和最终广告泛滥的实况。在对 Nostr 的各类研究进行再整理、同时潜入 Nostr 开发者视角的各类文档阅读后,我们认定,**Nostr仅仅是社交通讯的始发站。**作为实验性质的通讯网络,它的“号手”属性远高于实际应用属性,这意味着它将去中心化通讯带入了大众的视野,却因缺乏必要的技术和设计条件没有完成它。综合来看,Nostr 是一个不具备反脆弱特征的通讯协议的原型。在Nostr吹哨之后,围绕原型,我们相信成熟的开发者们可以铸就新的下一代的通讯协议。在文章末尾,我们将尝试探寻类似中继网络的更好解决方案。

Nostr 数据概览

Nostr 生态数据

未来社交通讯图式:Nostr的起点与社交通讯的下一站

未来社交通讯图式:Nostr的起点与社交通讯的下一站

数据来源:https://stats.nostr.band/

Nostr 的核心:Dumb server, Smart client

Technical Basics

Client: 客户端,承载各式社交任务。复杂并且可定制。

Relay:中继服务器。与客户端通信并进行存储和索引。以其简洁达成可互操作性(interoperability)。

Event:事件。Relay 使用的基本对象/数据类型,便于 Relay 与 Client 之间发送和检索消息。事件及其标签的扩展性非常好,这使得开发者的自由度很高。

  • sig:即签名,保证事件真实性。在客户端进行。
  • tags:开放、任意标签。如回复事件的行为会被加上“the e tag”。

技术实现流程:客户端将事件发送到中继服务器,事件中包含指向特定 Relay 的指针。Relay 随后存储并索引它们,其他客户端可以与他们“知道”的中继服务器通信,以请求它们已接收和存储的事件。

所有复杂性都被留在客户端,而中继只需达成最小程度的共识标准,也因此给开发者留下了广大灵活的空间和非常低的开发门槛。

*目前的客户端,并非直接与中继器进行通讯的客户端,而是网站客户端,仍然存在被拦截的风险。

自由跳转的中继(Relay):无限的任意门

“中继”和以往所有服务器一样,有可能会被spam填满、有可能会收到有害信息,也有可能会恶意阻止某些并不具备伤害性的内容和用户。Nostr的解决方案并非是无限量增发Relay的数量、并给予用户选择符合其标准的Relay的权力(如 Mastodon 正在做的),而是通过降低中继的部署成本和用户在中继与中继之间的切换成本,实现最小成本的动态自由**。**

任意门永远可以通往下一个中继。一方面,中继的低门槛部署方式保证中继不可能是会被穷尽的;另一方面,跳转中继的便利保证用户随时有离开中继并继续打造社交关系的自由。离开中继的机制如下:

1)向这个中继发放对另一个中继的推荐。原有中继(旧中继)的客户端会自动识别并添加新中继到它“认识”或“知道”的中继列表中。这样,其他人就不会因为某人换了中继,而无法继续得知某人的消息。

2)如果某人被很多中继同时禁止,导致其中继推荐没有被广播,ta也可以通过其他方式让ta的朋友知道你所在的新中继。

必须留意的是,中继之间无法进行数据的自动迁移,这使得用户无法在中继之间无法无缝衔接原有的社交关系和既有数据。

Nostr与社交空间的拓扑学

“简洁但坚实”是我们能够对一个社交通讯协议的最好想象,也是比特币原教旨主义在Nostr身上寄予的社交协议的优美设计理念。“简洁”要求牺牲所有多余的技术细节,以恰到好处地达到“functional”。但Nostr在牺牲的舍取之中,并未达成平衡,而是以折损功能本身为代价:

“简洁……”

为什么Nostr是简洁的?因为社交空间作为空间的一种,其本身即是简洁的、完全被动的。Relay的运营者只是看守者,而非“管理者”(Mastodon式的)。准入和准出构成了这个空间的所有功能,也定义了交集空间的边界。

而除边界性本身,空间中所有其他功能实现都由“客户端”来完成。这使得Nostr协议更好接近真实世界的社交图景:正如无限存储不存在,无限检索和无限触达都不存在。存在的只有“共同空间”。“共处”的概念即一种关系图谱上的概念,和自然社交的所有过程保持一致:产生交集→进行追踪,同处一个交集空间则继续深化交集;离开交集空间则该段关系不复存在。

Nostr的做法是对抽象兴趣空间的物理落实。在微信、Telegram、WhatsApp或其他通讯平台上,群组的概念从根本上是抽象的,并非落实到某一个技术实体。但Nostr将群组和物理上部署的“Relay”绑定,直接落实到具体的节点服务器

“但并不坚实。”

以上的做法带来了一个重要问题,即存储问题。由于Relay彼此之间互不通信,也就是不进行数据上的交流,“离开”某个Relay,或者被某个Relay驱逐,会像用户主动离开/被驱逐于某个特定的Web2平台一样,无法带走已经产生的社交数据。用户离开微信、Facebook或小红书,无法带走原有的社交关系,因为微信并不“与Facebook或小红书”通信。Nostr更接近于一个Web2而非Web3协议:Nostr的多个Relay本质上是将用户社交数据做了多个备份(同时支持用户自己备份),但并不保证备份本身的安全。

“Client”客户端就是基于这些并不互相通信的备份,来进行不同功能的实现。这无异于是在一个非常不稳定的数据沙堡上建立新的建筑,每一次建筑都是对旧有沙层的一次新的调用,但是同时随着用户规模的扩大和时间的流逝,“永久丢失”从一个概率问题变成了必然问题。而这时的永久丢失,并没有任何一个中心化机构可以为之背书。Relay是匿名的,而我们不应假设每一个用户为了自己的数据安全都亲手部署Relay进行备份。

以缺乏数据互通性带来的任意门跳转,更接近于Web2平台发展最晚期的联邦制,而非真正Web3网络的雏形。

Dumb Relay,真的是中继网络最好的解决方案吗?

以去中心化为前提,“中继”在技术设计上可以有众多不受限的形式。“Dumb Relay”是其中的一种选择,但还有一种选择,那就是允许“Dumb Relay”发声。”发声“是共识的前提,只有中继节点之间进行数据交流,才可能形成协议层面的数据同步。协议层面的数据同步并非任何程度上的冗余,而是数据安全和预防单点故障的必要技术背景。“共识”背后,是整个网络的安全。

Nostr更像是通讯协议的一个“协议层Demo”,并非为大规模应用而准备。通讯协议永远需要为下一个亿级用户做准备,而在这个用户体量上,原本退居其次的数据安全和数据恢复问题,将成为每一个协议层开发者必须面对的核心问题。

从Nostr的起点,到新一代通讯协议的下一站

综上,我们可以抽象出Nostr目前暂不具备(或暂不完整),但下一代理想中继网络应当具备的几个特征:

  • 具备节点间共识,防止单点故障导致的数据永久丢失;
  • 扩容:由于采取“Dumb server, Smart client”的技术设计理念,尽力降低 Relay 的部署门槛,Nostr 协议无法针对特定 Relay 进行扩容;
  • 抽象账户(而非无法恢复的公钥私钥对);
  • 经济激励层,以支持在大规模用户基数上的Relay节点数跟进。

以上标准并非无法同时达到。鉴于去中心化通讯协议占据的重要生态位,及其所伴生的用户价值和经济潜力,现有的中继网络/去中心化协议必定会往上述方向演进。PUSH, XMTP, Dialect, Notifi, Hal, Tenderly,还有部分继承以太坊 Whisper 遗产的 Status,均是可以考虑观察的对象。在下一篇文章中,我们将以案例研究的方式,介绍其中完成度相对最高和速度最快的一个通讯协议,作为去中心化通讯的参考样本。

Acknowledgements

谢谢 ArNostr 的围脖, Unipass 的张腾骥 George,Plancker DAO 的海绵 Aaron对这篇文章的帮助。