New here? Start here: 1 set up roles → 2 set caps → 3 guardian → 4 sweep if something's wrong

Attack Lab

Five things a misbehaving AI agent might try, and the on-chain rule that stops each one. Every result here comes from a real testnet transaction, re-checked against the chain in your browser.

Proposed interface. Payments are signed only by the agent payment runner (server-side, restricted key); this page never signs and never holds the agent key. Scenario results load from the runner's evidence feed (docs/EVIDENCE_FORMAT.md v2).
Reading evidence feed from chain...
Rules in force right now
Live from the guard, so you can check each verdict against them.
...
A Legitimate payment
Agent requests 3 USDC to an allowlisted merchant, inside every limit.
contract check
all checks pass → budget reserved → ft_transfer receipt to merchant succeeds (settled needs that receipt)
expected: payment settles
Awaiting verified testnet evidence.
B Overspending attack
Agent requests 15 USDC; the per-payment cap is 5 USDC.
contract check
units <= policy.max_per_payment
expected: rejected with max_per_payment: Blocked: amount is above the per-payment cap.
Awaiting verified testnet evidence.
C Unauthorized recipient
Agent tries to pay an account that isn't on the allowlist.
contract check
policy.recipients.includes(recipient_id)
expected: rejected with unapproved_recipient: Blocked: recipient is not on the allowlist.
Awaiting verified testnet evidence.
D Daily spending limit
Agent keeps paying until today's budget is used up; the next payment must fail.
contract check
units <= daily_limit - spent_today
expected: rejected with daily_limit: Blocked: this payment would exceed today's spending limit.
Awaiting verified testnet evidence.
E Replay attempt
Agent reuses a request id that was already paid.
contract check
request:<id> not yet stored
expected: rejected with duplicate_request: Blocked: this request id was already used (replay protection).
Awaiting verified testnet evidence.