Dated SIU, the benchmark price of AI inference work: one free tool, three paid via x402.
One address for any MCP client. No sign-in needed on this server.
4 read
Grouped by tool name. At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
Touchstone Assay publishes Dated SIU — the benchmark price of AI inference work, measured by actually buying inference against a versioned task basket, not by surveying list prices.
Placeholder — wired up once packages/print exists.
CLAUDE.md — vocabulary, invariants, build boundaries.docs/build1-spec.md — the Build 1 engineering specification.docs/plan.md — orientation, dependency order, and open risks.docs/architecture.md — one diagram of the whole system.docs/demo.md / docs/demo-arc.md — the buyer/seller
agent loop, real transcripts, on Base Sepolia and Arc Testnet.Chain ID 5042002. Deployed 2026-09-05 from commit 95eea03.
| Contract | Address | Verification |
|---|---|---|
TouchstoneAttestation | 0x12b886b043feABc3d90bBae3ae206d22b208160d | Pass - Verified |
TouchstoneEscrow | 0x3Cc274d68972DFA1B9B13b90eE40664E0dE2c91F | Pass - Verified |
Full record — transaction hashes, block numbers, constructor arguments, compiler settings, and live smoke-test results — is canonical in data/deployments/arc-testnet.json. This README section is a convenience view generated from that file (node scripts/generate-readme-deployments.mjs) and must never be hand-edited to disagree with it.
Not deployed to mainnet. Requirements before it can be:
Chain ID 84532. Deployed 2026-08-18 from commit 7b1d6ed.
| Contract | Address | Verification |
|---|---|---|
TouchstoneAttestation | 0xF60701793eD168ffd6e818e1DCcb600393297190 | Pass - Verified |
TouchstoneEscrow | 0x3eC06FFe8d5250d5Edf8Fff26b163aaaD65c8a00 | Pass - Verified |
Full record — transaction hashes, block numbers, constructor arguments, compiler settings, and live smoke-test results — is canonical in data/deployments/base-sepolia.json. This README section is a convenience view generated from that file (node scripts/generate-readme-deployments.mjs) and must never be hand-edited to disagree with it.
Not deployed to mainnet. Requirements before it can be:
A print's own signature and public_key fields only prove internal consistency — that some
key signed this exact body. They cannot prove that key is Touchstone Assay's, because a tampered
file could carry a self-consistent signature over a different key entirely. Closing that gap is
the entire reason the publisher key is coupled to TouchstoneAttestation: the contract's publisher address is
immutable and lives outside the file, so it is a truth a tampered print cannot rewrite.
The loop:
{signature, hash} pair — not read from the
print's own public_key field. (Recovery yields two address candidates, since the stored
signature carries no recovery bit; exactly one matches a real signer.)TouchstoneAttestation.publisher(), read live from chain.postedAt(bodyHash) > 0).BASE_SEPOLIA_RPC_URL=... pnpm --filter @touchstone/print run verify-onchain <print-id> base-sepolia
No TOUCHSTONE_PUBLISHER_KEY is needed — this command only reads. Real output against the
worked-example print (docs/siu-worked-example.md, Dated SIU $0.0383) anchored on Base Sepolia:
On-chain publisher(): 0x284ff2F8605Ff8AFeDa6959B856Bb7E6d48f845a
Recovered signer candidates: 0x7ab67ceaaf33b21336b0481b3e8a867b70503e35, 0x284ff2f8605ff8afeda6959b856bb7e6d48f845a
-> MATCH (recovery id 1): this print was signed by the on-chain publisher.
postedAt(bodyHash): 1787035752
-> ANCHORED at 2026-08-18T06:49:12.000Z
VERIFIED: signature matches the on-chain publisher AND the hash is anchored.
A print signed by any other key — or never anchored at all — reports NOT VERIFIED and exits
non-zero (verified live against Base Sepolia with an unrelated key: neither recovered
candidate matched publisher(), and postedAt read 0).
Public RPC endpoints prune old history. Confirmed live, 2026-09-27: sepolia.base.org now
refuses eth_getBlockByNumber/eth_getLogs for anything before block ~46,000,000 — which
includes this project's own August 2026 escrow deployment and smoke tests. Two different kinds
of read are affected very differently:
verifyPrintOnChain above (postedAt(bodyHash),
publisher()) reads TouchstoneAttestation's own current storage, not historical logs — it
works regardless of how old the anchored print is, and always will, on any node.packages/console) always scans from each contract's fixed deployment block, so it always
needs one — set TOUCHSTONE_<CHAIN>_ARCHIVE_RPC (e.g. TOUCHSTONE_BASE_SEPOLIA_ARCHIVE_RPC)
to a real archive-capable RPC URL (we use Alchemy; its Base Sepolia
endpoints serve full history on every tier — Infura is an equally standard alternative). The
public endpoint is kept for current-state reads (feeBps/treasury/current block number)
only.verify_receipt's own transaction-receipt lookup was checked, not assumed, against this same
pruning event: it still succeeds for a real settlement from August 2026 — getTransactionReceipt
by hash appears to survive on this provider's public endpoint longer than open-ended block/log
range queries do. That is not a guarantee it always will, on this or any provider, so
OnChainSettlementReader/verify_receipt also accept the same TOUCHSTONE_<CHAIN>_ARCHIVE_RPC
as an optional override for verifying an old settlement, falling back to the public endpoint
when unset.If you are independently verifying an old print or receipt and a historical read comes back empty, this is almost certainly why — the public endpoint's pruning horizon, not a real gap in what was actually recorded. Configure an archive RPC before concluding otherwise.