How it works Verification Transparency Platforms Blog Get early access
Privacy posture

Exactly who can see what.

Per poll mode, in plain language, including the parts that do not flatter us. If you are deciding whether to run a vote here, this page is the one that matters.

Last reviewed 2026-09-07, after an adversarial review of our own visibility model. The review changed this page — see the storage section.

The short version

A standard MintVote poll is not a secret ballot. It withholds your choice from every view, API and integration — which is worth having, and is not the same thing as secrecy. Anything that must genuinely be secret needs our commit–reveal module, and we will say so rather than let you assume it.

By poll mode
Can they see…Aggregate only defaultPublicSealed
That you took partYesYesNot until close
Your choice, from a view or APINoYes — that is the point of this modeNo
The totalsYes, after tallyYes, after tallyYes, after tally
Your choice, by reading chain storageYesYesYes
Your choice, from your own transactionYesYesYes

The last two rows are the honest ones, and they are why this page exists. An official election may never be set to Public, at any setting.

Why the chain sees everything

Your ballot is written to a public blockchain. We can decline to return it from our software — and on a default poll, we do — but the data itself sits in contract storage, and anyone can read contract storage directly. No permission, no function call, no cooperation from us.

We know this because we tried it on ourselves. In September 2026 we ran an adversarial review of our own visibility model, and it recovered every ballot and every voter of a default poll straight out of storage while our public getter was correctly refusing. The test that does it is kept in the repository and kept passing, so nobody on our team can quietly forget.

What the default mode actually buys you: no integrator, indexer, dashboard, journalist or API consumer gets your choice handed to them. That is a real reduction in casual exposure. It is not privacy against someone determined, and we will not call it that.

Small votes reveal themselves

If three people vote and the result is published, the result is very close to the ballots. If one person votes, the result is the ballot. This is arithmetic, not a flaw in our software — no gate and no cryptography changes it, including commit–reveal.

It matters because committees, boards and small association votes are exactly this size, and they are the votes we are best suited to today. Run one, and assume the outcome makes individual positions inferable.

What we can see

Everything the chain shows anyone, because it is a public chain. Beyond that:

  • Verification data is held off-chain and encrypted at rest. What goes on-chain is a personhood identifier and a commitment — a hash that lets anyone verify your attributes were not altered, while revealing none of them.
  • Fine-grained attributes — precinct, postcode, date of birth — are stored but are never queryable. They cannot appear in any published breakdown, by construction rather than by policy.
  • Administrative access is logged to an append-only, hash-chained audit trail, and support impersonation is time-boxed, reason-required and recorded.

What we publish about groups

Demographic breakdowns come only from an opt-in panel, never from a binding election, and they are governed separately and more narrowly than the vote itself. A cell is published only with at least 50 people behind it — 100 when the dimension is sensitive — and below that it is withheld rather than estimated. Counts carry calibrated noise, each release states the privacy budget it spent, and queries that would isolate individuals by differencing are refused outright. The detail is on the transparency page.

If you need real secrecy

Use commit–reveal. Instead of publishing a ballot, it publishes a commitment to one, and the ballot is revealed only in a later phase — so the plaintext choice is never sitting in storage waiting to be read.

It is a separate module and is not what runs on a standard poll. Parts of the surrounding work — threshold tallying so no single party can open the box early, and coercion resistance — are still being built. We would rather tell you that than sell you a word.

Check this yourself

None of the above is worth much if you have to take our word for it.

  • The transparency explorer rebuilds every poll from on-chain events and shows the block it stopped at, so you can reconcile our numbers against the chain rather than trusting the page.
  • Every published breakdown carries the parameters that produced it — the suppression floor, the budget spent, the attestation hash.
  • The mechanism, and the list of things we deliberately do not claim, is on how it works.

If you find something on this page that is not true, that is a bug of the most serious kind we have, and we would like to hear about it.

Decide with the real picture.

If your vote needs a standard this page does not meet, tell us — it is better to know now.

Get early access