02 February 2023

“Pura Vida”。1 月 1 日,前 Twitter CEO Jack Dorsey 在 Twitter 上打出了这组词,点赞无数。

Pura Vida 是哥斯达黎有一句标志性的话,就是 “Pure Life”,体现了他们的简单与热情,不管是见面、问候、还是再见,都可以说 Pura Vida。一句 Pura Vida 就拉近了人之间的距离。卸任了 Twitter CEO 职位的 Jack Dorsey 也在思考如何构建一个简单纯粹的社交网络。

2 月 1 日,Jack Dorsey 发布推文表示,基于分布式社交媒体协议 Nostr 的社交产品 Damus 和 Amethyst 正式在苹果 App Store 和谷歌 Google Play Store 上线。于是,这几天,nostr 成了坊间热议的话题。

一句话概括就是:nostr 是一个匿名、简单、开放的网络协议,任何人都可以参与其中,建立一个无监管的社交网络。它不需要任何可信的中心服务器,所以服务不间断。它基于非对称密钥和签名,安全又可靠。

nostr 的工作机制是这样的:任何人,在任何地方,可以通过任何形式的客户端,生成一对密钥对,注册帐号。客户端可以是原生的、可以是 web 的、甚至命令行形式的。然后你可以发布一些信息,用你的私钥签名,发送到多个中继服务器。你可以自己搭一个中继服务器,也可以用任何他人运维的中继服务器。然后,其他人就可以通过这些中继服务器,获取你发布的信息。中继的功能很简单,就是接受客户端或向其他中继转发消息。这种消息,在 nostr 协议中叫 Event 事件。中继不关心消息事件的内容,只有客户端会去验证消息来源是否可靠。这就是所谓的 “dumb server, smart client”模型。

nostr 协议很简单,就是通过 websocket 收发 JSON 格式 Event,其格式如下:

{
  "id": <sha256 of the serialized event data>
  "pubkey": <32-bytes hex of public key of the event creator>,
  "created_at": <unix timestamp in seconds>,
  "kind": <integer>,
  "tags": [
    ["e", <32-bytes hex of the id of another event>, <recommended relay URL>],
    ["p", <32-bytes hex of the key>, <recommended relay URL>],
    // other kinds of tags may be included later
  ]
  "content": <arbitrary string>,
  "sig": <64-bytes signature of the sha256 hash of the serialized event data>,
}

比如下面这个 Event 就是我在 nostr 网络中发送的第一条消息:

{
    "id":"5b8794d009a43139558318df5475fd2a1659b52f26df3c0f3ce8b022d0d88370",
    "pubkey":"172c463cf703a1abd9a1f8d9ff2a9d66c9904e1719b6352617d6293ac4929cdc",
    "created_at":1675339072,
    "kind":1,
    "tags":[],
    "content":"Nice day",
    "sig":"cc3a441feadaaef8ba745457732ea05a0d26fee0f08d97208853aa94085e2d3ceda8b18ef7ca871935ea0668a46fb095f258437588809b9c16089c92bb4459d1"
}

客户端发给中继服务器 Relay 的所有 Event 都是 Schnorr 算法签名的。其他客户端通过订阅过滤器得到任何 Event。客户端不是去中心化的,但是 Relay 是去中心化的,Relay 之间互相通信收发 Event。客户端自己决定要订阅哪些 Event,怎么验证 Event 是否可信。你可能会觉得这样的协议,太过简单,没什么价值。其实,正是因为协议简单,才适合与去中心化的应用场景,满足去中心化社交网络 DSN 的需求。