<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="color-scheme" content="light dark">
<title>Founding Charter attestation verifier</title>
<meta name="description" content="Check that the Founding Charter attested on chain (EAS on Base) matches its published texts on IPFS. Static page, no backend, no wallet.">
<link rel="stylesheet" href="style.css">
</head>
<body>
<main>
<header>
<h1>Charter attestation verifier</h1>
<p class="muted">Give the EAS attestation UID. The page reads it from Base, fetches every text from IPFS, recomputes its sha256 and shows match or mismatch per text. No backend, no wallet.</p>
</header>
<form id="lookup" autocomplete="off">
<label>Network
<select id="network" name="network">
<option value="base">Base</option>
<option value="base-sepolia">Base Sepolia</option>
</select>
</label>
<label>Attestation UID
<input id="uid" name="uid" placeholder="0x followed by 64 hex characters" pattern="0x[0-9a-fA-F]{64}" required spellcheck="false">
</label>
<details>
<summary>Advanced</summary>
<label>RPC URL <input id="rpcUrl" name="rpcUrl" type="url" placeholder="default public RPC"></label>
<label>IPFS gateway <input id="gateway" name="gateway" type="url" placeholder="https://ipfs.io/ipfs/"></label>
</details>
<button type="submit">Verify</button>
<div class="row">
<button type="button" class="secondary" id="demo">Demo: matching texts</button>
<button type="button" class="secondary" id="demoTampered">Demo: one tampered text</button>
</div>
<p class="muted">The demos use the test fixture (a sample attestation and sample texts) with no network, so you can see both outcomes before the real Charter is attested.</p>
</form>
<section id="result" aria-live="polite"></section>
<footer class="muted">
EAS contract <code>0x4200000000000000000000000000000000000021</code> on Base and Base Sepolia. Schema: <code id="schema"></code>.
Source and tests on <a href="https://agentgate-source.pages.dev/charter-attestation-verifier/">agentgate-source</a>. MIT licence.
</footer>
</main>
<script type="module" src="app.js"></script>
</body>
</html>
agentgate-source: code mirror on Cloudflare Pages. All repos