上周,CKB 社区成员 Retric 提出了 Nostr 绑定协议(Nostr Binding Protocol)。
Nostr 绑定协议用在 Nostr Event 和 CKB Cell 之间创建一对一的映射关系。普通用户可以基于该协议在 Nostr 社交网络中创建和分发原生资产, 通过 RGB++,这些 Nostr 上的资产也可以由比特币地址进行控制。客户端开发者则能够在其上构建产品,不同于 ETH dApp 分成两个系统(一个是链下服务器,另一个是链上智能合约),Nostr 绑定协议为 dApp 带来新的开发范式,它使用一个具有不同数据级别的一致系统来构建 dApp。据悉,Nostr 绑定协议未来可以无缝集成到 CKB 闪电网络,解决社交网络中原生支付问题。
Nostr 是一个基于公私钥的、极简的信息传输协议,致力于创建一个抗审查的全球社交网络。Nostr 使用 Relay(中继器)来存储社交数据(比如帖子)并将其传输给用户,用户运行的软件称为 Client(客户端)。
今年 3 月 9 日,在由 Nervos Foundation 和 ABCDE 共同举办的首届 Bitcoin Singapore 大会上,Retric 做了一场 “Nostr 生态发展现状及问题” 的主题分享。以下是根据 Retric 的分享整理的内容,可以帮助大家更好地了解 Nostr 协议。
这个 Nostr 协议应该是今天这个会议里面最简单的一个东西。相比其他人讲的一些技术或者一些协议,它是最容易理解的,因为它本身也非常简单。Nostr 一开始想要做的其实是一个 “推特”,但这个推特不是由伊隆・马斯克控制的,而是一个更去中心化的推特,它不会去做一些坏事,不会去封锁别人,有一些言论自由。它想要做这个事是比较现实的一个出发点,就是想要做一个这样的软件,为此提出了一个社交网络上的去中心化的协议,叫 Nostr。然后发展到现在,大家开始意识到这些东西其实不只是可以去做一个推特,更像更好的一个互联网结构,我们可以在上面做各种各样的应用。
Nostr 这个协议我先简单介绍一下,它其实可以用一句话就把这个协议讲完:这是一个数据,通过一个私钥来签名,这个数据在不同的 Relay 或者叫中继器上去进行传播,然后发给客户端。 本质上就是我签一个固定格式的数据,签完之后发到一些中继器上,然后我再让其他用户通过客户端从这些中继器上把这个数据拉下来进行读取。
Nostr 的核心东西是一个 Jason 结构,会有不同的字段,每个字段代表一个意思。比如说 pubkey 就是我签名发送数据是哪一个公钥去做签名的,比如它有 content 这一栏,这个代表说我签这条数据它的内容到底是什么,它可以是任意的一个字符串,可以是我发的一条推特,也可以是一个数字或者说一个加密的东西,协议上是不做限制的。这边也会有个签名,就是说我对我发的这个数据做了一个保证,保证这个数据确实是从我这边发出去的。
所以 Nostr 的核心就是这么简单,它其实只是代表说我在本地通过某一把私钥去对某一段我自己写的一个数据做了一个签名。这个数据发到网上之后,Nostr 网络结构也很简单,就两个结构,一个叫 Relay,一个叫 Client。
Relay 就是一台服务器,是每个人都可以架设的一台服务器。这个 Relay 的作用是它一直在网上跑,去监听有哪些人给我发了我刚才说的这个数据,然后把它接收下来,把它存下来,如果有客户端向我要某一些数据的时候,我再给他。
第二部分是这个数据怎么去传播,即传播的一个规范,这里面其实会有大量的细节。比如说我把这个数据传给 Relay,Relay 跟 Relay 之间他们互通吗?或者说我传给 Relay 之后,Relay 是不是会帮我把这些数据完整地保存下来,然后任何时候找它要,它都会给我?其实有这种细节问题。Nostr 的答案是 “我不管,你们自己去想”,不管其实是有点奇怪的一个反应,但是有时候我觉得 ** 不管是一种比较高明的策略。** 有时候好像不管在现实世界还是在网上,有时候因为管太多反而去伤害一些事情,所以我觉得它不管其实非常有意思。
比如说我举个简单例子,我们在用比如说传统的中心化社交网络的时候,那个中心化服务器会默认把你所有数据都存下来。然后你找我要的时候,我任何时候都可以给你,但因为 Nostr 是不管的,所以这里面会出现什么情况?有些 Relay 的运营者想要做大做强,他想要把所有消息全部保存下来,这是一种。还有一种我是一个爱好者,我只想搞一个很小的节点,我只对我喜欢的那些用户去接受他们的数据。还有一些是我愿意接受你数据,但是我接收后可能 30 分钟后我就不想要了,我要把你删掉,因为我服务器的那个磁盘可能是有限的,我不愿意保存那么久。
** 所以它其实会演化出很多不同的角色,这些不同角色可能就会有不同分工。** 比如说有些真的想要去把它当做一个生意来运行的话,那我就会去做一个专业的服务节点,尽可能给大家提供比较稳定比较长时间的服务。也有一些爱好者,他也可以跑那种局域网一样的东西,所以它会演化出不同的这种分工。
普遍的一个现象是,大部分 Relay 节点它愿意接收你的一些消息,但是它不能保证会长时间给保存下来。这种结构其实它好像更适合我们真实人类社会中的一些社交模式。真实的社交模式,比如说我今天在这里跟大家聊天,我一说话,你们能听到,你们也知道,然后离开会场。过两天之后,有些人记忆不太好就已经不记得我在说什么了,但是有些人在这会场买个录音机,把你说的话每个字都记下来,这个就代表说你这个消息是不是会一直保留下来。
这其实就很像我们现实中在发生的一个事情,这个事情能发生就是 ** 因为 Nostr 对很多细节或者很多其他事情并不去做规定,并不管,** 包括 Relay 跟 Relay 之间到底需不需要通信,它们需不需要同步彼此拥有的消息,它是不规定需要,但它并没有说你不能。所以也有很多 Relay 会把自己假扮成一个 Client,它也会去找其它 Relay 要它的数据,把所有数据同步下来。但是它不去做强制性的要求,说你必须通信,它的一个理由是如果我做了这个要求,你必须要通信,那就会变成每个 Relay 都必须保存全网每个用户的数据,那样的话对运营 Relay 是一个非常大的考验。可能只有那些专业服务商才能运营,个人爱好者可能就不会去跑。所以这是它做这个简单协议的背后的一些考量。
总结一下,我觉得 Nostr 协议非常简单。另一个,它有趣的地方其实是在现在这么一个节点,就我们有了比特币,有了 blockchain 之后,想要有的一个共识是,就好比我们大家都坐下来说,我们今天用一种统一的格式、统一的协议去做一些社交网络或者做互联网的一些产品,它其实出现在很有意思的一个节点。但现在这个节点我觉得有这么一个想努力的方向,就是 ** 统一用一种很简单的数据结构,很简单的交换协议去做一些微信、推特等在做的事情。** 所以我觉得它可能协议上你看一眼会觉得很简单,好像没什么意思。但如果你去想它背后出现的时间,出现的这个意义会觉得有意思一些。
另外一点是因为它这套结构,它其实大量的一些验证是发生在这个客户端的。这里面其实就一件事的验证,你发布的数据是不是真的由你声明了那个公私钥对发出来的,只做这个验证。为什么做这个验证,因为比如说我如果发了一条推特,说了些不该说的事情,这条会发给 Relay。Relay 再负责发给别人,那 Relay 如果不做验证,Relay 可以说我伪造了你说的一句奇葩的话发给其他用户。因为我在发数据的时候是有签名的,所以拿到那个数据的客户端它可以做一次验证,说确实他签的这个签名跟他说的这个话是完全匹配的,这样 Relay 就骗不了别人。
所以它的一个验证是做签名的这个校验,这个签名的校验实际上是把过去我们中心化的互联网比如说微信,微信上的服务器它是自己控制的,它可以在服务器上写任何东西,你没有办法去确定说它有没有骗你,因为所有的数据所有的权利都在服务器上。但只要有最简单的一个验证,我们实际上可以把权利从服务器那边剥离出来,交给拥有账号的这个用户。 只要你有一个公私钥,你就可以让你的朋友去做验证,确定说不是其他人要冒充我或者说一些什么其他不对的话。
那 Nostr 的发展到底怎么样呢?这是我 3 月份翻到的一些数据。因为这是一个分布式的网络,所以它的数据其实是不太好统计的,这是我从 nostr.band 网站获取的数据,Nostr 总用户可能是 37 万左右,日活可能就 12,000。总共的 Relay,出现过的 Relay,有多少人去跑过这个节点,可能有 2000+。但实际上一直在线的这些节点有多少,可能在 200 个以下。 大概是这么一个情况,所以用户还是比较少。
作为对比,你看它跟 BlueSky 协议的一个对比。Bluesky 应该是去年底就说他们达到 200 万用户了,右边那个数据是有人统计的从推特出走的那些用户他们去了哪里,你也可以看到,Mastodon 排第一个,Mastodon 是一个比较老牌的一个协议了,然后也有人去了 ost news,也有人去了 BlueSky,Nostr 其实是属于第五梯队,就比较小的那一部分。
这是它大概的一个发展的情况,当然 Nostr 背后有很多其实这种数据看不到的一些东西,比如说对协议提交了一些提案,开发者去给它提交了一些 PR。这些开发的活动或者一些讨论,这些数据可能没办法统计到,但如果你点进去这些链接的话,其实可以看到发生的这些事情还是很多的,有大量的人在想要为这个协议做贡献。这个是大家用 Nostr 去做的一些东西,就不只是说我真的做一个推特,也有很多做一些音乐类的应用,做这个 YouTube 类型的应用,也有做博客类的应用。
所以我来总结的话,现在我们觉得大部分的用户其实还是 developer 或者 maker。 他们对协议本身感兴趣,想在上面开发东西,或者我是一个想要做一些东西的人,我会在你协议上,可能普通的那种 users 会少一些。
为什么 Nostr 这么简单,愿景看起来不错,但发展不是非常尽人意,我觉得也是因为有遇到三个问题,我其实在写这个 PPT 的时候发现其实有非常多无数的细节的小问题,比如说客户端,一些产品体验上的一些东西。但是这种东西其实是很难去把它讲清楚,所以我就举了三点我觉得比较重要。
第一个大问题是你怎么在 Nostr 这个网络里面去找到某个用户发的内容在哪儿, 因为我们前面说了整个 Nostr 协议的运转是我在本地签东西,然后可以发给无数的 Relay 们。其他用户可以从这些 Relay 里面抓取我发的数据来阅读,这么一种模式。但是这个模式有个问题,就是我这个数据发给 Relay 之后,我的朋友想要读这条消息的时候,他怎么知道我这个消息是放在哪些 Relay 上,他得知道哪些 Relay 有我这个数据,他才去读。所以现在一个很大的用户体验问题是,很多人在用 Nostr 的时候会问他朋友:“嘿,你用的是哪些 Relay,我要跟你设置一样的 Relay,这样我们才能共同去交换这个数据。” 这是个很笨的方法。
当然到现在也有很多开发者提出了一些详解的方案,比如说有一个 NIP-65 的提案,它大概意思是我把我的数据会放到哪几个 Relay 上这一条信息我也放在 Relay 上。然后我把这条信息尽可能传播给所有的 Relay,这样的话我的朋友首先会去找 Relay 问一个问题,我这个朋友他平常把他的消息发在哪些地方。拿到这个信息之后,他再去找我常发布的那几个 Relay,找他们要这些数据,这是一种方法。
它分得比较细的两种模式,一种叫 Inbox,一种叫 Outbox。比如说像 Inbox,它让用户定义我会从哪几个 Relay 里面去读关于我的一些消息。如果你想要在 Twitter 上 @我或者想做其他事,你可以往这个 Inbox Relay 里面去发这个信息。另一个是 Outbox Relay,指明说我会往 A、B、C、D 的好几个 Relay 里面去发我的一些消息,大概意思就是我把我常发布的一些 Relay 信息,首先也发在 Relay 上。
但是这有一个技术难题诞生了,就是我怎么知道这个消息是在哪儿。所以这其实也会有这个问题,还有一些解决方案是说我通过一些算法,我尽可能在全网去下载尽可能多的一些信息。然后从别的人发的一些信息里面提到的一些 Relay 隐藏的证据,去尝试把一个人他发布的数据出现在哪几个 Relay 上的概率做一个计算。通过这种概率的计算去尽可能找一些 Relay 要数据,然后去满足别人想读你的数据的时候能找到你的数据。还有一些也是让用户去定义自己会使用的一些 Relay,做一些分组,也是让其他用户通过这些分组去找到你,这是现有的一些改善的方案。
第二个问题也是比较严重的,叫 Content Governance。不管是内容产品或者说社交网络上有很大的一部分精力是需要放到你怎么去维护这个社交网络上的内容。比如说你肯定不需要刷推特的时候刷到一个别人砍头的视频,对吧,这是非常糟糕的体验。就这种那些公司背后会做大量的运营,它需要有很多人去过滤这些内容,或者去用算法去做一些内容匹配,这部分当中,市场上是比较空白的。这个有好几个方面的原因,有一个原因是大家在这个平台上会非常排斥算法。因为觉得好像不管是 TikTok 还是 Youtube 都是算法来控制我们,但实际上我们确实是需要算法,只是说我们需要的是我可以切换算法。
我不希望说我只能接受用 Youtube 或者 TikTok 给我的强制性的他们要推广告的算法,我希望是我有很多算法可以随时做切换。我如果不喜欢这个算法,有选项我可以退出,这个观点其设计也在慢慢接受。只是说现在这块,不管是包括人工的那种或对内容做的一些运营,还是说在算法技术上做的一些事情,这些都还比较欠缺。所以这部分主要问题是我们这网络是所有人共同组成的,它需要有个机制去决定哪些内容是好的,哪些内容是不好的,哪些内容是你会感兴趣的,哪些内容可能是你不感兴趣的,这其实是内容治理的一个问题。
下面这边是我列的一些现有的改善方案,比如说第一个 labeling data。在这个 Nostr 上有一种专门的数据,是可以让用户自己去标记某一些数据它属于什么类型,或者说它的属性有什么。就通过这种 labeling 去给一个数据做一些标注,但是这个应用并不广泛,因为很简单,没有人愿意去干这个事情。没有人愿意去充当你的这个 social member 去帮你做一些这种苦力活,很早期的互联网社会有这种建设精神。现在其实大家更多可能作为消费者去使用,当然也有人提出说我可以做 API。我专门跑一些服务,我去搜集全网的一些公司的数据,然后我去做过滤或者做分类,去拿更可能好的一些消息发给用户。这种方案是非常好做的,但是它有个巨大问题,就是这样做着做着我们又回去了。就会变成说我不找 Nostr 这个协议要数据,而变成说我专门找一家工作得特别好的 API,找这个 API 的这个服务器要数据。那这样协议做着做着变成这个 API 后面又是另一家推特或者又是另一家微信,所以这个方案非常好。问题是大家不喜欢,你要是做这个的话所有人都会喷你。
还有一种方案叫 DVM,它想做的是通过 Nostr 协议去做一些使用协议规定好的接口去做这个数据的分类或者算法。它的大概意思是你给我一些闪电网络的聪,然后我会返还给你你想要的数据,你规定好数据格式,但这个也有一些问题。
另一个是 Noscript,它是另一个想法,是我们直接把这些过滤的算法或者一些分类需要用到的技术把这些代码直接也作为内容,直接放到 Nostr 上,让 Relay 去存储。然后客户端直接拉这些代码下来,在本地做一些本地能做的一些过滤或者做一些推荐。当然这个的话就发展得更不好,因为现在还只是有些 Idea,有些人在讨论。
第三个比较严重的问题其实是一个创业的问题,PMF。现在 Nostr 的大量产品或者开发者他们找不到 PMF,因为他需要面对大量竞争。一方面是中心化的传统的那些产品,另一方面可能是 Web3 区块链这边的。他们不发 token 也不干嘛,所以它其实缺少一些商业模式,也面临网络效应这个问题。因为越少人迁过来,那就意味着更少人会继续迁过来,所以 PMF 是一个很好的问题。
里面最大的一个客户端叫 Damus,不知道大家有没有用过,它的开发者去年年底发了一条推,说 2024 年可能是 Damus 的最后一年。因为他快没钱继续再做下去,如果 2024 年还做不起来,还赚不到钱的话。所以这也是要给社交网络的公共物品找到可持续发展的一个方向的问题吧。
其实这里面所有问题,我觉得也是机会。 比如说像最后 PMF 这个,我觉得如果我们能有更多跟区块链结合的一些地方,能有更走得通的一些商业模式,去跟区块链基金做一些结合,可能可以解决这种公共物品的一个融资问题。
最后,我觉得 **Nostr 是一个新的开发 alternative applications 的一种方案。** 如果你想要做一些替代性的产品的话,可能不是只有两个极端,一个极端叫 blockchain,一个极端叫 Twitter。不是只有这种,可能有个中间地带叫 Nostr,它不是基于区块链的,但它也不是专属软件。谢谢。