One blockchain per election, built to be recounted.
Every election publishes its blockchain on its public register: JSON blocks linked by hashes, signed by the platform and timestamped in the Bitcoin blockchain. The base protocol is enough to verify an election; the blockchain comes on top and lets anyone check the register's integrity and immutability, without depending on us.
Why publish a blockchain?
In a polling station, trust comes from the room: the ballot box sits in plain view of everyone. Online, we replace it with something more demanding: publishing the ballot box itself, in a form that no one, not even us, can quietly rewrite.
One register per election
Every election produces its own chain, published on its public register: the election configuration, the keys authorized to vote, the ballots, then the closure. Nothing else goes in, and the result is not in it either. It is recomputed from the published ballots.
Any rewrite is detectable
Each block contains the cryptographic hash of the previous one. Altering an old ballot breaks every hash that follows: anyone who kept a copy of the register can prove it.
Signed, and dated outside our walls
Each block is signed by the platform, then timestamped in the Bitcoin blockchain via OpenTimestamps: its existence at a given date can be proven without trusting us.
What it is not
No cryptocurrency, no mining, no decentralized consensus: an append-only register that anyone can copy. Immutability comes from independent copies and the Bitcoin anchoring, not from a network of miners.
The life of a chain, from opening to closure.
Four block types, a fixed cycle, strictly sequential appends. The chain is published as soon as voting opens and remains available after the election.
Configuration: the genesis
At opening, the first block freezes what will never change: title, candidates, voting method, ballot rules, anonymity and weighting options, and the size of the electoral roll at opening (voters may still be added during the vote; the closure roll shows the final size, so the number of additions is public). Its previous_hash is null: it is the origin of the chain.
Rings: the authorized keys
The rings block publishes the public keys allowed to vote, grouped into signature rings. An emergency replacement during the election appends a new rings block at the end of the chain. Nothing is ever inserted or rewritten.
Votes: the ballots, in batches
Signed ballots are published in batches during the election (never one by one, to avoid timestamping individual votes) and sorted by key image within each block. At closing, the remainder is published whatever its size.
Closure: totals and participation register
A single closure block seals the chain: the totals (blocks, ballots, participation, weights) and the participation register, pseudonymous by default. Nothing can be added after it.
Anchoring in Bitcoin
As soon as it is published, each block is submitted to the OpenTimestamps calendars. Its .ots proof is completed once the transaction is confirmed in the Bitcoin blockchain. It can then be verified with the standard tools, without trusting us.
Verify, without asking permission.
Everything is downloadable in the clear, with no account and no API. The exact format of every block, the keys that sign them and the verification procedure, check by check, are published in the technical documentation.
- Blockchain The over-protocol that seals the register: envelope, four block types, serialization, chaining, signature, timestamping.
- Verification procedure Verifying an election end to end: from the register alone, or with the blockchain.
- Platform keys The OpenPGP v6 certificates that sign the blocks, their rotation and their machine endpoint.
What this blockchain does not claim to be.
The word “blockchain” sometimes promises more than it says. Here is precisely where our guarantees stop, and where they really come from.
No decentralized consensus
The platform is the register’s only writer: no miners, no validators. The structure guarantees that no rewrite can go unnoticed, not that it is physically impossible.
The signature proves authenticity
We hold the signing key. It establishes that a block comes from the platform and was not forged by a third party. It does not make the block immutable.
Immutability comes from copies
It rests on independent copies of the register (yours, a challenger’s) and on the Bitcoin anchoring, which make any rewrite provable after the fact.
A register you verify, not one you believe.
The rest of the protocol (anonymity, ring signatures, double-vote protection) is explained on the Security page; the white paper gives the reference version.