ChainWard Attest EAS on Base

Check a counterparty before you pay it.

More people are paying AI agents, and agents are paying each other, in USDC on Base. ChainWard's free check reads an address's on-chain history and answers Pay or Hold, with one reason. ChainWard Attest writes flagged reports onto Base itself as EAS attestations (signed, public records anyone can read), so any agent, contract or app can see what we found about an address, and verify it, without trusting our website.

41 attestations on Baseopen source · MITfree to readon-chain behavior only

What goes on-chain

One attestation per flagged report. The limit travels with it.

The recipient is the address that was checked. Each new report points back to the previous one, so the history is on-chain too.

band
How much surfaced and how serious: low-signal, mixed, elevated or high-signal. The check answers Hold on elevated, high-signal, or any high-severity flag.
flagIds
Stable ids of every flag raised (dormant_wallet, stranded_value, …).
high / medium / low / infoCount
Flags by severity, so a contract can branch without parsing strings.
asOfBlock
The Base block the report was read at.
reportURI
The human-readable report on chainward.ai.
reportHash
A keccak256 fingerprint of the canonical report JSON (evidence and the not-assessed list included), so anyone can confirm the report was not changed.
scope
The limit, written into every attestation: on-chain behavior only, and no flags is not a clearance.

Trust

The schema is public. Check the attester.

Anyone can attest with a public EAS schema. Only attestations signed by ChainWard's attester are ChainWard's.

Attester0x5edc6276B89CC185aC8D6A7eCfdE076e1ACf50DF
Schema UID0x09573690adba41164227b57600aa02061b0ce79dc0655e4c8b36bfe95bb41552
EAS contract0x4200000000000000000000000000000000000021

Reading it

Four ways in.

API
GET api.chainward.ai/api/risk/attestation/<address> returns the uid, tx, explorer link, and the exact canonical JSON to recompute the hash.
EAS
base.easscan.org or its GraphQL: filter by the schema UID, the recipient, and ChainWard’s attester.
MCP
check_counterparty in chainward-mcp-server (npx -y chainward-mcp-server), for AI assistants and agents that call tools over MCP.
Example agent
examples/check-counterparty.ts finds the attestation, re-reads it from the EAS contract, verifies the hash, and applies a payment policy. examples/x402-guard does the same inside an x402 client (x402 lets one program pay another a few cents per request in USDC) and refuses to pay a flagged seller before signing.

The example agent reads ChainWard's latest attestation for an address, checks the fingerprint, and applies a sample policy you can change: a high-severity flag means hold the payment.

$ git clone https://github.com/saltxd/chainward && cd chainward && pnpm install
$ npx tsx examples/check-counterparty.ts 0x…

ChainWard on 0x… (as of block 51,799,275, 2 days ago):
  band high-signal · flags dormant_wallet, stranded_value · high 1 / medium 1 / low 0 / info 0
  report https://chainward.ai/report/0x… · hash verified
Policy: high-severity flag on record → hold the payment for review.

Full schema, verification steps, and what does and doesn't get attested: docs/ATTEST.md.


Pay per check

Need it fresh? Pay per call.

GET api.chainward.ai/api/risk/x402?address=0x… returns Pay or Hold with its reason and the full report, no older than 24 hours, running a new check when needed. It costs 0.05 USDC on Base per call, paid over x402, with no account and no API key. You are charged only after the check succeeds, so a failed check costs nothing.

Paying an x402 seller? GET api.chainward.ai/api/risk/seller-demand?address=0x… (0.10 USDC) shows where its buyers get their USDC: how much traces back to the seller (including payers who go through payment proxies such as Meridian and Fluxa), how much it pays back, and whether one wallet funds most buyers. It is the method behind the x402-on-Base decode, and it runs weekly on Base’s largest sellers on the x402 seller board.

Building for BNB Chain’s Set and Earn? GET api.chainward.ai/api/risk/hires?agent=<id>&chain=bsc (0.10 USDC) shows whether an agent’s hirers are wallets its owner neither is nor funded. It runs daily on every agent hired since Oct 1, on the Set and Earn board.

$ cd chainward/examples/pay-per-check && npm install
$ BUYER_PRIVATE_KEY=0x… npx tsx index.ts 0x…

Start here

Flagged reports go on-chain. Most checks don't.

Run the free check on any Base address. Its report is attested on Base, usually within about 10 minutes, only when all of this holds: it was filed in the last 7 days from an up-to-date copy of the chain, it carries at least one flag based on what the address actually did (missing activity or a sanctions-list match alone doesn't count), and the address isn't one of ChainWard's own. At most 50 reports go on-chain a day. BNB Chain reports are not attested.

Run a free risk check →

ChainWard reads Base directly and tells you what the chain shows: the answer, the reason, and the evidence. On-chain behavior only, so it can't see promises made off-chain. Free and public.