{"slug":"chain-evidence-check","name":"Chain Evidence Check","version":"1.0.0","updated_at":"2026-10-09T03:24:29.326Z","use_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.","languages":["any"],"tags":["blockchain","verification","json-rpc","x402","usdc","agents"],"category":"agents","category_url":"https://aiskills402.com/categories/agents","keywords":["transaction receipt","block explorer","public RPC endpoint"],"faq":[{"q":"What is in the answer?","a":"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."},{"q":"Which readings does it refuse to count as an answer?","a":"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."},{"q":"Will it call a sound observation unproven?","a":"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."},{"q":"Does it help Claude Sonnet?","a":"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."}],"examples":[{"lang":"en","model":"claude-sonnet-5-5","input_excerpt":"Claim: The buyer never paid: transaction 0x9c4e71b02d8f6a35e4c0b9d1f7a2e8c63b5d4f0a1e2c3b4d5f6a7b8c9d0e1f2a does not exist on Base.\nOn-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.","output_excerpt":"{\"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'.…"}],"page_url":"https://aiskills402.com/skills/chain-evidence-check","markdown_url":"https://aiskills402.com/skills/chain-evidence-check.md","image_url":"https://cdn.aiskills402.com/og/skills/chain-evidence-check/dae2ba79.png","related_url":"https://api.aiskills402.com/v1/skills/chain-evidence-check/related","purchases_count":null,"tested":{"date":"2026-10-09","strong":{"model":"claude-sonnet-5-5 (Claude Code alias \"sonnet\")","verdict":"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\")","verdict":"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.","baseline":{"date":"2026-10-09","rows":[{"label":"Claims judged right, verdict and next check (24 claims)","better":"higher","strong":{"with":{"n":24,"of":24},"without":{"n":20,"of":24}},"weak":{"with":{"n":21,"of":24},"without":{"n":17,"of":24}}}],"note":"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."},"report_url":null},"price_usd":"0.05","price_micro":50000,"size_bytes":10319,"sha256":"a320dade4b8607f13147bc43f189b8e2a3deb45ddff21eba2185a59e78d262de","outline":["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"],"license":{"summary":"Perpetual, non-exclusive; use and modify for yourself incl. paid work; no resale or republishing","holder":"Georgi Kalchev, aiskills402.com","url":"https://aiskills402.com/docs#license"},"buy_url":"https://api.aiskills402.com/v1/skills/chain-evidence-check/file","redownload_url_template":"https://api.aiskills402.com/v1/purchases/{token}","mcp_tool":null,"payment":{"protocol":"x402","scheme":"exact","asset":"USDC","selling":true,"network":"base","network_caip2":"eip155:8453","pay_to":"0x8e37022edcf0f21cf3c9f93fee9d4d32519f36f4","facilitator":"cdp"},"seo_title":"Chain Evidence Check Skill","seo_description":"Does your on-chain reading prove the claim? Get a binary verdict plus the next check: null receipts, explorer lag, refused RPC calls, lagging balances.","versions":[{"version":"1.0.0","date":"2026-10-09","changelog":"# Changelog\n\n## 1.0.0 — 2026-10-08\n\nFirst 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.\n\nFacts re-checked on 2026-10-08, read-only JSON-RPC calls from a developer machine, no key, no transaction, nothing deployed:\n- 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.\n- 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).\n- 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.\n- 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).\n\nTests: 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).\n\n## 1.0.1 — 2026-10-09 (finalised after the model test)\n\n- Measured on 24 claims: Sonnet 20 -> 24, Haiku 17 -> 21 (without -> with the skill, same checks on both sides).\n- next_check checks widened for both sides after right answers were refused (second, independent endpoint; after a few blocks; two or more nodes; other Base nodes; a control endpoint, later).\n- Price: $0.05 (Sonnet gain 4).\n"}]}