https://github.com/nostr-protocol
先从名字说起,nostr是Notes and Other Stuff Transmitted by Relays的缩写,直译过来就是通过中继传输的笔记和其它。名字很清楚的说明了,这是一个传输协议,并且,有中继存在,说明这并不是一个P2P传输协议。
nostr的协议由两种参与者:客户端(client)和中继服务器(relay),客户端之间不能直接交流,必须通过中继。客户端A把信息发给中继1,客户端B可以从中继1中取得信息,这样就完成了客户端A把信息发给客户端B的这样一个过程。如果只讲nostr协议本身而不讲它出现的背景,难免会得出“nostr是个很简单的协议”这样的草率结论。所以,让我们先跳出nostr,来看看web技术发展的历史以及每一代技术带来的问题,会更好的理解nostr的设计思路。
web1由于互联网技术刚刚出现,网站大多数是静态的,交互性基本没有,一句话带过。
在web2时代中,大型互联网公司以及平台应用的出现,使得web2和web1有本质的区别,其主要特征可概括为:
UGC(用户生成内容)是web2内容的绝大多数
UGC和用户的账号,本质上是web2公司的资产,并不属于用户自己
广告是平台型应用的主要营收方式
web2应用是中心化的,运营公司可以任意删除用户的内容,封禁其账号
免费应用是主流
web2平台的“用户”,其实不是真正的用户,因为这些用户不付费。付费的是广告商,广告商才是web2平台真正服务的对象。所以平台希望免费用户上传的内容,尽量吸引更多的广告受众来观看。平台也会审查不符合主流价值观(或者对平台/广告商利益有影响)的上传内容,所谓的没有言论自由。
web3的一些社交/内容项目希望借助区块链的去中心化特性来构建免于审查的DApp,本文使用的mirror.xyz就是其中的佼佼者。在mirror写文章有两种状态,草稿状态和发布状态。在草稿状态中,文章内容是中心化存储的,和web2写作平台区别不大。发布过程包含用户和mirror平台的一系列操作:首先,mirror会把文章中的图片使用IPFS(分散式文件存储网络)存储,文章内容存储在Arweave(永久化存储网络);其次,mirror平台会生成包含图片和文章的链接,编码为json格式的metadata(元信息);最后,用户需要使用钱包把包含metadata的NFT合约部署在Optimism网络上。在这个过程中,IPFS,Arweave的使用费用是mirror平台承担,文章上链到Optimize的gas费用是用户承担(文章发布时刻为1.6美元)。这种发布文章的方式,的确做到了去中心化,即文章内容去中心化,作为文章索引的NFT也是去中心化的。但这一系列过程费用相当昂贵,更不用提用户需要操作加密钱包来登陆平台,这进一步增加了使用门槛。
一个健壮的区块链网络,是由众多的节点来维持的。这些节点通过共识算法来保证状态的一致性。简单来说,一个发布的文章会同时存在于“所有”的节点之中。这么多份冗余的记录,占用的资源是相当多的,这是使用区块链如此昂贵的原因之一。另外,节点之间达成共识状态是需要时间的,大多数区块链的TPS非常低。以上两点导致区块链基础设施暂无法支持比如像发推,即时通讯这样的高频使用场景。
另外一些SocialFi类型的DApp则走了更奇怪的路线:web2的发帖,加上web3的代币经济系统,post 2 earn。DApp希望通过代币激励让更多的用户使用,从而提高项目的估值以及代币的价格,在项目上升期间,或者币圈牛市的时候,也许能让平台暂时起飞。但是币价不可能一直向上走,代币价格下降必然会导致用户的流失和活跃度的降低。如果遭遇熊市,那项目可谓九死一生。我个人认为SocialFi的过度金融化带来的问题多于解决的问题。总之,web3也没有很好的解决社交应用的易用性和抗审查性的问题。
2022年10月27日,马斯克成功收购twitter,万众期待的言论自由却没有这么轻易的被实现。在这情况下,nostr的IOS客户端Damus,以twitter挑战者的姿态出现在公众的视线中,引起了广泛的讨论。那么nostr是如何做到它声称的易用,去中心化,抗审查等等特性呢,接下来我们回归到协议本身上来。
首先是账户体系,nostr是无需注册的,用户靠公钥/私钥对来登陆客户端,或者通过Alby这样的钱包插件来管理私钥。这一点类似于区块链应用,其好处是用户的账号不会被封禁,缺点当然是用户需要自己妥善管理好私钥。

用户可以使用同一个私钥来同时登陆多个/多种客户端,客户端的作用是把用户的消息(Event)发送到订阅的中继服务器中,如下图所示:

每次发消息的时候,客户端尝试把这个消息推送到所有订阅的中继服务器中,但是如上图所示,只有其中一部分(红圈)中继接受了这个消息。一旦某个中继存储了我的消息,订阅了同一个中继的别人的客户端,就能查询到我的消息,这个过程就完成了类似twitter的推送功能。没有订阅同样中继服务器的客户端,是无法取得我的消息,也不知道我发过消息。
在目前版本的nostr协议中,中继之间是不会通讯的,我发送的信息不会在多个中继之间传播,从这一点可以看出,中继和区块链节点有本质的不同。由于nostr协议没有共识层,也就不会被“区块打包”,“同步”等拖累效率,能支持任何高频应用。目前,有基于nostr的发推、即时通讯、在线战棋、笔记等等应用出现。
既然nostr协议中,中继是不同步信息的,挑选中继的任务落在了用户头上。问题来了,中继有没有可能作恶?答案是肯定的。在nostr协议中,客户端和中继之间无需信任,中继可以删除用户数据,停止服务,或者停止为一部分用户提供服务,但中继无法伪造用户的消息,因为用户的消息是被私钥签名过的,伪造消息几近不可能。
如果用户发现中继提供的服务有问题,他可以换一批中继,甚至自己架设中继来继续为自己提供服务。这就nostr协议抗审查的原理——用户需要为自己的账号,消息,消息发布渠道负责。nostr协议也没有涉及中继的激励问题,上图中的中继都是免费中继,提供的服务质量参差不齐。nostr希望生态自己解决中继激励的问题,无论是简单的付费订阅或者使用了代币经济学。
nostr协议的流程可以用两个图来总结(没有考证来源):


nostr协议有一系列的NIP(Nostr Implementation Possibilities),即在基础协议之上扩展的功能,客户端/中继可以选择性的实现,其中比较有趣的包括:
NIP-04: 消息加密,利用secp256k1算法来完成Diffie-Hellman密钥交换,点对点加密
NIP-05: 映射公钥到域名,方便记忆,比如作者的公钥是
npub10jprg9n3ecjlpez0fyg7y7yvpl66drtjv8rv0hfllxpdxhesuwzs4c2kw6,映射到了@NomandJames这个域名上面
NIP-06: 助记词,和加密货币钱包的助记词类似
NIP-13: 工作量证明。此概念的提出早于比特币的出现,现被广泛应用在区块链POW共识层中,以太坊whisper协议中也有应用。它的原理是在客户端发送消息之前,要先完成一个计算密集型的工作量证明,接受信息的中继服务器会验证这个证明的有效性。提供这个证明意味着花费了算力,提高了发送垃圾信息堵塞中继的门槛。
NIP-22: 消息时间戳。告知中继服务器消息创造的时间,以便中继选择性的接收消息。时间戳可以设置为过去或者未来。
NIP-40: 过期时间。告知中继服务器消息过期的时间,以便中继删除。
NIP-57: 闪电网络打赏链接。
NIP-65: 中继服务推荐列表。
以上是我理解的nostr协议。我认为,nostr协议为我们展示了一个不使用区块链技术的去中心化,抗审查的通讯类DApp的可能性,也许在未来会有很长远的发展和广泛的应用。nostr的发展还非常早期,我想到了几个问题,期待nostr生态会在未来逐步解决:
客户端信息备份的问题。目前各种客户端都没提过用户备份信息到本地的功能
中继间信息迁移问题。假如一个中继拒绝给我提供服务,我当然可以换一个中继来使用,但是历史消息如何转移?
信息先后顺序的问题。由于nostr协议没有共识层,客户端可以在现在伪造时间戳为一天前的消息,来达到“预言”的效果。对于时间戳和UNIX时间差距很大的消息,一些中继并没有进行处理
中继服务质量的问题。未来也许中继服务器众多,如何挑选中继服务器是一个难题,也许会有一个专门的中继市场出现
总结:我个人是非常看好nostr协议发展的,言论自由是人类一直追求的目标。DApp也不一定非得使用区块链技术,nostr开了一个好头。

