#overlay #dht #part #blockchain #everscale #adnl #rldp

everscale-network

Everscale 区块链网络部分的实现

28 个版本

0.5.5 2024 年 8 月 8 日
0.5.5-rc.02023 年 7 月 21 日
0.5.4 2023 年 5 月 26 日
0.5.3 2023 年 3 月 13 日
0.3.5 2022 年 7 月 6 日

#965魔法豆

Download history 19/week @ 2024-04-29 12/week @ 2024-05-06 8/week @ 2024-05-13 20/week @ 2024-05-20 19/week @ 2024-05-27 18/week @ 2024-06-03 3/week @ 2024-06-10 10/week @ 2024-06-17 15/week @ 2024-06-24 3/week @ 2024-07-01 3/week @ 2024-07-08 179/week @ 2024-07-29 115/week @ 2024-08-05 21/week @ 2024-08-12

每月 315 次下载

Apache-2.0

345KB
8K SLoC

Logo

everscale-network   最新版本 工作流程徽章 许可证 Apache 徽章 文档徽章

目录

关于

Everscale 区块链网络部分的实现。

网络栈

           ┌─────────────────────┐
           │            Overlay  │ - Overlay: Virtual subnetwork
┌──────────┼──────────┐          │ - DHT: Kademlia-like Distributed Hash Table
│    DHT   │   RLDP   │          │ - RLDP: Reliable Large Datagram Protocol
├──────────┴──────────┴──────────┤
│              ADNL              │ - ADNL: Abstract Data Network Layer
├────────────────────────────────┤
│              UDP               │ - underlying transport protocol
└────────────────────────────────┘

使用

cargo add everscale-network
use anyhow::Result;
use everscale_network::{adnl, NetworkBuilder};
use tl_proto::{TlRead, TlWrite};

#[derive(TlWrite, TlRead)]
#[tl(boxed, id = 0x11223344)]
struct MyCustomData {
    counter: u32,
}

async fn example() -> Result<()> {
    const DHT_KEY_TAG: usize = 0;
    // Create and fill keystore
    let keystore = adnl::Keystore::builder()
        .with_tagged_key([1u8; 32], DHT_KEY_TAG)?
        .build();

    // Create basic network parts
    // NOTE: our ip address must be accessible from other peers
    let (_adnl, dht) = NetworkBuilder::with_adnl("1.2.3.4:10000", keystore, Default::default())
        .with_dht(DHT_KEY_TAG, Default::default())
        .build()?;

    // Store some data in DHT
    let stored = dht
        .entry(dht.key().id(), "some_value")
        .with_data(MyCustomData { counter: 0 })
        .with_ttl(3600)
        .sign_and_store(dht.key())?
        .then_check(|_, MyCustomData { counter }| Ok(counter == 0))
        .await?;
    assert!(stored);

    Ok(())
}

更多信息,您可以查看 文档示例

最低 Rust 版本

当前所需的最低 Rust 版本是 1.64.0

贡献

我们欢迎对这个项目做出贡献!如果您发现任何问题或错误,请随时打开一个问题或提交一个拉取请求。

许可证

本项目采用 Apache 许可证

依赖

~8–19MB
~248K SLoC