74trust / 100

Evm Verdict

by flat-rate-llm.kikoribera03.workers.dev in Onchain & crypto

x402 APIPassing, checked 1 h ago

One-call verdict on any ERC20 on Base, Ethereum, Polygon, Arbitrum or Optimism: a machine-readable label for who can act on your balance (no-owner-powers, owner-can-intervene, owner-controls-balances, not-a-token), a headline, a plain-language reading and a paste-ready card - with the deterministic evidence underneath, selector by selector. Label, score and card come from the deployed bytecode and live state, never from a model. Research, not investment advice.

GET
https://flat-rate-llm.kikoribera03.workers.dev/v1/evm/verdict
Price
$0.02
per call in USDC
Uptime
95.0%
last 30 days
Response time
419 ms
575 ms slowest 5%
Last check
Passed
1 h ago, next any minute now

Run a free test callHow to call it

Reliability

All checks passedSome failedAll failedNot checked

Status and outage history · Atom feed

How to call it

GET https://flat-rate-llm.kikoribera03.workers.dev/v1/evm/verdict

Each call costs $0.02 in USDC on Base, paid with the request over x402.

Run a free test callOne unpaid request, the way an agent sends it. You see the payment challenge it gets back. Nothing is charged.

Example request

From the listing.

GET https://flat-rate-llm.kikoribera03.workers.dev/v1/evm/verdict?chain=base&token=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913

Parameters

ParameterTypeRequiredDescription
chainstringNobase | ethereum | polygon | arbitrum | optimism.
tokenstringYesERC20 contract address to judge.

Example response

The provider's example. We can't check it without paying.

Example response, 52 lines
{
  "card": "USDC — OWNER-CONTROLS-BALANCES (score 17)\nUSD Coin on Base\n0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\n...",
  "chain": "eip155:8453",
  "disclaimer": "Research, not investment advice. The label, the score and the evidence are deterministic; the reading is written by a language model and can be wrong.",
  "evidence": [
    {
      "foundIn": "proxy",
      "means": "the whole implementation can be swapped: today's code is not a promise",
      "offsetBytes": 70,
      "power": "upgradeTo(address)",
      "selector": "0x3659cfe6",
      "weight": 3
    },
    {
      "foundIn": "implementation",
      "means": "the owner can create new tokens out of nothing, diluting every holder",
      "offsetBytes": 590,
      "power": "mint(address,uint256)",
      "selector": "0x40c10f19",
      "weight": 3
    }
  ],
  "headline": "USDC (USD Coin) on Base: owner-controls-balances — the code can be swapped by its admin, and ownership is not renounced. 5 owner powers found in the deployed bytecode.",
  "market": {
    "isQuoteCurrency": true,
    "note": "this token is the quote currency, so no pool is needed",
    "tradable": true
  },
  "model": "@cf/meta/llama-3.1-8b-instruct",
  "name": "USD Coin",
  "onchain": {
    "codeSizeBytes": 1852,
    "currentlyPaused": false,
    "implementation": "0x2ce6311ddae708829bc0784c967b7d77d19fd779",
    "implementationCodeSizeBytes": 23464,
    "isContract": true,
    "isERC20": true,
    "isProxy": true,
    "owner": "0x3abd6f64a422225e61e435bae41db12096106df7",
    "ownershipRenounced": false,
    "proxyAdmin": "0x4fc7850364958d97b4d3f5a08f79db2493f8ca44",
    "proxyStandard": "zeppelinos"
  },
  "reading": "USD Coin trades as USDC on Base and scores 17. It is an upgradeable zeppelinos proxy, and whoever controls 0x4fc78503... can replace its code; its owner has not renounced, and the implementation exposes mint, pause and blacklist.",
  "readingSource": "model",
  "risk": "high",
  "score": 17,
  "symbol": "USDC",
  "token": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
  "verdict": "owner-controls-balances",
  "verdictMeans": "Whoever controls this contract can act on your balance - mint, freeze, blacklist or replace the code. This says who CAN, not who will: a regulated stablecoin and a rug pull both land here."
}

Call it from code

The curl command shows the payment challenge. The JavaScript and Python versions pay and call, and never pay more than $0.02.

curl: see the payment challenge
# bash or zsh: see the payment challenge. Nothing is charged.
curl -sS -g -i 'https://flat-rate-llm.kikoribera03.workers.dev/v1/evm/verdict?chain=base&token=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913'

# x402 v2 sends the challenge base64-encoded in the PAYMENT-REQUIRED header (v1 sends it in the body).
# To read the header:
curl -sS -g -o /dev/null -D - 'https://flat-rate-llm.kikoribera03.workers.dev/v1/evm/verdict?chain=base&token=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913' \
  | grep -i '^payment-required:' | cut -d' ' -f2 | tr -d '\r' | base64 --decode
JavaScript: pay and call
// npm i @x402/fetch @x402/evm viem
import { wrapFetchWithPayment, x402Client } from "@x402/fetch";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";

// Pays at most $0.02 per call.
const client = new x402Client().setSpendControls({ maxAmountPerPayment: "$0.02" });
registerExactEvmScheme(client, { signer: privateKeyToAccount(process.env.EVM_PRIVATE_KEY) });
const pay = wrapFetchWithPayment(fetch, client);

// Not sure it's safe to pay? ToolVet checks it first for $0.005. Pay for that from a separate
// client: this one is capped at $0.02 per payment. GET https://toolvet.app/api/v1/check?url=https%3A%2F%2Fflat-rate-llm.kikoribera03.workers.dev%2Fv1%2Fevm%2Fverdict
const res = await pay("https://flat-rate-llm.kikoribera03.workers.dev/v1/evm/verdict?chain=base&token=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913");
console.log(res.status, await res.text());
Python: pay and call
# pip install "x402[requests,evm]"
import os
from eth_account import Account
from x402 import x402ClientSync
from x402.http.clients import x402_requests
from x402.mechanisms.evm import EthAccountSigner
from x402.mechanisms.evm.exact.register import register_exact_evm_client

# Pays at most $0.02 per call.
client = x402ClientSync().set_spend_controls({"max_amount_per_payment": "$0.02"})
register_exact_evm_client(client, EthAccountSigner(Account.from_key(os.environ["EVM_PRIVATE_KEY"])))

with x402_requests(client) as session:
    res = session.get("https://flat-rate-llm.kikoribera03.workers.dev/v1/evm/verdict?chain=base&token=0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913")
    print(res.status_code, res.text)

Security scan

No findings

We scan names, descriptions and tool definitions for hidden instructions and other prompt-injection patterns.

Recent checks

WhenResultHTTPTimePrice
1 h agoPassed402344 ms$0.02
6 h agoPassed402419 ms$0.02
10 h agoPassed402153 ms$0.02
14 h agoPassed402419 ms$0.02
18 h agoPassed402413 ms$0.02
Show 10 older checks
22 h agoPassed402345 ms$0.02
26 h agoPassed402269 ms$0.02
29 h agoPassed402398 ms$0.02
33 h agoPassed402162 ms$0.02
37 h agoPassed402479 ms$0.02
41 h agoPassed402501 ms$0.02
44 h agoPassed402415 ms$0.02
2 days agoTimed out---
2 days agoPassed402575 ms$0.02
2 days agoPassed402477 ms$0.02