{
  "markdown": "# Touchstone Assay\n\nTouchstone Assay publishes Dated SIU — the benchmark price of AI inference work, measured by actually\nbuying inference against a versioned task basket, not by surveying list prices.\n\n## The two hard invariants\n\n1. **The print is computed from executed runs only.** Published list prices inform exchange\n   rates and are never inputs to the print.\n2. **The escrow contract is non-custodial.** Funds move only to the pre-agreed seller, back to\n   the buyer, or to the fee treasury — no admin path to user money exists in any code path.\n\n## How to run a print\n\n_Placeholder — wired up once `packages/print` exists._\n\n## Docs\n\n- [`CLAUDE.md`](./CLAUDE.md) — vocabulary, invariants, build boundaries.\n- [`docs/build1-spec.md`](./docs/build1-spec.md) — the Build 1 engineering specification.\n- [`docs/plan.md`](./docs/plan.md) — orientation, dependency order, and open risks.\n- [`docs/architecture.md`](./docs/architecture.md) — one diagram of the whole system.\n- [`docs/demo.md`](./docs/demo.md) / [`docs/demo-arc.md`](./docs/demo-arc.md) — the buyer/seller\n  agent loop, real transcripts, on Base Sepolia and Arc Testnet.\n\n## Deployments\n\n<!-- BEGIN GENERATED: deployments -->\n\n### Arc Testnet\n\nChain ID `5042002`. Deployed 2026-09-05 from commit `95eea03`.\n\n| Contract                | Address                                                                                                                        | Verification    |\n| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------ | --------------- |\n| `TouchstoneAttestation` | [`0x12b886b043feABc3d90bBae3ae206d22b208160d`](https://testnet.arcscan.app/address/0x12b886b043feabc3d90bbae3ae206d22b208160d) | Pass - Verified |\n| `TouchstoneEscrow`      | [`0x3Cc274d68972DFA1B9B13b90eE40664E0dE2c91F`](https://testnet.arcscan.app/address/0x3cc274d68972dfa1b9b13b90ee40664e0de2c91f) | Pass - Verified |\n\nFull record — transaction hashes, block numbers, constructor arguments, compiler settings, and live smoke-test results — is canonical in [`data/deployments/arc-testnet.json`](./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.\n\n**Not deployed to mainnet.** Requirements before it can be:\n\n- treasury MUST be a Safe/multisig, not an EOA. It is immutable with no setter, so a lost key makes fee revenue permanently unrecoverable and the only remedy is redeploying the escrow and migrating every integrator.\n- Generate TOUCHSTONE_PUBLISHER_KEY on an air-gapped machine. The testnet key reused here has passed through repository-adjacent files.\n- DeployArcTestnet.s.sol is chain-guarded to 5042002; a mainnet deployment needs its own script and its own review.\n- Arc mainnet's own chain ID and USDC contract address must be independently re-verified against Circle's/Arc's own documentation at deploy time — never copied from this testnet record, even though Arc's testnet USDC happens to sit at a distinctive, memorable address (0x3600...0000).\n- Arc's public mainnet launches 2026-09-16 — see packages/contracts/script/DeployArcMainnet.s.sol, prepared but not run, with its chain-id guard deliberately left as an env-var placeholder rather than a guessed constant.\n\n### Base Sepolia\n\nChain ID `84532`. Deployed 2026-08-18 from commit `7b1d6ed`.\n\n| Contract                | Address                                                                                                                                | Verification    |\n| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | --------------- |\n| `TouchstoneAttestation` | [`0xF60701793eD168ffd6e818e1DCcb600393297190`](https://base-sepolia.blockscout.com/address/0xF60701793eD168ffd6e818e1DCcb600393297190) | Pass - Verified |\n| `TouchstoneEscrow`      | [`0x3eC06FFe8d5250d5Edf8Fff26b163aaaD65c8a00`](https://base-sepolia.blockscout.com/address/0x3ec06ffe8d5250d5edf8fff26b163aaad65c8a00) | Pass - Verified |\n\nFull record — transaction hashes, block numbers, constructor arguments, compiler settings, and live smoke-test results — is canonical in [`data/deployments/base-sepolia.json`](./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.\n\n**Not deployed to mainnet.** Requirements before it can be:\n\n- treasury MUST be a Safe/multisig, not an EOA. It is immutable with no setter, so a lost key makes fee revenue permanently unrecoverable and the only remedy is redeploying the escrow and migrating every integrator.\n- Generate TOUCHSTONE_PUBLISHER_KEY on an air-gapped machine. The testnet key used here has passed through repository-adjacent files.\n- Deploy.s.sol is chain-guarded to 84532; a mainnet deployment needs its own script and its own review.\n\n### Verify a print independently\n\nA print's own `signature` and `public_key` fields only prove internal consistency — that some\nkey signed this exact body. They cannot prove that key is Touchstone Assay's, because a tampered\nfile could carry a self-consistent signature over a different key entirely. Closing that gap is\nthe entire reason the publisher key is coupled to `TouchstoneAttestation`: the contract's `publisher` address is\nimmutable and lives outside the file, so it is a truth a tampered print cannot rewrite.\n\nThe loop:\n\n1. Recompute the print's body hash independently (JCS-canonicalise the body minus its signature\n   fields, keccak256 it).\n2. Recover the signer's address from the raw `{signature, hash}` pair — not read from the\n   print's own `public_key` field. (Recovery yields two address candidates, since the stored\n   signature carries no recovery bit; exactly one matches a real signer.)\n3. Compare the recovered address against `TouchstoneAttestation.publisher()`, read live from chain.\n4. Confirm the same body hash is anchored (`postedAt(bodyHash) > 0`).\n\n```bash\nBASE_SEPOLIA_RPC_URL=... pnpm --filter @touchstone/print run verify-onchain <print-id> base-sepolia\n```\n\nNo `TOUCHSTONE_PUBLISHER_KEY` is needed — this command only reads. Real output against the\nworked-example print (docs/siu-worked-example.md, Dated SIU $0.0383) anchored on Base Sepolia:\n\n```\nOn-chain publisher():        0x284ff2F8605Ff8AFeDa6959B856Bb7E6d48f845a\nRecovered signer candidates: 0x7ab67ceaaf33b21336b0481b3e8a867b70503e35, 0x284ff2f8605ff8afeda6959b856bb7e6d48f845a\n  -> MATCH (recovery id 1): this print was signed by the on-chain publisher.\n\npostedAt(bodyHash): 1787035752\n  -> ANCHORED at 2026-08-18T06:49:12.000Z\n\nVERIFIED: signature matches the on-chain publisher AND the hash is anchored.\n```\n\nA print signed by any other key — or never anchored at all — reports `NOT VERIFIED` and exits\nnon-zero (verified live against Base Sepolia with an unrelated key: neither recovered\ncandidate matched `publisher()`, and `postedAt` read 0).\n\n<!-- END GENERATED: deployments -->\n",
  "bytes": 7197,
  "sha": "13f3667e9d92d6cd67148b6c33726fa2a127c43e463616291df6dc999b465b30",
  "repo_slug": "petrkrulis2022/dated-siu-inference",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_petrkrulis2022_touchstone_mcp_b9c3741b/readme"
}