SYMI

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 browser

    The house log

    Every word, numbered

    Every 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 dependencies
    import { 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 }