Tenzro Testnet is live —request testnet TNZO

Getting Started

This guide will walk you through installing Tenzro, starting your first node, creating a wallet, and making your first transactions.

Prerequisites

No prerequisites required. Tenzro CLI and node binaries are self-contained and ready to run on macOS and Linux systems.

Installation

Homebrew (Recommended)

brew tap tenzro/tap
brew install tenzro-cli

# Verify
tenzro version

Quick Install Script

curl -sSL https://get.tenzro.network | sh
tenzro version

Download Binary

Pre-built binaries for all platforms on GitHub Releases.

# macOS (Apple Silicon)
curl -LO https://github.com/tenzro/tenzro-network/releases/latest/download/tenzro-cli-aarch64-apple-darwin.tar.gz
tar xzf tenzro-cli-aarch64-apple-darwin.tar.gz
sudo mv tenzro /usr/local/bin/
sudo mv tenzro-node /usr/local/bin/

Advanced: Build from Source

For developers who want to build from source or contribute to the project:

# Prerequisites: Rust toolchain
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Clone and build
git clone https://github.com/tenzro/tenzro-network.git
cd tenzro-network
cargo build --release -p tenzro-cli

# Binaries will be in target/release/
./target/release/tenzro --version

SDK Installation

If you are building applications on Tenzro, install the SDK for your language:

Rust SDK

# Add to your Cargo.toml
cargo add tenzro-sdk

Minimal usage example:

use tenzro_sdk::{TenzroClient, LocalConfig};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let client = TenzroClient::connect(LocalConfig::default()).await?;
    let balance = client.wallet().get_balance("TENZRO").await?;
    println!("Balance: {}", balance);
    Ok(())
}

TypeScript SDK

npm install tenzro-sdk

Minimal usage example:

import { TenzroClient, LOCAL_CONFIG } from "@tenzro/sdk";

const client = await TenzroClient.connect(LOCAL_CONFIG);
const balance = await client.wallet().getBalance("TENZRO");
console.log("Balance:", balance);

See the full SDK Reference for complete API documentation and additional examples.

Starting a Node

Tenzro supports multiple node roles: Validator, ModelProvider, TeeProvider, and LightClient. For getting started, we'll run a light client node.

Start a Light Client

tenzro-node \
  --role light-client \
  --listen-addr /ip4/0.0.0.0/tcp/9000 \
  --rpc-addr 127.0.0.1:8545 \
  --boot-nodes /ip4/your-bootstrap-ip/tcp/9000/p2p/12D3K...

Start a Validator

# Validators require staked TNZO
tenzro-node \
  --role validator \
  --listen-addr /ip4/0.0.0.0/tcp/9000 \
  --rpc-addr 127.0.0.1:8545 \
  --data-dir ~/.tenzro/validator

Verify Node is Running

# Check node status via CLI
tenzro info

# Or via RPC
curl -X POST http://127.0.0.1:8545 \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tenzro_nodeInfo","params":[],"id":1}'

You can also use the live testnet directly without running a local node:

# Or use the live testnet directly (no local node needed)
tenzro info --rpc https://rpc.tenzro.network

Onboarding: Identity and Wallet Setup

Before using the network, you need a TDIP identity and a wallet. Tenzro provides two onboarding paths: creating a new identity or importing an existing private key.

Option 1: One-Click Join (Create New)

The simplest way to get started. This auto-provisions a cryptographic keypair, creates a multi-signature wallet, registers your TDIP identity on the ledger, and detects your hardware profile — all in a single command. A second command then mints a DPoP-bound bearer JWT (RFC 9449) for authenticated access.

# Step 1  provision identity + wallet (CLI)
tenzro join --name "Alice" --rpc https://rpc.tenzro.network

# Output:
# Connected to network (Chain ID: 1337)
# Identity and wallet provisioned on Tenzro Ledger
#
# DID:     did:tenzro:human:550e8400-e29b-41d4-...
# Address: 0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb5
# Wallet:  Multi-signature threshold wallet

# Step 2  onboard via OAuth 2.1 + DPoP to mint a bearer JWT
tenzro auth onboard-human --display-name "Alice"

# Output (DPoP-bound access token):
# {
#   "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6...",
#   "token_type":   "Bearer",
#   "dpop_bound":   true,
#   "expires_in":   3600
# }

# Or via RPC
curl -X POST http://127.0.0.1:8545 \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tenzro_participate","params":[{"display_name":"Alice"}],"id":1}'

curl -X POST http://127.0.0.1:8545 \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","method":"tenzro_onboardHuman","params":[{"display_name":"Alice"}],"id":2}'

The access token is a DPoP-bound JWT credentialed against your TDIP identity and MPC wallet, carrying typed RAR authorization_details (RFC 9396) and AAP aap_* claims (IETF draft-aap-oauth-profile-01). Pass it on every privileged HTTP/JSON-RPC call as Authorization: DPoP <jwt> alongside a per-request DPoP: <proof> header (a JWS-compact DPoP proof signed with your Ed25519 holder key, RFC 9449 §4).

Use tenzro_exchangeToken to mint a child JWT for a downstream agent (RFC 8693, strict subset of grants), tenzro_introspectToken to verify a token (RFC 7662), tenzro_oauthDiscovery to fetch AS metadata (RFC 8414), and tenzro_revokeToken to revoke a token and cascade-revoke its children (RFC 7009). The same metadata is also served at /.well-known/openid-configuration for standard OAuth clients.

Option 2: Import from Private Key

If you have an existing private key, you can import it to create your identity and wallet. The key is used to derive your wallet address, and wallet shares are generated and stored in a securely encrypted keystore.

# Via CLI
tenzro wallet import 0x4c0883a69102937d... \
  --name "Alice"

# You'll be prompted for a wallet password
# Output:
# DID:     did:tenzro:human:661f9500-...
# Address: 0x8Ba1f109551bD432803012645Ac136ddd64DBA72

Desktop App Setup

The Tenzro desktop app provides a guided Setup page on first launch. It offers two tabs: "Create New" and "Import Existing". On success, you are redirected to the Dashboard with your identity, wallet, and hardware profile displayed.

# Download and install the desktop app
# Available for macOS, Windows, and Linux

# The Setup page will appear on first launch
# Enter your display name, password, and RPC endpoint
# Click "Create Identity & Wallet" or import an existing key

Wallet Operations

List Wallets

tenzro wallet list

Check Balance

# Check TNZO balance
tenzro wallet balance --address 0x742d35Cc...

Send TNZO

# Send 10 TNZO to another address
tenzro wallet send 0xRecipientAddr 10 --asset TNZO

Getting Testnet TNZO

Request testnet TNZO from the built-in faucet:

# Via CLI
tenzro faucet <your-address>

# Via JSON-RPC
curl -X POST https://rpc.tenzro.network \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tenzro_faucet","params":{"address":"<your-address>"}}'

Requesting AI Inference

List available models and request inference:

# List available models
tenzro model list

# Chat with a model (interactive)
tenzro chat gemma4-9b --rpc https://rpc.tenzro.network

# Or request inference via RPC
tenzro inference request \
  gemma4-9b \
  "What is the capital of France?" \
  --max-tokens 100

Next Steps