zero-network 0.1.10

Zero network privacy-preserving blockchain
Documentation
# Tutorial

In this section, we describe how to use the pallet for privacy-preserving transactions.

- [pallet-plonk]./6_1_plonk_pallet.md
- [pallet-encrypted-balance]./4_2_encrypted_balance.md
- [confidential_transfer]./6_3_confidential_transfer.md

You can check [Frequent Errors](./7_0_frequent_errors.md) when the error happens.

## Abstract
The privacy-preserving transactions consists of several pallet components. We roughly explain what kind of role for each pallet has.

### [pallet-plonk]./6_1_plonk_pallet.md

`plonk` is a zk-Snarks scheme and allows us to prove that the computation was done correctly. We perform transaction on `off-chain` and generate the proof. The blockchain verifies the proof and approve the transaction. We define the constraints circuit for `confidential transfers` and `confidential smart contracts` by this pallet.

### [pallet-encrypted-balance]./4_2_encrypted_balance.md

Users balances are encrypted by default. We use additive homomorphic arithmetic to hide the integer in transaction. Combining original [pallet-balance](https://github.com/paritytech/substrate/tree/v3.0.0/frame/balances) and [`ElGamal`](./3_4_elgamal.md) encryption and we implemented [pallet-encrypted-balance](./4_2_encrypted_balance.md). **This pallet can't be used only by this self, because this doesn't check the validity of additive homomorphic arithmetic**.

### [confidential_transfer]./6_2_confidential_transfer.md

Users can transfer without being known actual amount by others with this pallet. `plonk` checks the [`confidential transfer constraints`](./2_1_confidential_transfer.md) and [pallet-encrypted-balance](./4_2_encrypted_balance.md) performs the additive homomorphic state transition.