# Demo Instructions
## Setup
- install rust and circom
- install nvm with node version 20.8.0
- clone demo-simple-app repo: https://github.com/NebraZKP/demo-simple-app
- Run the demo setup script: `./scripts/demo_setup.sh`
- `. scripts/shell_setup.sh` (required for each new terminal)
- `saturn local ethkeygen` to generate an address
- `cat example_user.keyfile | jq -r .address` to display your address
- fund the address from the faucet: https://sepoliafaucet.com/
## Things to show:
### Saturn contract in etherscan
https://sepolia.etherscan.io/address/0xBab1A1D7A717fa2E6A6aA7b595A6C6ed26E76cdd
### Check saturn state:
```console
$ saturn stats
```
### Explain simple app. Check simple app state:
```console
$ simple-app get-state
```
### Test the full pipeline
The following command:
- generates a proof
- submits it to Saturn
- waits for it to appear in an aggregated proof
- runs the simple app logic that uses the proof
```console
$ simple-app submit-once
```
### While proof is being aggregated
Send a bunch of other proofs in the background (to trigger an outer batch).
Open a background terminal, and re-source `. /scripts/shell_setup.sh`
```console
$ simple-app submit -n 31 [--submit-rate <tx/second>]
```
- Show the `submit-once` tx in etherscan.
- Open the Saturn contract in Etherscan.
- Show and explain the "Submit Proof" and "Verify Saturn Proof" txs
### After `submit-once` has run
(Note this can take a while, especially if there is a backlog of transactions).
- Refresh Saturn contract in Etherscan
- Find and open latest "Verify Saturn Proof" tx
- Click "More details" -> "Decode Input Data". Your proofId should be in the list.