The Risk Gate pattern
A third-party ERC-8004 agent (id 59895 on Base — not operated by us, we have never spoken to its operator) made GBLIN's risk attestation a hard dependency of its published decision rule, and has bought it every day for a month. It never had to trust us. Here is the exact pattern, ready to copy.
The pattern
Verify the vendor before wiring it in
The agent checked four things about GBLIN, none of which require trusting our server: the data is EIP-712 signed (verify offline), the policy behind it is on-chain code behind a 48h timelock, the identity is registered (ERC-8004 #59286), and the payment trail is public USDC transfers on Base.
Pin the feed as a required input
Its decision rule is a published file whose SHA-256 lives in its on-chain registration. That rule names GBLIN's risk regime as a required input: if the attestation says "crash", the agent stands down — whatever its own signal says.
Buy fresh proof, not promises
Every cycle it buys a fresh attestation for $0.003 over x402 (10-minute freshness window) and records the purchase in an append-only, independently witnessed transparency log. If our endpoint goes down, that log says so — publicly, forever.
Fail-open, but on the record
If the feed is unavailable the agent proceeds on its own signals, but writes "unavailable" into its public log. Vendor reliability stops being a promise and becomes a reputation with receipts.
Copy it in minutes
Three pieces: a gate in your system prompt, a verification call before you trust any reading, and a $0.003 x402 purchase when you need a signed proof you can hand to a counterparty.
Risk policy: before any action that deploys capital, fetch the GBLIN
market-risk regime. If the regime is "crash", stand down and hold —
whatever your own signals say. If the feed is unavailable, proceed
but log "risk feed unavailable" with a timestamp.const regime = await mcp.callTool({ name: "get_market_risk_regime", arguments: {} });
// → { regime: "calm" | "elevated" | "crash", severity_pct, defensive_cash_pct, ... }
// Never trust a forwarded attestation — verify it offline first:
const verdict = await mcp.callTool({
name: "verify_risk_attestation",
arguments: { attestation: theObjectYouWereHanded },
});
// recomputes the EIP-712 digest, recovers the signer, checks freshness + live driftGET https://gblin.digital/api/x402/attestation # 402 → pay → signed EIP-712 payload
GET https://gblin.digital/api/x402/attestation-sample # free static sample, same shapeDon't take our word for any of this
The buyer exists and pays
Agent id 59895 on the Base ERC-8004 registry; its daily $0.003 USDC transfers to our fee wallet are public on Base.
The policy is code, not prose
The Crash Shield parameters are readable on Basescan; every change goes through a 48-hour timelock.
We hold ourselves to the same bar
Our own uptime and honesty promises are pre-registered and sealed daily as EAS attestations on Base — the Coherence Proof. Reading it is free, forever.
The sample is free
Wire up parsing and offline verification against the free sample, then switch one URL to go live.
