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.

DataLiveeip155:8453Exactvia cdp
BaseTransactionPreflightx402eip3009
Calls · 30d
36↑ 6.8%
This endpoint's own trailing-30-day call count, as published by the upstream catalog and snapshotted daily. 30 snapshots so far.
$6.96
Verified settled volume
503 settlements proven x402 by their on-chain EIP-3009 marker.
$0.010
Listed price
As published in the catalog. Always read the live 402 before paying.
36
Calls · 30d
Upstream's own call count for this endpoint, not ours.
3
Unique payers · 30d
Last called 2026-09-23 07:40Z
Upstream on-chain volume
Reported by the source catalog.
Paid to
0x9876af0F6D8Ed5155Cd02d1ca56D128601612690

The wallet the 402 directs payment to. Its whole payment record — every payer, every chain — is on the merchant page.

Asset 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913

Provider

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.

0.01USDC≈ $0.01 USD
on Base · exact scheme

Pay 0.01 USDC on Base to 0x9876…12690. The signed payment is good for 1 minute.

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
Report

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.

Open skill.md
Show 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.