MCP · T834 · Agentic Commerce
v1.0

EIP-3009 Agent Spend Gate

Decide one pre-sign EIP-3009 (ERC-3009, Draft) transferWithAuthorization or receiveWithAuthorization authorization against a spend policy you declare and an authorization ledger you paste. Thirteen ordered rules return exactly one decision, SPEND, DENY, OVER_LIMIT or INDETERMINATE, with every failing rule listed, per-window headroom, and outstanding signed exposure. The gate reads declared inputs only: no digest recomputation, no signature recovery, no chain reads, no network calls.

Scope and reliance: 🔒 All inputs are processed locally in your browser. No data is transmitted. Do not enter real personal data — use synthetic or anonymised inputs only. The gate reads only what you paste, and what you attest is exactly that: the clock (now_unix), that the pasted ledger is complete, that entries marked settled really settled, the on-chain authorization state, the token balance, and that the token implements ERC-3009 as drafted. SPEND means within the declared policy; it is not an authorization to move funds and is not proof that funds moved. ERC-3009 is a Draft; verify against the current text and your own review before relying on any output, since this page is not legal or compliance advice. Deterministic logic · zero PII · runs offline · CC BY 4.0.
Pre-Sign Gate Thirteen Ordered Rules Zero PII Client-Side
🔒 All inputs are processed locally in your browser. No data is transmitted. Do not enter real personal data — use synthetic or anonymised inputs only.
Authorization under decision (JSON, fields per ERC-3009)
variant (transfer or receive), from, to, value (uint256 decimal string in token base units), validAfter and validBefore (unix seconds), nonce (32-byte hex), optional authorization_intent_ref.
name, version, chain_id, verifying_contract. The nonce-replay rule needs chain_id and verifying_contract; without both it reports not evaluated and the decision cannot be SPEND.
Declared spend policy (JSON; every threshold is yours, there are no defaults)
agent_address, allowed_chain_ids, allowed_tokens, payee_allowlist, payee_denylist, per_tx_cap, window_caps, velocity, max_validity_seconds, max_future_start_seconds, duplicate_window_seconds, require_receive_for. An absent member leaves its rule not evaluated rather than guessed.
Authorization ledger (JSON array) and the caller clock
Per entry: from, token, chain_id, nonce, to, value, validBefore, signed_at, status (signed, settled or canceled), optional intent_ref. Settled entries count from signed_at inside a declared window; signed entries still unexpired count in every window regardless of age; canceled entries never count in sums but still match the nonce-replay check. At most 256 entries.
The gate has no clock of its own; the window, expiry and duplicate checks run on this value.
Method, related nodes and sources
Thirteen rules run in a fixed order; every failing rule is listed and the first failing rule is primary, with DENY ranked above OVER_LIMIT in the decision. Rules 1 to 9 are the DENY class (field formats, signer, domain, nonce, replay, window, payees, receive variant); rules 10 to 13 are the OVER_LIMIT class (per-transaction cap, rolling window caps, velocity, duplicate intent). A rule whose policy input is absent is reported as not evaluated, and SPEND additionally requires the per-transaction cap, at least one window cap, and the nonce-replay rule to have been evaluated.
Related nodes, checked against different inputs: art-700 lints the authorization payload itself and art-703 gates mandate authorizations; this page decides an EIP-3009 authorization plus a ledger against a spend policy and is not a successor to either.
Snapshot sources, cited by repository path: erc-3009.md (the ERC-3009 Draft text, ethereum/ercs), x402-specification-v2.md, and the x402 exact scheme, EVM document. Field names shown in the outputs follow the x402 exact scheme; the spend policy itself is your own declared construct, since x402 defines no client spending policy.