Address-poisoning check before you send USDC on Base
Address-poisoning check before you send USDC on Base. Body {from, to} (or sender/recipient; chain=base, token=USDC only, others 400 not charged; optional contacts/known_addresses): scans the sender's recent Base USDC transfers for lookalikes (same first/last 4 hex) plus dust/zero-value transfers. No sender? {recipient, known_addresses} = offline contacts check; {address} alone scans its own history for poisoning signs. Returns risk low/medium/high, lookalikes, reasons, coverage.
Paid test badge: not yet. The checks above are free: we call the tool without paying and read the payment request it sends back. The Verified badge needs paid calls whose answers match the promised output, and nobody can buy a badge.
Endpoint
POST https://paycheck.hectichustle.workers.dev/address/check
| Category | Market data |
|---|---|
| Provider host | paycheck.hectichustle.workers.dev |
| Networks | eip155:8453 |
| Payment schemes | exact |
| Self-reported calls, 30 days | 19 from 3 payers (the provider's figure, not ours) |
Our checks, last 30 days
We never call tools that send, buy, move money or file anything, not even without paying.
Example input (from the provider)
{
"body": {
"from": "0x9D42EbA8868CFd38A50Ba615ee0cf903F1BBeCE9",
"to": "0x509E55c4F898B43C856Fb0E51048B1b7bFBC9eDE"
},
"bodyType": "json",
"method": "POST",
"type": "http"
}
Promised output schema (from the provider)
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"description": "Three shapes: {from, to, contacts?} scans the sender's recent Base USDC history; contacts-only {to, contacts} without from (aliases recipient/address + known_addresses/known) is offline lookalike vs contacts (no RPC); recipient-only {to} alone (alias address) scans that address's own recent USDC history for poisoning fingerprints.",
"properties": {
"chain": {
"description": "Optional. Base only (base, eip155:8453, 8453). Any other chain returns 400 unsupported_chain and is not charged \u2014 Shield only scans Base USDC.",
"type": [
"string",
"integer"
]
},
"contacts": {
"description": "Optional: up to 50 trusted addresses / address book (aliases: known_addresses, known). With from: offline lookalike of contacts too. Without from: contacts-only mode (no RPC).",
"items": {
"pattern": "^0x[0-9a-fA-F]{40}$",
"type": "string"
},
"maxItems": 50,
"type": "array"
},
"from": {
"description": "Sender address (aliases: sender, fromAddress). Omit for contacts-only or recipient-only mode.",
"pattern": "^0x[0-9a-fA-F]{40}$",
"type": "string"
},
"to": {
"description": "Intended recipient (aliases: recipient, toAddress, address). Required in every shape.",
"pattern": "^0x[0-9a-fA-F]{40}$",
"type": "string"
},
"token": {
"description": "Optional. USDC only (symbol USDC or Base USDC contract). Any other token (e.g. USDT) returns 400 unsupported_token and is not charged.",
"type": "string"
}
},
"required": [
"to"
],
"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": {
"properties": {
"chain": {
"enum": [
"base"
],
"type": "string"
},
"contacts": {
"description": "Only present when contacts were sent",
"properties": {
"checked": {
"type": "integer"
},
"inContacts": {
"type": "boolean"
},
"lookalikes": {
"items": {
"properties": {
"contact": {
"type": "string"
},
"prefixMatch": {
"type": "integer"
},
"suffixMatch": {
"type": "integer"
}
},
"type": "object"
},
"type": "array"
}
},
"type": "object"
},
"coverage": {
"properties": {
"complete": {
"type": "boolean"
},
"coveragePct": {
"type": "number"
},
"lowCoverage": {
"description": "true when coveragePct < 10: almost nothing was scanned, so risk low does not mean safe (top reason explains; retry, pass contacts, or use /address/check/full)",
"type": "boolean"
},
"rpcCalls": {
"type": "integer"
},
"scannedFrom": {
"type": "integer"
},
"scannedTo": {
"type": "integer"
},
"transfersSeen": {
"type": "integer"
},
"windowBlocks": {
"type": "integer"
}
},
"type": "object"
},
"ignoredFields": {
"description": "Request fields Kertivo Shield did not use (they did not affect the answer); only present when there were any",
"items": {
"type": "string"
},
"type": "array"
},
"ignoredNote": {
"type": "string"
},
"lookalikes": {
"items": {
"properties": {
"address": {
"type": "string"
},
"dustTransfers": {
"type": "integer"
},
"inbound": {
"type": "integer"
},
"lastBlock": {
"type": "integer"
},
"outbound": {
"type": "integer"
},
"pattern": {
"enum": [
"dust_or_zero_value",
"lookalike_counterparty"
],
"type": "string"
},
"realOut": {
"type": "integer"
},
"sampleTx": {