> For the complete documentation index, see [llms.txt](https://docs.lacunalabs.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.lacunalabs.io/proof-of-innocence.md).

# proof of innocence

*Privacy for honest people — provably.*

A privacy pool faces one persistent objection: if no one can see where funds came from, does it shield criminals along with everyone else? Proof of Innocence answers that objection — without breaking privacy for anyone.

## The dilemma — privacy vs. provenance

Privacy and accountability are usually treated as opposites. A transparent chain offers provenance — you can trace where funds came from — at the cost of everyone's privacy. A naive privacy pool offers the reverse: complete confidentiality, but no way for an honest user to show that their funds are clean. Both extremes are unsatisfying. Honest users want privacy *and* the ability to demonstrate, when it matters, that their money has nothing to do with theft or sanctioned activity.

## Association sets — proving where you don't belong

Lacuna addresses this through association sets. An association set is a curated list of deposits considered legitimate — for example, every deposit except those linked to publicly known hacks or sanctioned addresses. These sets are published by independent parties, not by Lacuna, and a user chooses which set to reference.

Using a zero-knowledge proof, a user can demonstrate that their deposit belongs to a chosen association set — or, equivalently, that it is excluded from a blocklist — without revealing which deposit is theirs or anything else about their history. The proof establishes one fact and nothing more: these funds are not among the flagged ones.

*Fig. 11 — A user proves their funds belong to a set of clean deposits — excluded from a blocklist of illicit ones — while revealing neither their identity nor their specific deposit.*

## Opt-in and selective by design

Proof of Innocence is optional and entirely user-controlled. Nothing forces a user to produce one for an ordinary private transfer. But when a counterparty needs assurance — an exchange crediting a deposit, a business accepting payment, a regulator asking a question — the user can generate exactly the proof required and disclose it only to that party. This is selective disclosure: the user decides what to prove, to whom, and when.

## Credible neutrality — Lacuna is not the judge

Crucially, Lacuna does not decide who is innocent. The protocol provides the cryptographic machinery; the association sets themselves are external and pluralistic, maintained by independent providers with differing policies. This keeps Lacuna credibly neutral — it does not censor, freeze, or adjudicate — while still giving honest users a way to dissociate from illicit funds. Criminals, unable to place their deposits in a reputable association set, are effectively excluded from the honest set without privacy being weakened for anyone else.

## What it enables

The result is privacy that coexists with legitimacy. An honest user can move funds confidentially and still satisfy an exchange's deposit checks, a partner's compliance requirements, or a future regulatory standard — proving the provenance of their money without surrendering their financial history to the public. Privacy and provenance, at the same time.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.lacunalabs.io/proof-of-innocence.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
