Damus: Nostr的新面具
发布日期:2023/2/3 13:46:31 浏览量:
转自知乎https://zhuanlan.zhihu.com/p/603069814?utm_campaign=shareopn&utm_medium=social&utm_oi=40997237030912&utm_psn=1604813186426896384&utm_source=wechat_session&s_r=0
如有侵权请联系我们删除
起源
前天,一个叫Jack的人发布了一条Twitter,燃爆了整个Web3的朋友圈,让一款叫做Damus的应用出尽了风头。
这个Jack,当然不是泰坦尼克号里面You jump, I jump的Jack。
不过依然是个非常有名的人,Jack,全名Jack Dorsey,Twitter创始人,可以说是是在马斯克之前,对Twitter影响最深的人之一。
这也是这款应用习惯性地被人称作去中心化Twitter的原因,当然了,拥有和类似Twitter的Post功能也是原因之一,就像下图一样。
话说如果是王志东搞的话也许就会被叫做去中心化新浪微博了。
PS. 题外话,不要问我什么是Twitter,怎么能够看到Twitter!!!我不是,我没有,别瞎说,我什么都没用过,这属于我有一个朋友系列。
Jack和Nostr——Damus背后的他和它
好了,扯远了,言归正传。下面,我们拆解下Damus到底是何方神圣。
其实严格来说,Damus只是一个壳而已,这款产品真正的内核是Nostr,全称Notes and Other Stuff Transmitted by Relays,英文不好的也不用在意这些细节,只用知道,这是一个开源的通讯协议,主要功能包括了POST(类似于发推),私信和群聊,都是社交软件常见的功能。
而Damus,可以简单的理解为是这个协议在的苹果系统上的一个操作界面,事实上,它还有好多分身,比如在安卓系统上叫做Amethyst,在网页端叫做astral等等。
我为什么会知道这么多,很明显因为我是一个没有拥有苹果三件套的可怜的Boy.
事实上,考虑到Nostr协议是开源的,任何人都可以基于它来开发一套自己的操作界面,并命为自己喜欢的名字。
另外,和在Twitter不一样,Jack在Nostr的身份并不是创始人,而是捐赠者,至少表面上是这样的。
迄今为止,他总共捐赠了14个比特币。
除了捐钱之外,Jack还义无反顾的担当起了CMO的角色,不遗余力的推广Nostr。
这到底是因为对去中心化信念的追求,还是对马斯克的“夺推之恨”的报复,这就不得而知了。
Nostr的魅力在哪里
如果只是单纯的看功能,那么Nostr简直可以说是乏善可陈,刚才提到的几个功能在互联网界都是陈芝麻烂谷子了。
在它的几个客户端里面,Damus算是做的不错的了,功能和界面都还算说的过去,网页客户端那可真叫一个简陋。可以参看下面的图。
说实话,即使不看你也想象得到,我一个对审美基本上没有什么要求的人都这么说,说明它确实还是寒碜了些。
如果对比现在琳琅满目的互联网应用,不能说是各有特色,只能说是毫无亮点,简直是被按在地上摩擦。
但是对于Web3的从业者来说,它却是如此具备魅力,一切都来源于几个字——去中心化。
与区块链没关系
说到去中心化,大家第一反应就是区块链,但是这次出乎意料了,Nostr可以说跟区块链毫无关系。
好吧,有人说它集成了比特币闪电网络的支付功能,但这跟它的核心功能毫无关系,甚至不需要这个闪电网络也不影响它的运行。
对,没有链,没有共识,没有智能合约,没有币,就是一个单纯的开源通讯协议,能够实现发文,私信和群聊等功能。
跟想象中有点不一样,那么,它的去中心化体现在哪里呢?
身份,行为,关系
这需要我们回到通讯或者说社交的本质,如果我们把关键属性拆解一下的话,就会发现,所谓社交,其实核心就在三个方面:
身份,行为和关系。
身份,即你是谁,以及如何让别人知道你是谁。
行为,即你可以做什么,以及怎么做。
关系,即你的行为所涉及的其他主体,以及如何涉及的。
身份
Nostr的去中心化,首先体现在身份上,这方面的实现方法和区块链是一致的,就是基于非对称加密。
简单的来说,就是公钥代表了对外的身份,你可以把它想象成你的账号,而私钥用来签名,你可以把它想象成你的密码。
公钥是可以随便告诉别人的,别人也只能通过这个公钥来找到你,就像通过你的账号名来找到你一样。
私钥是不能见人的,就像你的密码不能告诉别人一样。
当然了,公私钥体系和传统的账号密码体系是完全不一样的,这么说主要是方便理解,关于公私钥更细致的知识,可以在网上查找学习,有很多公开的资料,这里就不赘述了。
和传统的账号密码体系一点很大的不同,公私钥最大的特点就是,不需要向任何第三方注册,任何人都可以私下生成自己的密钥对。
你可以通过一些现有的工具来生成,苹果客户端Damus和网页客户端astral都自带这个功能,但是很习惯安卓客户端没有这个功能,不知道是不是被针对了。
如果不相信别人,你也可以自己写个代码来生成属于你的密钥对,记得种子一定要选长一点。
Nostr用的是一条很常用的椭圆曲线,对,就是secp256k1,比特币,以太坊和其他很多公链都是用的这一条。
只是Nostr的签名和验签算法不是常用的ECDSA,而是schnorr signature算法。
这也意味着,如果你已经拥有比特币和以太坊的私钥,那么是可以用于Nostr网络的,不过因为编码形式的不同,私钥在不同网络的显示形式可能有所不同,这个需要做一次转换。
当然了,对于普通用户而言,这一切都不重要,你只需要知道的就是刚才讲到的,你可以生成属于自己的账户体系,这个账户不依赖于任何第三方。
你所需要做的一切,就是记录好你的私钥,不要让任何人知道,这是能够证明你拥有这个账户并操作这个账户的唯一方法。
行为
在Nostr上能够做的事情还很简单,之前也都提到过,发文,私信和群聊,和常用的社交软件没有太大的区别,甚至还更简陋,但是在如何实现这些行为的方式上,有一些特色。
让我们以聊天这个场景为例来理解区别,比如你要给小明发送一条信息。
在传统的聊天软件上,比如微信:
- 你需要使用下载微信的官方客户端,
- 然后用你的账号密码登录
- 你的账号密码信息会通过客户端发送到这个微信的官方服务器上
- 服务器验证账号密码无误后,你登录成功
- 然后给小明发送了一条信息
- 这条信息会首先被发送到微信的官方服务器上
- 然后官方服务器将这条信息转发给小明
- 小明收到信息,Over。
你可以看到,这里面非常关键的几个点,一个就是微信的官方客户端,这个,只能由微信官方提供,因为他是不开源的,什么?你不想用他的,不好意思,别无他家。
二就是这个官方服务器,依然别无他家,如果这个官方服务器挂了,或者拒绝为你服务,那么就算小明站在你面前,你的信息也发送不到他的微信上。
有禁言或者封号经历的朋友应该能够深刻理解。
那么,Nostr呢?我们先假设你和小明都已经完成了乏味的公私钥生成的过程,并且已经妥善地将私钥保管好了,并且,在一次线下聚会中,小明已经将它的公钥告诉了你。
- 你下载一个Nostr的客户端,如果能力足够强的话,不用客户端,用命令行也可以,或者,像之前说的,你完全可以自己开发一个客户端来自己用;
- 写好一条信息,然后用自己的私钥签名,通过客户端或者命令行发送出去
- 连接到一个或者多个Relays
- 查询看小明是否也连接到了这其中的某个Relays
- 将信息发送到小明连接的那个Relays,发送地址填写的就是小明的公钥
- 小明可以从Relay那里获取到这条信息
- 小明用你的公钥对信息的签名进行验证,确定这条信息是你发送的,Over
PS. 这里面涉及到公私钥的一个用法,就是私钥用于签名,而通过公钥可以验证是否是这个私钥签的名,整个过程不会暴露私钥的实际信息。
你依然可以看到,这里面的几个关键点,首先就是在客户端方面,没有强制的客户端,如果不相信任何人,你完全可以一怒之下自己搞一个客户端。
其次,就是这个Relays,听起来和官方服务器很像,但是最大的不同就是,如果你不喜欢某个Relay,你可以重新换一个,甚至你依然可以一怒之下自己搭一个Relay,Relay不会去判断你的账号密码是否正确,Relays只是做信息的转发,妥妥的工具人,小明自己可以通过你的公钥验签来判断是否是你发送的信息,以及信息是否被篡改。
Relays最多可以做的一件事情就是屏蔽你,不转发你的信息,但是你可以通过其他Relays,或者自己的Relays来做这件事情,这不需要任何人的同意。
关系
目前的关系系统比较简单,主要就是关注和被关注,没来得及看详细实现原理,不过我估计应该也是通过消息+签名的形式来实现的。
比如你关注了小明,那么就是将这条消息用你的私钥签名,然后发送到Relay。
小明就可以知道你关注了他。
实现方式和上面讲到的行为应该差不多。
当然了,这是我的揣测,如果谬误,请指正。
通过上述,应该明白为什么它被称作去中心化的原因了。
存在的问题
Nostr是非常伟大的一步,经常被封号或者禁言的朋友应该更是眼前一亮。
作为尝鲜的玩具或者展示的艺术品,它已经足够优秀了,但是,倘若想再进一步,真正大规模正式用起来,显然,问题也不少。
首先是商业闭环方面,我们都知道,Relays在这个系统中是非常重要的,尽管看功能只是一个工具人。如果Relays的数量不够多,那么很容易带来几方面的问题:
-
一个是去中心化的问题,目前看起来,在工作的几个Relays应该都是项目方自己起的,虽然理论上,任何人都可以起自己的Relays。
但是问题又来了,为什么要起?事实上,Relays的门槛虽然不高,但是也并不低,需要较好的处理性能和网络,如果大规模使用起来更是如此,需要较高的稳定性,另外,还需要一个静态的IP地址,长期下来,这些都是不菲的成本,也需要一定的技术和运维能力,但是Relays并没有肉眼可见的收益,这个平衡问题是需要考虑的。
总得来说,Nostr和IPFS的定位很像,是一个开源开放的功能层,本身并没有显著的激励机制和经济系统,在以后,是否需要一个激励层,激励层能不能做到去中心化的同时兼顾易用性,这是个问题。 -
二是DDoS攻击的问题,Relay虽然不能伪造和篡改你的信息,但是它可以屏蔽和聚焦你的信息,虽然它可能不是主动的,但是有可能遭受到DDoS攻击,在Realys少的时候,这个问题是致命的,一旦遭受这样的攻击,那就不是针对你,而是在做的各位都没有使用了。
事实上,如果系统规模达到Web2软件的规模,即使没有DDoS攻击,如果没有足够数量的Relays,系统一样会因为超负荷而溢出,导致不能正常工作。
其次是数据可用性的问题
目前看来,数据的存储主要是在Relays上,也就是说,你发送出的信息或者推文也好,是Relays在帮你存储,别人能够看到你的信息或者推文,也是因为Relays帮你存储了。
客户端应该是有缓存的,但是这并不是持久存储,一旦你更换了客户端,信息就清除了。
而至于Relays,如果它因为主动或者被动的情况将数据删除了,那么,你历史的记录也就没有了,结合上面提到的,Relays还不具备一个商业闭环让它有义务或者有动力一定要帮你存储数据,那么这种情况是很有可能发生的。
也就是说,如果你不想把它当作一个阅后即焚的软件使用的话,你有必要自己来备份自己的历史数据。
最后是易可用性的问题
刚才讲到了Relays数量不够多的情况下可能带来的问题,然而,在Relays数量多的情况下,同样有问题。
从目前来看,两个用户之间的通信前提是,比如至少连接到一个共同的Relays。
这主要是因为Relays不像区块链的节点,相互之间是不通信的,也不需要通信。
在Relays数量不多的情况下,这个问题还不显著,不过我已经有遇到过了,就是搜一个用户的地址死活搜不到。
一旦Relays的数量众多,大家连接到不同Relays上的概率就会大大增加,这种情况下的交互体验会变得非常差,如果解决这个问题,还需要进一步的设计。
——上述这些都是一些实际试用过程中的体会,并不系统,但很真实,目的是抛砖引玉,绝对不是踢馆,事实上,我非常敬重这些做出开源贡献的人。
展望
尽管刚才说了问题,但是这并不是批判,但是就像Nostr自己所说的那样,它提供的是开源的架构和协议,这已经足够了,至于如何在此基础上构建有效的商业闭环体系以及更好的用户体验,这是每个社区开发者和屏蔽禁言受害者要一起思考和解决的事情。
毕竟,考虑到它只是个孩子,它已经做的足够好了。
历史很沉重,所以,应该是每一个人的事情。
马上咨询: 如果您有业务方面的问题或者需求,欢迎您咨询!我们带来的不仅仅是技术,还有行业经验积累。
QQ: 39764417/308460098 Phone: 13 9800 1 9844 / 135 6887 9550 联系人:石先生/雷先生