去中心化应用该有的典型架构: Nostr 和 ArcBlock 的 Decentralized Pub/Sub Gateway 设计的类似性

Robert’s MetaMask
2023年12月17日
cover

在 2017 年ArcBlock的白皮书里,有一个部件一直被忽视了,以至于提及的人很少,这就是上面的那个“Decentralized Pub/Sub Gateway”:


Image


这个部件其实在白皮书的下文里花了不少篇幅来说明了细节,比如说明了它和blocklet 之间的关系:

Image


甚至给出了一个解释来说明设想的 去中心化 pub/sub 如何来实现不同用户在去中心化的 gateway上来交互:


Image


本质上来讲,这其实是一个非常简单的部件,它采用长连接协议 (以wss 为主),每一个节点提供了用户可以任意加入的 channel ,就是通讯频道。 用户在相同的频道里就能通讯,并且这些频道本身是分散在各个节点的,因此用户就需要去加入到不同的频道里才能和其他在相同频道的用户通信。 我们还设计了中继节点(称为super node)用来连接不同的node 以提高用户之间发现和通信的效率。


Decentralized Pub/Sub Gateway 的想法是设计非常简单,把去中心的很多具体的事交个节点自己去处理: 该加入哪个channel? 该如何处理消息的格式? 该如何订阅/聚合/过滤/组织消息? 这些全部不管了,因为每个去中心应用应该为自己负责。 不像中心化服务,往往客户端非常简单,非常“瘦”, 一个庞大复杂的服务端掌控了一切。


现在看看,这个思路和 Nostr 真的是有异曲同工之妙:

Image


Nostr 其实就只是对应了我们架构里Decentralized Pub/Sub Gateway 的部分, 而且它把功能给具体化了,就是做社交应用,因此定义了一批 Event 数据。 我们对Decentralized Pub/Sub Gateway 是更抽象, event 是什么也完全不定义, 完全应用来决定。 另外 Nostr 强调消息的 Relay,是个存储转发的机制, Decentralized Pub/Sub Gateway 则完全不管这些,只是一个实时的转发器, 如果消息需要持久化,也得自己来实现。


现在的大部分dApp 其实一点 Decentralized 也没有,这是个很可悲的不争事实。 很多dApp 其实应该叫 Blockchain app,仅仅是使用了 blockchain,把智能合约、区块链作为一个后端模块而已, 本身的去中心化完全没有任何考虑。 Nostr 这个样子才是去中心化应用该有的典型架构, 我们的Decentralized Pub/Sub Gateway 也是类似的。