The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the Tenzro Ledger MCP listing page.
Tenzro is the open, distributed execution layer for AI. Inference, agents, and workflows run across a network of independent nodes instead of one company's servers. Any machine can serve a model, rent out spare compute, and hold data — one stake covers every role, and TNZO settles all of it: consumers pay from their balance, providers earn into theirs. Underneath sit the substrate layers that make execution open — multi-VM settlement (EVM, SVM, Canton/DAML), cross-chain reach, one identity (TDIP), and one settlement asset (TNZO).
The open, distributed execution layer for AI. Tenzro is where inference happens, where agents act, and where workflows run — across a network of independent nodes rather than one company's servers. The thesis is straightforward: AI needs somewhere to run that no single provider controls. That means nodes anyone can join, a way to pay for what you use and earn for what you serve, and proofs anyone can check. Today inference and compute live behind opaque centralized APIs, identity is rebound at every protocol boundary, and value can't cross from EVM to Canton without giving up custody. Tenzro fixes this at the protocol layer.
BridgeFeeHint. Users sign once, solvers pick the bridge.ZK_VERIFY and TEE_VERIFY precompiles.Tenzro Network is also the reference implementation of the Open Agent Network (OAN) — the standards family (TNIP-001..022) for a hybrid human + agent coexisting network. OAN provides the governance framework; Tenzro Network is the working implementation. The wire stays open for other implementations.
Tenzro turns AI compute into a unit of economic exchange — denominated, settled, and verified in TNZO. Four surfaces share the same identity, payment, and settlement substrate:
width × height × steps × frames). Models whose transformer is split into a high-noise and a low-noise expert render across two accelerators that could not each hold the whole model: exactly one intermediate latent crosses between the halves, and the payment divides by the share of the denoising schedule each half signed for.Verifiability is not optional. Inference results, settlements, and identity claims can be proven via Plonky3 STARKs over the KoalaBear field (transparent setup, post-quantum-conjectured soundness) or attested by hardware enclaves — both anchored on-chain via the ZK_VERIFY and TEE_VERIFY precompiles. Tenzro unifies inference, compute rental, storage, training, agent settlement, identity, verification, and cross-chain reach under one open execution layer — not raw GPU rental and not subnet coordination, but the full surface where AI runs.
Individually, the pieces exist elsewhere. What Tenzro composes into one network is the combination: verifiable AI inference and training, confidential compute, multi-modal serving, and agent settlement, all under one identity, one settlement asset, and one consensus layer.
Tenzro combines EVM + SVM + Canton/DAML in a single network — and DAML is the execution environment the institutional RWA surface (regulated tokenized treasuries, bank deposit tokens, CIP-56 settlement) is converging on. That breadth is the substrate; the execution layer for AI is what rides on top of it.
On that substrate, retail-agent rails (AP2 mandates, x402 micropayments, ERC-8004 trustless agents, ERC-4337 v0.8 smart accounts) and institutional-RWA rails (Canton DAML, CIP-56 tokens, DvP settlement) share one identity (TDIP), one settlement asset (TNZO), and one consensus layer.
Two more architectural calls worth flagging:
TEE_VERIFY precompile verifies real Intel TDX, AMD SEV-SNP, AWS Nitro, and NVIDIA GPU CC quotes on-chain — attested execution is built into consensus, not bolted on as middleware over a non-TEE chain. Tenzro consensus is two-phase HotStuff-2 with reputation-weighted proposer election, no-endorsement certificates for tail-fork resistance, and Ed25519 + ML-DSA-65 hybrid post-quantum signatures on every safety-critical message.tenzro namespace), SLIP-44 (1414421071 / 0xd44e5a4f), and W3C DID (did:tenzro).For the full architecture see docs/WHITEPAPER.md and docs/SPECIFICATION.md.
| Crate | Description |
|---|---|
| tenzro-types | Core types, constants, primitives (zero internal deps) |
| tenzro-crypto | Ed25519, Secp256k1, AES-256-GCM, X25519, BLS12-381, FROST-Ed25519 threshold signatures (RFC 9591), VRF (RFC 9381 ECVRF-EDWARDS25519-SHA512-TAI) |
| tenzro-tee | TEE abstraction: Intel TDX, AMD SEV-SNP, AWS Nitro, NVIDIA GPU CC, Intel Tiber Trust Authority with X.509 cert chain verification |
| tenzro-zk | Plonky3 STARKs over the KoalaBear field (Poseidon2 + FRI), four pre-built AIRs (inference / settlement / identity / pq-qc — the last giving a quorum certificate a succinct post-quantum leg, since ML-DSA-65 signatures do not aggregate the way BLS does), no trusted setup, post-quantum sound |
| tenzro-network | libp2p P2P networking (control plane): gossipsub, Kademlia DHT, peer management, rate limiting, Identify + AutoNAT v2 + Circuit-Relay v2 + DCUtR for permissionless NAT traversal |
| tenzro-iroh | iroh data plane (content-addressed transport): IrohBackedResolver over QUIC + iroh-blobs, DA backend, gradient store, sealed-shard store, A2A-over-iroh on the tenzro/a2a ALPN. Resolves tenzro://{blob,gradient,shard,manifest,memory}/.... TDIP-anchored Pkarr discovery (EndpointId byte-identical to TDIP key) |
| tenzro-storage | RocksDB with column families, Merkle Patricia Trie, snapshots, fsync durability |
| tenzro-wallet | FROST-Ed25519 (RFC 9591) 2-of-3 threshold wallets + ML-DSA-65 hybrid PQ leg, Argon2id keystore, transaction builder, nonce management, key zeroization |
| tenzro-keystore-unlock | Platform-agnostic KeystoreUnlocker trait for reproducing the wallet keystore password across restarts (StaticUnlocker, EnvUnlocker); no platform dependencies, so it sits in the public API of wallet/node without pulling in OS crates |
| tenzro-device-key | Hardware-backed non-extractable P-256 device keys (macOS/iOS Secure Enclave, Touch ID / Face ID gated): biometric prehash signing and stable secret wrapping/unwrapping used to derive a persistent keystore password |
| tenzro-auth | Authentication engine: AAP (Agent Authentication Protocol), DPoP, RAR (Rich Authorization Requests), and WebAuthn attestation verification — what a device actually proved about the hardware holding its key, checked against pinned vendor roots rather than a platform account |
| tenzro-consensus | HotStuff-2 BFT: three-phase PREPARE → COMMIT → DECIDE, stake-weighted quorum with a 10% per-validator cap (consensus voting reserved for staked validators; service roles earn proof-of-service rewards), TEE-weighted leader selection (1.5×), equivocation detection + slashing, batch availability certificates so proposals order certificate hashes instead of transaction bodies, quorum-gated ZK commitment attestation (a ZK_VERIFY commitment is admitted only with a 2f+1-stake-weight BLS certificate over independent re-verification) |
| tenzro-vm | Multi-VM: EVM (revm) + SVM (Anza solana-svm TransactionBatchProcessor, behind the svm-full feature) + DAML, Block-STM parallel execution, EIP-1559, ERC-4337 AA, ERC-7579 modular validators, EIP-7702 Type-4 delegation registry, Permit2 SignatureTransfer + witness (ERC-7683-ready gasless flows), Secure-Mint precompile (1:1 reserve-attestation invariant for tokenized assets), standard EVM + EIP-2537 BLS12-381 + Tenzro precompiles (TEE_VERIFY, ZK_VERIFY, VRF_VERIFY at 0x1007) |
| tenzro-token | TNZO token economics: treasury, staking, governance, epoch rewards, liquid staking (stTNZO) |
| tenzro-identity | TDIP: unified human/machine identity, W3C DID documents, verifiable credentials, delegation scopes, GDPR Article 17 right-to-erasure (tenzro_forgetIdentity) |
| tenzro-payments | Agentic payment protocols. Crypto rails (settle on-chain): AP2 v0.2 (Google/FIDO) mandate sign + verify + validate-pair, MPP (Stripe + Tempo) sessions, x402 v1 (Coinbase) HTTP 402 with a resource bazaar (register / discover / deregister paid resources, offer verification, idempotent payment ids) across the tenzro-hybrid, exact-eip3009, permit2, and erc7710 schemes, Stripe SPT (SharedPaymentToken) issuance + verify with TDIP cap-resolver + ERC-8004 ReputationRegistry cross-write, Tempo (EIP-155 signing), ERC-8004 (Jan 2026 revision) Trustless Agents Registry (Identity / Reputation / Validation, 22 surfaces). Card rails (Tenzro provides identity + delegation + audit; card networks settle fiat): Visa TAP (Trusted Agent Protocol), Mastercard Agent Pay. HTTP 402 middleware, RFC 9421 HTTP message signatures. |
| tenzro-agent | AI agent infrastructure: A2A protocol, MCP bridge, capability attestation, durable persistence |
| tenzro-agent-kit | High-level agent SDK: compose agents from skills, tools, and payment protocols |
| tenzro-model | Model registry, modality-aware inference routing (price/latency/reputation), content-addressed peer-first model distribution (BLAKE3-hashed weights, tenzro://blob/<hash> URIs, HfArtifactDownloader fetches from peers over iroh blobs and falls back to HuggingFace; ModelHashRegistry first-recorder-wins + verify-before-load). Multi-gigabyte artifacts already on disk are published by reference (publish_path / ImportMode::TryReference) so a served model is not duplicated into the blob store. Durable catalog. Local inference via llama.cpp across every ggml backend (CUDA, ROCm, Metal, Vulkan, SYCL, OpenCL, WebGPU, MUSA, CANN, OpenVINO, zDNN, BLAS — one per build, CPU otherwise). Multi-modal ONNX runtimes: forecast (TimesFM 2.5), vision (CLIP, SigLIP2, DINOv3, DINOv2), text-embedding (Qwen3-Embedding, EmbeddingGemma, BGE-M3, Snowflake Arctic), segmentation (SAM 3 / 3.1, SAM 2, EdgeSAM, MobileSAM), detection (RF-DETR, D-FINE), audio ASR (Moonshine v2, Distil-Whisper, Whisper-v3-turbo, Parakeet-TDT, Canary-1B-Flash), video (encoder scaffold). License-tier gating: Permissive / Attribution / CommercialCustom / NonCommercial. |
| tenzro-cortex | Recurrent-depth reasoning workers (RDT/MoE): HTTP sidecar architecture, signed receipts, attestation suite, gossip-based worker discovery, depth-priced billing |
| tenzro-training | Tenzro Train protocol layer (data-parallel with decoupled outer synchronization): aggregation rules (Mean, LoraAlternating, TrimmedMean, CoordinateMedian, Krum), Nesterov outer optimizer with adaptive learning rate, blockwise Int8/Int4 gradient quantization, chunked top-k sparsification with a 2-bit codec and a local error-feedback accumulator for the dropped mass, streaming shard synchronization, pipeline trainer groups, syncer state machine, on-chain run-root commitments. Pairs with the Python reference trainer at integrations/trainer/. |
| tenzro-media-gen | Tenzro Media Gen protocol layer: diffusion job queue, worker registry, pixel-step pricing, split-expert claim and latent handoff, proportional payment division, three signed commitments (job id / handoff / receipt), content-addressed output store. Pairs with the Python reference worker at integrations/media_gen/. |
| tenzro-settlement | Escrow, micropayment channels, batch settlement, dispute resolution, and streaming rental escrow: time-based capacity rental with renter deposit + per-epoch streaming release gated on signed availability proof; provider stake collateralizes one-epoch exposure across active rentals, make-whole-from-stake on miss |
| tenzro-storage-provider | Decentralized storage over the iroh content-addressed transport: provider daemon (accept / serve objects), nonce-bound proof-of-retrievability challenges, systematic Reed-Solomon erasure coding (replication as the k=1 case), per-byte streaming metering gated on a passing retrievability proof (ServiceType::Storage), capability-gated retrieval (AccessPolicy + optional confidential seal) |
| tenzro-cluster | Engine-agnostic local-network cluster substrate shared by model, storage, and database serving: reachability tiers, probed link-cost graph, deterministic nearest-neighbour ordering, and HRW rendezvous placement — every function is a deterministic function of measured inputs, so members converge on the same plan without a coordinator round |
| tenzro-database | Managed-database protocol layer (engine-agnostic, no driver): DatabaseDescriptor, placement across local / LAN-cluster / network tiers, engine catalog (PostgreSQL, Qdrant, Milvus, Valkey, Dgraph, Lance, Tantivy). Five engines have a driver (PostgreSQL / Qdrant / Valkey as thin stateless clients to an operator-run engine; Lance / Tantivy embedded in-process); Milvus and Dgraph are catalog-only until a driver is linked. Per-engine config validation, AccessPolicy + confidential seal, managed connection credentials, tenzro/databases gossip |
| tenzro-bridge | Cross-chain: Wormhole NTT (Guardian quorum verifier), LayerZero V2, Chainlink CCIP + CCT, deBridge DLN, Li.Fi, Canton DAML, Hyperlane V3 (sovereign Tenzro-ISM), Axelar GMP (Cosmos / Move / Stellar reach), Babylon Bitcoin staking |
| tenzro-events | Event sourcing and subscription system with replay, webhooks, websockets |
| tenzro-workflow | Multi-party workflow runtime: orchestrates Canton DAML receipts, on-chain transaction selectors 0x01000040–0x0100004B |
| tenzro-wasm | WASI 0.2 component host for sandboxed agent skills and MCP tools: language-agnostic, capability-based, deterministic fuel metering, content-addressed component identity |
| tenzro-node | Full node binary: JSON-RPC (932 methods), MCP (535 tools), A2A (40 skills), Web API |
| tenzro-cli | CLI tool: 108 command modules with interactive mode and full RPC coverage |
Bring your GPU, cluster, or data center and earn from network demand. With
a node running (tenzro-node --roles ai), one command handles everything:
Hardware detection, wallet provisioning, faucet funding, the 1,000 TNZO compute bond the model-provider rung requires, provider registration, default pricing, and pulling + serving the largest catalog model that fits your machine are all automatic. Your capacity is advertised on the provider gossip topic and inference demand routes to you, settling in TNZO per call.
The node exposes 4 protocol servers, plus 6 ecosystem MCP servers:
| Server | Port | Protocol | Endpoints |
|---|---|---|---|
| JSON-RPC | 8545 | HTTP | 932 methods across 31+ namespaces (EVM-compatible + Tenzro extensions, incl. multi-modal AI: forecast, vision, text-embed, segmentation, detection, audio, video; generative media; MoE sharded serving; LAN clustering; managed databases; app hosting: sites, functions, machines, leases; CAIP discovery; EIP-7702 delegation; Permit2; Secure-Mint; Capital Intent; Workflow). The same listener also serves the OpenAI-compatible HTTP routes /v1/chat/completions, /v1/responses, and the HTTP 402-gated /api/paid/chat/completions |
| Web API | 8080 | REST | Verification (/verify/*), /status, /faucet, /health, /chat, /providers, /discovery/resources, OAuth token/introspect/revoke, passkey wallet |
| MCP | 3001 | Streamable HTTP | 535 tools + OAuth 2.1 |
| A2A | 3002 | JSON-RPC + SSE | Agent Card with 40 skills, task streaming |
| Server | Port | Tools | Coverage |
|---|---|---|---|
| Solana | 3003 | 14 | Jupiter swaps, SPL tokens, Metaplex NFTs, Bonfida SNS |
| Ethereum | 3004 | 17 | Chainlink feeds, ENS, ERC-8004 agents, EAS attestations |
| Canton | 3005 | 23 | DAML contracts, CIP-56 tokens, DvP settlement, user/party management, IDP administration |
| LayerZero | 3006 | 21 | V2 messaging, OFT, Stargate, Value Transfer API |
| Chainlink | 3007 | 21 | CCIP, data feeds/streams, VRF v2.5, automation, functions |
| LI.FI | 3008 | 9 | Cross-chain aggregation, routing, gas estimation |
get_node_status, list_models, get_balance, resolve_did, debridge_search_tokens, etc.send_transaction, create_wallet, stake_tokens, register_identity, etc.tenzro_onboardHuman / tenzro_onboardDelegatedAgent / tenzro_onboardAutonomousAgent. Each request carries Authorization: DPoP <jwt> plus a fresh DPoP: <proof> header (per-request JWS-compact, bound to the JWT's cnf.jkt thumbprint per RFC 7638). RAR scopes (RFC 9396) constrain the JWT to specific tools and amounts.tnz_... keys minted by the RPC operator via tenzro_createApiKey (admin-token-gated) and presented as X-Tenzro-Api-Key. Scopes gate methods that consult third-party paid resources: canton (Canton JSON Ledger API), chainlink (Ethereum mainnet RPC quota for Chainlink Data Feeds + bridge fee oracle + per-adapter sponsorship), evm / svm / inference / tee / bridge for operators who monetise those surfaces. Per-tenant counters in CF_CANTON_ANALYTICS + CF_BRIDGE_ANALYTICS. GCRA rate-limit on chainlink-scoped methods.tenzro_revokeJwt (single token by jti) or tenzro_revokeDid (cascading through the act-chain).TENZRO_MCP_AUTH=tiered (default) | false (dev) | full (all tools require auth)A chain that picks one VM forces every workload to fit that VM. Tenzro runs three and routes by transaction type. All three share the same state, the same gas token (TNZO), the same TDIP identity, and the same consensus.
TEE_VERIFY (hardware attestation with vendor certificate-chain validation), ZK_VERIFY (O(1) commitment lookup against the on-chain Plonky3 registry), VRF_VERIFY (RFC 9381 ECVRF), IBC_VERIFY (IBC-Eureka light-client lookup), the Tenzro precompile slate (TNZO_BRIDGE, TOKEN_FACTORY, CROSS_VM_BRIDGE, STAKING, GOVERNANCE, NFT_FACTORY, MODEL_INFERENCE, SETTLEMENT, global supply accounting at 0x1021, module registry at 0x1022), ERC-4337 v0.8 account abstraction, EIP-7702 Type-4 delegation, Permit2 SignatureTransfer with witness binding, and ERC-7579 modular validator modules (social recovery / session keys / spending limits / WebAuthn passkey / TEE-bound).solana-svm TransactionBatchProcessor (behind the svm-full cargo feature) so Solana SBF programs run unmodified; without that feature the SPL Token adapter, the cross-VM native program, and PDA derivation still work while the SBF path returns VmError::SvmFullFeatureRequired. The SPL Token program maps onto the native unified token registry — a swap on SVM settles in the same balance space as a transfer on EVM. There is no bridging between the two VMs.CanActAs rights enforced server-side; DAR upload, party allocation, command submission, and active-contract queries are all available through the same node API surface as EVM and SVM calls. Canton's privacy model means the transaction body is visible only to its signatories; Tenzro provides the cross-VM orchestration and the public commitment.The protocol layer treats AI compute as a coordinated resource, not a centralized service.
Tenzro does not ship models of its own. Every model named anywhere in this README — Qwen, DeepSeek, GLM, Kimi, Gemma, MiniMax, FLUX, Wan, LTX, SAM, CLIP, Whisper and the rest — is a third-party checkpoint the network supports, not a first-party or proprietary one. The serving path is model-agnostic: load_model takes a GGUF path, and llama.cpp derives the architecture from the file's own metadata, so the ModelArchitecture enum is informational (for display and filtering) rather than an allowlist. A model with no catalog entry serves on documented defaults.
What the curated catalog buys you is metadata and convenience, not permission. Every one of its entries was chosen for being ungated — downloadable with no HuggingFace login — so a fresh node can fetch and serve without the operator holding an account.
Per-model configuration is pluggable, not a single forced schema. Models genuinely differ in what they need, and a lowest-common-denominator config would either fail the demanding ones or burden the simple ones. So a catalog entry is a set of optional, defaulted slots and a model declares only what actually applies to it: a multimodal projector (mmproj) only if it has one, a paired drafter and MTP kind only if it supports speculative decoding, a MoeShape only if it is sparse, a sampling ServingProfile where the defaults are wrong for that family, a ReasoningPolicy where the model has a thinking mode. Where a model's own chat template is broken upstream, TemplateFix names a vendored replacement — the catalog declares which fix, the inference client supplies the file — rather than the runtime special-casing that model. Anything left unset falls back to a documented default, which is why an uncatalogued GGUF still serves. The same shape holds for generative media, where entries carry pixel-step pricing, split-expert boundaries and frame limits per pipeline; some models are served through authored configs pinned to a specific upstream version rather than a generic path.
Being in the catalog is not a claim that a model has been verified end to end. The registry is broader than what has been exercised on real hardware, and we do not imply otherwise. Testing is ongoing: when a model turns out to need something the generic path does not give it — a corrected chat template, different sampling defaults, a frame limit, a pinned upstream version — that becomes a new optional slot on the entry, added as needed to run that model, and left unset for every model that does not need it. This is why the config surface is additive and per-model rather than a schema fixed up front: it grows in response to what real checkpoints actually turn out to require. If you hit a model that misbehaves, that is a gap to report, not a limit of the design.
Gated models are supported; they carry their own credential. Some of the strongest open checkpoints are gated: free to read about, but requiring per-account approval to fetch (the FLUX.2-dev and klein-base-9B lines are gated: auto on the Hub, and Llama's GGUFs likewise — which is the only reason Llama is not a default catalog entry). To use one, accept its terms on HuggingFace and give the node your own token: HF_TOKEN, or HUGGING_FACE_HUB_TOKEN, or the file huggingface-cli login already wrote to ~/.cache/huggingface/token — all three are read, so an operator who logged in the ordinary way needs to do nothing else. The token is the operator's own credential for their own account: it is sent only to huggingface.co, never persisted by the node, and redacted out of logs. Without one, a gated fetch fails with a 401/403 and the error names the repository and the exact terms page to accept. tenzro status reports whether a token is present, because otherwise a missing credential surfaces only as an unexplained download failure.
ProviderCapacity.moe_holdings, and the dispatch planner aggregates per-token top-k routing decisions into per-holder batches dispatched directly over the holder's iroh QUIC endpoint. The shard view is a derived view over the existing provider registry — MoE providers are the same network providers that serve dense models. Replication is governance-tunable (default ≥ 2 holders per expert, up to 8 for popular experts). Typed pipeline roles: Replica, Router, ExpertHolder, PrefillDecode, Prefill, Decode. Execution runs in the node: MoeExpertRuntime hosts per-expert FFN weights (ExpertFfn) and gating networks (GatingNetwork) loaded from safetensors (local file or tenzro://blob URI over iroh-blobs); a forward pass gates locally, fans expert sub-batches out to holders over the tenzro/moe iroh ALPN (with HTTP fallback), and combines the weighted expert outputs. A holder can advertise more experts than fit in memory: the runtime keeps experts in a byte-bounded memory-tier LRU (budget auto-sized to 60% of MemAvailable, else 4 GiB) backed by a disk tier that spills raw safetensors and decodes them back on demand, and readahead promotes the disk-tier experts a forward is about to hit before the batch arrives. Residency (Warm memory / Cold disk) is read from the live tier state, so the shard map reflects what is actually loaded. The expert projection math (Y = X·Wᵀ) runs behind an ExpertCompute seam so the same forward path uses whatever hardware a holder has: a CPU ndarray path is always present (with a runtime-detected AVX-512-VNNI Q8_0 dot path on capable x86), while GPU backends compile only under cargo features (moe-cuda for cuBLAS grouped-GEMM on NVIDIA, moe-wgpu for a cross-vendor WGSL kernel; moe-gpu enables both) and never enter a default build — a holder advertises moe_gpu so the router biases expert placement toward GPU holders. Experts can be block-quantized to shrink both the stored blob and the bytes moved between holders — Q8_0 (~1 byte/weight), Q4_K (~4.5 bpw), Q6_K (~6.6 bpw), with ExpertQuantPlan::q4_k_m (gate/up Q4_K, down Q6_K) as the balanced default, dequantized one row at a time. Cross-holder dispatch compresses activations to Q8_0 blocks when the hidden dim is a multiple of 32, redispatches to warm backup holders when one is slow or missing, and streams holder responses into a combiner that fails loudly if any expected contribution never lands. Planning RPCs: tenzro_moeShardMap, tenzro_moePlanDispatch, tenzro_moeReplicationPolicy, tenzro_moeCatalogShape. Execution RPCs: tenzro_moeExpertLoad, tenzro_moeGateLoad, tenzro_moeExpertUnload, tenzro_moeGateUnload, tenzro_moeExpertStatus, tenzro_moePrepareExperts, tenzro_moeRoute, tenzro_moeExecute, tenzro_moeForward. CLI: tenzro moe {shard-map, plan-dispatch, replication-policy, catalog-shape, load-expert, load-gate, unload-expert, unload-gate, prepare-experts, status, forward}.hidden_dim × dtype_bytes per token, fp16) crosses the wire between adjacent stages. Placement is deterministic — VRAM-weighted largest-remainder layer assignment, greedy nearest-neighbour stage ordering, and a reachability gate that excludes members that cannot hold a data-plane link — with no model in the hot path. Members must share one runtime build commit (no wire-version negotiation); mixed backends across members are fine. RPC tenzro_clusterPlan returns the fit decision and, when a cluster forms, the ordered per-member layer stages. Serving auto-triggers the pipeline: tenzro_serveModel reads the GGUF header for the model shape, discovers members from gossiped ClusterProfile announcements, and runs the cluster when one host cannot hold the model — pass force_single to keep it on one host, or supply cluster_members to override discovery.tenzro_localPeers) and publish a sustained connectivity tier — direct / relay_only / unreachable (tenzro_nodeReachability). The execution resolver prefers a local provider and falls back to the wider network only when none is reachable (prefer-local-with-fallback), so a request served by a machine on the same LAN never leaves it. Each node also exposes a hardware self-profile — runtime build commit, CPU architecture, OS, detected compute devices, and derived serving capacity / backend / capability key (tenzro_nodeProfile) — which feeds both single-box fit and cluster planning.tenzro_serveModel reads the catalog drafter_id, loads it from disk or downloads it in the background, and reports the outcome in the serve response's mtp field. A model draws its candidates from one of two sources: a small paired drafter checkpoint, or a native embedded MTP head that self-drafts against the target's own hidden state (drafter_id unset, mtp_kind: DraftMtp) — no second checkpoint to fetch. Declared for DeepSeek V3 (native, ~80% accept rate, ~1.8× decode), DeepSeek V4 Pro / Flash, GLM 5.2, Gemma 4 (all sizes), Qwen 3.5 (0.8B/2B/4B/9B/27B/35B-A3B/122B-A10B/397B-A17B), Qwen 3.6 27B + 35B-A3B, and Qwen 3.8 27B (native embedded head). Providers advertise drafter co-load via ProviderCapacity.mtp_enabled; the inference router filters MTP-eligible requests to MTP-capable providers when draft_n is set.mmproj) loads the projector alongside the language weights, so image attachments are encoded and interleaved into the prompt inside the same runtime rather than routed to a separate vision service. Catalog entries declare the projector via MmprojSpec; the path compiles under the mtmd cargo feature.CF_MODELS and hydrate on startup.tenzro/models carrying modality, capabilities, context length, the provider's own price, a serving schedule, a TTL, and the serving address. The node verifies each announcement, pins the signing key per (model_id, provider) pair, and hands the unexpired set to intent routing — so routing scores every live offer on the network, not only what the local operator registered, and the settlement split follows the payee named in the winning offer.tenzro-training) owns the syncer state machine, five aggregation rules (Mean / LoraAlternating / TrimmedMean / CoordinateMedian / Krum), Nesterov outer optimizer, fragment commitment, training receipts, and on-chain run-root commitments. Python reference trainer wraps PyTorch FSDP2 + Hivemind + safetensors for per-modality inner loops (transformers, native PyTorch, gluonts, timm). k-of-N witness committee with idempotent finalization and no-endorsement certificates handles multi-syncer coordination across regions. Communication efficiency: blockwise symmetric gradient quantization (Int8 4×, Int4 ~8× smaller than f32, byte-identical Rust/Python codecs), streaming synchronization (one parameter shard syncs per round, active_shard = round % num_shards), delayed application (round r's outer update applies during round r+1 so communication overlaps computation), adaptive outer learning rate scaled by pairwise cosine gradient agreement, and pipeline-parallel trainer groups for models too large for one trainer. Inner optimizer is selectable per task (inner_optimizer: muon / adamw / sgd) — Muon orthogonalizes 2D weight updates with Newton-Schulz iteration. Confidential tier uses HPKE RFC 9180 base-mode wrapping of per-shard data keys to enclave-resident trainers (data unsealed only inside the trainer's TEE). Three trust tiers: Open (Mean and LoraAlternating), Verified, Confidential.text2image, image2image, text2video, image2video). Rust protocol layer (tenzro-media-gen) owns the job queue, worker registry, pixel-step pricing, payment division, the three signing preimages, and the content-addressed payload store; the Python reference worker (integrations/media_gen/, HuggingFace diffusers) owns the denoising loop and nothing else. The preconfigured catalog entries are third-party checkpoints — Qwen-Image and its four-step distillation, Qwen-Image-Edit, Z-Image-Turbo, FLUX.2-klein, the Wan 2.2 video family, LTX — none of them Tenzro's own. They are the pipelines that ship with metadata (pixel-step pricing shape, split-expert boundary, frame limits) already filled in; a worker advertises the pipelines it actually holds, so the set is a starting point rather than a boundary. Enrollment refuses a model whose license tier the operator has not accepted, and gated weights need the operator's own HuggingFace token as above. Split-expert rendering covers models whose transformer is a high-noise / low-noise expert pair — a fixed noise threshold (t ≥ boundary_ratio × num_train_timesteps) decides which expert owns a step, so one expert fits 48 GB where the whole model needs 80, exactly one intermediate latent crosses between the halves, and payment splits by steps_completed / total_steps taken from the signed handoff rather than either worker's later claim. Output, latent, and conditioning image are all addressed by tenzro://blob/ and verified on read. RPCs under tenzro_mediaGen_*; CLI tenzro media-gen {catalog, quote, post-job, get-job, get-receipt, fetch-output, enroll-worker, claim-job, publish-output, record-handoff, submit-receipt, fetch-latent}.TEE_VERIFY on-chain.Publish a static site, a server-side function, or an unmodified long-lived server to Tenzro nodes and serve it over the public internet — with no manual TLS, DNS, Caddy, or port setup. Three runtime classes share one deploy → discover → place → serve path:
tenzro://blob/<hash>). Content never touches the filesystem; a request path only indexes the route map. SPA fallback serves the index at 200 for non-asset paths (asset misses 404 directly so a missing bundle chunk is never masked). Responses carry an ETag (the blob hash) with If-None-Match 304 support. RPC tenzro_siteDeploy / CLI tenzro site deploy.wasi:http component (WASI 0.2, hosted on wasmtime under the wasi-skills feature) that answers requests directly in a sandbox with capability-gated authority, deterministic fuel metering, and a per-request wall-clock deadline. RPC tenzro_functionDeploy / CLI tenzro function deploy.firecracker feature, on operator nodes with KVM + nested-virt) for an unmodified Node / Python / Rust server. RPC tenzro_machineDeploy / CLI tenzro machine deploy.LeaseRecords readable via tenzro_listLeases / tenzro_getLeasesForApp (CLI tenzro lease list / tenzro lease get). Placement is best-effort: with no capable remote node, the app serves locally so deploy never fails. A 30s reconcile pass sweeps expired leases (provider-announcement TTL staleness is the liveness signal) and re-places replicas of silent nodes onto survivors, holding replica count stable. Deploy flags: --replicas, --region-hint, --max-price-per-hour.tenzro/http transport (one QUIC bi-stream per HTTP request) to a placed node and streams the response back. TLS at the edge is PQ-hybrid and provisioned automatically. Naming, placement, and mutations all require a signed envelope proving control of the owner DID.See docs/HOSTING.md for the full RPC and CLI surface.
Multi-tenant object storage behind /v1/files, layered over the content-addressed storage provider rather than replacing it. The provider knows an object by the id the caller assigned and can rebuild its bytes from shards; what it deliberately does not know is that a given object is Alice's notes.txt, uploaded on Tuesday. That is application metadata, and pushing it down into the shard layer would mean every provider holding a shard also holds the filename and owner of the thing it is a fragment of. So the naming layer stays local to the node the tenant uploaded through, and the storage layer holds only bytes.
Uploads are erasure-coded into 4 data + 2 parity shards — surviving two simultaneous provider losses — and distributed across independent providers, with a streaming storage deal funding them. A null deal_id on the upload result means the bytes landed but nothing is paying to keep them.
Isolation is enforced per operation, and listing is the critical path: retrieve, content and delete each address one known id, so a missing ownership check there leaks one file to someone who already guessed its id, whereas list enumerates. A lookup for another tenant's file id is reported identically to one that does not exist. Deletion unlinks the reference and stops the deal; it does not erase shards, which expire only once the deal stops paying for them — so it must not be treated as redaction. RPCs tenzro_uploadFile / tenzro_listFiles / tenzro_getFile / tenzro_deleteFile; CLI tenzro files {upload, list, get, download, delete, usage}.
When an operator rents out a node, the renter should be able to use the hardware directly, not only through the node's RPCs. The model is GCP OS Login + IAP and AWS SSM Session Manager — identity-scoped, short-lived, no inbound port, revocable at the source, and audited — not a handed-out root SSH key. Authorization and confinement live in the node; the transport is the tenzro/shell iroh ALPN.
Three factors gate a session, each answering a different question. A service key, provisioned by the operator or minted automatically when a rental deposit lands, establishes which lease is being invoked — on its own it proves only that someone was given a string. A passkey ceremony against the caller's Tenzro wallet (the browser-launch flow the wallet already runs: the CLI prints a link, the user verifies in a browser, the CLI polls) makes the session attributable to a person's wallet rather than to whoever holds the key. And membership in the lease's authorized-wallet list means a leaked key is not by itself usable.
The lease is also the scope: which accelerators, how many cores, how much memory, whether outbound egress is permitted (off by default — a rented shell is for compute, and the operator's local networks stay unreachable either way), the per-session wall-clock ceiling (capped at 12 hours), and the lease term. Omitting the accelerator list yields a CPU-only lease, because "all GPUs" is not a scope anyone chose. Revoking a lease kills every outstanding session grant against it. CLI tenzro shell login and tenzro shell lease {open, revoke, list}.
Image-to-3D sits in the same job queue as image and video rather than beside it. The surrounding machinery — posting, claiming, content-addressed output, signed receipts, pixel-step settlement — is identical; only the loader and the artifact differ, and those are exactly what the catalog entry carries.
MediaGenKind gains image23d and text23d. The output is a GLB mesh with PBR materials, not frames, so nothing downstream tries to decode it as video.backend, defaulted to diffusers. That default is what keeps every existing pipeline byte-for-byte unchanged. trellis2-4b loads through Microsoft's own trellis2 package, which is not a diffusers pipeline at all — pushing it through a shim, or pushing diffusers models through a new abstraction, would trade a working path for a uniform one. A worker missing a backend's package refuses enrolment for that entry rather than accepting the job and failing at claim time.width/height describe the input photo, so pricing on them would charge for the input and ignore the asset — two jobs from one photo at 512³ and 1536³ would cost the same while differing 27× in work. Charged on the grid face (r²), since generation cost tracks the sparse occupied surface rather than the empty interior, and against the same per_pixel_step rate so both settle through one path.tenzro model serve and every pixel pipeline are untouched by any of this.
Two facilities cover the gap between what a node can do and what a caller can find.
tenzro_listRpcMethods returns the directory from the node itself, each entry carrying its gate class (admin token vs open) and the API-key scope it needs, so a caller can distinguish "I need a differently-scoped key" from "I need the operator's token" without provoking the error first; filter by namespace or substring, since unfiltered it is ~900 rows. Anything found can then be invoked by name. Authorization is unchanged: a gateway call passes the same admin-token gate, API-key scope gate, and default-deny classification as a direct request, reaching exactly what the presented credentials already allow. Exposed on the CLI (tenzro rpc {methods, call}), both SDKs, MCP, and A2A.network (the default) announces it on tenzro/models and makes it reachable by any caller who pays — no service key and no prior relationship, even on a node whose service-key gate is on. gated serves it to callers holding an API key whose policy the operator pre-agreed, and deliberately does not announce it: the counterparties already know it is there, and gossiping it would advertise capacity to callers who cannot use it. private never leaves the box. CLI tenzro model serve [--gated | --private]. The published-model carve-out is narrow — an inference-method allowlist against a model currently served at network; a gated, private, or unknown model, or any other method, still needs the key.ai, storage, database, hosting, rpc, tee, compute — without unloading or disabling them, and resume later. Consensus is deliberately not hideable: a validator its peers cannot reach cannot vote. CLI tenzro visibility {show, hide, publish}.The catalog spans seven ONNX runtimes plus the llama.cpp language path, all dispatched by the modality-aware InferenceRouter::route() against typed InferencePayload (Chat / Forecast / VisionEmbed / VisionSimilarity / TextEmbed / Segment / Detect / Transcribe / VideoEmbed). License tiers — Permissive (Apache/MIT/BSD), Attribution (CC-BY-4.0), CommercialCustom (DINOv3, SAM, Gemma — require --accept-license), NonCommercial (refuse without --accept-non-commercial) — gate registration. Forecast (TimesFM 2.5), Vision embedding (CLIP, SigLIP2, DINOv3, DINOv2), Text embedding (Qwen3-Embedding, EmbeddingGemma Matryoshka, BGE-M3, Snowflake Arctic), Segmentation (SAM 3 / 3.1, SAM 2, EdgeSAM, MobileSAM), Detection (RF-DETR, D-FINE), Audio ASR (Moonshine v2, Distil-Whisper, Whisper v3 turbo, Parakeet-TDT, Canary-1B-Flash), Video (vision-fallback encoder over uniformly-sampled frames). Each modality is exposed through JSON-RPC, MCP, A2A, and a CLI subcommand. All ONNX runtimes share one session builder that registers hardware execution providers before falling back to CPU — the onnx-tensorrt / onnx-cuda / onnx-coreml cargo features compile in the corresponding providers (default priority TensorRT → CUDA → CoreML), the TENZRO_ONNX_EP environment variable overrides the priority, and a failed provider registration falls through rather than erroring. Container image variants package the LLM-accelerated binary against a matching runtime: Dockerfile.cuda (NVIDIA CUDA — multi-arch, covering x86_64 and arm64 hosts such as Grace-Blackwell), Dockerfile.rocm (AMD ROCm), and Dockerfile.vulkan (cross-vendor Vulkan). The ONNX GPU execution providers ship only in the x86_64 CUDA image; on arm64 CUDA and under the ROCm and Vulkan images the ONNX modalities fall back to CPU while the llama.cpp language path stays GPU-accelerated. See docs/AI.md §2.7 for the full backend/image matrix.
did:tenzro:human:{uuid} — KYC tier, controlled machines, controller of any number of delegated agents.did:tenzro:machine:{controller}:{uuid} — delegated agent acting on behalf of a human, institution, or upstream machine. Carries a delegation scope (per-tx cap, daily cap, allowed operations / chains / payment protocols / counterparties, time bound).did:tenzro:machine:{uuid} — autonomous agent. Same wallet and A2A surface, no controller. Marks is_seed_agent for protocol-funded bootstrap agents.did:tenzro:institution:{lei}:{uuid} — legal entity anchored to its 20-character GLEIF Legal Entity Identifier (ISO 17442) with ISO 7064 Mod 97-10 check-digit validation at registration. Optional vLEI ACDC credential id binding, ISO 3166-1 alpha-2 country code, KYB tier. One legal entity can hold multiple institution identities (one per desk / fund / subsidiary) without re-issuing LEIs.W3C DID Documents. W3C Verifiable Credentials with recursive trust-chain verification (cycle detection, depth bound, anchored to configured trust roots). KYC/KYB tier upgrades via credential. Cascading revocation. Universal Resolver at /1.0/identifiers/{did} (DIF spec) for any standards-compliant client. KERI Key Event Log for long-lived autonomous machine identities (inception, rotation, interaction events with pre-rotation commitments; SAID prefix S for SHA-256). Sign-In With Tenzro (SIWT) — EIP-4361-shaped message for off-chain service authentication.
Crypto rails — settle on-chain in TNZO or stablecoins:
tenzro_validateMandatePairtenzro_registerApp / setAppStatus / getApp / listApps / settleAuthorized / getSettleAuthorizedOutcome; SDK AppClient (Rust + TypeScript); CLI tenzro appCard rails — Visa/Mastercard settle fiat; Tenzro provides identity + delegation + audit:
This means a single agent identity can compose a card-rail TAP payment, an x402 USDC micropayment, and a Canton DvP leg in one task with one delegation envelope and one audit trail — across rails that otherwise cannot interoperate.
/dev/tdx-guest), AMD SEV-SNP (/dev/sev-guest), AWS Nitro (/dev/nsm), NVIDIA GPU CC (NRAS API)ZkCommitmentRegistry for O(1) EVM verification0x1007, NFT mintRandom (0x52517e21)list_chains, quote_dispatch, dispatch)IBC_VERIFY precompile at 0x1020 is an O(1) lookup against the off-EVM commitment registry.A unified BridgeRouter consults live fee quoting and returns a ranked set of routes by cost, speed, or reliability. Every adapter is fail-closed on inbound message verification (Guardian quorum for Wormhole, threshold validator set for Hyperlane + Axelar, ISMP proof for Hyperbridge, BitVM2 challenge protocol for Clementine). Per-adapter nonce trackers persist so replays are dropped across restarts. A global supply accounting registry at precompile 0x1021 is the single integrity log for Tenzro-issued tokens that move across rails — enforces monotone per-(asset, rail) sequence (replay guard), Σ mints − Σ burns ≤ max_supply, and no underflow on burn.
GovernanceSetFeeOracle (manual rate table, admin-token-gated via tenzro_setBridgeFeeRate) and ChainlinkFeedFeeOracle (live eth_call against AggregatorV3Interface.latestRoundData() with 30s in-memory cache + staleness + invalid-answer rejection)."tenzro/bridge/sponsorship-vault" || adapter, first 20 bytes), enumerable via tenzro_listBridgeSponsorshipPools.TenzroOrderData.bridge_fee_hint lets a single user-signed order be filled by any bridge in the registered adapter set — solver picks the adapter, the TNZO ceiling bounds the destination-native commitment.chainlink scope (same model as Canton). Per-tenant Compute Unit attribution in CF_BRIDGE_ANALYTICS. GCRA rate limiter (10 req/sec sustained, burst 100) with -32005 retry envelope.tenzro_urwaTriggerKillSwitch), freeze-tokens (tenzro_urwaSetFrozenTokens), forced-transfer (admin-token-gated).wall_ms + monotonic_ns + tee_vendor envelope with 30s drift tolerance.registerAgent/getAgent/submitFeedback/validationRequest/validationResponse interface for cross-ecosystem agent reputation. CLI exposes both tenzro erc8004 and the canonical EIP-8004 short-name alias tenzro 8004.tenzro auth and the alias tenzro aap — both names hit the same tenzro_*Token* and wallet-link RPCs.The workflow runtime is its own state machine. It runs alongside (not inside) the VMs and carries its own typed lifecycle, per-step execute / verify / compensate handlers, on-chain receipts under privileged-VM transaction selectors, fee routes, kill switch, and privacy domains. Canton mirroring is an optional projection — a workflow can declare canton_mirror: Some(...) and the workflow dispatcher will write a Tenzro.Workflow.Receipt row through the co-located Canton participant for every step; a workflow with canton_mirror: None runs without Canton interaction. EVM contracts subscribe to workflow events through the standard event surface. SVM programs observe receipts through the unified token registry's event log.
Draft → Active → AwaitingSignatures → Executing → Completed, terminal Cancelled / Disputed / Failed / Suspended) with privileged-VM selectors 0x01000040–0x0100004B for every state change.WorkflowReceipt linked into a per-workflow hash chain, persisted under wf_receipt:<id> and (optionally) mirrored to a Tenzro.Workflow.Receipt Daml template through the co-located Canton participant.tenzro_computeFeeRoutePayouts for read-only previews; actual settlement runs through the consensus-mediated escrow primitive.KillSwitchSuspend / KillSwitchCancel selectors give the initiator a defined emergency-stop path so an autonomous agent can never be trapped in a non-responsive multi-party flow it originated.tenzro_*), MCP (port 3001), and A2A (workflow skill on the Tenzro Agent Card). Operational-metrics snapshot at /metrics with bundled Grafana dashboard (UID tenzro-workflow).crates/tenzro-workflow/reference_workflows/ (autonomous procurement, autonomous treasury, DvP settlement, environmental MRV, supply-chain DPP), each paired with a **_daml_map.json` describing the optional Canton DAML projection.[AI]. Single source of truth in tenzro_node::eu_ai_disclosure.ContentProvenanceManifest keyed by SHA-256 content hash. Validators sign manifests with their Ed25519 block-signing key. RPC tenzro_getContentProvenance and CLI tenzro provenance get <content_hash> resolve the cached manifest.deepfake assertion in place of ai-generated.tenzro approval list/get and decide via tenzro approval decide.tenzro dispute status and tenzro dispute list-by-channel.tenzro reputation get <provider> reads the durable score (0–1000, +1 success / −5 failure) used by the inference router.Everything Tenzro writes on a machine lives under one root: $TENZRO_HOME, or
~/.tenzro when unset. Model weights, the HuggingFace cache and dataset shards
are shared across every Tenzro process on the box — content-addressed and
read-only once written, so two nodes never hold separate copies of the same
weights. Chain state is per-instance under instances/<name>/, because RocksDB
cannot be shared: the second process to open the same directory fails on its
lock file.
--data-dir still overrides the per-instance directory and models_dir
overrides the shared store, for operators who keep large data on separate
volumes. The container images set TENZRO_HOME=/data/tenzro so the model store
sits on the mounted volume rather than the ephemeral layer.
Three layers, each answering a different question:
admission.rs) — an optional operator-set service key gates
the service surfaces. It has no consensus or gossip variant, so a gated node
structurally cannot stop validating. A service key is a rental credential
for this machine's raw resources — a confined shell, storage, memory, compute
— carrying a ServiceKeyGrant with the surfaces it admits on and the term it
expires at, bound to the AccessLease it was minted for. It is not a
statement about what the node serves: model serving answers to the model's
own visibility, not to this gate. A model published at network visibility
is reachable by payment alone, on a gated node, because a peer that found the
offer over gossip has no way to obtain a key. See
docs/ACCESS.md.rpc_gates.rs) — every dispatched method is named in
exactly one of ADMIN_METHODS (109) or OPEN_METHODS (823); a method in
neither is refused before its handler runs. Tests read the dispatcher's own
source, so adding an RPC without deciding its gate is a build failure rather
than an audit finding.submitBlock, offerSnapshot and applySnapshotChunk are not on the JSON-RPC
surface. They were peer traffic reachable over the user-facing port —
submitBlock pushed a caller-supplied block onto the finalized path, which by
contract has already been through consensus and therefore verifies nothing.
Blocks arrive over peer-authenticated gossip and block-sync; the inbound half of
state-sync is driven in-process. The read half (listSnapshots,
getSnapshotManifest, getSnapshotChunk) is what a syncing node calls on a
serving one and is unchanged.
| Component | Repository | Description |
|---|---|---|
| MCP Server (Python) | tenzro/tenzro-mcp-server | 360 tools, FastMCP 3.x |
| A2A Server (Python) | tenzro/tenzro-a2a-server | 75 skills, FastAPI |
| TenzroClaw (Python) | tenzro/TenzroClaw | 685 commands, OpenClaw skill |
| Rust SDK | tenzro/tenzro-sdk-rust | 85 modules |
| TypeScript SDK | tenzro/tenzro-sdk-typescript | 92 modules |
| Browser-extension provider | sdk/tenzro-inject | window.tenzro for dApps — EIP-1193 / EIP-6963 / Wallet Standard / CAIP-25 |
| Homebrew | tenzro/homebrew-tap | brew install tenzro |
| Cookbook | tenzro/tenzro-cookbook | 34 runnable examples |
| Desktop App | tenzro/tenzro-desktop | Tauri + React |
| Service | URL |
|---|---|
| JSON-RPC | https://rpc.tenzro.xyz |
| Web API | https://api.tenzro.xyz |
| MCP Server | https://mcp.tenzro.xyz/mcp |
| A2A Server | https://a2a.tenzro.xyz |
| Faucet | https://api.tenzro.xyz/faucet |
| Solana MCP | https://solana-mcp.tenzro.xyz/mcp |
| Ethereum MCP | https://ethereum-mcp.tenzro.xyz/mcp |
| Canton MCP | https://canton-mcp.tenzro.xyz/mcp |
| LayerZero MCP | https://layerzero-mcp.tenzro.xyz/mcp |
| Chainlink MCP | https://chainlink-mcp.tenzro.xyz/mcp |
| LI.FI MCP | https://lifi-mcp.tenzro.xyz/mcp |
| Documentation | https://tenzro.com/docs |
Infrastructure: The public endpoints on tenzro.xyz are operated by Tenzro Labs, the first reference RPC provider on the network. The RPC provider role is open — any operator that meets the validator bond can register their own endpoint and serve the same protocol surface. TLS at the edge is PQ-hybrid X25519MLKEM768. The repository is the reference implementation — anyone can run a node and join.
Genesis: 1,000,000,000 TNZO total supply. Faucet: up to 1,010 TNZO per request, 24h cooldown. The ceiling is the 1,000 TNZO model-provider bond plus headroom for the gas that posting it costs — a grant equal to the bond cannot fund the transaction that posts it.
rust-toolchain.toml)cmake (for llama-cpp-sys-2)protoc — Protocol Buffers compiler ≥ 3.12 (required by lance-encoding, pulled in transitively via the agent-memory vector tier)pkg-config, libssl-dev (Linux)Install protoc:
Verify with protoc --version (must print libprotoc 3.12 or newer). See docs/GUIDE.md for the full per-platform toolchain.
The canonical deployment is Docker on a host with systemd. See deploy/validator-deployment.md for the infrastructure-agnostic operator guide covering key management, networking, and upgrade procedures.
13 proto3 files under proto/tenzro/v1/ defining 120+ message types. These serve as API documentation — Rust types are implemented manually for flexibility.
| Document | Purpose |
|---|---|
docs/WHITEPAPER.md | Tenzro Network whitepaper — vision, architecture, agent economy, settlement layer |
docs/SPECIFICATION.md | Protocol specification — architecture, consensus, multi-VM execution, identity, payments, settlement, agents, training, and the concrete Rust implementation |
docs/ECONOMICS.md | Canonical: who pays, who is paid, how much. Node economic modes, the revenue split, access tiers, settlement, provenance, machine identity |
docs/TOKENOMICS.md | TNZO token economics: supply, fee model, staking, rewards (testnet phase) |
docs/TDIP.md | Tenzro Decentralized Identity Protocol — identity over W3C DID across human, delegated agent, autonomous agent and institution; machine anchors, device binding and hardware-bound passkeys, sessions, the wallet second-device rule, and machine ownership transfer |
docs/AI.md | Tenzro AI — decentralized inference (single-replica + sharded MoE + MTP + multi-modal), Cortex reasoning, confidential inference, Tenzro Train (data-parallel, decoupled outer synchronization) training, and Tenzro Media Gen (diffusion image and video, split-expert rendering) |
docs/COMPUTE.md | Tenzro Compute — rentable compute capacity: per-epoch booking, availability-proof gate, streaming escrow, fixed or network-dynamic pricing, shared coverage with storage |
docs/STORAGE.md | Tenzro Storage — decentralized content-addressed storage: byte-epoch billing, proof of retrievability, redundancy, and one stake shared with compute |
docs/DATABASE.md | Tenzro Database — managed-database protocol layer: engine catalog (PostgreSQL, Qdrant, Milvus, Valkey, Dgraph, Lance, Tantivy), placement across local / LAN-cluster / network tiers, access policy + confidential seal |
docs/HOSTING.md | Tenzro Hosting — static sites, functions, and machines on Tenzro nodes: content-addressed serving, wasi:http sandbox, Firecracker microVM, bid/lease placement, operator-configured edge with automatic TLS |
docs/ORCHESTRATION.md | Intent orchestration — composing models, skills, tools, and agents behind an LLM planner with deterministic guardrails |
docs/NETWORK.md | Tenzro Network — decentralized networking: libp2p control plane (gossipsub topics, NAT traversal, validator-only topic authentication, request/response protocols) + iroh QUIC data plane (DA, model weights, gradients, sealed shards, agent memory, A2A + MCP ALPNs) |
docs/GUIDE.md | Operator and developer guide: build, run, deploy, troubleshoot |
docs/did-method-tenzro.md | did:tenzro DID method specification (W3C registration submission) |
deploy/validator-deployment.md | Infrastructure-agnostic validator and node operator guide |
docs/security/ | Security model, quantum-resistance plan, audit notes |
See CONTRIBUTING.md for guidelines. All contributions require sign-off under the Apache-2.0 license.
Apache License 2.0. See LICENSE for details.
Copyright 2024-2026 Tenzro Foundation.