About The Project
Starkle is a privacy-preserving identity platform that allows users to selectively disclose attributes or prove identity predicates (e.g., age range or set-membership) without exposing raw Personally Identifiable Information (PII). It utilizes Merkle Trees for point disclosure and RISC0 (STARKs) for verifiable computational logic.
- Digital certificates and Digital copies of documents issued by authorized institutions are structured as Merkle Trees where only the root is stored on-chain. This allows users to provide cryptographic proofs for individual fields that verifiers can validate against the Ethereum ledger.
- Utilizes RISC0 zkVM to generate STARK receipts for identity predicates. This allows users to prove specific data conditions (like age ranges) without revealing the actual attribute values.
- A high-performance Go-Rust gRPC pipeline delivers public and private inputs alongside O(logn) sibling paths to the zkVM. The architecture is designed to minimize guest memory overhead during the proof generation process for documents containing large attribute sets.
- Documents are structured as Merkle Trees and encrypted off-chain in MongoDB using AES-256 and ECDH. Only the issuing institution and the owner via cryptographic signing can access or reveal the records.
- Verification is achieved either by validating STARK receipts where the guest code has committed the Merkle root or by providing a Merkle proof of disclosed values and sibling paths. In the latter case, the verifier recomputes the Merkle root and confirms authenticity by comparing the result against the issuer's on-chain root.
(back to top)
Built With

(back to top)
Development
Prerequisites
- Ganache
npm install ganache --global
- Wails
go install github.com/wailsapp/wails/v2/cmd/wails@latest
- ProofChain-store
git clone https://github.com/Raaffs/ProofChain-Store.git
- Clone Repository
git clone https://github.com/Raaffs/Starkle.git
Set Up
- Set up in
.env file
cd Starkle
PRIVATE_KEY=YOUR_PRIVATE_KEY
- Set up config
cp .config.example.json .config.json
- Deploy Contract
go test -v ./test -run TestDeploy
- Add contract address to .config.json
.config.json
...
"services": {
"STORAGE": "localhost:8754",
"CONTRACT_ADDR": "CONTRACT_ADDR" , #edit this
"RPC_PROVIDERS_URLS": {
...
- Set up risc0
cd Starkle/internal/crypto/zkp
NVCC_APPEND_FLAGS="-arch=sm_86 -DNDEBUG" \
RISC0_GPU_BACKEND=cuda \
cargo build --release --bin host
- Start prover
./target/release/host
Set Up storage service
- Go to the directory where you install ProofChain-Store
- Set up .env
MONGO_URI=your_mongo_url
MONGO_DB=Starkle
MONGO_COLLECTION_DOCUMENTS=Documents
MONGO_COLLECTION_INSTITUTES=institute
# Application Secret Key to access secure routes and perform sensitive operations
SECRET_KEY=secret
3 . Install dependencies
go mod download
- Run the storage service
go run .
Storage service should be up on port 8754
Note: If you are running storage service on some other port, make sure to edit .config.json in starkle to that specific port
Build & Run the app
Make sure you've ganache & storage service up and running
wails build
./build/bin/starkle
(back to top)
UML
1. Systeml Workflow
2. Uploading Documents
3. Creating digital copy
4. Issuing digital certificate
5. Third Party Verification
(back to top)
Contributing
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement".
Don't forget to give the project a star! Thanks again!
(back to top)
Suyash - suyashsaraf5@gmail.com
Thank You!