# Overview

### What is the ZeKnow Solv protocol?

ZeKnow Solv is a cryptographic protocol that uses [zk-SNARK](https://consensys.net/blog/developers/introduction-to-zk-snarks/) technology to prove that an exchange has enough funds to cover all of its user deposits.

It has two main subprotocols: a Proof-of-Assets and a Proof-of-Liabilities. The Proof-of-Assets protocol is a zk-SNARK whose output is a list of balances controlled by the exchange. The Proof-of-Liabilities protocol is a zk-SNARK whose output is the sum of the balances of all users of the exchange, as well as the root node of a Merkle tree which includes each individual user balance in a leaf node.

<figure><img src="https://1653909204-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2Fz3RfaZdEwSkNjFydkJOT%2Fuploads%2Fg6jFYT7eh1lqcTt0bnQt%2Fmermaid-diagram-2023-06-12-131445.svg?alt=media&#x26;token=21fcfad9-b1c2-4c07-8d67-b19639257fb3" alt=""><figcaption></figcaption></figure>

The Proof-of-Assets and Proof-of-Liabilities zk-SNARKs are included as private inputs to a top-level Solvency zk-SNARK. The top-level Solvency process privately verifies that the provided asset balances exceed the provided liability balances.

### What does the SolvencyProtocol smart contract do?

The SolvencyProtocol smart contract contains the verifying keys for the top-level Solvency zk-SNARK and it provides a function to publish a proof which checks the pairing equations that certify the validity of the proof. It also serves as an immutable record of the public outputs that are revealed by the top-level Solvency snark.

### What zk-SNARK protocol does ZeKnow Solv use?

The ZeKnow Solv protocol currently uses the Groth16 protocol over the BN254 curve.

### When is the trusted setup ceremony?

We plan to run a secure trusted setup ceremony to ensure the security of the zk-SNARKs powering the ZeKnow Solv protocol. If you want to participate in the trusted setup ceremony please reach out to us at <contact@proven.tools>.

### Which L1s are supported?

We natively support ownership of assets on the Ethereum and Bitcoin blockchains. In addition, we support third-party attestations of fiat balances and other chain balances.

### What is revealed by the top-level Solvency zk-SNARK?

The top-level Solvency zk-SNARK reveals the following public outputs:

* The (hash of the) verifying keys that are used to verify each of the sub-components.
* The (hash of the) blockchain snapshots that are used to determine the balance of the addresses owned by the exchange.
* The value of the Merkle root node for the Merkle tree that aggregates all included user balances.
* Optionally, the system can also selectively reveal the total values of assets and liabilities.

## Code Repository For Verification

<https://github.com/proven-dev/solvency>
