@ieigen/zkzru
Version:
An implementation of [ZK-ZKRollup](https://github.com/ieigen/ZKZRU) in which the relayer **does not** publish transaction data to the main chain, but only publishes the new Merkle root at every update. This provides gas savings but not data availability g
26 lines (15 loc) • 1.96 kB
Markdown
# ZKZRU: Eigen ZK-ZKRollup
Eigen ZK-ZKRollup provides confidential transaction for users with low gas cost. The ZK-Rollup is an extention of [RollupNC](https://github.com/eigmax/RollupNC) and the transcation's confidentiality is inspired by Perdersen Commitment and [Stealth Address](https://www.investopedia.com/terms/s/stealth-address-cryptocurrency.asp).
The circuits is written by Circom, and the verifier is generated by [EigenZKit](https://github.com/ieigen/EigenZKit).
## Archtecture
Apart from the TX Tree and Account Tree, we extend the operations on the leaf nodes to abstract storage layer for all kinds of assets' operation, including normal and confidential ERC20, ERC721 and Swap etc.

### CERC20

CERC20 realizes amount hiding through Pedersen Commitment. At the same time, due to the homomorphism of Pedersen Commitment, it is guaranteed that add and sub operation can be performed on the basis of commitment. When the user makes a transfer, the user generates a proof in order to prove he generates the right balance comitment and transaction amount commitment and, at the same time, has enough balance. Then the user submits to the operator for verification. We assume that the operator is semi-honest, that is to say, the operator wants to obtain the amount transferred by the user, but when the operator gets the corresponding input, it will execute the correct logic to update state. After the operator gets the content submitted by the user, it will generate a proof of the state update, and then submit it to the blockchain for verification.
## Spec
The new spec isn't open-source yet. the old Rollup Spec can be found [here](./docs/README.old.md).
## Test
1. Clone [EigenZKit](https://github.com/ieigen/EigenZKit/), run `cargo build --release` to build `zkit` and expose it to $PATH
2. Use the `zkit_test_xxx.sh` to generate the corresponding verifier;
3. Run `yarn test`.