116个版本

使用旧的Rust 2015

0.37.1 2020年12月1日
0.37.0 2018年8月28日
0.36.0 2018年4月5日
0.35.0 2017年12月27日
0.2.8 2015年7月8日

#74#send-message

Download history 59/week @ 2024-03-14 105/week @ 2024-03-21 742/week @ 2024-03-28 237/week @ 2024-04-04 96/week @ 2024-04-11 13/week @ 2024-04-18 21/week @ 2024-04-25 2/week @ 2024-05-02 4/week @ 2024-05-09 11/week @ 2024-05-16 34/week @ 2024-05-23 41/week @ 2024-05-30 35/week @ 2024-06-06 39/week @ 2024-06-13 35/week @ 2024-06-20 9/week @ 2024-06-27

每月120次下载
9 个crate(8个直接)中使用 9

GPL-3.0 许可证

1MB
18K SLoC

此crate已被重命名为sn_routing https://crates.io/crates/sn_routing


lib.rs:

一个健壮的去中心化网络的客户端和节点实现。

该网络基于 kademlia_routing_table,并使用XOR度量来定义两个 XorName 之间的"距离"。XorName 被用作节点、客户端以及数据的地址。

消息在 权威机构 之间交换,其中 Authority 可以是一个单独的客户端或节点,也可以是称为"部分"的节点集合,或称为"组"的部分。在所有情况下,消息都由发送方进行加密签名,在部分和组的情况下,会验证足够的成员同意该消息:只有当达到该法定人数时,消息才会被交付。此外,每个消息都有一个唯一的ID,并且只交付一次。

部分和组权威机构也使用单个 XorName 进行寻址。成员是最接近该名称的节点。部分包含一定数量的节点,其最小值作为网络范围内的常数指定。组的大小是固定的,定义为上述最小部分大小。由于节点是通过网络分配名称的,这提供了冗余和弹性:节点无法控制自己将成为哪个部分或组权威机构的成员,如果没有在该部分或组中拥有多数,则无法从那里伪造消息。

该库还提供了消息数据的不同类型。

用法

基于 routing 库的去中心化服务使用 Client 向节点网络发送请求并接收响应。

Node 用于处理和发送网络内的请求,以及实现其功能,例如存储和检索数据,验证权限,管理元数据等。

客户端创建

客户端的名称是其公钥的哈希值。创建时,客户端将尝试通过任何节点连接到网络,并与它交换公钥。该节点成为客户端的引导节点,客户端的进出的消息将通过该节点路由。

use std::sync::mpsc;
use routing::{Client, Event, FullId};

let (sender, receiver) = mpsc::channel::<Event>();
let full_id = FullId::new(); // Generate new keys.
let client = Client::new(sender, Some(full_id), None).unwrap();

可以使用client的方法发送消息,并从receiver作为Event接收消息。

节点创建

创建节点看起来更简单

use routing::Node;

let node = Node::builder().create().unwrap();

创建时,节点将首先以客户端的身份连接到网络。一旦具有客户端状态,它将向网络请求新的名称,然后使用该新名称将自己整合到网络中,并将紧密节点添加到其路由表中。

可以使用node的方法发送消息,并从receiver作为Event接收消息。节点可以作为独立节点或作为部分或群体权威的一部分。作为部分或群体权威发送的消息,只有在该权威中有足够多的其他节点发送相同消息时才有效。

序列图

依赖项

~19MB
~349K SLoC