Explain and preflight an unsigned Base transaction, EIP-712 typed data, or an EIP-3009 x40
Explain and preflight an unsigned Base transaction, EIP-712 typed data, or an EIP-3009 x402 payment authorization before you sign it. Decodes intent against verified ABIs, resolves proxies, classifies approvals, and checks a payment authorization against the quote it claims to pay: recipient, amount, asset, chain, freshness, and nonce replay. Returns unknown rather than guessing when a selector is ambiguous. Not a guarantee that a transaction is safe or profitable.
10000 (raw units)
price
32
calls / 30d
3
unique payers
2026-09-18
updated
Provider
txguard.schemasure.com · discovered, not yet claimed by its owner
Payment (x402 accepts[])
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0x9876af0F6D8Ed5155Cd02d1ca56D128601612690",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "10000",
"maxTimeoutSeconds": 60
}
]Output schema
{
"bazaar": {
"info": {
"input": {
"body": {
"expected_quote": {
"amount": "10000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"maxTimeoutSeconds": 60,
"network": "eip155:8453",
"payTo": "0x1a2B3c4D5E6F7a8B9c0D1e2F3A4b5C6d7E8F9a0b",
"scheme": "exact"
},
"unsigned_tx": {
"data": "0xa9059cbb0000000000000000000000005d3e1a9b7c2f4e8a0b6d3c5f9e1a7b4d2c8f0a6e0000000000000000000000000000000000000000000000000000000000002710",
"from": "0x9F2C5E4A8db1C3a7E6B0d4f8C1E2a5b7D9C0e3F4",
"to": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"value": "0"
}
},
"bodyType": "json",
"method": "POST",
"type": "http"
},
"output": {
"example": {
"confidence": 1,
"data_versions": {
"abi_packs": "2026-08-03.1",
"chain": "eip155:8453",
"denylist": "2026-08-03.1",
"policy": "2026-08-03",
"signature_index": "2026-08-03.1"
},
"evidence": [
{
"code": "RECIPIENT_MISMATCH",
"data": {
"actual": "0x5D3e1a9b7c2f4E8A0b6d3c5F9E1A7b4D2C8f0a6E",
"expected": "0x1a2B3c4D5E6F7a8B9c0D1e2F3A4b5C6d7E8F9a0b",
"field": "payTo"
},
"detail": "Pays 0x5D3e1a9b7c2f4E8A0b6d3c5F9E1A7b4D2C8f0a6E, but the quote names 0x1a2B3c4D5E6F7a8B9c0D1e2F3A4b5C6d7E8F9a0b. Signing this pays someone other than the party you are buying from.",
"severity": "critical",
"source": "quote-comparison"
},
{
"code": "RPC_UNAVAILABLE",
"detail": "No Base RPC endpoint is configured, so chain-dependent fields are unknown rather than assumed. See result.unresolved.",
"severity": "medium",
"source": "rpc"
}
],
"ok": true,
"policy_version": "2026-08-03",
"request_hash": "sha256:6d5c717eb5eede165dada2645ad0944430ff492739cf58d0c2dad2b812f0ddb4",
"result": {
"approvals": [],
"authorization_checks": [],
"candidate_signatures": [],
"chain": "eip155:8453",
"denylist_hits": [],
"expected_transfers": [
{
"amount": "10000",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"asset_kind": "erc20",
"from": "0x9f2C5E4a8DB1C3A7e6b0d4f8C1e2A5b7d9c0E3f4",
"source": "decode",
"to": "0x5D3e1a9b7c2f4E8A0b6d3c5F9E1A7b4D2C8f0a6E",
"token_id": null
}
],
"input_shape": "unsigned_tx",
"intent": {
"args": [
{
"name": "to",
"type": "address",
"value": "0x5D3e1a9b7c2f4E8A0b6d3c5F9E1A7b4D2C8f0a6E"
},
{
"name": "amount",
"type": "uint256",
"value": "10000"
}
],
"calls": [],
"decode_source": "bundled-abi",
"depth": 0,
"function_name": "transfer",
"kind": "erc20_transfer",
"selector": "0xa9059cbb",
"signature": "transfer(address,uint256)",
"standard": "erc20",
"summary": "Transfer 10000 base units of token 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 to 0x5D3e1a9b7c2f4E8A0b6d3c5F9E1A7b4D2C8f0a6E.",
"target": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"truncated": false,
"value_wei": "0"
},
"permit_scope": null,
"proxy": {
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"admin": null,
"beacon": null,
"detail": "no RPC endpoint is configured, so no slot could be read",
"implementation": null,
"kind": "unknown",
"slots_probed": [],
"upgradeable": null
},
"quote_comparison": {
"detail": "2 of 3 comparable fields match",
"fields": [
{
"actual": "0x5D3e1a9b7c2f4E8A0b6d3c5F9E1A7b4D2C8f0a6E",
"expected": "0x1a2B3c4D5E6F7a8B9c0D1e2F3A4b5C6d7E8F9a0b",
"field": "payTo",
"matches": false
},
{
"actual": "10000",
"expected": "10000",
"field": "amount",
"matches": true
},
{
"actual": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"expected": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"field": "asset",
"matches": true
},
{
"actual": null,
"expected": "8453",
"field": "chainId",
"matches": null
},
{
"actual": null,
"expected": "USD Coin",
"field": "extra.name",
"matches": null
},
{
"actual": null,
"expected": "2",
"field": "extra.version",
"matches": null
}
],
"matches": false,
"present": true
},
"rpc": {
"configured": false,
"endpoints": [],
"reachable": null
},
"simulation": {
"asset_changes": [],
"block_number": null,
"detail": "simulation was not requested; send simulate: true to run one",
"gas_used": null,
"requested": false,
"status": "not_requested"
},
"spender": {
"address": null,
"detail": "this transaction grants no allowance, so it has no spender",
"is_contract": null
},
"unresolved": [
"proxy status of 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 is unknown: no RPC endpoint is configured, so no slot could be read"
]
},
"risk_codes": [
"RECIPIENT_MISMATCH",
"RPC_UNAVAILABLE"
],
"verdict": "block",
"warnings": []
},
"type": "json"
}
},
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"additionalProperties": false,
"description": "Send exactly one of unsigned_tx, tx_hash, typed_data, or authorization.",
"oneOf": [
{
"required": [
"unsigned_tx"
]
},
{
"required": [
"tx_hash"
]
},
{
"required": [
"typed_data"
]
},
{
"required": [
"authorization"
]
}
],
"properties": {
"authorization": {
"additionalProperties": false,
"description": "An EIP-3009 authorization, which is what an x402 `exact` payment is. value in base units, validAfter/validBefore in unix seconds, nonce 32 random bytes not a counter.",
"properties": {
"asset": {
"pattern": "^0x[0-9a-fA-F]{40}$",
"type": "string"
},
"from": {
"pattern": "^0x[0-9a-fA-F]{40}$",
"type": "string"
},
"kind": {
"enum": [
"transfer",
"receive"
],
"type": "string"
},
"nonce": {
"pattern": "^0x[0-9a-fA-F]*$",
"type": "string"
},
"signature": {
"pattern": "^0x[0-9a-fA-F]*$",
"type": "string"
},
"to": {
"pattern": "^0x[0-9a-fA-F]{40}$",
"type": "string"
},
"validAfter": {
"type": "string"
},
"validBefore": {
"type": "string"
},
"value": {
"type": "string"
}
},
"required": [
"from",
"to",
"value",
"validAfter",
"validBefore",
"nonce"
],
"type": "object"
},
"expected_quote": {
"additionalProperties": false,
"description": "The x402 quote this payment claims to satisfy. Enables the comparison checks.",
"properties": {
"amount": {
"type": "string"
},
"asset": {
"type": "string"
},
"extra": {
"type": "object"
},
"maxTimeoutSeconds": {
"type": "number"
},
"network": {
"type": "string"
},
"payTo": {
"type": "string"
},
"scheme": {
"type": "string"
}
},
"type": "object"
},
"simulate": {
"default": false,
"description": "Run eth_simulateV1 with asset tracing. Priced at $0.015 instead of $0.01, and targets P50 2s / P95 5s rather than the static path's 500ms / 2s.",
"type": "boolean"
},
"tx_hash": {
"description": "An existing Base transaction to explain.",
"pattern": "^0x[0-9a-fA-F]{64}$",
"type": "string"
},
"typed_data": {
"description": "EIP-712 payload. TransferWithAuthorization and ReceiveWithAuthorization get the x402 check table; any other primaryType is reported unrecognised, not analysed.",
"properties": {
"domain": {
"type": "object"
},
"message": {
"type": "object"
},
"primaryType": {
"type": "string"
},
"types": {
"type": "object"
}
},
"required": [
"domain",
"primaryType",
"message"
],
"type": "object"
},
"unsigned_tx": {
"additionalProperties": false,
"description": "A transaction you are about to sign. `to: null` is a deployment.",
"properties": {
"data": {
"pattern": "^0x[0-9a-fA-F]*$",
"type": "string"
},
"from": {
"pattern": "^0x[0-9a-fA-F]{40}$",
"type": "string"
},
"to": {
"type": [
"string",
"null"
]
},
"value": {
"description": "Wei.",
"type": "string"
}
},
"type": "object"
}
},
"title": "TxPreflightRequest",
"type": "object"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
},
"output": {
"properties": {
"example": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"confidence": {
"maximum": 1,
"minimum": 0,
"type": "number"
},
"data_versions": {
"required": [
"denylist",
"abi_packs",
"signature_index",
"policy",
"chain"
],
"type": "object"
},
"evidence": {
"items": {
"type": "object"
},
"type": "array"
},
"ok": {
"type": "boolean"
},
"policy_version": {
"type": "string"
},
"request_hash": {
"pattern": "^sha256:[0-9a-f]{64}$",
"type": "string"
},
"result": {
"properties": {
"approvals": {
"items": {
"properties": {
"scope": {
"enum": [
"infinite",
"effectively_infinite",
"bounded"
],
"type": "string"
}
},
"type": "object"
},
"type": "array"
},
"intent": {
"properties": {
"decode_source": {
"enum": [
"verified-abi",
"bundled-abi",
"offline-index",
"live-lookup",
"unresolved"
],
"type": "string"
}
},
"required": [
"kind",
"summary",
"decode_source",
"calls",
"truncated"
],
"type": "object"
},
"proxy": {
"properties": {
"kind": {
"enum": [
"none",
"eip1167",
"eip1967",
"eip1967-beacon",
"eip1822",
"zeppelinos",
"diamond",
"unknown"
],
"type": "string"
}
},
"type": "object"
}
},
"required": [
"input_shape",
"chain",
"intent",
"expected_transfers",
"approvals",
"permit_scope",
"spender",
"proxy",
"authorization_checks",
"quote_comparison",
"simulation",
"candidate_signatures",
"denylist_hits",
"unresolved",
"rpc"
],
"type": "object"
},
"risk_codes": {
"items": {
"type": "string"
},
"type": "array"
},
"verdict": {
"description": "Precedence: block, then unknown, then warn, then allow.",
"enum": [
"allow",
"warn",
"block",
"unknown"
],
"type": "string"
},
"warnings": {
"items": {
"type": "string"
},
"type": "array"
}
},
"required": [
"ok",
"verdict",
"confidence",
"risk_codes",
"evidence",
"result",
"policy_version",
"request_hash",
"data_versions",
"warnings"
],
"title": "TxPreflightEnvelope",
"type": "object"
},
"type": {
"type": "string"
}
},
"required": [
"type"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}
}
}Use it
curl
curl "https://txguard.schemasure.com/v1/tx/preflight" # -> 402 Payment Required, accepts[] lists how to pay # retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paid
JavaScript
const res = await fetch("https://txguard.schemasure.com/v1/tx/preflight");
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}Python
import httpx
res = httpx.get("https://txguard.schemasure.com/v1/tx/preflight")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerMachine-readable
Everything on this page is also available as clean JSON at /resources/3143.json, and this resource appears in /discovery/resources and /discovery/search.