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.|