Bound
SDK

Reading certificates

Read-only calls on BoundClient — no keypair, no signature, no fee.

Reads are simulated against the chain. They cost nothing, change nothing, and need no credentials, which is what makes "check before you transact" realistic to actually do on every request.

verifyCertificate

import { bound, toCertView } from "@bound/sdk";

const raw = await bound.verifyCertificate(agentAddress);
const cert = toCertView(agentAddress, raw);

verifyCertificate returns the raw VerifyResult with bigint amounts. toCertView projects it into a JSON-safe shape for HTTP and UI boundaries:

FieldMeaning
validtrue only when status is Verified and the certificate has not expired
statusPending, Verified or Invalid
boundUsdThe maximum loss the certificate claims to cover
reserveUsdThe reserve the certificate claims is locked
auditorStakeUsdThe auditor's stake at the time of the read
auditorWho vouched
expiresAtUnix seconds

Claimed vs actual

reserveUsd is what the certificate claims. The vault's real balance is reserveBalance(). A certificate where the claim exceeds the balance is exactly what a challenge proves — comparing the two yourself is one extra read.

The other reads

MethodReturns
certIdForAgent(agent)The certificate id for an agent, if one exists
usdcBalance(address)USDC balance of any account
reserveBalance()The vault's actual locked balance — the on-chain truth
auditorStake(auditor)An auditor's current live stake
auditorRegistered(auditor)Whether their stake meets the minimum
auditorMinStake()The registration threshold

Checking the claim against reality

audit.ts
import { bound, toCertView } from "@bound/sdk";

const cert = toCertView(agent, await bound.verifyCertificate(agent));
const actual = await bound.reserveBalance();

const shortfall = BigInt(Math.round(Number(cert.reserveUsd) * 1e7)) - actual;
if (shortfall > 0n) {
  // The certificate overstates its reserve. This is provable on-chain,
  // permissionlessly, and pays 20% of the auditor's stake to whoever proves it.
  // See /docs/sdk/writing#challenging-a-certificate
}

Beyond BoundClient

The raw generated contract clients are re-exported from @bound/sdk for calls the client does not wrap. Reach for them when you need a contract method directly; BoundClient is a convenience layer, not a wall.

On this page