The open verifier
Check a record yourself.
Your browser fetches the record and the house's published key, then recomputes every fingerprint, follows every link of the chain and checks every signature. Nothing here asks you to trust us.
Each entry gets one of three words: Verified, Unverified, No signature.
The entries
Checked in this browserThe house log
Every word, numberedEvery entry of every word is numbered in the house log, in the order the house wrote it. Once a day the house signs a checkpoint of the log and sends its fingerprint to OpenTimestamps, outside the house. Anyone who keeps a checkpoint can replay the log against it, and a deleted word or a history signed again no longer matches.
Published at /log/checkpoints.json and /log.json. Each checkpoint's OpenTimestamps proof is beside it, for the standard ots verify.
The key
The house key's fingerprint: fetched when you verify. It is published at /.well-known/symi-key.json.
In your own code
No dependenciesimport { verifyRecord, fetchLog, replayLog } from 'https://www.symi.io/verify.mjs';
const record = await (await fetch('https://www.symi.io/api/cells/<id>/verify')).json();
const { key } = await (await fetch('https://www.symi.io/.well-known/symi-key.json')).json();
const result = await verifyRecord(record, key); // { ok, count, entries }
const log = await fetchLog('https://www.symi.io');
const whole = await replayLog(log.entries, log.checkpoints, log.key); // { ok, length, checkpoints, problems }