Deploy ZAP1
Run your own attestation instance on Zcash. 60 seconds from clone to running.
What you get
- Your own Merkle tree anchored to Zcash mainnet
- 21 event types for lifecycle, staking, governance, agents, and bonds
- REST API with OpenAPI spec
- Browser-based proof verification
- Webhook delivery on events
- Admin QR for manual anchoring via any Zcash wallet
Prerequisites
- Docker
- Rust toolchain (for keygen)
- A Zebra node on mainnet (or connect to an existing one)
- Optional: Zaino indexer for gRPC scanner backend
Setup
git clone https://github.com/Frontier-Compute/zap1
cd zap1
docker build -t zap1:latest .
bash scripts/operator-setup.sh myoperator 3081
Creates keys, .env, docker-compose, and a run script in operators/myoperator/
cd operators/myoperator
./run.sh
curl http://127.0.0.1:3081/health
curl http://127.0.0.1:3081/protocol/info
curl http://127.0.0.1:3081/stats
curl -X POST http://127.0.0.1:3081/event \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"event_type": "DEPLOYMENT",
"wallet_hash": "your_wallet_hash",
"serial_number": "deploy-001",
"facility_id": "dc-west-01"
}'
Open the admin QR page in your browser:
http://127.0.0.1:3081/admin/anchor/qr?key=YOUR_API_KEY
Scan with any Zcash wallet (Zodl, Zashi, etc). The QR encodes the Merkle root as a shielded memo. After sending, enter the txid to record the anchor.
What's in the box
Architecture
Your app --> ZAP1 API --> Merkle tree --> Zcash anchor
| |
event types shielded memo
(DEPLOYMENT, etc) (ZAP1:09:{root})
Each operator runs their own instance with their own keys, tree, and anchors. No shared state between operators.