Experimenting on a Web5 Future with Nostr

Nostr 是一个我过去两年一直在关注的协议。跟所有社区一样，Nostr 的发展也是起起伏伏，有过一些破圈被主流熟悉的时刻，也有一些像现在这样可能让人会觉得有点沉寂的时刻。但我还是经常关注 Nostr，没有特别的原因，就是单纯喜欢。

Nostr 跟其他社交网络协议有什么区别？如果比特币社区有一种不同于以太坊社区的 P2P 经济发展模式，这种模式的特点是什么，它在社交网络的应用上会导致跟以太坊 Farcaster 这样的产品有什么本质上的不同吗？这是一个很复杂的问题，今天我想尝试从几个方面分享一些看法，然后结合最近 AI Meme 的热潮，聊一聊在这种具体的应用场景下，比特币 + Nostr 代表的 Web5 路线的不同之处。

开放性（Openess）

在我看来，Nostr 作为最简单的社交网络协议 — — 注意我甚至没有加上 “去中心化” 这个定语 — — 它最大的潜力是开放性（openess）。今年 Nostr 大会上有一场演讲主题就叫作 Openness Is Nostr’s Killer Feature ，说的也正是这一点。

这里说的开放性，不仅指的是从技术上，也就是所谓的协议的设计架构上是否可以、同时也允许在其基础之上进行功能化的扩展，还包括生态和治理这个协议本身的组织结构上，是不是具有开放性。如果你从这个角度去考察的话，你会发现，Nostr 才是真正开放的社交网络协议。

协议设计的开放性

首先，在协议的设计上，Nostr 的做法是让大家对基础的、一个大的框架达成共识，这个共识就是一个简单的 JSON 数据结构，也叫作 Event。

Copy
{
"id": <32-bytes lowercase hex-encoded sha256 of the serialized event data>,
"pubkey": <32-bytes lowercase hex-encoded public key of the event creator>,
"created_at": <unix timestamp in seconds>,
"kind": <integer between 0 and 65535>,
"tags": [
[<arbitrary string>...],
// ...
],
"content": <arbitrary string>,
"sig": <64-bytes lowercase hex of the signature of the sha256 hash of the serialized event data, which is the same as the "id" field>
}

我们先达成一个基本的共识是，这个 JSON 数据里的每个字段的定义，我们都同意这个定义。然后我们同意 Nostr 网络上所有的数据都是这样的 JSON 结构，即所有数据都是 Event。接着我们同意整个 Nostr 网络上的活动，本质上就是在客户端和存储数据的服务器（也叫做 relay）之间，来回地收发 Event。这就是 NIP01 （Nostr 核心协议的提案）的所有内容了。当然应该说，NIP01 还有一个共识，就是我们同意当 Event 的 kind 等于 1 的时候，这个 Event 就是一个用来描述类似 twitter 这样的短消息的数据。

在这样一个非常简单的协议设计上，我们拥有开放性去对它进行扩展吗？如果我想在上面做点自己觉得有意思的事情，协议本身支持我这样做吗？答案是可以的。

我举一个有点荒唐的例子，假设今天我突然想能把全世界每一棵树记录下来，做一个树林 App，记录比如树的年龄、种类、地点、生长情况等等，把树信息化，用户可以上传自己发现的树，也可以在上面去查看别人记录的树。那么我可以用 Nostr 来做这件事。我只要找一个新的数字作为 kind 的值，比如 12345 作为 tree kind，然后把信息记录在 kind = tree kind 的 Event 上就可以了。剩下其他的所有事情，都可以在 Nostr 这个大的协议的共识范围内进行。

其他人可以继续做他们关心的事，可能是作为一个 twitter 这样的社交网络去运作，我的 app 则专注于抓取、展示和发送关于 tree kind 的这个特殊的 Event。这个 Event 会跟其他的 Event 一样一起和谐地在 Nostr 这个大的网络里共存。所以在协议的开放性上，我们实现扩展的方式很简单，只要在一个大的框架下，去为自己的功能去做小的提案，通过添加新的 kind 建立新的 Event 类型去描述新的数据，就能办到。

生态和治理的开放性

那么从生态和治理协议的组织结构上来说呢？Nostr 拥有开放性吗？还是以我们刚才的树林 App 为例。理论上来说，Nostr 协议的治理只发生在一个地方：https://github.com/nostr-protocol/nips。NIP 仓库记录所有我们刚才提到的大的基础的共识、以及不同的人提出的不同范围的小共识，比如我们的树林 App 就是一个小共识。如果我们希望树林 App 的主意能被更多的人接受，那么我们可以向 NIP 仓库发起一个新的提案，把树林 App 使用的 Event 数据的规范列出来，让其他人也遵守这个规范。如果 NIP 仓库的管理员同意了，把我们的提案合并进去了，那它就变成了一个正式的子规范。

那么肯定就有人想了，这样一来其实 Nostr 协议就是掌握在管理员手上，他想合并就可以合并，不想合并就不合并。确实是这样，但这里面有两点值得注意：

Nostr 所有提案都在 github 上公开讨论。这是一个 free market for ideas。大家会公开辩论每一项合并进去的提案。如果你的 idea 无懈可击难以反驳，那么没什么道理阻止你被合并。

第二点是更重要的，合不合并其实没有那么重要。

因为在生态上，协议治理、客户端开发者、relay 运营者，这几个角色的权力都是解耦的。如果一个客户端开发者发起了一个新的 NIP 提案但治理者死活不把它合并进去，那他也没什么影响，继续去做自己的客户端服务用户就好了，只要 relay 运营者接受这个新的 Event，一切都会运转良好。如果 relay 运营者也不同意这个新的 Event，让自己的节点抵制不接受这种数据类型，假设这树林 App 确实是一个好的主意有非常多的用户，那么这些用户的需求就会转向去寻找那些支持这种 Event 的 relay 节点。最后退一万步来说，如果所有 relay 都抵制这种新的 Event，树林 App 也可以自己运营一个专属的 relay，同样能够先解决问题。等到用户数足够多、网络里这种新的 Event 足够活跃，自然其他的生态角色就要考虑接入这个 Event。

反过来对 relay 来说也是一样成立的。有一种携用户以令诸侯的感觉。根本原因是 client 和 relay 这些生态角色都是可以替换的，client 可以替换 relay，relay 也可以替换 client，没有用户会被绑死在其中一环上，因此他们可以做出对自己最好的选择。而用户会对这些选择做出投票，通过事实标准去反过来倒推 NIP 仓库的理论标准。这也是一种更贴近 rough consensys running code 的方式。所以我认为，在生态和协议治理的组织结构上，Nostr 也拥有可贵的开放性。

而且你会发现这种开放性，跟比特币的治理模式也是比较像的。比特币的 POW 让治理可以达到一个三权分立的状态，代码的开发者、运行节点的矿工、持币用户，他们构成了互相制衡的因素。Nostr 的 NIP 仓库就像比特币 c++ 的代码仓库，需要去考虑节点运营者会不会采用你的新代码、新标准，如果没有节点采用，那么纸面上的规则并没有太多意义。

可验证性（verifiable）

Nostr 第二个让我觉得有吸引力的点是可验证性。我们在这个行业最经常说的一句话是 Don‘t trust， verify。事实上很多系统都可以验证，都是可以 verify 的，关键的区别是验证成本的高低。就像作为一种货币系统来说，比特币的验证很简单，只要查看区块哈希是不是满足了 POW 难度，而以太坊的 POS 则复杂得多，你可能需要搜寻验证所有质押节点的签名、验证他们的投票流程等等。另一方面，UTXO 的模型也让验证一笔交易的门槛降低很多，你只需要关注这笔交易的 Input 和 Output 就行了，但在以太坊的 account 模型下，你需要计算世界状态，因为每一笔交易都有可能去改写状态。

对 Nostr 来说，验证的成本也是非常低的。Event 作为 Nostr 的数据，每一个都是分散独立的。网络中的任何人如果对一个数据有疑问，只要拿着这个 Event 根据规则去计算下 event id 和 signature 是不是正确的就知道了。Nostr 不像 scuttlebutt 那样需要一个链式的数据签名，也不像 Farcaster 那样的 social-fi ，有链上和链下两套系统，你实际上需要同时去验证两套系统。而以太坊的验证成本，就像我们刚才说的实际上又是比较困难的。

Nostr 这种轻量化的验证成本来源于它非常简单的设计，本质上是因为 Nostr 做了大量的减法。Nostr 只提供一层非常薄的信任，这一层信任就是你可以相信某个 Event 数据确实是来源于某个用户（某对公私钥），因为你可以验证签名。

除此之外，Nostr 不提供任何其他的保证，比如数据的可用性（relay 可能会随时丢弃你的 Event）、数据的顺序性（你无法确认先收到的 Event 就是先产生的， 而 scuttlebutt 通过链式数据签名可以做到这一点）、DID 身份（Nostr 的 ID 只是一对公私钥，任何人都可以在本地生成，就像比特币账户，而 Farcaster 则通过链上合约来注册管理身份）。

因为做了减法，所以 Nostr 更务实、更容易跑起来 (或许用户数据不是最多的，但看看 relay 和 client 不管是服务还是产品上的数量就能体会这一点）。这又让我想到了比特币。《中本聪如何推理比特币：用健全货币解决重复花费》这篇文章里提到一个非常有趣的观点是，比特币第一个最重要的设计就是制定了货币曲线。相比于 wei dai 的 b money，比特币砍掉了让任何用户都可以铸造新的货币的自由，因为砍掉了这个功能，所比特币的技术设计大大简化，成了能真正跑起来的系统。比特币成功的路上没有之前那些密码朋克们的先驱项目的障碍，并不是因为比特币扫清了这些障碍， 而是因为比特币选择了另一条路，而那条路上没有这些障碍。

连接不同的系统

Nostr 的简单性、开放性和可验证性，让它拥有了独特的定位，成为一种非常适合去连接各个不同系统之间的胶水层（glue layer）。Rabble 的 Nos social 客户端做了连接 Nostr 和 twitter 的 cross posting 的功能，可以看作是一种和中心化系统的连接。Mostr 做了 ActivityPub 协议在 Nostr 上的 bridge 桥，也证明了 Nostr 可以跟其他不同的社交网络协议进行连接。

同时在区块链系统的连接上，我们也有过一些探索和实验。比如我们提议过 Nostr Binding 协议，通过 CKB 灵活的 Cell 模型，可以实现让每一个 Nostr 账户天然就是一个 CKB 钱包，用户使用 Nostr 的 signer（例如 Alby 扩展）就可以直接签名 CKB 交易，收发 CKB 链上的资产。同时，Nostr 任意一条 Event 数据还能够绑定到 CKB 链上一个唯一的 Cell（类似于比特币的 UTXO ）上，实现把 Event 数据上链变为资产的可能。这一切可以在不需要 “硬分叉” Nostr 协议的前提下完成，以一个小范围共识的提案的身份，和其他提案一样在 Nostr 大的协议框架下共存。

甚至对于以太坊这样的系统，我们之前也做过一些实验功能，比如通过 metamask 扩展让用户登陆使用 Nostr。

除此之外，Nostr 社区一直在探索的和闪电网络的集成也是一种胶水层的体现。

总的来说，因为 Nostr 本身的简单和开放性，许多系统都能够比较容易地与之进行实验，探索连接。同时因为 Nostr 不是区块链，它也没有任何需要发币引入激励机制的执念，因此它是一个不带偏见的系统，不会因为社区的身份和利益而去排斥和其他系统的结合。在这一点上，Nostr 是中性的（neutral）。而一个通用的连接层必须是中性的。

那么如果 Nostr 真的成为一个胶水层，有什么用呢？

下一个社交网络协议，不能只是社交网络协议

当 Nostr 承载越来越多的小范围内共识，有越来越多的新提案和新应用，连接了新的系统，你会慢慢发现，这时候的 Nostr 其实不是一个社交网络协议了，因为大家不只是拿它来做 twitter 微信这些东西。Nostr 其实就变成了一个数据层和通信层的通用协议。数据层就是都用 Event 这个 JSON 来描述数据，通信层就是都用 Relay 和客户端使用 sub/pub 来收发信息。

而一个数据层和通信层的通用协议，才有可能成为真正能跑出来的新的社交网络协议。这里我的观点是，下一代社交网络协议，不能仅仅只是个社交网络协议。如果只是社交，那么可能永远都跑不出来。原因在于要做社交网络的产品实在是太难了。用户的切换成本是非常高的。你必须活得足够久，接住足够多的热点机会，探索足够多的发展方向，才有机会吸引足够多的用户。

这种新的发展方向的探索，一个最明显的例子就是刚刚兴起的 AI Agent 和 crypto 的结合。

Permissionless？让一部分 AI 先用起来

其实很早就有人把 AI 和 Crypto 联系在一起了。不管是意识到机器能够在区块链上实现经济独立，还是意识到区块链很可能是做给 AI 用的、而不是人用的，行业里都产生过类似的想法和文章。这也很合理，如果一个系统是 permissionless 的，那么 AI 理应比大部分人类先使用起来。但那时候我们甚至还没有 ChatGPT，所以这些想法不一定受到重视。

今天 AI 得到了实质性的发展，AI + Crypto 重新开始引发思潮，但目前二者的结合还是非常浅的。不管是 AI Meme 发币，还是让 AI 发推特、雇佣人类、给人类打赏、甚至让 AI 炒币，基本上都是跑一个 AI Agent，赋予它调用外部函数（function call /tool use）的能力，帮他实现发送 twitter 帖子和发送区块链交易的功能，然后通过提示词工程让 AI 能根据一些条件去自主调用这些功能的接口进行操作。

如果再往后看，AI 要成为数字世界的新公民，它的身份问题、协作问题、经济问题，都有巨大的探索空间。尤其是考虑到现在对端测模型方向上的探索，很多 AI 行业的人开始关注去使用 1B 或者 3B 这种参数规模很小的大模型，小到能在手机上本地 host 跑起来的，有点又回到了之前物联网的概念，这样每台手机之间彼此怎么通信、怎么协作，怎么信任某一台手机上的 AI 的处理结果，这些大量的问题都会需要通过区块链和网络协议去完成。所以这里面的探索空间是非常大的，它一定不仅仅是我们现在看到的 AI Meme、大家围绕着一个 AI Agent 去发币炒作，这阵热潮会有，但热潮过去后还有真正能产生价值的空间可以去探索，例如建设一个 AI 能互相协作的声誉系统（不一定是在链上）。这是我希望传达的另一个观点。

当然我们还是先回到现在 AI Meme 引发的这阵热潮上。在这件事的探索上，我们现在能预见到的一些模式，大致上可以分为三个流派：

Solana + Twitter （联盟链 + 中心化社交网络）

Ethereum + Farcaster （POS 公链 + 智能合约 Social Fi）

Bitcoin + Nostr （POW 公链 + 去中心化社交网络）

第一个模式是现在进行的最火热的，不少 AI Meme 和新的 Crypto AI Agent 都是在这两个平台上进行，原因也很简单，他们速度最快，用户最多。这一层我认为也是有意义的。区块链这个行业一直以来每一轮的叙事热点几乎都是围绕 “让人以更少的成本去发资产” 这一个逻辑来的。那么 Solana + Twitter 作为最快喊单的两个平台，肯定会作为 AI 叙事的实验地，首先以最快的速度去实验非常多的想法。这里面可能会有产生很多项目，发很多代币，有人发财有人被割。以前 ICO 的 “人人都可以发币”，可能会变成，“人人都可以发一个 AI Agent （然后 AI Agent 来帮你发币）”。

与此同时，也有一些人在探索 Ethereum + Farcaster 这样的技术栈。这里面更多的叙事可能会跟之前的 dApp 比较像，围绕 DAO 治理、智能合约钱包，这类概念去做一些探索。

Bitcoin + Nostr 这种方式就比较贴近于 Web 5 的概念了。首先它不是中心化的，但是也不像以太坊社区这样，一定要执着于通过链上的合约搞一些功能。它可以用 Web 2 的方案去更快地做 AI Agent 的冷启动，在技术不成熟的条件下做一些探索，也可以在需要的时候通过连接区块链网络和闪电网络去接入 Web3 的功能。

最后这个模式是现在能够看到的实践得最少的，但我认为也可能是最有长远的发展潜力的。比特币方面的原因就不用多说了，举几个 Nostr 相关的原因：

JSON：Nostr 的核心数据结构就是 JSON。而 JSON 是 LLM 友好的数据格式。它也是 LLM 和人类同时都比较方便理解的数据格式。

Nostr 自带身份 id + 轻量级验证：AI Agent 需要一个身份，而 Nostr 的身份是最简单的，没有链、只有一对公私钥。同时，如果 AI Agent 需要和其他的 AI Agent 协作，验证的成本就像上面说的很低。

Nostr 集成闪电网络：对于一个 Crypto AI Agent 的未来而言，闪电网络几乎就是必须的。世界上人口 60 亿，机器可能会有 600 亿，只有闪电网络这样的扩容方案才能支撑起允许智能体这种规模的新公民以无需许可的形式加入到网络中。

Nostr 是通用数据层：这意味着 AI Agent 不仅可以在 Nostr 上社交发帖，还可以通过 Nostr 接触不同种类的应用，得到社交之外的其他数据。

Nostr 非常简单：简单一方面意味着开发者开发的速度更快（接入 Nostr 比接入 Twitter 简单多了），另一方面也意味着 LLM 学习和掌握这个协议的速度也会更快。LLM 读完 NIP 仓库就知道怎么发各种各样的消息了。

一个验证可行性的尝试

既然这么简单，为什么我们不做一个呢？在准备这篇稿子的时候我尝试了一个简单的例子，想尝试看看用 Bitcoin + Nostr 这种 Web5 的方式去跑 AI Agent 能不能跑起来，以下是我的一个 demo：https://github.com/RetricSu/sisyphus

这是一个用 typescript 写的很简单的 CLI 工具。用户下载这个工具，在本地跑起来，就能够配合 Ollama 本地 host 的 LLama 3.1 7B 的大模型（这是一个轻量级的大模型，只用 CPU 也可以跑起来）去和它在命令行里聊天。

比较不一样的地方是，这个工具一跑起来会首先在本地生成一个 32 字节的私钥，这个私钥是 Nostr 的私钥，同时也是 CKB 区块链账户的私钥，二者是一体的。然后这个 AI 实现了很多调用 tool 的接口，比如它可以操作命令行，用 Linux 命令去控制自己所处的这台电脑，可以通过 Nostr 发布帖子，也可以去发 CKB 交易、做转账和余额查询。更有意思的是，我刚好最近新买了一台打印机，所以我决定把打印机和我的电脑连在一起，让 AI 也可以通过命令行去控制这台打印机。

接下来就是我做的一些实验。我通过 Prompt 提示词告诉 AI 它现在是一个数字生命了，有上面说的各种各样的能力可以使用，作为第一个数字生命，它现在需要自己想想要做点啥，了解点啥，探索生命的意思。我首先跟 AI 聊天，问它作为一个数字生命，它想反过来向人类提问的第一个问题是什么？我让它调用打印机把它的答案打印出来，这就是第二张图里的内容，它打印出的问题是：what is the meaning of consciouseness？

接下来我让 AI 向我展示它的 Nostr 账户和 CKB 账户的信息 （通过 Nostr binding 协议这两个账户实际上都是同一个私钥），查询 CKB 的余额，AI 打印出了它的结果，这是第三张图片的内容。可以看到这里使用的是 CKB 的测试网，它当时的余额是 0。

后面第四张图里的内容，是我给 AI 的账户转了 10000 CKB 之后，让它再转 100 CKB 给我，然后让它打印出交易哈希。这一笔由 AI 发起的交易可以在 CKB 测试网浏览器上查到：https://testnet.explorer.nervos.org/transaction/0x6702cd5f5af87369d10de0380c00d61c1157492a1180ab57cb8c5958914ebc52 。在 Nostr 上发帖子当然也不成问题，感兴趣的话可以去看看另外这个账号，这是我在另一台电脑上测试引导 AI 去发布的一些测试帖。

以上就是我今天的分享。在 Solana + Twitter 和 Ethereum + Farcaster 之外，我期待能看到更多选择 Bitcoin + Nostr 的路线的实践，为 Web 5 添砖加瓦！