TxGuard
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.
The wallet the 402 directs payment to. Its whole payment record — every payer, every chain — is on the merchant page.
Asset 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
The payTo wallet does not resolve to a registered ERC-8004 agent. That is not a verdict on the service — most of the catalog is unregistered.
Accepts
The payment requirements as published to the catalog. Read the live 402 before paying — a price here is a claim, not a quote.
Pay 0.01 USDC on Base to 0x9876…12690. The signed payment is good for 1 minute.
- Paid to
- 0x9876…12690
- USD Coin contract
- 0x8335…02913
- Payment window
- 1 minute
- As published
- 10000 smallest units
The catalog’s raw entry
[
{
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0x9876af0F6D8Ed5155Cd02d1ca56D128601612690",
"amount": "10000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 60
}
]Extensions
{
"bazaar": {
"info": {
"input": {
"body": {
"unsigned_tx": {
"to": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"data": "0xa9059cbb0000000000000000000000005d3e1a9b7c2f4e8a0b6d3c5f9e1a7b4d2c8f0a6e0000000000000000000000000000000000000000000000000000000000002710",
"from": "0x9F2C5E4A8db1C3a7E6B0d4f8C1E2a5b7D9C0e3F4",
"value": "0"
},
"expected_quote": {
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"extra": {
"name": "USD Coin",
"version": "2"
},
"payTo": "0x1a2B3c4D5E6F7a8B9c0D1e2F3A4b5C6d7E8F9a0b",
"amount": "10000",
"scheme": "exact",
"network": "eip155:8453",
"maxTimeoutSeconds": 60
}
},
"type": "http",
"method": "POST",
"bodyType": "json"
},
"output": {
"type": "json",
"example": {
"ok": true,
"result": {
"rpc": {
"endpoints": [],
"reachable": null,
"configured": false
},
"chain": "eip155:8453",
"proxy": {
"kind": "unknown",
"admin": null,
"beacon": null,
"detail": "no RPC endpoint is configured, so no slot could be read",
"address": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"upgradeable": null,
"slots_probed": [],
"implementation": null
},
"intent": {
"args": [
{
"name": "to",
"type": "address",
"value": "0x5D3e1a9b7c2f4E8A0b6d3c5F9E1A7b4D2C8f0a6E"
},
{
"name": "amount",
"type": "uint256",
"value": "10000"
}
],
"kind": "erc20_transfer",
"calls": [],
"depth": 0,
"target": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"summary": "Transfer 10000 base units of token 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 to 0x5D3e1a9b7c2f4E8A0b6d3c5F9E1A7b4D2C8f0a6E.",
"selector": "0xa9059cbb",
"standard": "erc20",
"signature": "transfer(address,uint256)",
"truncated": false,
"value_wei": "0",
"decode_source": "bundled-abi",
"function_name": "transfer"
},
"spender": {
"detail": "this transaction grants no allowance, so it has no spender",
"address": null,
"is_contract": null
},
"approvals": [],
"simulation": {
"detail": "simulation was not requested; send simulate: true to run one",
"status": "not_requested",
"gas_used": null,
"requested": false,
"block_number": null,
"asset_changes": []
},
"unresolved": [
"proxy status of 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 is unknown: no RPC endpoint is configured, so no slot could be read"
],
"input_shape": "unsigned_tx",
"permit_scope": null,
"denylist_hits": [],
"quote_comparison": {
"detail": "2 of 3 comparable fields match",
"fields": [
{
"field": "payTo",
"actual": "0x5D3e1a9b7c2f4E8A0b6d3c5F9E1A7b4D2C8f0a6E",
"matches": false,
"expected": "0x1a2B3c4D5E6F7a8B9c0D1e2F3A4b5C6d7E8F9a0b"
},
{
"field": "amount",
"actual": "10000",
"matches": true,
"expected": "10000"
},
{
"field": "asset",
"actual": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"matches": true,
"expected": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913"
},
{
"field": "chainId",
"actual": null,
"matches": null,
"expected": "8453"
},
{
"field": "extra.name",
"actual": null,
"matches": null,
"expected": "USD Coin"
},
{
"field": "extra.version",
"actual": null,
"matches": null,
"expected": "2"
}
],
"matches": false,
"present": true
},
"expected_transfers": [
{
"to": "0x5D3e1a9b7c2f4E8A0b6d3c5F9E1A7b4D2C8f0a6E",
"from": "0x9f2C5E4a8DB1C3A7e6b0d4f8C1e2A5b7d9c0E3f4",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "10000",
"source": "decode",
"token_id": null,
"asset_kind": "erc20"
}
],
"authorization_checks": [],
"candidate_signatures": []
},
"verdict": "block",
"evidence": [
{
"code": "RECIPIENT_MISMATCH",
"data": {
"field": "payTo",
"actual": "0x5D3e1a9b7c2f4E8A0b6d3c5F9E1A7b4D2C8f0a6E",
"expected": "0x1a2B3c4D5E6F7a8B9c0D1e2F3A4b5C6d7E8F9a0b"
},
"detail": "Pays 0x5D3e1a9b7c2f4E8A0b6d3c5F9E1A7b4D2C8f0a6E, but the quote names 0x1a2B3c4D5E6F7a8B9c0D1e2F3A4b5C6d7E8F9a0b. Signing this pays someone other than the party you are buying from.",
"source": "quote-comparison",
"severity": "critical"
},
{
"code": "RPC_UNAVAILABLE",
"detail": "No Base RPC endpoint is configured, so chain-dependent fields are unknown rather than assumed. See result.unresolved.",
"source": "rpc",
"severity": "medium"
}
],
"warnings": [],
"confidence": 1,
"risk_codes": [
"RECIPIENT_MISMATCH",
"RPC_UNAVAILABLE"
],
"request_hash": "sha256:6d5c717eb5eede165dada2645ad0944430ff492739cf58d0c2dad2b812f0ddb4",
"data_versions": {
"chain": "eip155:8453",
"policy": "2026-08-03",
"denylist": "2026-08-03.1",
"abi_packs": "2026-08-03.1",
"signature_index": "2026-08-03.1"
},
"policy_version": "2026-08-03"
}
}
},
"schema": {
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"input"
],
"properties": {
"input": {
"type": "object",
"required": [
"type",
"method",
"bodyType",
"body"
],
"properties": {
"body": {
"type": "object",
"oneOf": [
{
"required": [
"unsigned_tx"
]
},
{
"required": [
"tx_hash"
]
},
{
"required": [
"typed_data"
]
},
{
"required": [
"authorization"
]
}
],
"title": "TxPreflightRequest",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"tx_hash": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{64}$",
"description": "An existing Base transaction to explain."
},
"simulate": {
"type": "boolean",
"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."
},
"typed_data": {
"type": "object",
"required": [
"domain",
"primaryType",
"message"
],
"properties": {
"types": {
"type": "object"
},
"domain": {
"type": "object"
},
"message": {
"type": "object"
},
"primaryType": {
"type": "string"
}
},
"description": "EIP-712 payload. TransferWithAuthorization and ReceiveWithAuthorization get the x402 check table; any other primaryType is reported unrecognised, not analysed."
},
"unsigned_tx": {
"type": "object",
"properties": {
"to": {
"type": [
"string",
"null"
]
},
"data": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]*$"
},
"from": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
},
"value": {
"type": "string",
"description": "Wei."
}
},
"description": "A transaction you are about to sign. `to: null` is a deployment.",
"additionalProperties": false
},
"authorization": {
"type": "object",
"required": [
"from",
"to",
"value",
"validAfter",
"validBefore",
"nonce"
],
"properties": {
"to": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
},
"from": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
},
"kind": {
"enum": [
"transfer",
"receive"
],
"type": "string"
},
"asset": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]{40}$"
},
"nonce": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]*$"
},
"value": {
"type": "string"
},
"signature": {
"type": "string",
"pattern": "^0x[0-9a-fA-F]*$"
},
"validAfter": {
"type": "string"
},
"validBefore": {
"type": "string"
}
},
"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.",
"additionalProperties": false
},
"expected_quote": {
"type": "object",
"properties": {
"asset": {
"type": "string"
},
"extra": {
"type": "object"
},
"payTo": {
"type": "string"
},
"amount": {
"type": "string"
},
"scheme": {
"type": "string"
},
"network": {
"type": "string"
},
"maxTimeoutSeconds": {
"type": "number"
}
},
"description": "The x402 quote this payment claims to satisfy. Enables the comparison checks.",
"additionalProperties": false
}
},
"description": "Send exactly one of unsigned_tx, tx_hash, typed_data, or authorization.",
"additionalProperties": false
},
"type": {
"type": "string",
"const": "http"
},
"method": {
"enum": [
"POST"
],
"type": "string"
},
"bodyType": {
"enum": [
"json",
"form-data",
"text"
],
"type": "string"
}
},
"additionalProperties": false
},
"output": {
"type": "object",
"required": [
"type"
],
"properties": {
"type": {
"type": "string"
},
"example": {
"type": "object",
"title": "TxPreflightEnvelope",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"ok",
"verdict",
"confidence",
"risk_codes",
"evidence",
"result",
"policy_version",
"request_hash",
"data_versions",
"warnings"
],
"properties": {
"ok": {
"type": "boolean"
},
"result": {
"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"
],
"properties": {
"proxy": {
"type": "object",
"properties": {
"kind": {
"enum": [
"none",
"eip1167",
"eip1967",
"eip1967-beacon",
"eip1822",
"zeppelinos",
"diamond",
"unknown"
],
"type": "string"
}
}
},
"intent": {
"type": "object",
"required": [
"kind",
"summary",
"decode_source",
"calls",
"truncated"
],
"properties": {
"decode_source": {
"enum": [
"verified-abi",
"bundled-abi",
"offline-index",
"live-lookup",
"unresolved"
],
"type": "string"
}
}
},
"approvals": {
"type": "array",
"items": {
"type": "object",
"properties": {
"scope": {
"enum": [
"infinite",
"effectively_infinite",
"bounded"
],
"type": "string"
}
}
}
}
}
},
"verdict": {
"enum": [
"allow",
"warn",
"block",
"unknown"
],
"type": "string",
"description": "Precedence: block, then unknown, then warn, then allow."
},
"evidence": {
"type": "array",
"items": {
"type": "object"
}
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"confidence": {
"type": "number",
"maximum": 1,
"minimum": 0
},
"risk_codes": {
"type": "array",
"items": {
"type": "string"
}
},
"request_hash": {
"type": "string",
"pattern": "^sha256:[0-9a-f]{64}$"
},
"data_versions": {
"type": "object",
"required": [
"denylist",
"abi_packs",
"signature_index",
"policy",
"chain"
]
},
"policy_version": {
"type": "string"
}
}
}
}
}
}
}
}
}Provenance
- Seen in the source catalog
- 2026-09-24 07:39Z
- Last indexed by Roundhouse
- 2026-09-24 12:10Z
- Last enriched (probe, favicon, geo)
- 2026-09-20 12:45Z
- x402 version
- 2
- Max timeout
- 60s
- Liveness probe
- HTTP 404
Hand this page to an agent
Copy the prompt and paste it into Claude, an MCP client or your own agent — it will vet this service and call it over the free read API. No key, no account.
GET api.roundhouseai.io/v0/endpoints
This endpoint's own trailing-30-day call count, as published by the upstream catalog and snapshotted daily. 30 snapshots so far. Verified volume counts only settlements with an on-chain EIP-3009 marker.
Show the promptHide the prompt
Using Roundhouse, look up the x402 service TxGuard and tell me whether it is worth paying: what a call costs, whether the endpoint answered when last probed, and what its payment record actually shows. curl -s 'https://api.roundhouseai.io/v0/endpoints?q=TxGuard' curl -s 'https://api.roundhouseai.io/v0/merchants/<the payTo wallet returned above>' Then call it: read the price from the live 402 at https://txguard.schemasure.com/v1/tx/preflight, never from a cached figure, and pay with an x402 client. The /v0 API needs an API key (`authorization: Bearer rh_live_…`) on everything except /v0/unified* and /v0/endpoints. Mint a personal key for $0.01 at GET https://api.roundhouseai.io/v0/test/x402, or use an organization key from https://roundhouseai.io/dashboard/team. If you do not have Roundhouse tools or skills installed, read https://roundhouseai.io/skill.md first — it is the whole procedure.