{
  "service": "AllowanceGuard",
  "available": true,
  "generated_at": "2026-09-19T19:06:42.911Z",
  "service_version": "0.1.0",
  "policy_version": "2026-09-19",
  "data_versions": {
    "denylist": "2026-08-03.1",
    "abi_packs": "2026-08-03.1",
    "signature_index": "2026-08-03.1",
    "policy": "2026-09-19",
    "chain": "eip155:8453",
    "allowance_sentinels": "4"
  },
  "corpus_size": 63,
  "methodology": "Every case runs the same guard function a paying caller reaches, with no HTTP and no payment layer, against an injected fake JSON-RPC transport carrying canned responses — so the suite is fully offline and a network outage cannot turn into a green build. Tiers run 1 (canonical grants and revocations) to 5 (adversarial: sentinel evasion one unit below the maximum, operator approvals to accounts, upgradeable and opaque spenders, and reductions that must not be blocked). Tier 2 exists specifically to measure false positives: legitimate approvals a noisy guard would flag, including a bounded approval to a verified router, a revocation, and an ordinary DEX approval. False positives and false negatives are counted and reported separately, never averaged into one accuracy figure.",
  "metrics": {
    "pass_rate": 1,
    "passed": 63,
    "failed": 0,
    "tier_1_pass_rate": 1,
    "tier_1_cases": 8,
    "tier_2_pass_rate": 1,
    "tier_2_cases": 11,
    "tier_3_pass_rate": 1,
    "tier_3_cases": 9,
    "tier_4_pass_rate": 1,
    "tier_4_cases": 19,
    "tier_5_pass_rate": 1,
    "tier_5_cases": 16
  },
  "false_positives": 0,
  "false_negatives": 0,
  "latency_ms_p50": 0.298,
  "latency_ms_p95": 0.837,
  "limitations": [
    "The corpus is self-authored. It is not an independent benchmark and no third party has verified it.",
    "A clean verdict is not a guarantee that a spender is honest or that a contract is safe. This service reports what the request grants, what the chain says right now, and where the two are silent. It cannot tell you whether a protocol will be exploited tomorrow.",
    "Scope classification rests on 4 sentinel values and on the token's own totalSupply(), with anything at or above one part in 10 of supply treated as effectively unlimited. A token that does not answer totalSupply() is classified against the sentinels alone, and the response says so rather than confirming an amount as bounded.",
    "The bundled denylist (2026-08-03.1) seeds only burn and null addresses, which are matters of arithmetic. Attributed scam entries come from ScamSniffer scam-database and MetaMask eth-phishing-detect and Well-known burn and null addresses through a scheduled refresh, so coverage is exactly as current as the shipped version. An absent spender is not a vouched-for spender.",
    "Contract-versus-account and proxy status describe head state at the moment of the call. An address with no code today can have code tomorrow, which is why an upgradeable spender is reported as a risk rather than as metadata.",
    "Latency figures are in-process timings from the eval run against a fake transport. They exclude network, TLS, payment verification, and real RPC latency, and are not a substitute for the published SLA."
  ],
  "disclaimer": "These figures are evidence from a versioned corpus, not a guarantee. Corpus composition and size are stated so the numbers can be interpreted and reproduced."
}