This document lays out the differences between two ZKP Proof of Innocence tools, Sandscreener and Chainway's Proof of Innocence.
Learn more about Sandscreener [here](https://sandscreener.io), and Proof of Innocence [here](https://poi.chainway.xyz/).
| Aspect | Sandscreener | Proof of Innocence |
| -------- | -------- | -------- |
| Validity Guarantee | Instant. A proof is recorded if it has been performed against real & verified input data (i.e., a real Tornado Cash deposit and a verified blocklist). |Partial. A proof verification does not guarantee that the input data of the proof was valid. Requires additional verification of inputs.|
|Verification Result|Smart contract record.|Off-chain file (can be downloaded or stored in IPFS).|
|Composability|Full. Proofs and their inputs are verified and stored on-chain. Stored results can be used by any smart contract.|Partial. The verifier is onchain, but the verification result is not stored anywhere.|
|Blocklist Format|List of addresses. Possible to compose or verify without special tools.|List of commitments. Requires preliminary analysis of Tornado Cash deposit data.|
|ZKP Technique|Sorted Merkle tree. Optimized for the case when *n<sub>blocklisted</sub><<n<sub>all</sub>*, allows for slightly faster proof.|Sparse Merkle Tree. A general approach, takes slightly longer.|