Skip to main content

High-performance M2M protocol for Bittensor subnets using Hippius Arion

Project description

Hippius Hermes

License: MIT Crate

Bittensor cross-subnet Machine-to-Machine (M2M) communication protocol built on Iroh QUIC transport.

Features

  • Direct P2P — NAT-traversed UDP hole-punching via Iroh, no relay servers
  • Data Plane Options — Native S3 integration or direct QUIC streaming for large payloads
  • Offline buffering — Persistent sled queue with automatic retry and exponential backoff
  • Deterministic identity — Ed25519 keys tied to on-chain SS58 addresses via the AccountProfile pallet
  • End-to-end encryption — AES-GCM data encryption with DH key exchange (in progress)
  • Subnet-scoped routing — Per-subnet ALPN filtering for targeted cross-subnet messaging
  • Global ACL + Firewall — Nebula-inspired blocklist/allowlist ACL + fail-closed subnet firewall
  • PullWeights integration — Push and pull ML models directly from the PullWeights registry
  • Python + Rust — Native Rust core with PyO3 bindings via maturin

Install

Python (requires Rust toolchain for building):

pip install hippius-hermes

Rust:

[dependencies]
hippius-hermes-core = "0.1"

Quick Start

Python

import asyncio
from hermes import Config, HermesClient

async def main():
    config = Config(
        node_secret_key_path="/etc/hermes/iroh.key",
        ss58_address="5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
        api_token="your-api-token",
        storage_directory=".hermes_data",
        subnet_ids=[42],
    )
    client = await HermesClient.create(config)
    client.start_retry_worker()

    # Send via direct P2P natively
    filename = await client.send_file_unencrypted(
        "5FHneW46xGXgs5mUiveU4sbTyGBzmstUspZC92UhjJM694ty",
        "./model_weights.safetensors",
    )
    print(f"Sent: {filename}")

asyncio.run(main())

Rust

use hippius_hermes_core::{Client, Config};

#[tokio::main]
async fn main() -> anyhow::Result<()> {
    let config = Config::from_file("hermes_config.json")?;
    let client = Client::new(config).await?;

    client.spawn_retry_worker();
    client.spawn_listener(
        |msg| println!("Control: {} from {}", msg.action, msg.sender_ss58),
        Some(|sender, filename, path, size| {
            println!("Data: {} ({} bytes) from {}", filename, size, sender);
        }),
    );

    // Setup S3 or use send_file_unencrypted for direct QUIC transfer.
    let hash = client
        .send_file_unencrypted("5FHneW46...", "./weights.safetensors", None)
        .await?;
    println!("Sent file: {hash}");

    Ok(())
}

CLI

A built-in Rust CLI is also available in crates/cli:

# Start the listener (uses hermes_config.json by default)
cargo run --bin hippius-hermes-cli -- listen

# Send a file directly via P2P
cargo run --bin hippius-hermes-cli -- send-direct --dest-ss58 5Grw... --file-path ./model.bin

Configuration

Create a hermes_config.json:

{
    "node_secret_key_path": "/etc/hermes/iroh.key",
    "ss58_address": "5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
    "api_token": "your-hippius-api-token",
    "storage_directory": "/var/hermes",
    "subnet_ids": [42]
}

Optional fields with defaults:

  • rpc_url — Substrate RPC endpoint (default: wss://rpc.hippius.network:443)
  • subnet_ids — Subnet netuids to accept traffic from (default: [])
  • s3 — Native S3 credentials (bucket, access_key, secret_key) for direct uploads
  • enable_firewall — Drop connections from non-whitelisted nodes (default: false)
  • pullweights_api_key — PullWeights model registry API key

Architecture

See hippius-hermes.md for the full architecture specification.

Development

# Rust core
cargo build
cargo test
cargo clippy

# Python bindings
cd crates/python
pip install maturin
maturin develop --release

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

hippius_hermes-0.2.0.tar.gz (87.7 kB view details)

Uploaded Source

File details

Details for the file hippius_hermes-0.2.0.tar.gz.

File metadata

  • Download URL: hippius_hermes-0.2.0.tar.gz
  • Upload date:
  • Size: 87.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for hippius_hermes-0.2.0.tar.gz
Algorithm Hash digest
SHA256 39c4afde4a7ac2f27fa2d1d54293cc885d383a86eb55f7e1d33c3e3bced564dc
MD5 3aa008f617f3fc35746b0b3d59557829
BLAKE2b-256 11cb0597730fd2bf294efea3eb13cfd002a884298ecb0d9e583f8a50e703118c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page