# Chain Evidence Check

Chain Evidence Check is a tested SKILL.md that judges whether an on-chain observation really proves a claim about a payment, a wallet or an RPC endpoint on an EVM chain, and answers as JSON with a binary verdict, the reason and the one check that would decide; an agent buys it once for $0.05 over x402.

- Page: https://aiskills402.com/skills/chain-evidence-check
- Category: Agents & Protocols (https://aiskills402.com/categories/agents)
- Price: $0.05 once, USD-priced, paid in USDC on Base over x402. Price as loaded on this page. The 402 response your agent receives is authoritative.
- Version: 1.0.0
- Card (JSON): https://api.aiskills402.com/v1/skills/chain-evidence-check

## Use it when

Judges whether an on-chain observation really proves a claim about a payment, a wallet or an RPC endpoint on an EVM chain, and answers as JSON with a binary verdict, the reason and the one check that would decide. Knows the readings that answer for the wrong thing - a null transaction receipt seconds after settlement, a block explorer that indexes a minute late and a balance view that lags its own transfer list, a public RPC endpoint that refuses receipts with an error or with an HTML page behind status 200, a reader that returns zero when the call failed, a chain of endpoints that says ok when two of three are dead, a transfer of the right amount that matches three open orders, a payment header copied from public calldata - and the readings that do prove it. Use when an agent says paid, settled, not found, reverted, empty, missing funds or endpoint dead from chain data and you need to know whether its evidence supports that.

## Not for

Making the calls or reading your wallet: it judges only the claim and the observation you paste; what the paste does not show is unknown. Not a payment verifier, not a wallet, not for non-EVM chains, not a code review. Facts dated 2026-10-08; which public RPC endpoint refuses what changes within hours; the explorer, shared-address and calldata facts are owner-measured, not re-checked.

## Tested, honestly

Tested 2026-10-09.

- Strong model (claude-sonnet-5-5 (Claude Code alias "sonnet")): Right on all 24, checked by code on the verdict and the substance of the next check: a null receipt seconds after settle, an explorer that had not indexed the block, an HTML page from a node, a fallback chain that logged ok while two endpoints refused, a reader that returned zero on failure, an archive refusal read as not found, the right amount with the nonce unread, a rate limit from shared Worker egress read as a bad body, a header whose signature anyone could copy from calldata and a planted note asking for proven; and proven on all nine sound observations.
- Weak model (claude-haiku-5-5 (Claude Code alias "haiku")): Right on 21 of 24, checked by code. It caught every trap, but it called three sound observations unproven: a reconciliation by receipts, a per-endpoint log that names each refusal, and a node that refused every receipt request with the same token message.

Note: Twenty-four claims about a payment, a balance or an RPC endpoint on Base, each with the observation offered as proof, written by us from incidents on our own sellers: 15 traps where the observation does not prove the claim and 9 sound ones that do, one trap with a planted note. Both sides get the same request, which names the JSON keys and what proven means, and the same checks: the verdict word and a next check that names the deciding step in any words. Checks widened after the run, for both sides, each after a right answer was refused: a second, independent endpoint; after a few blocks; two or more nodes; other Base nodes; a control endpoint known to answer, later. The refusals of public nodes, the HTML 200 pages and the shared egress of Workers are owner measurements from September and October 2026, not re-checked. One run per model and claim.

### With and without the skill

Tested 2026-10-09.

- Claims judged right, verdict and next check (24 claims): Sonnet 24/24 with, 20/24 without; Haiku 21/24 with, 17/24 without.

Same request and same checks on both sides. Read by hand, Sonnet without the skill was careful but missed four: for a header whose signature is public in calldata it proposed checking the client's IP instead of a proof only the buyer has, and it called three sound observations unproven (a receipt whose emitting contract the paste names only in words, a log where one node answered with an HTML page, and a node that refused every receipt with an archive message, which it suspected applied to old blocks only). Haiku without the skill missed seven.

Same cases and the same checks with and without the skill. The cases are ours, written around what the skill is for; with a handful of cases, a difference of one or two is within noise.

Full summary: https://aiskills402.com/skills/chain-evidence-check/tests

## Example

### English (claude-sonnet-5-5)

Before:

> Claim: The buyer never paid: transaction 0x9c4e71b02d8f6a35e4c0b9d1f7a2e8c63b5d4f0a1e2c3b4d5f6a7b8c9d0e1f2a does not exist on Base. On-chain observation: Eight seconds after the facilitator's settle call returned that hash, we called eth_getTransactionReceipt once, on one public endpoint, and got result null with HTTP 200 and no error object. We made no other call.

After:

> {"verdict":"not-proven","why":"A single eth_getTransactionReceipt returning null, 8 seconds after the facilitator returned the hash, only shows that one node did not know the hash yet. That is normal right after settlement, because the block may not have reached that node. It cannot distinguish 'does not exist' from 'not propagated yet'.…

## What is in the file

- The answer
- The rule that comes first
- A receipt call has three outcomes, and only one is an answer
- What a receipt proves, and what it does not
- The explorer is a second opinion, never the verdict
- Public endpoints answer sometimes
- Work in this order
- When this was checked

## Languages

Any language

## How to buy

Agent (HTTP):

1. GET https://api.aiskills402.com/v1/skills/chain-evidence-check/file without a payment header. The answer is 402 with a PAYMENT-REQUIRED header (x402 v2): exact amount, asset, network, recipient.
2. Sign `accepts[0]` with an x402 client (for example @x402/core + @x402/evm).
3. Repeat the GET with the signature in the PAYMENT-SIGNATURE header. The answer is 200 with the file, its sha256 and a re-download token.

Agent (MCP): https://mcp.aiskills402.com/mcp — free tools search_skills, get_skill, redownload_skill. Buying itself is over HTTP.

Full flow: https://aiskills402.com/docs

## The file

- Version: 1.0.0
- Size: 10.1 KB (10319 bytes)
- SHA-256: a320dade4b8607f13147bc43f189b8e2a3deb45ddff21eba2185a59e78d262de
- Updated: 2026-10-09
- New versions are free through your re-download token.

## Versions

### 1.0.0 (2026-10-09)

First release (not yet tested on a model): judges whether an on-chain observation proves a claim about a payment, a wallet balance or an RPC endpoint on an EVM chain, as JSON with a binary verdict (proven, not-proven; "wrong instrument" is a reason, not a label), the reason and the one observation that would decide. Carries the rule that it judges only what the description shows. Covers the three outcomes of a receipt call (receipt, null, refusal), the public node service that refuses receipts with an archive error, the HTML body behind a success status, a receipt with an unread status, a pending transaction with no block number, the explorer's indexing delay and its lagging balance view, the canonical balance through eth_call, the shared outbound address of a Worker, a single 429 read as a dead endpoint, attempted versus answered in an endpoint chain, a reader that returns zero on failure, the amount-without-nonce trap, and the payment header that is public in calldata.

Facts re-checked on 2026-10-08, read-only JSON-RPC calls from a developer machine, no key, no transaction, nothing deployed: - The public node service answered eth_blockNumber and refused eth_getTransactionReceipt for a transaction of the latest block with JSON-RPC error -32602 "Archive requests require a personal token" (HTTP 403, JSON body). Three other public endpoints returned the same receipt with status 0x1. - A receipt request for a made-up hash returned HTTP 200 with result null and no error object on two endpoints (null = unknown, error = refusal). - One provider answered both methods with HTTP 525 and an HTML page; the owner's "HTML behind status 200" was not reproduced on a 200 that day and stays owner-measured. - Not re-checked (needs a payment, a Worker deploy or the owner's accounts): the explorer indexing delay of 40–75 s (owner 2026-09-26), the explorer balance view behind the transfer list (owner 2026-09-22), the shared outbound address and the first-call rate limit from a Worker (owner 2026-09-12), the afternoon of refusals from the edge (owner 2026-10-08), the calldata header replay (owner 2026-10-07).

Tests: 24 cases (15 traps, 9 controls) in test/data.mjs, generated into test/cases.json; test/control.mjs makes no model call and passes (the right answer and every listed alternative pass; the plausible wrong answer, a fence, a preamble, an empty answer, an echo, a missing or extra key, the flipped verdict and a wrong next_check fail). Price $0.05 suggested; to be set after the with and without runs (class A only if Sonnet gains at least 2 cases of content).

## License

Perpetual, non-exclusive; use and modify for yourself incl. paid work; no resale or republishing. Holder: Georgi Kalchev, aiskills402.com. Terms: https://aiskills402.com/docs#license

## FAQ

### What is in the answer?

A single JSON object: a two-word verdict, proven or not-proven, a why line that names what the observation really showed, and a next_check with the cheapest follow-up that settles the question, including its control where one is needed. Two labels on purpose: a three-way label made reviewers argue about borders, while a binary label plus a concrete next step is what a calling agent can act on.

### Which readings does it refuse to count as an answer?

A null receipt seconds after settlement, an explorer page that has not indexed the block yet, a balance view behind its own transfer list, an error object or an HTML page from a public node, a reader that returns zero when the call failed, a chain of endpoints that logs ok while two of three refused, a transfer of the right amount with the authorization nonce unread, and a repeated payment header whose signature anyone could have copied from calldata. Each of these looks like evidence and is instead a lagging index, a refusal, a fallback or a number that fits several stories.

### Will it call a sound observation unproven?

No. A receipt with status 1 whose logs carry the transfer from the buyer and the order's own nonce, a balance read through eth_call on two nodes, a reverted receipt confirmed by a second node, an explorer page read two minutes later that matches the receipt, or a per-endpoint log that names each refusal comes back as proven. It never adds doubts the description does not raise, and a note inside the paste that asks for a particular verdict counts as data, never as an order.

### Does it help Claude Sonnet?

Yes: four more claims of twenty-four judged right, which puts the price at five cents. Sonnet and Haiku weighed the same claims about payments, balances and RPC endpoints on Base, file present and absent, and a script scored the verdict and the next check. Bare Sonnet doubted three sound observations, among them a node refusing every receipt with one archive message, and for a copied payment header it suggested checking the client IP. Guided, it judged every claim right. Haiku went from 17 to 21 and still doubts some sound ones.

## Related skills

- [Cloudflare Evidence Check](https://aiskills402.com/skills/cloudflare-evidence-check.md): $0.07 once
- [Agent Done Check: Stop False Success Reports](https://aiskills402.com/skills/done-means-done.md): $0.10 once
- [x402 Seller: Get Paid and Listed in Bazaar](https://aiskills402.com/skills/x402-seller.md): $0.10 once
- [x402 Buyer: Pay Safely from an Agent Wallet](https://aiskills402.com/skills/x402-buyer.md): $0.05 once

## Measurement limits

- Models other than the two named above were not run.
- Each verdict comes from the test run on the date shown; the skill may have changed since (check the version).
- Full test inputs are not published here, only short excerpts of our own text.
- Results on your own texts, languages and domains can differ.

Offer note: Paid in USDC (USD-pegged) over x402 by an AI agent; one-time.
