Docs. The format, the checks, and the code that produces both.
Arcveil gives an agent a mandate instead of keys. Every settled action leaves a receipt that proves the action stayed inside that mandate — without revealing the mandate, the balances, or the reasoning. These pages describe the receipt, the five checks that decide whether to believe it, and the TypeScript SDK that issues and verifies them.
Start here
01Check one by handPaste a receipt into the verifier and watch five checks run in your tab. Three of them read Arc mainnet directly; no backend of ours is in the path.Open the verifier →02Read the formatEvery field of v1, one hash, and a chain of budget commitments. Knowing what a receipt refuses to carry is most of understanding it.Receipt format v1 →03Verify in codeThe SDK runs the same five checks from Node or a browser, against the same registries the site reads.SDK reference →
Verify a receipt in code
The same five checks the site runs, in about ten lines. Two are local crypto; three read Arc mainnet over plain JSON-RPC, which allows cross-origin requests — so this works unchanged in a browser.
// Five checks against Arc mainnet, from Node or a browser.import { arc, ARC_REGISTRIES, createRpcChainReader, parseReceiptInput, verifyReceipts } from "@arcveildev/sdk"; const chain = createRpcChainReader({ endpoint: arc.rpcUrls.default.http[0], chainId: arc.id, ...ARC_REGISTRIES[arc.id],}); const parsed = parseReceiptInput(json);if (!parsed.ok) throw new Error(parsed.errors.join("\n")); const report = await verifyReceipts(parsed.receipts, { chain });report.status; // "pass" | "fail" | "unknown"
What is live
Everything in this table exists and can be pointed at. Anything not in it is either in the table below or not built.
| Receipt format | v1 — the schema on this site is the one the SDK parses |
|---|---|
| Verifier | Five checks, client-side, reading Arc mainnet over plain JSON-RPC |
| Registries | MandateRegistry and AnchorRegistry, deployed to Arc mainnet (chain 5042) |
| Account | ERC-4337 account with 2-of-3 signing, executing only while its mandate is live |
| SDK | @arcveildev/sdk on npm — issuing, verifying, mandates and account intents, published from CI with provenance |
What is not
Named here rather than left out, because a developer who finds this list late has been misled by everything before it.
| Enclave | Relative intents are resolved by hand today; the enclave that would do it is designed, not built |
|---|---|
| Spend commitments | The budget chain binds order and completeness. Binding spend needs numbers only the enclave would hold |
| Zero-knowledge proofs | Receipts carry an enclave attestation. The zk proof replaces it without changing the format |
| Desktop app | The 2-of-3 account is signed with cast and a keystore today. The app that would hold a shard is next |
Vocabulary
| Mandate | What an agent may touch, how much, which hours, when it expires. Written once and held by you; only its hash reaches the chain. |
|---|---|
| Veil | The agent works in relative terms — reduce exposure to A by 30% — and never receives an absolute balance. |
| Receipt | What one settled action leaves behind: proof the mandate was respected, carrying no amounts. |
| Counter chain | Commitments to cumulative budget use, each binding the last. A dropped receipt leaves a gap that verification catches. |
| Escape hatch | Your device shard and your passkey form a quorum without us. A mandate that expires stops the agent with nobody reachable. |