The capital-delegation trust gate for AI agents on Solana. One deterministic policy, evaluated through three surfaces - an on-chain CPI, an off-chain SDK, and a REST endpoint - so a program, a server, and a UI all get the identical verdict.
program 3DUrvVWEziYLtEbiDtfxqh1ioXRFX6DNvV4iTsGed2rs
The gate answers one question deterministically: does this AI agent clear my policy for being delegated capital? An agent posts a slashable USDC bond; a capital provider - a DApp, an x402 service, another agent - gates delegation on that bond plus the agent’s score. If the agent later causes a loss, the bond is the recourse.
A gate policy is two values.
| Field | Type | Meaning |
|---|---|---|
minBond | u64 | Minimum bond, in atomic USDC (6 decimals) |
minScore | u16 | Minimum score, 0-1000 (0 disables the check) |
The protocol floor is MIN_BOND_USDC = 1 USDC; an agent below it is frozen.
Given an agent and a policy, the gate runs these checks in order and fails on the first that does not hold. Every check is a pure function of public on-chain state - same inputs, same verdict.
FROZEN - The agent must not be frozen.BOND_BELOW_MIN - current_bond ≥ minBond.SCORE_BELOW_MIN - current_score ≥ minScore.OVER_LEVERAGED - value_handled_30d ≤ current_bond × 5. The leverage cap bounds how much value one bond may stand behind. Enforced on-chain by view_bond.For trust-gating inside another Solana program. One instruction, one account, reverts the parent transaction atomically on failure (~0.1 ms overhead).
// Reverts if the agent is frozen, fails min_bond / min_score,
// or exceeds the leverage cap.
telaro::cpi::view_bond(ctx, min_bond: u64, min_score: u16) -> Result<()>| Instruction | Purpose |
|---|---|
view_bond | the core gate - bond · score · frozen · leverage |
view_bond_capability | same, plus a declared-capability check |
view_score | a cheap score-only check against the ScoreFeed PDA |
Account: the agent’s Agent PDA.
For servers and middleware. The @telaro/gate package:
import { gate, TelaroGateError } from "@telaro/gate";
await gate(agentPubkey, { minBond: 1_000_000_000n, minScore: 700 });
// → resolves with the agent's trust profile on pass
// → throws TelaroGateError on fail (fail-closed by default)The SDK gate evaluates frozen · bond · score (reading the same on-chain state as Surface 3). The leverage cap is a protocol invariant enforced at the CPI - for a check that includes it, use Surface 1.
For dashboards, indexers, and ranking. GET /agent/{pubkey} returns the agent trust object.
| Field | Meaning |
|---|---|
score | 0-1000 |
bond_atomic / bond_human | current bond |
frozen | bond below floor / suspended |
value_handled_30d | rolling value handled - the leverage numerator |
open_claims | unresolved disputes against the agent |
success_rate | settled-action success ratio |
| Code | Surface | Meaning |
|---|---|---|
NOT_BONDED | SDK | the agent has no on-chain bond |
BOND_BELOW_MIN | all | bond below minBond |
SCORE_BELOW_MIN | all | score below minScore |
FROZEN | all | the agent is frozen |
OVER_LEVERAGED | CPI | value handled exceeds 5× bond |
LOOKUP_FAILED | SDK | the trust lookup was unreachable (fail-closed) |
The gate is the underwriting decision of the Agentic Risk Standard principal track. ARS lockCollateral maps onto view_bond; Telaro is the Solana implementation. See /docs/ars for the full mapping (six of the eight SettlementLayer methods).
| Layer | Standard | Telaro's role |
|---|---|---|
| Identity | ERC-8004 / Solana Agent Registry | consumes the agent's registry identity |
| Payment | x402 | the gate runs on the paying agent before settlement |
| Risk | ARS | the Solana implementation of the principal track |
This interface is stable. Instruction signatures, the policy shape, and the failure codes will not change incompatibly without a major version. The program id above is the canonical deployment.