hop-sdk 0.1.0

Client SDK for the Polkadot HOP protocol
Documentation
/// Upload a file to the HOP previewnet and print the claim ticket.
///
/// Usage: cargo run --example send_file -- <file-path>
use std::fs;

use hop_sdk::{HopClient, HopEnvironment};

const MAX_SIZE: usize = 64 * 1024 * 1024; // 64 MiB

fn main() {
    let file_path = std::env::args().nth(1).unwrap_or_else(|| {
        eprintln!("Usage: cargo run --example send_file -- <file-path>");
        std::process::exit(1);
    });

    let data = fs::read(&file_path).unwrap_or_else(|e| {
        eprintln!("Error reading {file_path}: {e}");
        std::process::exit(1);
    });

    if data.is_empty() {
        eprintln!("Error: file is empty");
        std::process::exit(1);
    }
    if data.len() > MAX_SIZE {
        eprintln!(
            "Error: file is {} bytes, max is {} (64 MiB)",
            data.len(),
            MAX_SIZE
        );
        std::process::exit(1);
    }

    eprintln!("Uploading {} bytes from {file_path}\u{2026}", data.len());

    let client = HopClient::connect(HopEnvironment::Previewnet).unwrap_or_else(|e| {
        eprintln!("Connection failed: {e}");
        std::process::exit(1);
    });

    let tickets = client.send(data, 1).unwrap_or_else(|e| {
        eprintln!("Send failed: {e}");
        client.destroy();
        std::process::exit(1);
    });

    let ticket_hex = hex::encode(tickets[0].encode());

    eprintln!("Upload complete! Ticket:");
    println!("{ticket_hex}");
    eprintln!("\nTo download:\n  cargo run --example receive_file -- {ticket_hex} output.bin");

    client.destroy();
}