WhaleGuard is a lightweight, real-time risk oracle for ERC-20 / BEP-20 tokens. It answers one question: "Will this token dump on me?" Core capability: - Fetches top 10 token holders via Etherscan API V2 - Calculates Concentration Index (CI) = % of supply held by top 5 addresses - Flags manipulation risk: Red (>60%), Orange (30-60%), Green (<30%) - Works on Ethereum, BNB Chain, Polygon, Base, Arbitrum How to use: Provide a token contract address and optionally a chain (eth, bsc, polygon, base, arbitrum). WhaleGuard returns the full holder breakdown, the CI score and a risk verdict. Example: analyze_token("0x1f9840a85d5aF5bf1D1762F925BDADdC4201F984", "eth")
The seven checks, with their evidence
7 recordedRegistered?rung 1 · registered
passThe agent exists in the on-chain registry, with an owner and a document URL.
passed
- block_number
- 52281733
- chain_id
- 8453
- token_id
- 38634
checked at 2026-10-07T10:56:34.197254Z
Reachable?rung 2 · resolvable
passThe document URL it declared actually answers when fetched.
passed
- bytes
- 1264
- data_uri_variant
- base64
- inline
- true
- scheme
- data
- uri
data:application/json;base64,ewogICJ0eXBlIjogImh0dHBzOi8vZWlwcy5ldGhlcmV1bS5vcmcvRUlQUy9laXAtODAwNCNyZWdpc3RyYXRpb24tdjE… (1,717 chars — expand)
data:application/json;base64,ewogICJ0eXBlIjogImh0dHBzOi8vZWlwcy5ldGhlcmV1bS5vcmcvRUlQUy9laXAtODAwNCNyZWdpc3RyYXRpb24tdjEiLAogICJuYW1lIjogIldoYWxlR3VhcmQiLAogICJkZXNjcmlwdGlvbiI6ICJXaGFsZUd1YXJkIGlzIGEgbGlnaHR3ZWlnaHQsIHJlYWwtdGltZSByaXNrIG9yYWNsZSBmb3IgRVJDLTIwIC8gQkVQLTIwIFxudG9rZW5zLiBJdCBhbnN3ZXJzIG9uZSBxdWVzdGlvbjogXCJXaWxsIHRoaXMgdG9rZW4gZHVtcCBvbiBtZT9cIlxuXG5Db3JlIGNhcGFiaWxpdHk6XG4tIEZldGNoZXMgdG9wIDEwIHRva2VuIGhvbGRlcnMgdmlhIEV0aGVyc2NhbiBBUEkgVjJcbi0gQ2FsY3VsYXRlcyBDb25jZW50cmF0aW9uIEluZGV4IChDSSkgPSAlIG9mIHN1cHBseSBoZWxkIGJ5IHRvcCA1IGFkZHJlc3Nlc1xuLSBGbGFncyBtYW5pcHVsYXRpb24gcmlzazogUmVkICg+NjAlKSwgT3JhbmdlICgzMC02MCUpLCBHcmVlbiAoPDMwJSlcbi0gV29ya3Mgb24gRXRoZXJldW0sIEJOQiBDaGFpbiwgUG9seWdvbiwgQmFzZSwgQXJiaXRydW1cblxuSG93IHRvIHVzZTpcblByb3ZpZGUgYSB0b2tlbiBjb250cmFjdCBhZGRyZXNzIGFuZCBvcHRpb25hbGx5IGEgY2hhaW4gKGV0aCwgYnNjLCBcbnBvbHlnb24sIGJhc2UsIGFyYml0cnVtKS4gV2hhbGVHdWFyZCByZXR1cm5zIHRoZSBmdWxsIGhvbGRlciBicmVha2Rvd24sIFxudGhlIENJIHNjb3JlIGFuZCBhIHJpc2sgdmVyZGljdC5cblxuRXhhbXBsZTogYW5hbHl6ZV90b2tlbihcIjB4MWY5ODQwYTg1ZDVhRjViZjFEMTc2MkY5MjVCREFEZEM0MjAxRjk4NFwiLCBcImV0aFwiKSIsCiAgImltYWdlIjogImh0dHBzOi8vYmxvYi44MDA0c2Nhbi5hcHAvNWFkZGM1ZTIxZmNhM2Q5MDE4Mzc5NWIzYmRmYmQ4OGMzMjdmNTNlYjJjY2UyNDkxYTc3OThmODlmOWI3NDQ0My5qcGciLAogICJzZXJ2aWNlcyI6IFsKICAgIHsKICAgICAgIm5hbWUiOiAiTUNQIiwKICAgICAgImVuZHBvaW50IjogImh0dHBzOi8vd2hhbGVndWFyZC1wcm9kdWN0aW9uLnVwLnJhaWx3YXkuYXBwL21jcC9XaGFsZUd1YXJkIiwKICAgICAgInZlcnNpb24iOiAiMjAyNS0wNi0xOCIsCiAgICAgICJtY3BUb29scyI6IFsKICAgICAgICAiYW5hbHl6ZV90b2tlbiIKICAgICAgXQogICAgfQogIF0sCiAgInJlZ2lzdHJhdGlvbnMiOiBbXSwKICAic3VwcG9ydGVkVHJ1c3RzIjogWwogICAgInJlcHV0YXRpb24iLAogICAgImNyeXB0by1lY29ub21pYyIKICBdLAogICJhY3RpdmUiOiB0cnVlLAogICJ4NDAyc3VwcG9ydCI6IHRydWUKfQ==
checked at 2026-10-07T10:56:34.197254Z
Readable?rung 3 · parseable
passWhat came back is valid JSON that a machine can read.
passed
- body_bytes
- 1264
- body_sha256
- 23d9a0a2e227da57c9692f94a225d0208b4e01e3a14528da4b54274908476654
- content_type
- —
checked at 2026-10-07T10:56:34.197254Z
Follows the spec?rung 4 · conformant
passThe document meets what ERC-8004 requires of it.
passed
- both_fields_present
- false
- legacy_endpoints_field
- false
- may_gaps
- x402Support, supportedTrust
- must_violations
- (empty)
- registrations_checked
- 0
- services_field_source
- services
- services_status
- present
- should_gaps
- registrations
- spec_commit
- 68fc6765761a10fb26f0692df21c8a6f9d12b1be
checked at 2026-10-07T10:56:34.197254Z
Claims its identity?rung 5 · bound
unclaimedThe document names the on-chain agent it belongs to, rather than leaving it unsaid.
unclaimed — the document made no claim to check
- declared_agent_id
- —
- declared_chain
- —
- declared_registry
- —
- match
- —
- reason
- unclaimed
- registrations_seen
- 0
checked at 2026-10-07T10:56:34.197254Z
Answers?rung 6 · live
failA declared endpoint responds to a probe. Not implemented yet, so nobody passes or fails it.
did not pass
- endpoints
{"declared":"https://whaleguard-production.up.railway.app/mcp/WhaleGuard","elapsed_ms":384,"final_url":"https://whalegua… (331 chars — expand)
{"declared":"https://whaleguard-production.up.railway.app/mcp/WhaleGuard","elapsed_ms":384,"final_url":"https://whaleguard-production.up.railway.app/mcp/WhaleGuard","http_status":404,"index":0,"kind":"https","name":"MCP","outcome":"not_live","probed":true,"probed_url":"https://whaleguard-production.up.railway.app/mcp/WhaleGuard"}- endpoints_answered_not_live
- 1
- endpoints_declared
- 1
- endpoints_live
- 0
- endpoints_our_error
- 0
- endpoints_payment_gated
- 0
- endpoints_probeable
- 1
- endpoints_probed
- 1
- endpoints_refused
- 0
checked at 2026-10-07T19:37:51.488079Z
Has feedback?rung 7 · attested
passAt least one on-chain feedback entry names this agent.
passed
- distinct_authors
- 1
- feedback_count
- 1
checked at 2026-10-07T10:56:34.197254Z
Check it again, now
outside the censusOn-chain snapshot
base- token id
- 38634
- owner
- 0x83525b2783fb2dccaf7ae5b2551fbd995dd27309
- block
- 52,281,733
- observed
- 2026-10-07T10:56:34.199152Z
What the fetch saw
data- scheme
- data
- request url
- —
- final url
- —
- http status
- —
- content type
- —
- size
- 1,264 bytes
- sha256
- 23d9a0a2e227da57c9692f94a225d0208b4e01e3a14528da4b54274908476654
- elapsed
- 0 ms
This run
reproducible- run
- c67de707-a82d-4589-8936-acd5a584c720
- chain
- base
- pinned block
- 52,281,733
- agents
- 98,319
- started
- 2026-10-07T06:00:13.662398Z
- finished
- 2026-10-07T19:18:37.899751Z
- checker
- 0.7.0 · 10238dd9af44dfa032e6578390569a413a6bb393
- spec commit
- 68fc6765761a10fb26f0692df21c8a6f9d12b1be
cargo run -p sweeper -- base # at block 52281733