QUIC transport layer for Bittensor
Project description
Ligh𝞽ning
Rust QUIC transport layer for Bittensor
Persistent QUIC connections with sr25519 handshake authentication for validator-miner communication.
Python
pip install btlightning
from btlightning import Lightning
client = Lightning(wallet_hotkey="5GrwvaEF...")
client.set_python_signer(my_signer_callback)
client.initialize_connections([
{"hotkey": "5FHneW46...", "ip": "192.168.1.1", "port": 8443}
])
response = client.query_axon(
{"hotkey": "5FHneW46...", "ip": "192.168.1.1", "port": 8443},
{"synapse_type": "MyQuery", "data": {"key": "value"}}
)
Rust
[dependencies]
btlightning = { version = "0.1", features = ["subtensor"] }
With the subtensor feature, the client discovers miners from the metagraph and keeps connections in sync automatically:
use btlightning::{LightningClient, LightningClientConfig, Sr25519Signer, MetagraphMonitorConfig};
let config = LightningClientConfig {
metagraph: Some(MetagraphMonitorConfig::finney(YOUR_NETUID)),
..Default::default()
};
let mut client = LightningClient::with_config("5GrwvaEF...".into(), config)?;
client.set_signer(Box::new(Sr25519Signer::from_seed(seed)));
client.initialize_connections(vec![]).await?;
Without subtensor, pass miner addresses directly:
use btlightning::{LightningClient, Sr25519Signer, QuicAxonInfo};
let mut client = LightningClient::new("5GrwvaEF...".into());
client.set_signer(Box::new(Sr25519Signer::from_seed(seed)));
client.initialize_connections(vec![
QuicAxonInfo::new("5FHneW46...".into(), "192.168.1.1".into(), 8443, 4)
]).await?;
Query a single miner by axon info and deserialize the response:
use btlightning::QuicRequest;
use serde::{Serialize, Deserialize};
#[derive(Serialize)]
struct MyQuery { prompt: String }
#[derive(Deserialize)]
struct MyResult { answer: String }
let request = QuicRequest::from_typed("MyQuery", &MyQuery { prompt: "hello".into() })?;
let response = client.query_axon(axon_info, request).await?.into_result()?;
let result: MyResult = response.deserialize_data()?;
Fan out to every QUIC miner on the subnet concurrently:
use std::sync::Arc;
use tokio::task::JoinSet;
let client = Arc::new(client);
let miners = metagraph.quic_miners();
let mut tasks = JoinSet::new();
for miner in miners {
let req = QuicRequest::from_typed("MyQuery", &MyQuery { prompt: "hello".into() })?;
let client = Arc::clone(&client);
tasks.spawn(async move {
(miner.hotkey.clone(), client.query_axon(miner, req).await)
});
}
while let Some(Ok((hotkey, result))) = tasks.join_next().await {
match result {
Ok(resp) => { /* handle response from hotkey */ }
Err(e) => { /* miner failed */ }
}
}
Build from source
cargo build -p btlightning
maturin develop --manifest-path crates/btlightning-py/Cargo.toml
Performance
Benchmarked on Apple Silicon (M-series), macOS, loopback networking. Echo handler returns input unchanged. Connection setup includes first request-response round trip. Lightning authenticates once at connection time and amortizes over all subsequent requests; bittensor signs and verifies every request. Bittensor payloads are base64-encoded (JSON has no binary type), adding ~33% wire overhead beyond the nominal payload size. Source: benchmarks/.
| bittensor (dendrite/axon) | lightning | |
|---|---|---|
| Protocol | HTTP/1.1 | QUIC |
| Serialization | JSON | MessagePack |
| Transport encryption | None | TLS 1.3 |
| Auth model | Per-request | Per-connection |
| Metric | bittensor | lightning (Python) | lightning (Rust) |
|---|---|---|---|
| Connection setup (p50) | 114.46 ms | 2.68 ms | 0.71 ms |
| Latency p50 (1KB) | 24.01 ms | 0.08 ms | 0.05 ms |
| Latency p99 (1KB) | 28.80 ms | 0.09 ms | 0.07 ms |
| Throughput (1KB) | 41 req/s | 26,539 req/s | 68,650 req/s |
| Wire size (1KB payload) | 2,032 bytes | 1,052 bytes | 1,052 bytes |
| Color | System |
|---|---|
| bittensor | |
| lightning (Python) | |
| lightning (Rust) |
[!NOTE] Charts use log10 scale. Refer to the tables below for raw values.
Latency p50
---
config:
xyChart:
plotReservedSpacePercent: 60
themeVariables:
xyChart:
backgroundColor: "#000000"
plotColorPalette: "#808080, #FF8C00, #FFE000"
titleColor: "#ffffff"
xAxisLabelColor: "#aaaaaa"
xAxisTitleColor: "#cccccc"
xAxisTickColor: "#666666"
xAxisLineColor: "#444444"
yAxisLabelColor: "#aaaaaa"
yAxisTitleColor: "#cccccc"
yAxisTickColor: "#666666"
yAxisLineColor: "#444444"
---
xychart-beta
x-axis ["256B", "1KB", "10KB", "100KB", "1MB"]
y-axis "log10(us)" 0 --> 5
bar "bittensor" [4.39, 4.38, 4.39, 4.42, 4.61]
bar "lightning (Python)" [1.90, 1.90, 2.36, 3.27, 4.31]
bar "lightning (Rust)" [1.70, 1.70, 2.04, 2.84, 3.87]
Throughput (req/s)
---
config:
xyChart:
plotReservedSpacePercent: 60
themeVariables:
xyChart:
backgroundColor: "#000000"
plotColorPalette: "#FFE000, #FF8C00, #808080"
titleColor: "#ffffff"
xAxisLabelColor: "#aaaaaa"
xAxisTitleColor: "#cccccc"
xAxisTickColor: "#666666"
xAxisLineColor: "#444444"
yAxisLabelColor: "#aaaaaa"
yAxisTitleColor: "#cccccc"
yAxisTickColor: "#666666"
yAxisLineColor: "#444444"
---
xychart-beta
x-axis ["256B", "1KB", "10KB", "100KB", "1MB"]
y-axis "log10(req/s)" 0 --> 5
bar "lightning (Rust)" [4.92, 4.84, 4.27, 3.26, 2.26]
bar "lightning (Python)" [4.55, 4.42, 3.83, 2.94, 1.94]
bar "bittensor" [1.61, 1.61, 1.60, 1.57, 1.40]
Full results (all payload sizes)
Latency (ms)
| Payload | System | p50 | p95 | p99 |
|---|---|---|---|---|
| 256B | bittensor | 24.50 | 28.04 | 35.05 |
| lightning (py) | 0.08 | 0.19 | 0.23 | |
| lightning (rust) | 0.05 | 0.06 | 0.07 | |
| 1KB | bittensor | 24.01 | 25.57 | 28.80 |
| lightning (py) | 0.08 | 0.09 | 0.09 | |
| lightning (rust) | 0.05 | 0.06 | 0.07 | |
| 10KB | bittensor | 24.70 | 25.70 | 26.59 |
| lightning (py) | 0.23 | 0.24 | 0.26 | |
| lightning (rust) | 0.11 | 0.12 | 0.13 | |
| 100KB | bittensor | 26.13 | 27.31 | 29.42 |
| lightning (py) | 1.88 | 2.25 | 2.37 | |
| lightning (rust) | 0.69 | 0.73 | 0.75 | |
| 1MB | bittensor | 40.72 | 43.11 | 48.00 |
| lightning (py) | 20.55 | 22.48 | 23.31 | |
| lightning (rust) | 7.40 | 12.36 | 17.02 |
Throughput (req/s)
| Payload | bittensor | lightning (Python) | lightning (Rust) |
|---|---|---|---|
| 256B | 41 | 35,181 | 83,460 |
| 1KB | 41 | 26,539 | 68,650 |
| 10KB | 40 | 6,729 | 18,686 |
| 100KB | 38 | 875 | 1,819 |
| 1MB | 25 | 88 | 181 |
Wire overhead (bytes)
| Payload | bittensor | lightning |
|---|---|---|
| 256B | 1,008 | 284 |
| 1KB | 2,032 | 1,052 |
| 10KB | 14,321 | 10,268 |
| 100KB | 137,202 | 102,430 |
| 1MB | 1,398,771 | 1,048,606 |
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file btlightning-0.2.6.tar.gz.
File metadata
- Download URL: btlightning-0.2.6.tar.gz
- Upload date:
- Size: 149.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ca649347f8bc98336cc168c986529853aaf9c88e087aa63efaad7bcfdc0e3f7
|
|
| MD5 |
67d77adf49278b535bac46d360ad17cf
|
|
| BLAKE2b-256 |
fc05209d7b218c1c4e9394ab3bfef7c4373edcfec045d39020e860b78e3b14c2
|
Provenance
The following attestation bundles were made for btlightning-0.2.6.tar.gz:
Publisher:
release.yml on inference-labs-inc/btlightning
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btlightning-0.2.6.tar.gz -
Subject digest:
3ca649347f8bc98336cc168c986529853aaf9c88e087aa63efaad7bcfdc0e3f7 - Sigstore transparency entry: 1181442590
- Sigstore integration time:
-
Permalink:
inference-labs-inc/btlightning@d754ac0f79bc591de7686008d5145128d7f8d0ff -
Branch / Tag:
refs/tags/v0.2.6 - Owner: https://github.com/inference-labs-inc
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d754ac0f79bc591de7686008d5145128d7f8d0ff -
Trigger Event:
release
-
Statement type:
File details
Details for the file btlightning-0.2.6-cp312-cp312-manylinux_2_38_x86_64.whl.
File metadata
- Download URL: btlightning-0.2.6-cp312-cp312-manylinux_2_38_x86_64.whl
- Upload date:
- Size: 4.8 MB
- Tags: CPython 3.12, manylinux: glibc 2.38+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
aa96db85a5c7b9f40260c409b1fec1d75dea7b1a963ca723717363ef1545e934
|
|
| MD5 |
259232b4d3ef37832117bd92b7a9cf03
|
|
| BLAKE2b-256 |
afe61a4ebb0a4b7947e718fc1e15b4a6ea82011d70f07114477b7e2b36d720b3
|
Provenance
The following attestation bundles were made for btlightning-0.2.6-cp312-cp312-manylinux_2_38_x86_64.whl:
Publisher:
release.yml on inference-labs-inc/btlightning
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btlightning-0.2.6-cp312-cp312-manylinux_2_38_x86_64.whl -
Subject digest:
aa96db85a5c7b9f40260c409b1fec1d75dea7b1a963ca723717363ef1545e934 - Sigstore transparency entry: 1181442595
- Sigstore integration time:
-
Permalink:
inference-labs-inc/btlightning@d754ac0f79bc591de7686008d5145128d7f8d0ff -
Branch / Tag:
refs/tags/v0.2.6 - Owner: https://github.com/inference-labs-inc
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d754ac0f79bc591de7686008d5145128d7f8d0ff -
Trigger Event:
release
-
Statement type:
File details
Details for the file btlightning-0.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: btlightning-0.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 4.4 MB
- Tags: CPython 3.12, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e16c6ded8b78f47892e766de493ab2fd8d6cdd000c8ca542ebdeb83fb0ef2f3d
|
|
| MD5 |
26b91239878dbee64200b8a0123d2194
|
|
| BLAKE2b-256 |
bc3ff2705dc51ea3ed10bdd20eb810166372b1311a7b9eb09f8dbbd941383bae
|
Provenance
The following attestation bundles were made for btlightning-0.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:
Publisher:
release.yml on inference-labs-inc/btlightning
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btlightning-0.2.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl -
Subject digest:
e16c6ded8b78f47892e766de493ab2fd8d6cdd000c8ca542ebdeb83fb0ef2f3d - Sigstore transparency entry: 1181442597
- Sigstore integration time:
-
Permalink:
inference-labs-inc/btlightning@d754ac0f79bc591de7686008d5145128d7f8d0ff -
Branch / Tag:
refs/tags/v0.2.6 - Owner: https://github.com/inference-labs-inc
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d754ac0f79bc591de7686008d5145128d7f8d0ff -
Trigger Event:
release
-
Statement type:
File details
Details for the file btlightning-0.2.6-cp312-cp312-macosx_11_0_arm64.whl.
File metadata
- Download URL: btlightning-0.2.6-cp312-cp312-macosx_11_0_arm64.whl
- Upload date:
- Size: 4.5 MB
- Tags: CPython 3.12, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b1482b248fe2276be12326705445397da9cf52f12985c57622134b42c93c0ec
|
|
| MD5 |
c4917ec681a8f26cc2331b8cb98837f4
|
|
| BLAKE2b-256 |
c4822a4ae15b47a888f435b7c96b54909ff485fd2fd9596274b7d3ab4dc3d1c2
|
Provenance
The following attestation bundles were made for btlightning-0.2.6-cp312-cp312-macosx_11_0_arm64.whl:
Publisher:
release.yml on inference-labs-inc/btlightning
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
btlightning-0.2.6-cp312-cp312-macosx_11_0_arm64.whl -
Subject digest:
2b1482b248fe2276be12326705445397da9cf52f12985c57622134b42c93c0ec - Sigstore transparency entry: 1181442593
- Sigstore integration time:
-
Permalink:
inference-labs-inc/btlightning@d754ac0f79bc591de7686008d5145128d7f8d0ff -
Branch / Tag:
refs/tags/v0.2.6 - Owner: https://github.com/inference-labs-inc
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@d754ac0f79bc591de7686008d5145128d7f8d0ff -
Trigger Event:
release
-
Statement type: