open-standards/smart-byte/smart-byte-rs/crates/smart-byte-net/src/lib.rs
Transaction Science a437feb8ab Parallel ingest: 9 issues' worth of work across openpay / smart-byte / eoc
openpay/
  compliance/                     PCI-DSS readiness package (scope-map,
                                  pci-zero-architecture, hsm-kms-guidance,
                                  qsa-checklist), citing PCI-DSS v4.0.1
                                  requirements. (#1)
  examples/pci-zero/              Runnable example demonstrating a deployment
                                  where merchant code never touches a PAN. (#1)
  crates/op-core/                 Tokenized<Card> typestate + NetworkToken
                                  + CardNetwork + Cryptogram. (#2)
  crates/op-rails-card/network_token/
                                  NetworkTokenProvider trait + VTS adapter
                                  + MDES adapter, with deterministic stubs
                                  behind a 'live' feature flag. (#2)
  crates/op-driver-sdk/conformance/network_token.rs
                                  Conformance harness for third-party
                                  NetworkTokenProvider implementations. (#2)
  crates/op-cli/src/ledger/       'openpay ledger as-of' subcommand for
                                  bi-temporal queries. (#3)
  crates/op-orchestrator/src/telemetry.rs
                                  OpenTelemetry span emission per
                                  Payment<S> transition with semantic-
                                  conventions tags. (#3)
  docs/observability/             Grafana dashboard JSON + wiring guide
                                  for the bi-temporal ledger lens. (#3)

smart-byte/
  smart-byte-rs/                  Rust reference implementation: envelope
                                  encode/decode (canonical CBOR + BLAKE3
                                  content addressing), Ed25519 sign +
                                  verify, lockstep BFT commit MVP, Iroh
                                  transport scaffold, CLI. (#4)
  spec/identity_and_key_rotation.md
                                  Adopts KERI SAIDs + key-event log
                                  format; explicitly does not adopt ACDC
                                  chaining wholesale. (#5)
  conformance/v1/                 21 test vectors covering canonicalisation,
                                  SAID computation, signature verification,
                                  lockstep commit, gossip propagation.
                                  CI gate enforces spec/vector coupling. (#6)

eoc/
  eoc-rs/                         Rust + WASM reference implementation:
                                  4-stage cascade (cache -> kv -> graph ->
                                  neural), joule counters via RAPL / NVML /
                                  powermetrics, CLI, wasm-bindgen surface.
                                  18 tests pass. (#7)
  eoc-bench/                      Benchmark harness, MT-Bench and Router
                                  case sets, 'joules per MT-Bench point'
                                  metric, 'eoc-bench run | compare' CLI. (#8)
  standards/sci-for-ai-submission.md
                                  Submission proposal mapping EOC's
                                  receipt schema to GSF SCI-for-AI. (#9)
  cookbook/                       HuggingFace-style cookbook (markdown +
                                  runnable Python) demonstrating EOC's
                                  cascade with HF AI Energy Score. (#9)
  docs/bench-v0.md                Reproducibility doc for eoc-bench.

Workspace state:
- openpay clippy -- -D warnings: clean across all touched crates
- smart-byte-rs cargo test --workspace + clippy: clean
- eoc-rs cargo test --workspace + clippy: clean (18 tests)
- eoc-bench cargo check --workspace + clippy + 15 tests: clean

Rust 1.95.0 edition 2024 pinned at the open-standards root via
rust-toolchain.toml; every workspace inherits.

Closes #1 #2 #3 #4 #5 #6 #7 #8 #9.
2026-05-23 13:24:05 -04:00

65 lines
2.4 KiB
Rust

//! Smart Byte network transport (Iroh wrapper).
//!
//! This crate is a *thin* wrapper around Iroh today. Production
//! networking — gossip topology, federation handshakes, BFT lockstep
//! pin-down, joule-cost accounting — lands in follow-up issues. The
//! intent of v1.0 is to fix the public surface so the rest of the
//! workspace can compile against it.
//!
//! Iroh's vocabulary in 1.0.0-rc.0 uses `EndpointId` where earlier
//! drafts of this crate used `NodeId`. We export the iroh type
//! directly so callers don't have to depend on `iroh` themselves.
use anyhow::Result;
use futures::Stream;
use iroh::EndpointId;
use iroh::endpoint::presets;
use smart_byte_core::Envelope;
/// A Smart Byte node. Wraps an Iroh endpoint.
///
/// `Node` is constructed via [`Node::spawn`] which binds an Iroh
/// endpoint with the [`presets::Empty`] preset (no relay, no DNS, no
/// discovery). Production deployments will swap in `presets::N0` or a
/// federation-specific preset; that wiring lands in follow-up.
pub struct Node {
/// The underlying Iroh endpoint. Public so downstream tests and
/// integrations can reach for the lower-level API while the
/// wrapper layer is still settling.
pub iroh: iroh::Endpoint,
}
/// Iroh peer identifier. Aliased so callers don't have to depend on
/// `iroh` directly. Maps to `iroh::EndpointId`.
pub type NodeId = EndpointId;
impl Node {
/// Spawn a new node with the offline-friendly `Empty` preset.
pub async fn spawn() -> Result<Self> {
let iroh = iroh::Endpoint::builder(presets::Empty).bind().await?;
Ok(Self { iroh })
}
/// Publish an envelope onto the network.
///
/// MVP: serializes the envelope to CBOR. Production replication
/// (iroh-blobs hand-off, gossip propagation) ships in follow-up.
pub async fn publish_envelope(&self, env: &Envelope) -> Result<()> {
let _bytes = serde_cbor::to_vec(env)?;
// TODO(issue-5): wire this into iroh-blobs once the API stabilizes.
Ok(())
}
/// Subscribe to envelopes published by `peer`.
///
/// MVP: returns an empty stream. Production subscription ships in
/// follow-up.
pub fn subscribe(&self, _peer: NodeId) -> impl Stream<Item = Envelope> + Send + 'static {
futures::stream::empty()
}
/// This node's own peer id.
pub fn node_id(&self) -> NodeId {
self.iroh.id()
}
}