# How It Works

## zkSNARKs for Privacy-Preserving Transactions

![](https://github.com/tornadocash/tornado-core/raw/master/docs/diagram.png)

Cyclone is simple -- a user deposits cryptocurrency into a pool and later withdraws from the same pool, which obfuscates the deposited tokens' history. For deposits, the user sends a "secret" in the form of a hash (called a commitment) and the deposit amount to the Cyclone smart contract. The contract accepts the deposit and adds the commitment to its list of deposits.

Later, when the user decides to make a withdrawal, they provide proof via the same secret via an unspent commitment from the smart contract’s list of deposits. zkSNARKs technology allows this to happen without revealing which exact deposit corresponds to this secret. The smart contract checks the proof, and transfers the originally deposited funds to the address specified for withdrawal. An external observer will be unable to determine which deposit this withdrawal came from.

For an even deeper dive, please see the [cryptographic review](https://tornado.cash/Tornado_cryptographic_review.pdf).

## Trusted Setup

As an anonymous team, we value complete transparency and aim for a safe and smooth launch of Cyclone. Everything is open-source and verifiable -- we apply the exact zkSNARKs [implementation](https://github.com/tornadocash/tornado-core/releases/tag/v2.1) used by tornado.cash, which has been extensively audited ([circuit](https://tornado.cash/Tornado_circuit_audit.pdf), [smart contracts](https://tornado.cash/Tornado_solidity_audit.pdf)). In addition, we directly use the result from `Trusted Setup MPC` which is [successful](https://ceremony.tornado.cash/) and running [well on Ethereum](https://medium.com/@tornado.cash/the-biggest-trusted-setup-ceremony-in-the-world-3c6ab9c8fffa#43d9).


---

# Agent Instructions: 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.cyclone.xyz/how-it-works.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.
