#dht #chord #wasm #p2p #web3

无 std rings-core

带有 ICE 的 Chord DHT 实现

15 个版本 (5 个破坏性更新)

0.7.0 2024 年 5 月 1 日
0.6.0 2024 年 3 月 28 日
0.5.1 2024 年 1 月 2 日
0.3.0 2023 年 9 月 21 日
0.2.0 2022 年 7 月 26 日

#37 in #web3

Download history 177/week @ 2024-04-27 11/week @ 2024-05-04 8/week @ 2024-05-18 5/week @ 2024-05-25 4/week @ 2024-06-01 2/week @ 2024-06-08 1/week @ 2024-06-15 14/week @ 2024-07-06 4/week @ 2024-07-13 2/week @ 2024-07-20 71/week @ 2024-07-27 1/week @ 2024-08-03

每月 75 次下载
用于 2 crate

GPL-3.0 许可证

485KB
10K SLoC

Rings Network

环形网络核心

rings-node cargo docs

架构

环形网络架构被简化为五个不同的层级。

运行时层

环形网络的设计目标是使节点能够在任何环境中运行,包括浏览器、移动设备、Linux、Mac、Windows 等。为此,我们采用跨平台编译方法来构建代码。对于非浏览器环境,我们使用独立的 Rust 实现,不依赖于任何系统 API,使我们的原生实现不受系统限制。对于浏览器环境,我们将纯 Rust 实现编译成 WebAssembly(Wasm),并使用 web-sys、js-sys 和 wasm-bindgen 来将其粘合在一起,使我们的节点在浏览器中完全功能化。

传输层

环形网络的传输层基于 WebRTC 协议,它通过简单的接口为浏览器和移动应用提供实时通信能力。

WebRTC 协议通过交换 SDP(会话描述协议)来获取节点之间的最佳连接路径,该协议可以是 TCP 或 UDP。在环形网络中,我们使用 WebRTC 的数据通道来实现数据通信。对于一个典型的 ICE(交互式连接建立)过程,可以描述如下:

假设节点 A 和节点 B 想要创建一个 WebRTC 连接,它们需要相互交换至少三条消息:

ICE 方案

  1. Peer A:{ 创建提议,将其设置为本地描述 } -> 将提议发送到 Peer B
  2. Peer B:{ 将接收到的提议设置为远程描述,创建答案并将其设置为本地描述,将答案发送到 Peer A }
  3. Peer A:{ 将接收到的答案设置为远程描述 }

对于原生实现,传输层基于 webrtc.rs,对于浏览器情况,我们基于 web_syswasm_bindgen 实现。

要检查传输层的实现: https://github.com/RingsNetwork/rings-node/tree/master/transport

网络层

网络层是环形网络的核心组件,负责网络内的 DID(去中心化标识符)发现和服务路由。环形网络采用 Chord DHT(分布式哈希表)算法作为其网络层的实现。

Chord算法是一种著名的DHT算法,其特点是所有参与节点之间形成一个抽象的环形拓扑结构。它具有O(log(N))的查找算法复杂度。

协议层

在协议层,核心设计理念是利用一个去中心化标识符(DID),它在抽象代数中构成一个有限环。DID是一个160位的标识符,它能够构建一个包含群和域特性的数学结构。

它由一组元素组成,这些元素具有两个二进制运算,加法和乘法,并满足一系列公理,如结合律、交换律和分配律。由于元素数量有限,这个环被认为是有限的。有限环在数学和计算机科学的各个领域被广泛使用,包括密码学和编码理论。

在协议层,我们实现了委托会话密钥的概念,用于支持与DID(去中心化标识符)相关的各种密码学验证方法。目前支持的签名算法包括ECDSA-secp256k1、ECDSA-secp256r1和EdDSA-ed25519。

应用层

Rings网络的核心类似于Actor模型,它要求每种消息类型都必须具有处理者特性。这允许分离处理系统消息、网络消息、内部消息和应用层消息。

依赖关系

~17–33MB
~557K SLoC