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.
65 lines
2.4 KiB
Rust
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()
|
|
}
|
|
}
|