Tenzro Testnet is live —request testnet TNZO

Apps & AppClient

The AppClient pattern lets developers build applications where end users never need to hold TNZO or manage wallets. The developer registers an app with a funded master wallet, creates user sub-wallets on demand, and sponsors gas for all user transactions via the paymaster.

Architecture

Developer registers app -> gets API key + master wallet
    |
    +-- Master wallet holds TNZO (funded by developer)
    |
    +-- App spawns user sub-wallets (auto-funded from master)
    |     +-- Each sub-wallet has spending limits, session scopes
    |
    +-- Master wallet acts as paymaster:
    |     +-- Pays gas for user transactions
    |     +-- Pays for inference requests
    |     +-- Pays for agent operations
    |     +-- Pays for bridge fees
    |
    +-- Developer dashboard: usage, costs, rate limits

Getting Started

1. Register Your App

# Register via CLI
tenzro app register --name "My AI App"

# Or initialize in code (Rust SDK)
use tenzro_sdk::AppClient;

let app = AppClient::new(
    "https://rpc.tenzro.network",
    "your-master-wallet-private-key",
).await?;

// Or with an API key
let app = AppClient::from_api_key(
    "https://rpc.tenzro.network",
    "your-api-key",
).await?;

2. Create User Wallets

// Create a sub-wallet for a user (funded from master)
let user = app.create_user_wallet(
    "alice",
    100_000_000_000_000_000, // 0.1 TNZO initial funding
).await?;

println!("User address: {}", user.address);
println!("Label: {}", user.label);

3. Sponsor Operations

// Sponsor an inference request for a user
let result = app.sponsor_inference(
    &user.address,
    "gemma3-270m",
    "Explain quantum computing",
).await?;

// Sponsor a token transfer
let tx = app.sponsor_transfer(
    &user.address,
    &recipient_address,
    amount,
).await?;

// Sponsor a bridge operation
let bridge_tx = app.sponsor_bridge(
    &user.address,
    "ethereum",
    "USDC",
    amount,
).await?;

4. Monitor Usage

// Get usage statistics
let stats = app.get_usage_stats().await?;
println!("Total gas spent: {} wei", stats.total_gas_spent);
println!("Total inference tokens: {}", stats.total_inference_tokens);
println!("Active users: {}", stats.active_users);

// CLI equivalent
tenzro app stats

Spending Policies

Each user sub-wallet can have spending policies and session keys applied to limit what operations it can perform:

use tenzro_sdk::app::SpendingPolicy;

// Apply a spending limit to a user wallet
let policy = SpendingPolicy {
    max_per_transaction: 1_000_000_000_000_000_000, // 1 TNZO
    max_daily_spend: 10_000_000_000_000_000_000,    // 10 TNZO
    allowed_operations: vec!["inference", "transfer"],
};

app.set_spending_policy(&user.address, policy).await?;

CLI Management

# Register app
tenzro app register --name "My AI App"

# List users
tenzro app users

# Fund a user wallet
tenzro app funding --user alice --amount 1.0

# Sponsor operations (gas)
tenzro app sponsoring --user alice --enable

# View stats
tenzro app stats