nym-sdk 1.21.4

Nym's Rust SDK
Documentation
//! Paid bandwidth credentials using the Ecash scheme.
//!
//! Acquires a bandwidth credential from the sandbox network, connects
//! with it, and sends a message to self. Requires the sandbox `.env`.
//!
//! Run with: cargo run --example bandwidth

use futures::StreamExt;
use nym_credentials_interface::TicketType;
use nym_network_defaults::setup_env;
use nym_sdk::mixnet;
use nym_sdk::mixnet::MixnetMessageSender;

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    nym_bin_common::logging::setup_tracing_logger();

    // Load the sandbox environment.
    // Run from the `sdk/rust/nym-sdk` directory so the relative path resolves.
    setup_env(Some("../../../envs/sandbox.env"));

    // Build a credentials-enabled client (not yet connected).
    let sandbox_network = mixnet::NymNetworkDetails::new_from_env();
    let mnemonic = String::from("my super secret mnemonic");

    let mixnet_client = mixnet::MixnetClientBuilder::new_ephemeral()
        .network_details(sandbox_network)
        .enable_credentials_mode()
        .build()?;

    // Acquire a bandwidth credential (ticketbook) before connecting.
    let bandwidth_client = mixnet_client
        .create_bandwidth_client(mnemonic, TicketType::V1MixnetEntry)
        .await?;
    bandwidth_client.acquire().await?;

    // Connect to the mixnet using the acquired credential.
    let mut client = mixnet_client.connect_to_mixnet().await?;
    let our_address = client.nym_address();

    // Send a message to ourselves and wait for it.
    client
        .send_plain_message(*our_address, "hello there")
        .await?;

    println!("Waiting for message");
    let received = client.next().await.unwrap();
    println!("Received: {}", String::from_utf8_lossy(&received.message));

    // Disconnect for clean shutdown.
    client.disconnect().await;
    Ok(())
}