# Waku: 去中心化消息中继网络

By [Betalpha Labs](https://paragraph.com/@betalpha) · 2022-09-16

---

[Waku](https://waku.org/platform)是点对点消息传递协议 Whisper 的分叉。Waku 旨在以迭代方式解决 Whisper 的一些问题，并实现更大的可扩展性。Waku 由去中心化通讯协议 Status 的 Vac 团队开发，该团队在模块化、点对点消息堆栈上进行研发，以实现私密、安全、抗审查的通信。相对于Whisper，Waku 可扩展性提高了 10 倍。

**一、什么是点对点消息传递网络？**

点对点消息传递消除了集中第三方服务器在整个网络中传递消息的需要，让消息传递变得去中心化。在传统的客户端-服务器网络中，消息从 A 发送到网络中的中央服务器进行处理，然后转发给 B。这些服务器托管和处理网络中的所有消息，并成为主要的隐私和安全风险，因为它们成为单点故障和集中式攻击对象。即使采用先进的端到端加密和其他隐私措施，这些集中式服务器也存在安全和隐私风险。

在点对点消息传递网络的情况下，当 A 想向 B 发送消息时，她将消息广播到网络中的多个节点，并且该消息从节点反弹到节点。但是只有 B 可以访问，其他节点只是帮助路由消息。默认情况下，所有消息都是端到端加密的，因此只有预期的收件人 B 可以解锁并查看消息的内容。

点对点消息传递网络旨在提供：

*   取消中心化的寻租中介
    
*   网络去中心化和消除单点故障
    
*   审查阻力
    

**二、Whisper 协议简介**

在以太坊起步的时候，就有“三位一体”的概念。Ethereum 用于计算/共识，Swarm 用于存储，而 Whisper 用于消息传递。

简而言之，Whisper 是一种用于去中心化应用程序 (Dapps) 的点对点 (P2P) 消息传递协议，其为 Dapp 开发人员提供一个简单的 API，以几乎完全保密地发送和接收消息。但这种对隐私的追求迫使 Whisper 的设计者做出一些有趣的权衡，以牺牲性能来换取隐私。因此，Whisper 更适合某些类别的用例。

**Whisper协议运行在以太坊p2p协议框架之上**，所有运行Whisper协议的节点组成一个Whisper网络。通过节点之间的消息转发，理论上，每个节点都可以收到所有Whisper消息。

Whisper具有以下基本特性和概念：

*   **通信加密**：每一条Whisper消息在网络上都是加密传输的，可以选择非对称加密（椭圆曲线）和对称加密（AES GSM）两种加密算法之一。
    
*   **Envelope**：Envelope是网络中传输的Whisper消息的基本单位，它包含已加密的原始消息以及消息相关的控制信息。
    
*   **Topic**：每个Envelope上写明了自己封装消息的Topic，如果一个节点不关心这个Topic，那么它就不需要去试着打开（解密）这个Envelope。通常一个Topic对应一个消息加密时使用的Key（无论是对称还是非对称加密）。
    
*   **Filter**：Dapp 可以在节点上安装多个Filter，每个Filter包含一组条件，只有满足这些条件的Envelope才能被打开，准确的说，不是节点打开Envelope，而是节点上安装的Filter打开Envelope，每个Filter有一个缓冲区可以存储解密后的消息，如果一个Envelope满足多个Filter，那么这个消息会存储在多个Filter中。
    
*   **Proof of Work**：Proof of Work 用来防止节点恶意大量发送消息，采用的算法和PoW共识算法差不多。消息的创建者需要找到一个nonce使得消息的Hash值小于一个值。这个值与消息的大小和TTL有关，消息越大，TTL越大，则找到nonce越困难。
    

然而，由于以太坊生态系统的大部分努力和资源都集中在 Eth1.X 和 Eth2.0 上，所以导致Whisper的进展缓慢几乎停滞。

**三、从Whisper 过渡到 Waku**

**Whisper 有其自身的局限性**。这些问题包括：

*   Whisper 不可扩展，在带宽使用方面较为紧迫——没有足够的活跃 Whisper 节点来支持大量使用。
    
*   垃圾邮件抵抗力低：工作量证明对于 Whisper 的异构节点来说是一种糟糕的机制。
    
*   运行 Whisper 节点没有激励。
    
*   缺乏正式、清晰的规范使得分析和实施变得困难。
    
*   Whisper 在 devp2p 上运行，这限制了它可以运行的位置和方式。
    

**Waku 计划如何解决这些问题？**

为了使 Status 更具可扩展性，[**Vac**](https://vac.dev/) 团队分叉了 Whisper 并创建了 Waku。Status 的最新版本 v1.2 引入了 Waku 的初始版本，并将网络的可扩展性提高了 10 倍。

以下是为解决上述问题而采取的一些解决方案：

*   **可扩展性**\- Whisper 节点利用布隆过滤器，但 Waku 节点没有。虽然布隆过滤器通过合理的否认来实现更大的隐私，但 Waku 是基于主题兴趣，因为它针对更好的可用性进行了优化。Waku 节点不会在网络中接收大量消息，而是只会接收他们订阅的某个主题的消息。这大大减少了接收到的消息数量，从而减少了带宽消耗。
    
*   **垃圾邮件抵抗**\- Waku 实施速率限制。速率限制允许节点控制其接收请求的速率。如果它从特定 IP 接收到大量关于特定主题的消息，则节点可以减少允许的请求量。节点也可以选择阻止其他节点。
    
*   **没有激励性基础设施**——目前正在进行研发。
    
*   **缺乏正式和明确的规范**\- Waku 包含更严格的[规范](https://specs.vac.dev/specs/waku/waku.html)，这使得拥有多个客户端并确定接口方面的需求变得更加容易。
    
*   **在 libp2p 上运行**\- Whisper 在 devp2p 上运行，而 Waku 在 libp2p 上运行。libp2p 最直接的好处是能够在浏览器中运行。还有许多可以实现的扩展，使 Waku 成为一个更加通用和可用的协议。
    

**四、Waku v2**

Waku v1 是 Whisper 的分叉，增加了一些提高效率的调整。Waku v2于2021年推出，取代了 Waku v1，是一套完全重新设计的协议。

**特点**

Waku v2 提供基于 PubSub 的消息传递协议，具有以下特点：

*   广义消息传递：需要使用消息传递协议来进行人与人、机器与机器或混合通信的应用程序。
    
*   点对点：适用于需要 p2p 解决方案的应用程序。
    
*   资源受限：例如，以有限的带宽运行、大部分时间处于离线状态或在浏览器中运行。
    
*   隐私：具有隐私要求的应用程序，例如匿名、元数据保护等。
    

并且以模块化的方式提供这些属性，应用程序可以选择他们想要的权衡。

**协议**

Waku v2 包含多个协议。其中最重要的包括：

*   WAKU2 - 主要规格，详细说明所有部件如何组合在一起
    
*   RELAY - GossipSub 之上的薄层，用于消息传播
    
*   STORE - 获取历史消息
    
*   MESSAGE - 消息负载
    

这是最小 Waku v2 客户端的推荐子集。

**实现**

Waku v2 包含多个实现。这允许客户多样化，更容易加强协议，并允许人们在不同的环境中使用 Waku v2。

*   nim-waku - 用 Nim 编写的参考客户端，功能最齐全。
    
*   js-waku - 允许从浏览器使用 Waku v2，专注于与 dapps 交互。
    
*   go-waku - Waku v2 的子集，可轻松集成到 去中心化通讯协议 Status 应用程序中。
    

**更多示例**

*   链下无Gas投票和投票聚合
    
*   Dapp 游戏使用 Waku 作为玩家发现机制
    
*   使用以太坊密钥向某人发送加密消息
    

**代码/网站**

*   使用 Waku：[nim-waku chat](https://github.com/status-im/nwaku/blob/master/docs/tutorial/chat2.md) (/ [js-waku browser chat](https://js-waku.wakuconnect.dev/))
    
*   使用 Waku 构建 dapp：[js-waku 文档](https://status-im.github.io/js-waku/docs/)
    
*   贡献代码：[js-waku](https://github.com/status-im/js-waku) /[nim-waku](https://github.com/status-im/nwaku)
    
*   规范：[vacp2p/rfc](https://github.com/vacp2p/rfc)
    

**未来研究领域**

*   使用 zkSNARKs 和 RLN 保护隐私和垃圾邮件保护
    
*   资源使用的核算和结算，以激励节点通过 SWAP 提供服务
    
*   存储协议的状态同步，可以更轻松地运行存储节点而无需完美的正常运行时间
    
*   更好的节点发现
    
*   更严格的隐私分析
    
*   改善与钱包和 dapp 的交互
    

**五、目前使用Waku的协议**

WalletConnect 、XMTP、Status、RAILGUN

**总结而言，Waku的特别之处在于：**

1、有别于在Layer 1、Ceramic或者通过中心化服务器建立的通讯协议，Waku是专门针对通讯的底层去中心化网络。

2、Waku分叉了Whisper协议，Whisper协议运行在以太坊p2p协议框架之上，Waku也是基于以太坊p2p协议框架。

3、Waku正统性更强，Whisper是在以太坊白皮书的时候就提出的概念，虽然Whisper后期发展并不好，不过仍然有以太坊社区的支持。

4、 Waku 2.0 构建在 libp2p 之上，因此它可以像浏览器一样在客户端中继消息并通过网络传播。使用Waku 2.0 的协议不需要客户端去连接到服务器。

5、Waku迭代时间久，在2017年的时候去中心化通讯协议Status就基于Whisper构建了第一个版本，目前已经迭代到Waku 2.0 ，Waku网络也由Status的团队提出。

---

*Originally published on [Betalpha Labs](https://paragraph.com/@betalpha/waku)*
