open-index/open-npm huggingface dataset:
npm package: @ieigen/tss-wasm
Description: TSS Wasm on GG18
Author: EigenLabs
Latest version: 0.0.9

# TSS WASM
A portable lightweight client application for threshold ECDSA (based on [GG18](https://eprint.iacr.org/2019/114.pdf)), built on&for [multi-party-ecdsa](https://github.com/ZenGo-X/multi-party-ecdsa) : 
1) Wasm/Web
2) HW friendly, like [TEE](https://github.com/0xEigenLabs/eigencc)

# Npm publish

* node: yarn build_node
* web: yarn build

## Latest release

web: @ieigen/tss-wasm@0.0.8

nodejs: @ieigen/tss-wasm-node@0.0.7, node 18.0+ is required

# Test

## Unit Test
```
yarn build
yarn test
```

## Function Test via NodeJS
```
cargo build --examples --release
./target/release/examples/gg18_sm_manager

# open another console
yarn build_node
node scripts/run_keygen_sign_node.js
```

## Function Test via Web

```
cargo build --examples --release
./target/release/examples/gg18_sm_manager

# open another console
yarn build
export NODE_OPTIONS=--openssl-legacy-provider
yarn webpack && yarn webpack-dev-server
```

Open `http://localhost:8080/` in browser, check out the output in `console`.

# Compile SM server by Docker

```
docker build -t ieigen:tss-sm-server --build-arg "BUILDARCH=$(uname -m)" -f sm.dockerfile .
docker run -d -p 8000:8000 -v $PWD/params.json:/tss-wasm/params.json ieigen:tss-sm-server
```

# licence
GPL & Apache-2.0
npm package: @ieigen/tss-wasm-node
Description: TSS Wasm on GG18
Author: EigenLabs
Latest version: 0.0.9

# TSS WASM
A portable lightweight client application for threshold ECDSA (based on [GG18](https://eprint.iacr.org/2019/114.pdf)), built on&for [multi-party-ecdsa](https://github.com/ZenGo-X/multi-party-ecdsa) : 
1) Wasm/Web
2) HW friendly, like [TEE](https://github.com/0xEigenLabs/eigencc)

# Npm publish

* node: yarn build_node
* web: yarn build

## Latest release

web: @ieigen/tss-wasm@0.0.8

nodejs: @ieigen/tss-wasm-node@0.0.7, node 18.0+ is required

# Test

## Unit Test
```
yarn build
yarn test
```

## Function Test via NodeJS
```
cargo build --examples --release
./target/release/examples/gg18_sm_manager

# open another console
yarn build_node
node scripts/run_keygen_sign_node.js
```

## Function Test via Web

```
cargo build --examples --release
./target/release/examples/gg18_sm_manager

# open another console
yarn build
export NODE_OPTIONS=--openssl-legacy-provider
yarn webpack && yarn webpack-dev-server
```

Open `http://localhost:8080/` in browser, check out the output in `console`.

# Compile SM server by Docker

```
docker build -t ieigen:tss-sm-server --build-arg "BUILDARCH=$(uname -m)" -f sm.dockerfile .
docker run -d -p 8000:8000 -v $PWD/params.json:/tss-wasm/params.json ieigen:tss-sm-server
```

# licence
GPL & Apache-2.0
npm package: @ieigen/zkzru
Description: 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
Author: EigenLabs
Latest version: 0.0.17

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

![arch](./docs/arch.png)

### CERC20

![cerc20](./docs/cerc20.jpg)

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