Tenzro Testnet is live. Get testnet TNZO

SDK Reference

Complete reference for the Tenzro Rust SDK and TypeScript SDK. Both SDKs provide full access to Tenzro Network functionality including blockchain queries, identity management, AI inference, agent operations, payments, and provider management.

Installation:

# Rust  add to Cargo.toml
tenzro-sdk = "0.2"

# TypeScript  npm or yarn
npm install @tenzro/sdk

Quick Start

Rust

use tenzro_sdk::{TenzroClient, config::SdkConfig};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let config = SdkConfig::testnet();
    let client = TenzroClient::connect(config).await?;

    let block = client.block_number().await?;
    println!("Current block: {}", block);

    Ok(())
}

TypeScript

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

const client = TenzroClient.testnet();

const block = await client.getBlockNumber();
console.log("Current block:", block);

TenzroClient (Main)

The primary entry point for interacting with Tenzro Network. Provides blockchain queries, transaction submission, and access to all sub-clients.

RustTypeScript
block_number()getBlockNumber()
get_block(height)getBlock(height)
get_latest_block()getLatestBlock()
get_balance(address)getBalance(address)
get_nonce(address)getNonce(address)
get_chain_id()getChainId()
send_transaction(from, to, value, ...)sendTransaction(params)
node_info()nodeInfo()
peer_count()peerCount()
total_supply()totalSupply()
request_faucet(address)requestFaucet(address)
is_connected()isConnected()
get_transaction(hash) v0.2getTransaction(hash) v0.2
syncing() v0.2isSyncing() v0.2
get_finalized_block() v0.2getFinalizedBlock() v0.2
export_config() v0.2exportConfig() v0.2
get_transaction_history(addr, limit?) v0.2getTransactionHistory(addr, limit?) v0.2
list_accounts() v0.2listAccounts() v0.2

Core Examples

// Rust
let balance = client.get_balance(address).await?;
let block = client.get_block(1000).await?;
let info = client.node_info().await?;
println!("Block: {}, Peers: {}", info.block_height, info.peer_count);
// TypeScript
const balance = await client.getBalance("0xabc...");
const block = await client.getBlock(1000);
const info = await client.nodeInfo();
console.log("Block:", info.block_height, "Peers:", info.peer_count);

New in v0.2: Transaction Queries and Node Status

// Rust
let tx = client.get_transaction("0xabc123...").await?;
println!("Transaction: {:?}", tx);

let is_syncing = client.syncing().await?;
let finalized = client.get_finalized_block().await?;
println!("Syncing: {}, Finalized block: {}", is_syncing, finalized);

let config = client.export_config().await?;
let history = client.get_transaction_history("0xabc...", Some(50)).await?;
let accounts = client.list_accounts().await?;
// TypeScript
const tx = await client.getTransaction("0xabc123...");
console.log("Transaction:", tx);

const syncing = await client.isSyncing();
const finalized = await client.getFinalizedBlock();
console.log("Syncing:", syncing, "Finalized block:", finalized);

const config = await client.exportConfig();
const history = await client.getTransactionHistory("0xabc...", 50);
const accounts = await client.listAccounts();

IdentityClient

Manages TDIP (Tenzro Decentralized Identity Protocol) identities for both humans and machines. Accessed via client.identity() (Rust) or client.identity (TypeScript).

RustTypeScript
register_human(name)registerHuman(name)
register_machine(params)registerMachine(controllerDid?, caps)
resolve(did)resolve(did)
resolve_did_document(did)resolveDidDocument(did)
import_identity(params)joinAsMicroNode(params?)
list_identities() v0.2listIdentities(type?) v0.2
add_credential(did, type, issuer?, claims?) v0.2addCredential(did, type, issuerDid) v0.2
add_service(did, type, endpoint) v0.2addService(did, type, endpoint) v0.2

Identity Examples

// Rust
let identity = client.identity();
let result = identity.register_human("Alice").await?;
println!("DID: {}", result.did);

let info = identity.resolve("did:tenzro:human:abc123").await?;
println!("Status: {}, Keys: {}", info.status, info.key_count);
// TypeScript
const identity = client.identity;
const result = await identity.registerHuman("Alice");
console.log("DID:", result.did);

const info = await identity.resolve("did:tenzro:human:abc123");
console.log("Status:", info.status, "Keys:", info.key_count);

New in v0.2: Credentials and Services

// Rust
let identity = client.identity();

// List all identities
let all = identity.list_identities().await?;
println!("Found {} identities", all);

// Add a verifiable credential
identity.add_credential(
    "did:tenzro:human:abc123",
    "KycAttestation",
    Some("did:tenzro:human:issuer456"),
    Some(serde_json::json!({"tier": 2})),
).await?;

// Add a service endpoint
identity.add_service(
    "did:tenzro:human:abc123",
    "MessagingService",
    "https://msg.example.com/agent",
).await?;
// TypeScript
const identity = client.identity;

// List all identities (optionally filter by type)
const all = await identity.listIdentities("Human");
console.log("Found", all.length, "human identities");

// Add a verifiable credential
await identity.addCredential(
  "did:tenzro:human:abc123",
  "KycAttestation",
  "did:tenzro:human:issuer456"
);

// Add a service endpoint
await identity.addService(
  "did:tenzro:human:abc123",
  "MessagingService",
  "https://msg.example.com/agent"
);

AgentClient

AI agent lifecycle management, messaging, swarms, and template-based agents. Accessed via client.agent() (Rust) or client.agent (TypeScript).

RustTypeScript
register(id, name, caps)register(id, name, caps)
send_message(id, msg)sendMessage(id, msg)
list_agents()listAgents()
spawn_agent(parent, name, caps)spawnAgent(parent, name, caps)
delegate_task(id, desc)delegateTask(id, desc)
run_agent_task(id, task, url?)runAgentTask(id, task, url?)
create_swarm(orch, members, ...)createSwarm(orch, members, opts?)
get_swarm_status(id)getSwarmStatus(id)
terminate_swarm(id)terminateSwarm(id)
spawn_agent_template(id, name?, ctx?)spawnAgentTemplate(id, name?, ctx?)
run_agent_template(id, iters?, dry?)runAgentTemplate(id, iters?, dry?)
download_agent_template(id)downloadAgentTemplate(id)
update_agent_template(id, params)updateAgentTemplate(id, params)
discover_models(mod?, serving?, q?) v0.2discoverModels(opts?) v0.2
discover_agents(capability?) v0.2discoverAgents(capability?) v0.2
spawn_agent_with_skill(parent, name, skill, caps?) v0.2spawnAgentWithSkill(parent, name, skill, caps?) v0.2
fund_agent(id, from, amount) v0.2fundAgent(id, from, amount) v0.2
swap_token(id, from, to, amt, chain?) v0.2swapToken(id, from, to, amt, chain?) v0.2
agent_pay_for_inference(id, model, prompt, max?) v0.2agentPayForInference(id, model, prompt, max?) v0.2

Agent Examples

// Rust
let agent = client.agent();
let resp = agent.register("bot-1", "TradingBot", &["inference", "trading"]).await?;
println!("Agent: {}", resp.agent_id);

let msg = agent.send_message("bot-1", "Analyze market conditions").await?;
println!("Response: {}", msg.payload);
// TypeScript
const agent = client.agent;
const resp = await agent.register("bot-1", "TradingBot", ["inference", "trading"]);
console.log("Agent:", resp.agent_id);

const msg = await agent.sendMessage("bot-1", "Analyze market conditions");
console.log("Response:", msg.payload);

New in v0.2: Discovery, Skills, and Autonomous Payments

// Rust
let agent = client.agent();

// Discover models by modality
let models = agent.discover_models(Some("text"), Some(true), None).await?;

// Discover agents with a specific capability
let agents = agent.discover_agents(Some("inference")).await?;

// Spawn an agent with a skill from the skills registry
let skilled = agent.spawn_agent_with_skill(
    "parent-agent-id",
    "SolanaTrader",
    "solana-defi",
    Some(vec!["swap".to_string(), "stake".to_string()]),
).await?;

// Fund an agent's wallet
agent.fund_agent("bot-1", "0xmywallet...", 10.0).await?;

// Token swap via agent
agent.swap_token("bot-1", "TNZO", "USDC", "100", Some("ethereum")).await?;

// End-to-end: agent pays for inference automatically
let result = agent.agent_pay_for_inference(
    "bot-1",
    "gemma4-9b",
    "Summarize today's market trends",
    Some(500),
).await?;
// TypeScript
const agent = client.agent;

// Discover models (filter by modality, serving status, or search query)
const models = await agent.discoverModels({
  modality: "text",
  servingOnly: true,
});

// Discover agents with a specific capability
const agents = await agent.discoverAgents("inference");

// Spawn an agent with a skill attached
const skilled = await agent.spawnAgentWithSkill(
  "parent-agent-id",
  "SolanaTrader",
  "solana-defi",
  ["swap", "stake"]
);

// Fund an agent's wallet
await agent.fundAgent("bot-1", "0xmywallet...", 10.0);

// Token swap via agent
await agent.swapToken("bot-1", "TNZO", "USDC", "100", "ethereum");

// End-to-end: agent pays for inference automatically
const result = await agent.agentPayForInference(
  "bot-1",
  "gemma4-9b",
  "Summarize today's market trends",
  500
);

SettlementClient

Payment settlement, escrow, and micropayment channels. Accessed via client.settlement() (Rust) or client.settlement (TypeScript).

RustTypeScript
settle(request)settle(request)
get_settlement(receipt_id)getSettlement(receiptId)
create_escrow(payee, amt, asset, cond)createEscrow(payee, amt, asset, cond)
release_escrow(id, proof)releaseEscrow(id, proof?)
open_payment_channel(payee, deposit)openPaymentChannel(payee, deposit)
close_payment_channel(id) v0.2closePaymentChannel(id) v0.2

New in v0.2: Close Payment Channel

// Rust
let settlement = client.settlement();
let channel_id = settlement.open_payment_channel("0xpayee...", 10000000).await?;

// ... after streaming payments ...

let result = settlement.close_payment_channel(&channel_id).await?;
println!("Channel closed: {:?}", result);
// TypeScript
const settlement = client.settlement;
const channelId = await settlement.openPaymentChannel("0xpayee...", 10000000n);

// ... after streaming payments ...

const result = await settlement.closePaymentChannel(channelId);
console.log("Channel closed:", result);

PaymentClient

HTTP 402-based payment protocols (MPP and x402), card payments, and session management. Accessed via client.payment() (Rust) or client.payment (TypeScript).

RustTypeScript
create_challenge(resource, amt, asset, proto)createChallenge(resource, amt, asset?, proto?)
pay_mpp(url, payer_did?)payMpp(url, payerDid?)
pay_x402(url, payer_did?)payX402(url, payerDid?)
list_sessions()listSessions(includeInactive?)
get_receipt(receipt_id)getReceipt(receiptId)
gateway_info()gatewayInfo()
pay_visa_tap(credential) v0.2payVisaTap(credential) v0.2
pay_mastercard(credential) v0.2payMastercard(credential) v0.2

New in v0.2: Card Payment Protocols

// Rust
let payment = client.payment();

// Visa TAP payment
let visa_result = payment.pay_visa_tap(serde_json::json!({
    "tap_token": "vtap_abc123...",
    "amount": 1000,
    "currency": "USD",
})).await?;

// Mastercard Agent Pay
let mc_result = payment.pay_mastercard(serde_json::json!({
    "agent_token": "mc_agent_xyz...",
    "amount": 500,
    "currency": "USD",
})).await?;
// TypeScript
const payment = client.payment;

// Visa TAP payment
const visaResult = await payment.payVisaTap({
  tap_token: "vtap_abc123...",
  amount: 1000,
  currency: "USD",
});

// Mastercard Agent Pay
const mcResult = await payment.payMastercard({
  agent_token: "mc_agent_xyz...",
  amount: 500,
  currency: "USD",
});

ProviderClient

Network participation, model serving, hardware management, and endpoint registration. Accessed via client.provider() (Rust) or client.provider (TypeScript).

RustTypeScript
participate(password)participate(password)
register(models, stake)register(models, stake?)
serve_model(id)serveModel(id)
stop_model(id)stopModel(id)
download_model(id)downloadModel(id)
delete_model(id)deleteModel(id)
chat(model_id, messages)chat(modelId, messages)
stats()stats()
get_hardware_profile()getHardwareProfile()
list_model_endpoints()listModelEndpoints()
list_providers()listProviders(type?)
join_as_micro_node(name?, type?) v0.2joinAsMicroNode(name?, type?) v0.2
set_provider_schedule(schedule) v0.2setProviderSchedule(schedule) v0.2
get_provider_schedule() v0.2getProviderSchedule() v0.2
set_provider_pricing(pricing) v0.2setProviderPricing(pricing) v0.2
get_provider_pricing() v0.2getProviderPricing() v0.2
get_model_endpoint(instance_id) v0.2getModelEndpoint(instanceId) v0.2
register_model_endpoint(model, api, ...) v0.2registerModelEndpoint(model, api, ...) v0.2
unregister_model_endpoint(id) v0.2unregisterModelEndpoint(id) v0.2
add_resource(id, type?) v0.2addResource(id, type?) v0.2
send_signed_transaction(from, to, amt, asset?) v0.2sendTransaction(from, to, amt, asset?) v0.2
submit_block(block) v0.2submitBlock(block) v0.2

New in v0.2: Micro Nodes, Scheduling, and Endpoint Management

// Rust
let provider = client.provider();

// Join as a lightweight micro node (no full P2P binary required)
let result = provider.join_as_micro_node(
    Some("MyMicroNode"),
    Some("inference"),
).await?;

// Set availability schedule
provider.set_provider_schedule(serde_json::json!({
    "timezone": "UTC",
    "windows": [
        {"day": "weekday", "start": "09:00", "end": "17:00"},
    ],
})).await?;

// Set pricing
provider.set_provider_pricing(serde_json::json!({
    "input_per_token": 0.00001,
    "output_per_token": 0.00003,
    "currency": "TNZO",
})).await?;

// Register a remote model endpoint
provider.register_model_endpoint(
    "gemma4-9b",
    "https://my-gpu.example.com/v1",
    Some("https://my-gpu.example.com/mcp"),
    Some("Gemma 4 9B"),
    Some("MyProvider"),
).await?;

// Get a specific endpoint
let ep = provider.get_model_endpoint("instance-123").await?;

// Unregister an endpoint
provider.unregister_model_endpoint("instance-123").await?;

// Send a signed transaction
let tx = provider.send_signed_transaction(
    "0xsender...", "0xrecipient...", "1000000000", Some("TNZO"),
).await?;
// TypeScript
const provider = client.provider;

// Join as a lightweight micro node
const result = await provider.joinAsMicroNode("MyMicroNode", "inference");

// Set availability schedule
await provider.setProviderSchedule({
  timezone: "UTC",
  windows: [
    { day: "weekday", start: "09:00", end: "17:00" },
  ],
});

// Set pricing
await provider.setProviderPricing({
  input_per_token: 0.00001,
  output_per_token: 0.00003,
  currency: "TNZO",
});

// Register a remote model endpoint
await provider.registerModelEndpoint(
  "gemma4-9b",
  "https://my-gpu.example.com/v1",
  "https://my-gpu.example.com/mcp",
  "Gemma 4 9B",
  "MyProvider"
);

// Get a specific endpoint
const ep = await provider.getModelEndpoint("instance-123");

// Unregister an endpoint
await provider.unregisterModelEndpoint("instance-123");

// Send a signed transaction
const tx = await provider.sendTransaction(
  "0xsender...", "0xrecipient...", "1000000000", "TNZO"
);

TaskClient

Task marketplace operations including posting, listing, quoting, assigning, and completing tasks. Accessed via client.task() (both Rust and TypeScript).

RustTypeScript
post_task(title, desc, type, price, input)postTask(params)
list_tasks(status?, type?, ...)listTasks(filter?)
get_task(id)getTask(id)
cancel_task(id)cancelTask(id)
submit_quote(id, price, model, est, conf, notes?)submitQuote(id, price, model, est)
assign_task(task_id, agent_id)assignTask(taskId, agentId)
complete_task(id, result)completeTask(id, result)
update_task(id, title?, desc?, status?, output?) v0.2updateTask(id, opts?) v0.2

New in v0.2: Update Task

// Rust
let task = client.task();

// Update task title and status
let updated = task.update_task(
    "task-123",
    Some("Updated Title"),
    None,
    Some("in_progress"),
    None,
).await?;

// Update task output
let updated = task.update_task(
    "task-123",
    None,
    None,
    None,
    Some("Partial result: analysis complete"),
).await?;
// TypeScript
const task = client.task();

// Update task title and status
const updated = await task.updateTask("task-123", {
  title: "Updated Title",
  status: "in_progress",
});

// Update task output
const updated2 = await task.updateTask("task-123", {
  output: "Partial result: analysis complete",
});

TokenClient

Token creation, querying, cross-VM transfers, and balance lookups across all VMs. Accessed via client.token() (Rust) or client.token (TypeScript).

RustTypeScript
create_token(name, symbol, decimals, supply, creator)createToken(params)
get_token_info(query)getTokenInfo(query)
list_tokens(vm_type?)listTokens(vmType?)
get_token_balance(address)getTokenBalance(address)
cross_vm_transfer(from_vm, to_vm, token, amt, sender, recipient)crossVmTransfer(params)
wrap_tnzo(address, amount, vm_type)wrapTnzo(address, amount, vmType)

Token Examples

// Rust
let token = client.token();

// Create a new ERC-20 token
let result = token.create_token(
    "My Token", "MTK", 18,
    "1000000000000000000000000",
    "0xcreator...",
).await?;
println!("Token created: {} at {}", result.symbol, result.evm_address);

// Get token info by symbol
let info = token.get_token_info("MTK").await?;
println!("Token: {} decimals={}", info.name, info.decimals);

// List all EVM tokens
let tokens = token.list_tokens(Some("EVM")).await?;
println!("Found {} EVM tokens", tokens.len());

// Get TNZO balance across all VMs
let balance = token.get_token_balance("0xaddress...").await?;
println!("EVM: {}, SVM: {}, DAML: {}", balance.evm, balance.svm, balance.daml);

// Cross-VM transfer: move TNZO from EVM to SVM
let transfer = token.cross_vm_transfer(
    "EVM", "SVM", "TNZO",
    "5000000000000000000",
    "0xevm-sender...",
    "solana-recipient-pubkey...",
).await?;
println!("Transfer {}: {}", transfer.transfer_id, transfer.status);
// TypeScript
const token = client.token;

// Create a new ERC-20 token
const result = await token.createToken({
  name: "My Token",
  symbol: "MTK",
  decimals: 18,
  initial_supply: "1000000000000000000000000",
  creator: "0xcreator...",
});
console.log("Token created:", result.symbol, "at", result.evm_address);

// Get token info by symbol
const info = await token.getTokenInfo("MTK");
console.log("Token:", info.name, "decimals:", info.decimals);

// List all EVM tokens
const tokens = await token.listTokens("EVM");
console.log("Found", tokens.length, "EVM tokens");

// Get TNZO balance across all VMs
const balance = await token.getTokenBalance("0xaddress...");
console.log("EVM:", balance.evm, "SVM:", balance.svm, "DAML:", balance.daml);

// Cross-VM transfer: move TNZO from EVM to SVM
const transfer = await token.crossVmTransfer({
  from_vm: "EVM",
  to_vm: "SVM",
  token: "TNZO",
  amount: "5000000000000000000",
  sender: "0xevm-sender...",
  recipient: "solana-recipient-pubkey...",
});
console.log("Transfer:", transfer.transfer_id, transfer.status);

ContractClient

Smart contract deployment across EVM, SVM, and DAML runtimes via the MultiVmRuntime. Accessed via client.contract() (Rust) or client.contract (TypeScript).

RustTypeScript
deploy(bytecode, vm_type, sender, args?)deploy(params)

Contract Examples

// Rust
let contract = client.contract();

// Deploy EVM bytecode
let result = contract.deploy(
    "0x608060405234801561001057600080fd5b50...",
    "EVM",
    "0xdeployer...",
    None,
).await?;
println!("Contract deployed at: {}", result.contract_address);

// Deploy SVM program
let svm_result = contract.deploy(
    "0x7f454c46...",
    "SVM",
    "deployer-pubkey...",
    None,
).await?;
println!("Program deployed: {}", svm_result.contract_address);
// TypeScript
const contract = client.contract;

// Deploy EVM bytecode
const result = await contract.deploy({
  bytecode: "0x608060405234801561001057600080fd5b50...",
  vm_type: "EVM",
  sender: "0xdeployer...",
});
console.log("Contract deployed at:", result.contract_address);

// Deploy SVM program
const svmResult = await contract.deploy({
  bytecode: "0x7f454c46...",
  vm_type: "SVM",
  sender: "deployer-pubkey...",
});
console.log("Program deployed:", svmResult.contract_address);

AP2Client

Agent Payment Protocol v2 (AP2) session management for autonomous agent payments. Accessed via client.ap2() (Rust) or client.ap2 (TypeScript).

RustTypeScript
create_session(agent_id, policy)createSession(agentId, policy)
authorize_payment(session_id, amount)authorizePayment(sessionId, amount)
execute_payment(auth_id)executePayment(authId)
cancel_session(session_id)cancelSession(sessionId)
get_session(session_id)getSession(sessionId)
list_agent_sessions(agent_id)listAgentSessions(agentId)

AgentPaymentsClient

Agent spending policies and autonomous payment execution within configurable bounds. Accessed via client.agent_payments() (Rust) or client.agentPayments (TypeScript).

RustTypeScript
set_spending_policy(agent_id, policy)setSpendingPolicy(agentId, policy)
get_spending_policy(agent_id)getSpendingPolicy(agentId)
pay_for_service(agent_id, service, amt)payForService(agentId, service, amt)
get_daily_spend(agent_id)getDailySpend(agentId)
list_agent_transactions(agent_id, limit?)listAgentTransactions(agentId, limit?)

NanopaymentClient

Off-chain nanopayment channels for per-token billing with batched on-chain settlement. Accessed via client.nanopayment() (Rust) or client.nanopayment (TypeScript).

RustTypeScript
open_channel(payee, deposit)openChannel(payee, deposit)
send_nanopayment(channel_id, amount)sendNanopayment(channelId, amount)
flush_batch(channel_id)flushBatch(channelId)
close_channel(channel_id)closeChannel(channelId)
get_channel(channel_id)getChannel(channelId)
list_channels(filter?)listChannels(filter?)

BridgeClient

Cross-chain token bridging via LayerZero, Chainlink CCIP, deBridge, and Canton adapters. Accessed via client.bridge() (Rust) or client.bridge (TypeScript).

RustTypeScript
bridge_tokens(from, to, amount, adapter?)bridgeTokens(from, to, amount, adapter?)
get_routes(source_chain, dest_chain)getRoutes(sourceChain, destChain)
list_adapters()listAdapters()
get_transfer_status(transfer_id)getTransferStatus(transferId)
estimate_fee(source, dest, amount)estimateFee(source, dest, amount)

ERC7802Client

ERC-7802 crosschain mint/burn interface for native cross-chain token transfers. Accessed via client.erc7802() (Rust) or client.erc7802 (TypeScript).

RustTypeScript
crosschain_mint(to, amount, source_chain)crosschainMint(to, amount, sourceChain)
crosschain_burn(from, amount, dest_chain)crosschainBurn(from, amount, destChain)
get_cross_chain_supply()getCrossChainSupply()

CircuitBreakerClient

Provider health monitoring and circuit breaker management for inference routing. Accessed via client.circuit_breaker() (Rust) or client.circuitBreaker (TypeScript).

RustTypeScript
get_provider_health(provider_id)getProviderHealth(providerId)
list_circuit_breakers()listCircuitBreakers()
configure_breaker(provider_id, config)configureBreaker(providerId, config)
reset_breaker(provider_id)resetBreaker(providerId)

JSON-RPC Direct Access

You can also interact with Tenzro Network directly via JSON-RPC without the SDK. This is useful for languages without a dedicated SDK.

Endpoint URL

Testnet RPC: https://rpc.tenzro.network
Testnet API: https://api.tenzro.network

Basic Request (curl)

curl -X POST https://rpc.tenzro.network \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc": "2.0",
    "method": "eth_blockNumber",
    "params": [],
    "id": 1
  }'

Basic Request (JavaScript/fetch)

async function callRpc(method, params = []) {
  const response = await fetch('https://rpc.tenzro.network', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({
      jsonrpc: '2.0',
      method,
      params,
      id: 1,
    }),
  });

  const data = await response.json();
  return data.result;
}

// Get block number
const blockNumber = await callRpc('eth_blockNumber');
console.log('Block number:', blockNumber);

// Get balance
const balance = await callRpc('eth_getBalance', [
  '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb5',
  'latest'
]);
console.log('Balance:', balance);

Available RPC Methods

Method
eth_blockNumber
eth_getBalance(address, block)
eth_sendRawTransaction(data)
eth_getTransactionReceipt(hash)
tenzro_nodeInfo
tenzro_peerCount
tenzro_registerIdentity(params)
tenzro_resolveIdentity(did)
tenzro_listModels(filters)
tenzro_requestInference(params)
tenzro_chat(model, messages)
tenzro_stake(amount, type)
tenzro_unstake(amount)
tenzro_getVotingPower(address)
tenzro_registerAgent(name, caps)
tenzro_sendAgentMessage(agentId, msg)
tenzro_settle(request)
tenzro_createEscrow(payer, payee, amount)
tenzro_openPaymentChannel(party, deposit)
tenzro_createPaymentChallenge(resource, ...)
tenzro_payMpp(url, payer_did)
tenzro_payX402(url, payer_did)
tenzro_participate(password)
tenzro_registerProvider(models, stake)
tenzro_postTask(params)
tenzro_listCantonDomains()
tenzro_submitDamlCommand(cmd)
tenzro_getHardwareProfile()

Complete Workflow Example

End-to-End: Register, Discover, Infer, and Settle (TypeScript)

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

async function workflow() {
  const client = TenzroClient.testnet();

  // 1. Register identity
  const identity = await client.identity.registerHuman("Alice");
  console.log("Registered DID:", identity.did);

  // 2. Discover models
  const models = await client.agent.discoverModels({ modality: "text", servingOnly: true });
  console.log("Available models:", models);

  // 3. Request inference via agent
  const agent = await client.agent.register("alice-bot", "AliceBot", ["inference"]);
  const result = await client.agent.agentPayForInference(
    agent.agent_id,
    "gemma4-9b",
    "Explain quantum computing",
    200
  );
  console.log("Inference result:", result);

  // 4. Check transaction history
  const history = await client.getTransactionHistory(identity.did, 10);
  console.log("Recent transactions:", history);
}

workflow().catch(console.error);

Error Handling

// Rust — errors are typed via SdkError enum
use tenzro_sdk::error::SdkError;

match client.get_balance(address).await {
    Ok(balance) => println!("Balance: {} wei", balance),
    Err(SdkError::RpcError(msg)) => eprintln!("RPC error: {}", msg),
    Err(SdkError::ConnectionError(msg)) => eprintln!("Connection failed: {}", msg),
    Err(e) => eprintln!("Unexpected error: {}", e),
}
// TypeScript — standard try/catch
try {
  const balance = await client.getBalance("0xabc...");
  console.log("Balance:", balance);
} catch (error) {
  console.error("Failed:", error.message);
}