# NOSTR，一个可以构建丰富去中心化生态的协议

By [Alpha 观察室](https://paragraph.com/@hold1btc) · 2023-01-10

---

首先Nostr不是一个应用程序。它是一个轻量级的、简单但可扩展的开放协议，可以基于它从而建立真正一个抗审查和去中心化（不基于区块链技术）的社交网络。

该协议基于中继器。中继器可以由任何人建立和运行的服务器。通过连接中继器，用户可通过客户端（或应用程序）实现实时推送和接收事件。

_内容摘要_

_1\. 账户_

_2.事件_

_3\. 中继器_

_4\. Nostr可以做什么？_

**1\. 账户（Account）**

在nostr中，你不需要通过使用个人数据来注册一个账户。而像比特币一样，你需要有一套秘钥。准确地说，是两把钥匙。

一个是公钥：相当于用户名。它可以对所有人公开。

一个是私钥：就像你的密码。你需要对它进行保密。此外，这个密钥将允许你在任何由nostr支持的平台（客户端）上访问你的账户。

获得一套秘钥是非常容易的! 你只需要选择一个nostr协议的客户端，如[anigma](https://anigma.io/)、[coracle](https://coracle.social/)或 [astral](https://astral.ninja/)，它就会为你生成。

为了增加安全性，建议使用外部签名程序，如[Alby browser extension](https://getalby.com/)或[nos2x extension](https://github.com/fiatjaf/nos2x)。你也可以用[rana](https://github.com/grunch/rana)等工具生成一个独立的私钥。

**你需要妥善保存你的私钥，因为这是将来恢复和重新登录你的账户的唯一方法。**

**2\. 事件（Event）**

nostr中唯一存在的对象类型是事件。事件是小型的纯文本结构。这些是客户端发送给中继器的内容。一个事件的内容如下：

{ "id": "c011...4c43", "pubkey": "dec1...4fb3", "created\_at": 1671551112, "kind": 1, "tags": \[\], "content": "good morning!", "sig": "e1dc...5f1" }

id 是事件的唯一标识符。它是一种在网络中唯一引用该事件的方式。

pubkey字段，包含创建该事件的公钥（用户）。

created\_at字段指内容创建的时间。

kind字段是nostr最有趣的部分之一，指定它是哪种事件。你可能会问为什么这很有趣... 好吧，最好的部分是，事件种类不受限制，所以我们可以设计任何我们想要的种类。 例如，有一个事件种类1，它只是一个纯文本笔记。如果你想这样称呼它的话，就是一条 "推特"。但我们也有第4种，是端到端的加密信息。

tag字段可以包含我们想要的任何任意的标签。这给开发者提供了很多可能性! 例如，一个常见的用法是，当你回复某个消息（事件）时，该事件的id被设置为一个叫做 "e标签 "的标签。

content字段只是该事件包含的内容，这个事件的内容就是“Good Morning！”

sig字段（签名）是一个加密证明，证明发布该事件的人是与该公钥相关的私钥的所有者。

**3\. 中继器**

中继器是nostr协议的主要部分。它们存储从客户端那里收到的事件。

中继器之间互不通信。只有你所连接的中继器才会接收和存储你的事件。

这是Nostr的一个重要方面。中继器之间不交流。出于这个原因，你应该连接到你想发送数据的尽可能多的中继器。

客户端（应该总是）允许用户连接到他们想要的任意数量的中继器。用户还可以选择他们是否想从/到他们所连接的中继器中读取、写入或同时读取。这意味着我可以连接到某个中继来检索内容，但我可以选择不在那里发布我的事件，或者反过来。

如果我连接到一个中继器A，而你连接到一个中继器B，尽管我们都在使用nostr，但我们将无法看到对方的事件。

为了看到对方的事件，2个用户必须至少连接到同一个中继器上。这意味着，在上面的例子中，如果我想看到你的事件，我需要连接到中继器B上（或者你可以连接到中继A），然后我们就可以看到对方的事件了。

乍看起来有点难以理解，但它却有一个非常强大的方面。你可以运作一个从不与任何人分享的中继器，并在那里发布你的所有事件（以及许多其他中继站）。这样，您就可以在自己的中继器中只备份您的事件。

也许有一个中继器只关注和讨论足球，而你不想成为它的一部分，所以你可以不把它添加到你的客户端中。但是你仍然可以和一个关注足球中继器的用户建立连接，前提是你们在同一个其他的普通中继器中。

Nostr有很强的抗审查性：想象一下，你有能力在任何地方创建一个门户。如果有人试图关停你的内容，你可以简单地创建一个新的门户并绕过他。Nostr让这一切变成可能，因为建立一个中继器既便宜又容易。事实上，一个中继器可以在一个低端智能手机上运行！

此外，中继站之间不相互交谈的事实也有助于此：审查一个中继站不会影响到其他中继站！

目前有100多个继电器分布在全球各地，而且还在不断增加。

教程：如何建立一个中继器

**4\. Nostr可以做什么？**

**如前所述，Nostr是一个非常强大的数据共享协议。这意味着人们可以利用它建立任何他们想要的应用。**

Nostr还很年轻，还有很多地方待完善，但这里有一些已经实现的和可以工作的可能性。

**4.1 去中心化的Twitter**

Nostr的诞生是为了建立一个去中心化的社交协议。因此，有很多客户端都在努力实现这个愿景。

为了实现这个目标，这些客户端利用了第1类的事件，即纯文本。这些客户端包括：[coracle](https://coracle.social/), [astral](https://astral.ninja/), [nostr.ch](https://nostr.ch/), [branle](https://nostr.rocks/), [damus](https://damus.io/), [alphaama.com](https://alphaama.com/), [Nostros](https://github.com/KoalaSat/nostros) 和其他类似的客户端

**4.2 去中心化Telegram**

通过使用[kind 4X](https://github.com/nostr-protocol/nips/blob/master/28.md) （其中X是0到9之间的数字），可以像Telegram一样实现公共频道。

[Anigma.io](https://anigma.io/) 是实现Telegram克隆的网络应用。你可以创建公共频道，任何人都可以加入并聊天。在anigma中，你也可以向用户发送私人的端到端加密信息。这是通过使用 [kind 4](https://github.com/nostr-protocol/nips/blob/master/04.md)事件实现的。

**4.3 去中心化Reddit**

在这里你可以发布帖子，用户可以对这些帖子投票。[nvote](https://nvote.co/)是nostr中这类平台的一个应用。

**4.4 在线游戏**

nostr的另一个有趣用途是创建简单的在线多人游戏。这种概念的一个用例是[Jester](https://jesterui.github.io/)，在这个平台上，你可以通过Nostr与其他用户进行在线下棋。

**4.5 文本共享**

[**Sendstr**](https://github.com/vilm3r/sendstr-web) **是一个在线工具，你可以通过nostr协议在两个设备之间分享端到端的加密文本数据。**

这里还有一些非常有用的资源可以供开发者使用。

[Nostr协议规范](https://github.com/nostr-protocol/nips/blob/master/01.md)

[Nostr NIPS](https://github.com/nostr-protocol/nips)

[Nostr列表](https://www.nostr.net/)

[Nostr中继器列表](https://nostr.watch/)

---

*Originally published on [Alpha 观察室](https://paragraph.com/@hold1btc/nostr)*
