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
每月120次下载
在 9 个crate(8个直接)中使用 9
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