On-chain Forensics
Settle-safe pre-trade screen for AI agents: canonical-asset check against the verified registry (EVM tokens + XRPL issuers, chain=xrp) plus optional counterparty wallet trust tier
Offering
- Provider
- solene-fa2010da.base44.app
- Method
- GET
- Offering type
- Api Endpoint
- Transport type
- http
- Category
- Financial Analysis
- Delivery
- Not provided
- Pricing model
- Not provided
- x402 version
- 2
Endpoint context
- URL
https://solene-fa2010da.base44.app/functions/forensicsSettlesafe- MIME type
- application/json
- First seen
- 2026-10-31T14:59:46.576Z
- Last seen
- Tags
- forensics, blockchain, Crypto, due-diligence, rwa, Solana, Derivatives, wallet-risk, X402, settlesafe, financial-analysis, tokens, Wallet, Base, Ethereum
Payment pricing
x402 payment terms are the authoritative price for calling this endpoint.
- Payment option 1
- 0.02 USDC
Atomic price: 20000 · Network: eip155:8453 · Asset: USDC · Scheme: exact
Raw x402 terms
[
{
"scheme": "exact",
"network": "eip155:8453",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "20000",
"payTo": "0x8EBf296c6273760ed9604C428f7EC13255E46fb9"
}
]Observed health
- Status
- Healthy
- Latest latency
- 1330 ms
- Average latency
- 1281 ms
- HTTP status
- 402
- Last checked
- Reachability
- 100% over 3 checks
Latency is measured to the first response headers. A reachable result does not verify response accuracy or merchant identity.
Input schema
{
"type": "object",
"properties": {
"type": {
"type": "string",
"const": "http"
},
"method": {
"type": "string",
"enum": [
"GET",
"HEAD",
"DELETE"
]
},
"queryParams": {
"type": "object",
"properties": {
"address": {
"type": "string",
"pattern": "^0x[a-fA-F0-9]{40}$|^r[1-9A-HJ-NP-Za-km-z]{24,34}$",
"description": "ERC-20 contract (0x...) or XRPL issuer (r..., chain=xrp); issuer= alias accepted"
},
"token": {
"type": "string",
"enum": [
"ondo",
"qnt",
"edel",
"xlm",
"aero",
"degen",
"brett",
"buidl",
"usdy",
"ousg",
"ustb",
"usyc",
"bcspx",
"bcoin",
"bnvda",
"btsla",
"aapl",
"nvda",
"usdc",
"usdc_eth",
"rlusd",
"gatehub-usd",
"bitstamp-usd",
"bitstamp-eur"
],
"description": "named alias alternative to address"
},
"chain": {
"type": "string",
"enum": [
"base",
"ethereum",
"robinhood",
"xrp"
],
"description": "default base"
},
"currency": {
"type": "string",
"pattern": "^[A-Za-z]{3}$|^[0-9A-Fa-f]{40}$",
"description": "XRPL issued-currency code (chain=xrp)"
},
"counterparty": {
"type": "string",
"pattern": "^0x[a-fA-F0-9]{40}$|^r[1-9A-HJ-NP-Za-km-z]{24,34}$",
"description": "optional counterparty trust screen"
}
},
"additionalProperties": false
}
},
"required": [
"type",
"method"
]
}Output schema
{
"type": "object",
"required": [
"service",
"paid",
"data"
],
"properties": {
"data": {
"type": "object",
"required": [
"endpoint",
"checked_at",
"chain",
"settle_safe",
"overall_pass",
"asset_status",
"asset",
"risk_flags",
"reasons",
"plain_take"
],
"properties": {
"asset": {
"type": "object",
"properties": {
"contract": {
"type": "string"
},
"token_name": {
"type": [
"string",
"null"
]
},
"is_contract": {
"type": "boolean"
},
"token_symbol": {
"type": [
"string",
"null"
]
},
"total_supply": {
"type": [
"string",
"null"
],
"description": "Human-readable total supply at the token's own decimals"
},
"registry_alias": {
"type": [
"string",
"null"
]
},
"registry_canonical": {
"type": "boolean"
}
}
},
"chain": {
"enum": [
"base-mainnet",
"ethereum-mainnet"
],
"type": "string"
},
"reasons": {
"type": "array",
"items": {
"type": "string"
}
},
"endpoint": {
"type": "string",
"const": "settlesafe"
},
"checked_at": {
"type": "string",
"format": "date-time"
},
"plain_take": {
"type": "string",
"description": "Shareable plain-language verdict"
},
"risk_flags": {
"type": "array",
"items": {
"enum": [
"NOT_A_CONTRACT",
"NOT_ERC20_READABLE",
"SYMBOL_MISMATCH",
"NOT_IN_VERIFIED_REGISTRY",
"COUNTERPARTY_SUSPICIOUS",
"COUNTERPARTY_SCREEN_FAILED",
"READ_VERIFICATION_DEGRADED"
],
"type": "string"
}
},
"settle_safe": {
"type": "boolean",
"description": "Asset screen result only"
},
"asset_status": {
"enum": [
"KNOWN_CANONICAL",
"UNVERIFIED",
"NOT_A_CONTRACT",
"NOT_ERC20_READABLE",
"SYMBOL_MISMATCH",
"VERIFICATION_UNAVAILABLE"
],
"type": "string",
"description": "KNOWN_CANONICAL = contract matches the verified tokenized-asset registry and serves a readable ERC-20; UNVERIFIED = live ERC-20 but not in the registry; NOT_A_CONTRACT = EOA; NOT_ERC20_READABLE = totalSupply() revert confirmed on healthy nodes; SYMBOL_MISMATCH = on-chain symbol differs from the registry entry; VERIFICATION_UNAVAILABLE = public RPC network degraded, no verdict issued (retry)."
},
"counterparty": {
"oneOf": [
{
"type": "object",
"properties": {
"error": {
"type": [
"string",
"null"
],
"description": "Present when the screen itself failed (risk flag COUNTERPARTY_SCREEN_FAILED)"
},
"address": {
"type": "string"
},
"trust_pass": {
"type": "boolean",
"description": "True only for TRUSTED_ACTIVITY"
},
"trust_tier": {
"enum": [
"TRUSTED_ACTIVITY",
"LIGHT_ACTIVITY",
"NO_RECENT_ACTIVITY",
"SUSPICIOUS",
"EMPTY",
"CONTRACT_ADDRESS",
"DELEGATED_EOA"
],
"type": "string",
"description": "TRUSTED_ACTIVITY = >=10 lifetime txs, >=5 unique counterparties and >=8 in-window transfers; LIGHT_ACTIVITY = some history, limited activity; NO_RECENT_ACTIVITY = history but no ERC-20 movement in the window; SUSPICIOUS = funded but never sent a transaction (bait/dust pattern); EMPTY = no history at all; CONTRACT_ADDRESS = holds standalone contract code (screen with /functions/forensicsToken first); DELEGATED_EOA = EIP-7702 smart-account wallet (code is a delegation designator; screen the delegate before high-value settles)."
},
"is_contract": {
"type": "boolean",
"description": "eth_getCode non-empty (freshest of 3 nodes)"
},
"trust_reasons": {
"type": "array",
"items": {
"type": "string"
}
},
"total_txs_sent": {
"type": "integer",
"description": "Lifetime outgoing transactions (eth_getTransactionCount)"
},
"eip_7702_delegated": {
"type": "boolean",
"description": "True when the code is exactly the EIP-7702 delegation designator — reported as DELEGATED_EOA, not CONTRACT_ADDRESS"
},
"unique_counterparties": {
"type": "integer"
}
},
"description": "Trust tier heuristic: lifetime history (nonce) + ERC-20 flows in the recent window (~100 min)."
},
{
"type": "null"
}
]
},
"overall_pass": {
"type": "boolean",
"description": "Asset screen AND (counterparty screen if provided)"
},
"rpc_verification": {
"type": "object",
"properties": {
"code_block": {
"type": "integer",
"description": "Block height of the freshest node used for the code read"
},
"supply_probe": {
"type": "array",
"items": {
"type": "object",
"required": [
"node",
"outcome"
],
"properties": {
"node": {
"type": "string",
"description": "RPC host that produced this outcome"
},
"outcome": {
"type": "string",
"description": "What happened on this node's attempt"
}
}
},
"description": "Per-node evidence trail for the totalSupply read (v2.3.2): every RPC attempt that did NOT yield a well-formed result is logged here with its outcome, so any classification is auditable. Empty when all nodes answered well-formed on first try. Outcomes: invalid_result:<detail> (JSON-RPC success but empty/malformed result — common from degraded public nodes), error_retry / error_final (node error, retried once per node), skip_control_same_call (read failed and the control call is identical to the read, so no control is performed), control_failed (health check failed)."
},
"supply_status": {
"enum": [
"readable",
"not_readable",
"degraded"
],
"type": "string",
"description": "readable = well-formed result confirmed by 2 RPCs (or a single well-formed result when the rest of the public RPC pool is degraded — reads only count when the returned value is well-formed, so degraded nodes can never flip a classification); not_readable = revert confirmed on healthy nodes; degraded = public RPC network unavailable, screen inconclusive"
},
"code_agreeing_nodes": {
"type": "integer",
"description": "How many independent RPCs returned the same eth_getCode result"
}
}
}
},
"description": "Pre-trade settle-safe screen ($0.02). Answers: is this the real asset, and can this counterparty be trusted? Decisive negatives (not-a-contract, not-readable) are confirmed across independent RPCs; a degraded public-RPC network yields VERIFICATION_UNAVAILABLE instead of a false negative."
},
"paid": {
"type": "string",
"description": "USDC amount reported by the provider; opt-in free trials are also supported."
},
"service": {
"type": "string",
"const": "onchain-forensics"
},
"free_trial": {
"type": "object",
"description": "Present for opt-in free-trial responses."
},
"settlement_tx": {
"type": [
"string",
"null"
],
"description": "Settlement transaction hash when available."
}
}
}