Open standard · version 1 · 26 September 2026

A record is only as good as a stranger's way to check it.

This is how every ParetoAlpha seal is built, written down so anyone can check one without trusting us, and so anyone can build one. Use it, including if you compete with us.

1 · The canonical form

The same record always makes the same bytes.

Keys

Every object's keys sorted; no whitespace; strings as JSON writes them, non-ASCII left as is.

Missing values

Written as null.

Numbers

Rounded to 12 significant digits (15 at 1e10 and above), written the way JavaScript writes a number. Money that must be exact is carried as a decimal string, not a number.

Reference

The rules in code: verify.py, standard library only, the same function every verifier imports.
2 · The seal

A seal is the SHA-256 of the canonical body.

proof_hash = hex(sha256(utf8(canonical(body))))

The body carries everything the answer depends on: the inputs or the public source and its own SHA-256, the program the arithmetic ran, the results as exact strings, and the engine that ran it. Change one character and the hash changes. A seal names nothing it does not prove.

A foundation's 990-PF

kind public-filing-990pf: the IRS object id and the SHA-256 of the return as published, the return's own arithmetic re-done. Its body is public at /api/proof/body?hash=….

A 13F

kind public-filing: the SEC accession and the SHA-256 of the documents as served.

A family's answer or decision

The family's own; never public. Its hash can still be checked at /verify, which confirms it exists without revealing anything else.

A decision recorded late

kind historical-record: both dates, decided on and recorded on, inside the seal, so it can never pass for a record made at the time.
3 · The chain

Every row carries the fingerprint of the row before it.

row_hash = hex(sha256(utf8(prev_hash + "|" + canon(row))))

The first row of each ledger links to the literal genesis:<table>:<owner>. Editing, deleting, inserting or reordering any row breaks every link after it.

4 · Outside the database

The heads leave our hands every day.

Daily anchor

Each chain's latest head is written once a day to storage locked for 7 years in compliance mode: no one, us included, can shorten or remove it. A rewritten chain no longer contains a head that was already published.

Public log

A Merkle root over every head, one entry a day, each with an RFC 3161 timestamp from an independent authority: /log. The openssl command to check a token is on that page.

Leaf

leaf = sha256("leaf|" + subject + "|" + chain + "|" + seq + "|" + head)
5 · Verifiers

Every rule has a checker that needs nothing from us.

verify_proof.py

A public-filing proof: recomputes the hash, asks the ledger, and, given the IRS return, checks its SHA-256 and re-derives the 5% minimum investment return, the 1.39% excise and the distributable amount itself.

verify_prudence.py

A prudence file exported for counsel.

verify_seal.py

A signed statement (Ed25519) against the published key set.

verify.py

A data API answer's content hash; the canonical form every verifier shares.
Licence

Free to implement.

This specification is published under the Creative Commons Attribution 4.0 licence. Anyone may implement it, in any product, including one that competes with ours. A trustee is better defended by a format many can check than by one only its author can.

Start

Check a seal now.

Paste any fingerprint. No account.

Or book 20 minutes with the founder →