Zero-Knowledge proof generation and verification service using Noir and Barretenberg with offline signing for enhanced security.
- Use it at your own risk
- Solidity Verifier in barretenberg is not production ready
- THIS CODE IS NOT READY PRODUCTION
Arcana ZK Protocol provides a complete ZK proof workflow:
- Circuit registration and compilation using Noir
- ZK proof generation using Barretenberg
- On-chain verification with offline signing
- Multi-network support (Sapphire, Ethereum)
- ZK Proof Generation: Real Noir/Barretenberg integration
- Offline Signing: Private keys never leave user devices
- Multi-Network: Sapphire Testnet/Mainnet, Ethereum Sepolia/Mainnet
- Circuit Management: Register, compile, deploy circuits
- Universal ABI: Compatible verifier contracts across networks
- Python 3.12+
- uv (Python package manager)
- Docker (for containerized deployment)
- Oasis CLI (for ROFL deployment and build)
# Install dependencies
uv sync
# Activate environment
source .venv/bin/activate
POST /register
- Register and compile circuitPOST /deploy
- Create unsigned deployment transactionPOST /proof
- Generate proof and create verification transactionPOST /broadcast
- Broadcast signed transactionGET /circuits
- List circuitsGET /status
- Service status
- Circuit Registration: Register and compile circuit
- Deployment: Create unsigned deployment transaction
- Client Signing: User signs transaction offline
- Broadcast: Service broadcasts pre-signed transaction
- Proof Generation: Generate ZK proof
- Verification: Create and broadcast verification transaction
- Zero Key Exposure: All signing done offline
- Universal ABI: Same interface for all verifiers
- Network Encryption: Automatic Sapphire encryption when applicable
# Build image
docker build -t arcana-zk-protocol .
# Or download from dockerHub
docker pull 4nibhal/arcana-zk-protocol:latest
# Run container
docker run -p 8000:8000 arcana-zk-protocol # if you build local
docker run -p 8000:8000 4nibhal/arcana-zk-protocol # if you pull from docker hub
# Once docker is running, you need to define some env vars
export SAPPHIRE_KEY="0x-YOUR-PRIVATE-KEY-HERE"
export API_URL="URL-HERE" # DEFAULT EXAMPLE_SDK_USE POINT TO "localhost:8000" check [example_sdk_use.py]
# Run exampe_sdk_use agaisnt docker ( test all endpoints with sample circuit )
uv run example_sdk_use.py
- Actually you need access for your own ROFL node, to be able to expose the ports
- You can check doc to know how to deploy here: "https://docs.oasis.io/build/rofl/quickstart#roflize-the-bot"
sapphire_testnet
: https://testnet.sapphire.oasis.devsapphire_mainnet
: https://sapphire.oasis.ioethereum_sepolia
: https://sepolia.etherscan.ioethereum_mainnet
: https://mainnet.infura.io/v3/YOUR_PROJECT_ID
## Package Management
This project uses `uv` for Python package management:
- **Dependencies**: Managed in `pyproject.toml`
- **Lock file**: `uv.lock` ensures reproducible builds
- **SDK**: `arcana_sdk/` package with its own `pyproject.toml`
- **Installation**: `uv sync` installs all dependencies
## License
MIT License - see LICENSE file for details.