everscale-network

Crates.ioeverscale-network
lib.rseverscale-network
version0.5.5
sourcesrc
created_at2022-06-07 16:52:05.771806
updated_at2024-08-08 15:42:42.545275
descriptionImplementation of the network part of the Everscale blockchain
homepage
repositoryhttps://github.com/broxus/everscale-network
max_upload_size
id601572
size392,398
Ivan Kalinin (Rexagon)

documentation

README

Logo

everscale-network   Latest Version Workflow badge License Apache badge Docs badge

Table of Contents

About

Implementation of the network part of the Everscale blockchain.

Network stack

           ┌─────────────────────┐
           │            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
└────────────────────────────────┘

Usage

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(())
}

For more information you can check the docs or the examples.

Minimum Rust version

The current minimum required Rust version is 1.64.0.

Contributing

We welcome contributions to the project! If you notice any issues or errors, feel free to open an issue or submit a pull request.

License

This project is licensed under the License Apache.

Commit count: 232

cargo fmt