- AD (Anchored Datasystem) server
- endpoints to create new 'membership list' and append users to it and get the list
- stores in a sqlite DB
- generates a POD proving each membership list update
- sends the POD proof in an ethereum blob tx
- Synchronizer server
- follows beacon slots continuously looking for AD blobs
- AD Init: defines a new AD and stores it in the DB by id
- AD Update: updates an AD state based on the registered custom predicate, verifies the transition proof and stores the new state
- endpoint to query AD last state
- follows beacon slots continuously looking for AD blobs
- integration test (bash script)
- starts locally the AD & Synchronizer servers
- queries the AD server to create a new membership list, append users to it, and fetches the latest state from the Synchronizer
Required software: curl, git, rust, go, tmux, jq.
Copy the .env.default file into .env, and set the PRIV_KEY (corresponding to an address which holds some Sepolia ETH) and RPC_URL values.
Once having the .env file ready with the PRIV_KEY and RPC_URL properly filled, to run the artifacts generation, and the AD-Server & Synchronizer, together with a bash script that interacts with both, run the following command:
./full-flow.sh
This will generate all the needed files, and it will open a new tmux session with 3 panels; one for the AD-Server, one for the Synchronizer, and one to run the full-flow-requests.sh file which acts as a client.
Alternatively can run manually the commands that appear in the full-flow.sh file.
When running the system, there are operations that take some time: (numbers from a AMD Ryzen 5 5900-XT 16-Core)
- First time run needs to generate the Groth16 trusted setup:
4m - Each run:
- Loading Groth16 pk:
~40s(this will be removed) - Full POD update:
- Proof generation:
21.1s- prove mainpod update:
6.5s - shrink circuit (plus making it groth16 friendly):
3s - Groth16 prove:
11.6s
- prove mainpod update:
- Tx inclusion (from AD-Server to blockchain): 1 - 60s, assume an average of
30s - Blob synchronizing (Synchronizer):
<2s
- Proof generation:
- Loading Groth16 pk: