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
每月 75 次下载
用于 2 crate
485KB
10K SLoC
环形网络核心
架构
环形网络架构被简化为五个不同的层级。
运行时层
环形网络的设计目标是使节点能够在任何环境中运行,包括浏览器、移动设备、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 方案
- Peer A:{ 创建提议,将其设置为本地描述 } -> 将提议发送到 Peer B
- Peer B:{ 将接收到的提议设置为远程描述,创建答案并将其设置为本地描述,将答案发送到 Peer A }
- Peer A:{ 将接收到的答案设置为远程描述 }
对于原生实现,传输层基于 webrtc.rs
,对于浏览器情况,我们基于 web_sys
和 wasm_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