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 神奇豆子

Download history 2/week @ 2024-04-21 3/week @ 2024-04-28 12/week @ 2024-05-05 150/week @ 2024-05-12 79/week @ 2024-05-19 9/week @ 2024-05-26 22/week @ 2024-06-02 37/week @ 2024-06-09 39/week @ 2024-06-16 16/week @ 2024-06-23 28/week @ 2024-06-30 16/week @ 2024-07-07 30/week @ 2024-07-14 7/week @ 2024-07-21 41/week @ 2024-07-28

每月下载量 94
用于 2 crates

MIT/Apache

120KB
2.5K SLoC

crate doc

TDN

TDN:安全地传输数据,使网络稳定、安全且高度可用。

作为网络互联,TDN 包括点对点、集中式网关、代理 & 中继服务、局域网、RPC、Near 等。

作为去中心化应用的框架,TDN 使用了 LayerGroup 模型。我们构建这个框架是因为我们觉得区块链非常有限。如果你想要一个更开放和自由的分布式应用开发技术,以及可插拔、轻量级的应用框架,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 with future

TDN Groups And Layers

可插拔库

  • tdn-did 分布式身份。
  • tdn-storage 存储库,包括本地文件、本地数据库、分布式数据库、去中心化数据库。
  • tdn-permission 组权限库,包括授权和非授权组算法。

更多信息,请访问

核心问答

  1. 什么是层级和组?简单来说, 是应用,一个应用是一个组,层级 是应用之间的通信。在组内,用户可以定义一切。层级分为上层和下层,上层是其他应用依赖于这个应用,下层是这个应用依赖于其他应用。如果应用是一个不与其他应用交互的独立应用,那么可以完全忽略层级。

  2. 不同的共识?共识是昂贵的。并非所有应用都需要全局共识。本地共识可以加速应用的使用。本地共识可以是不同的。用户可以在不同的应用中定义自共识。共识的结果也可以通过层级发送到不同的应用。这样,共识结果可以传递到上层。在上层共识获得后,可以形成更大范围和更强共识的不可逆结果。

  3. 不同的权限?为什么我们需要不同的权限机制?因为在不同的应用中,一些应用需要开放的权限环境,如Bitcoin,而一些需要授权环境。例如,我们构建了一个同步,在我的设备之间分布式,对外人不可访问。同时,层级 支持在不同权限环境中的应用,允许数据交互。

  4. 不同的区块和交易数据结构?同样,不同的应用有不同的数据结构。因此,在TDN中,我们使用一个常见的字节流格式。用户可以自定义应用的数据格式。与TDN的通信只是序列化和反序列化。

  5. 不同的账户系统?在TDN中,在p2p系统中将有一个默认的p2p网络地址(PeerId)。用户可以使用PeerId替换IP地址。TDN将在网络中搜索PeerId并建立连接。同时,用户也可以完全自定义应用的账户模型和连接验证方法。

许可

此项目受以下任一许可的许可:

任选。

依赖项

~25–38MB
~627K SLoC