JurisLedger

A ledger that nobody owns, and anybody can check.

Contracts signed with keys, payments tagged with what they were for, and a record that a court, a statistics office or a rival bank can replay from the first block. This page walks the life of one transaction. Every step is something you can run.

1

A payment becomes final

Ana pays the café. Nobody is in charge, so who decides it happened? Four validators do, together, and only when more than two thirds of them agree twice.

In the repository: jurisledger integration runs exactly this, with signed votes, on a simulated hostile network; jurisledger cluster runs it as four processes.

2

The network is attacked

An attacker cannot forge a vote, so they do the one thing left: delay messages. One round of voting breaks. The second round, with a lock, holds. Watch both under the same attack.

In the repository: jurisledger asynchrony runs this attack plus 1,000 random ones with a lying validator. Single-phase forks in some; two-phase never does.

3

A contract is sealed

The words stay off the ledger. What goes on it is a fingerprint of the words, and each party's signature over that exact fingerprint. Edit the text below and watch what happens to a signed agreement.

Fingerprint on the ledger (SHA-256) …
The Mill
not signed
The Bakery
not signed
Draft
A contract is a draft until every named party has signed the same fingerprint. Signatures bind to the fingerprint, not to the title, so changing one character afterwards invalidates nothing on the ledger — it simply produces a different document that nobody has signed.
4

Who is anyone

No single registrar decides who exists. An account counts as verified when enough independent issuers have vouched for it. Press issuers to attest; one of them is corrupt.

What the account can do

    In the repository: jurisledger identity registers twenty fake firms with one corrupt issuer's help; none of them can sign a contract. Validators then vote the corrupt issuer out and its attestations stop counting at once.

    5

    Hidden amounts, honest books

    A public ledger of every payment would be a surveillance machine. So the amount is hidden inside a commitment, and a proof shows it is a whole number of cents between 0 and 42,949,672.95 without saying which. Try to pay a negative amount.

    Why 32 bits

    The value is split into bits. Each bit gets its own commitment and a proof that it is 0 or 1 — nothing else. The 32 pieces add up to the original commitment. A negative number has no such decomposition, so the proof cannot be built, and the ledger refuses the payment.

    In the repository: jurisledger confidential makes a real payment with two of these proofs and rejects money printing, overspending and replay. A proof is about 11 kB and takes a quarter of a second in pure Python.

    6

    The economy, measured

    Every payment says what it was for, and the ledger refuses tags that do not fit the accounts involved. Gross domestic product then stops being an estimate and becomes a sum. Drag the slider to see the one thing the ledger cannot see.

    2,196,332.41by expenditure
    2,196,332.41by production
    2,196,332.41by income
    Ledger captures 100.0% of true GDP. Three approaches computed from different transactions agree to the cent; that agreement is a consistency check, not a coincidence.

    How the tags become accounts

    In the repository: jurisledger gdp compares the ledger with the simulator's own books and with a stylised survey. Ledger error on what is on it: 0.0%.

    7

    Fraud, found

    Some fraud the ledger makes impossible: forged payments, replays, back-dated contracts. Some it can only make visible. Round-tripping — passing the same money in a circle to inflate revenue — is the second kind. Inject one and run the detector.

    Six firms trade normally. Nothing to see yet.

    In the repository: jurisledger fraud injects four frauds — a ring, structuring under a reporting threshold, invented invoice amounts, and one receivable pledged to two banks — and reports its false positives on a clean economy too.

    8

    Settle a dispute

    A lease names three rent instalments and an arbitrator both parties chose. Move time forward, pay or don't, open a dispute, and decide it. The arbitrator's powers are a short list: reduce, postpone or waive what is in dispute. Try to make it do more.

    The obligations, as the ledger reports them

    The arbitrator's award no open dispute

    In the repository: jurisledger disputes runs this with real signed transactions — thirteen claims, including that the award moved no money and that the claim, defence and award all appear in the offline-verifiable evidence file.

    9

    Prove it to a court

    An arbitrator receives one file about one contract. They check it here, in this browser: every signature, every validator certificate, every link to its block. The file never leaves their machine, and they do not have to trust whoever sent it — only the validators' public keys.

    Drop an evidence file here
    or click to choose one — made by jurisledger demo or legal.evidence_bundle

    Now try to cheat

    No file yet
    Load the sample, or drop the evidence-cold-storage-lease.json that jurisledger demo writes, and press Verify.

        The same checks run on the command line: jurisledger verify evidence.json validators.json. Both implementations are tested against each other on every commit.

        10

        Lock the text away from everyone

        A restricted contract's text is encrypted, and the key is split among five custodians so that any three can rebuild it and any two learn nothing. They release their pieces only to a reader whose VIEW is already on the ledger. Everything below is real cryptography running in this page: AES-256-GCM and Shamir secret sharing.

        Click a custodian to take it offline, or to make it lie.

        Sealed
        
              

        In the repository: jurisledger vault checks sixteen claims, including that a custodian handing back a forged piece is caught by public commitments, that one receipt buys exactly one read, and that custodians can be replaced and the threshold changed without the key ever being rebuilt.

        Run every one of these yourself

        Each claim on this page is a boolean in the test suite. Tested on Ubuntu with Python 3.10 or newer; the only dependency is the cryptography package.

        # get it
        git clone https://github.com/Normansrule/juris-ledger.git && cd juris-ledger
        python3 -m venv .venv && source .venv/bin/activate && pip install -e ".[dev]"

        # the steps above, as experiments with checked claims
        jurisledger integration   # 1
        jurisledger asynchrony    # 2
        jurisledger contracts     # 3
        jurisledger identity      # 4
        jurisledger confidential  # 5
        jurisledger gdp           # 6
        jurisledger fraud         # 7
        jurisledger disputes      # 8
        jurisledger demo --out demo && jurisledger verify demo/evidence-cold-storage-lease.json demo/validators.json  # 9
        jurisledger vault         # 10

        # then the real thing: four validator processes, one killed and revived
        jurisledger cluster --out cluster