Solana Agent Registry (and ERC-8004) tell you who an agent is and what people said about it. Telaro makes the agent put USDC on the line and pays victims automatically. Different layer of the stack, and the one that actually moves capital.
Both layers must exist. Identity without bond → soft trust (Sybil-cheap). Bond without identity → identity collisions, no portability across DApps. We use the registry layer as our identity primitive (mpl-core soulbound AgentID NFT), and add the slashing escrow it explicitly leaves undefined.
Identity / signal vs economic / slashing. Both layers must exist; neither is enough on its own.
| Capability | L2 · Registry | L3 · Telaro |
|---|---|---|
| Portable agent identity (NFT) | via L2 | |
| Reputation feedback log | orthogonal | |
| Validation hooks (TEE / zkML) | - | |
| USDC bond escrow on-chain | - | |
| Automatic slashing on dispute | - | |
| Atomic CPI gate (view_bond) | - | |
| 7-day dispute window + auto-payout | - | |
| Bond float yield (50/50 builder/treasury) | - |
ERC-8004 deliberately leaves the economic-validation slot undefined. That’s our slot. Closest business-model analog: Pyth (oracle middleware paid by DApps). Not a registry, not a wallet, not a framework.
The two layers compose cleanly. An agent registers in the identity layer (gets a portable NFT), then posts a bond in the economic layer (becomes capital-at-risk). DApps query both: SAR.lookup(agent) for who/reputation, view_bond(min_bond, min_score) for skin-in-the-game.
// In your DApp's Anchor program - gate by BOTH identity and bond.
use solana_agent_registry::cpi as sar;
use bonded_agents::cpi::{view_bond, accounts::ViewBond};
pub fn delegate_capital(ctx: Context<Delegate>, amount: u64) -> Result<()> {
// 1. Verify identity / look up registered metadata (registry layer).
let agent_meta = sar::lookup(ctx.accounts.sar_ctx())?;
require!(agent_meta.framework == "sendai", InvalidFramework);
// 2. Enforce capital-at-risk policy (economic layer).
view_bond(
CpiContext::new(
ctx.accounts.bonded_agents_program.to_account_info(),
ViewBond { agent: ctx.accounts.agent.to_account_info() },
),
100_000_000, // min_bond (100 USDC atomic)
700, // min_score
)?;
// 3. Both layers cleared → delegate.
delegate_internal(ctx, amount)
}Two CPI calls, two layers, both atomic. If either fails, the parent tx reverts and capital never moves. Identity alone is Sybil-cheap; bond alone is identity-collision-cheap. You want both.
Solana's program model lets `view_bond` be a single read + revert in ~0.1ms. EVM equivalent (call → require) costs gas every time, prices DApps out of fine-grained gating.
Kamino + MarginFi's USDC routes give us a clean conservative yield without fragmented LSTs / wrapped USDC variants.
Sendai / Eliza / GOAT / BUZZ ship Solana primitives. Our adapters wire bond + slashing into the runtime they're already using.
Cross-chain expansion (EVM port via ERC-8004 interop) is a v3 question. For v0/v1, Solana-native is the right choice. Atomic CPI is the headline differentiator and EVM can’t cost-effectively replicate it.
SettlementLayer ABC has eight methods; six map directly onto Telaro instructions already live on devnet. Full mapping. The public design thread is open at t54-labs/AgenticRiskStandard#2.