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 limitsGetting 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 statsSpending 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