21 个版本
0.10.6 | 2024年5月15日 |
---|---|
0.10.5 | 2024年3月19日 |
0.10.3 | 2024年2月24日 |
0.10.2 | 2023年10月17日 |
0.0.1 | 2019年11月4日 |
#833 in 神奇豆子
每月下载量 94
用于 2 crates
120KB
2.5K SLoC
TDN:安全地传输数据,使网络稳定、安全且高度可用。
作为网络互联,TDN 包括点对点、集中式网关、代理 & 中继服务、局域网、RPC、Near 等。
作为去中心化应用的框架,TDN 使用了 Layer
和 Group
模型。我们构建这个框架是因为我们觉得区块链非常有限。如果你想要一个更开放和自由的分布式应用开发技术,以及可插拔、轻量级的应用框架,TDN 可以满足你。
示例
use std::sync::Arc;
use tdn::prelude::*;
use tdn::types::rpc::{json, RpcError, RpcHandler, RpcParam};
struct State(u32);
#[tokio::main]
async fn main() {
let (peer_addr, send, mut out_recv) = start().await.unwrap();
println!("Example: peer id: {:?}", peer_addr);
let mut rpc_handler = RpcHandler::new(State(1));
rpc_handler.add_method("say_hello", |_params: Vec<RpcParam>, state: Arc<State>| async move {
assert_eq!(1, state.0);
Ok(HandleResult::rpc(json!("hello")))
});
while let Some(message) = out_recv.recv().await {
match message {
ReceiveMessage::Own(msg) => match msg {
RecvType::Connect(peer, _data) => {
println!("receive own peer {} join", peer.id.short_show());
}
RecvType::Leave(peer) => {
println!("receive own peer {} leave", peer.id.short_show());
}
RecvType::Event(peer_id, _data) => {
println!("receive own event from {}", peer_id.short_show());
}
_ => {
println!("nerver here!")
}
},
ReceiveMessage::Group(msg) => match msg {
RecvType::Connect(peer, _data) => {
println!("receive group peer {} join", peer.id.short_show());
}
RecvType::Result(..) => {
//
}
RecvType::Leave(peer) => {
println!("receive group peer {} leave", peer.id.short_show());
}
RecvType::Event(peer_id, _data) => {
println!("receive group event from {}", peer_id.short_show());
}
_ => {}
},
ReceiveMessage::Layer(fgid, _tgid, msg) => match msg {
RecvType::Connect(peer, _data) => {
println!("Layer Join: {}, Addr: {}.", fgid, peer.id.short_show());
}
RecvType::Result(..) => {
//
}
_ => {}
},
ReceiveMessage::Rpc(uid, params, is_ws) => {
if let Ok(HandleResult {
mut rpcs,
owns: _,
groups: _,
layers: _,
networks: _,
}) = rpc_handler.handle(params).await
{
loop {
if rpcs.len() != 0 {
let msg = rpcs.remove(0);
send.send(SendMessage::Rpc(uid, msg, is_ws))
.await
.expect("TDN channel closed");
} else {
break;
}
}
}
}
ReceiveMessage::NetworkLost => {
println!("No network connections");
}
}
}
}
- 安装
lastest
Rust 和cd ./tdn
cargo run --example simple
恭喜,你正在运行可信分布式网络 :)
特性
- 支持不同的数据结构
- 支持不同的共识算法
- 支持不同的权限机制
- 支持不同的账户系统
- 应用程序可以与其他程序通信
- 信任可以传递和累积
4 类应用
TDN 可以构建 4 类网络应用。使用 feature
控制。(提示:一个组,是一条链,是一个应用)
- 单一。仅支持一个组,没有层级。例如:
Bitcoin
。 - 标准(默认)。仅支持一个组,支持多层(跨链,与其他组交互)。
- 多个。支持多个组(在一个运行时支持多个应用),没有层级。例如:
Ethereum
。 - 完全。支持多个组,支持多层。
架构
可插拔库
- tdn-did 分布式身份。
- tdn-storage 存储库,包括本地文件、本地数据库、分布式数据库、去中心化数据库。
- tdn-permission 组权限库,包括授权和非授权组算法。
更多信息,请访问
- 网站:https://cympletech.com
- Twitter:https://twitter.com/cympletech
- Discord:https://discord.gg/UfFjp6Kaj4
- E-mail:[email protected]
核心问答
-
什么是层级和组?简单来说,
组
是应用,一个应用是一个组,层级
是应用之间的通信。在组内,用户可以定义一切。层级分为上层和下层,上层是其他应用依赖于这个应用,下层是这个应用依赖于其他应用。如果应用是一个不与其他应用交互的独立应用,那么可以完全忽略层级。 -
不同的共识?共识是昂贵的。并非所有应用都需要全局共识。本地共识可以加速应用的使用。本地共识可以是不同的。用户可以在不同的应用中定义自共识。共识的结果也可以通过层级发送到不同的应用。这样,共识结果可以传递到上层。在上层共识获得后,可以形成更大范围和更强共识的不可逆结果。
-
不同的权限?为什么我们需要不同的权限机制?因为在不同的应用中,一些应用需要开放的权限环境,如Bitcoin,而一些需要授权环境。例如,我们构建了一个同步,在我的设备之间分布式,对外人不可访问。同时,
层级
支持在不同权限环境中的应用,允许数据交互。 -
不同的区块和交易数据结构?同样,不同的应用有不同的数据结构。因此,在TDN中,我们使用一个常见的字节流格式。用户可以自定义应用的数据格式。与TDN的通信只是序列化和反序列化。
-
不同的账户系统?在TDN中,在p2p系统中将有一个默认的p2p网络地址(PeerId)。用户可以使用PeerId替换IP地址。TDN将在网络中搜索PeerId并建立连接。同时,用户也可以完全自定义应用的账户模型和连接验证方法。
许可
此项目受以下任一许可的许可:
- Apache License,版本2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选。
依赖项
~25–38MB
~627K SLoC