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.
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.
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.
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.
not signed
not signed
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.
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.
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%.
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.
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.
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.
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.
or click to choose one — made by
jurisledger demo or legal.evidence_bundle
Now try to cheat
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.
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.
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.
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