Releases: stackdump/bitwrap-io
Releases · stackdump/bitwrap-io
v0.8.0 — Production Ready
What's New since v0.7.0
- Live demo poll on landing page — fetches active polls inline, click to vote
- Wallet-Native Auth callout — MetaMask integration surfaced in the "Why ZK Voting?" section
- Deploy to Your Chain section — Foundry bundle download with 3-command workflow on the landing page
- Poll test coverage — 18 new tests covering poll creation, voting (duplicate nullifiers, closed/expired polls), and sealed-results enforcement
- CI pipeline upgraded —
go vet+ race detector + JS parity checks, all green - README rewritten — leads with ZK voting, full poll API docs, sealed results explanation, voting .btw DSL example
CI
| Job | Status |
|---|---|
| lint | go vet |
| build | make build |
| test | go test -race (18 poll tests + existing suite) |
| js-parity | MiMC + Merkle parity + JS syntax |
v0.7.0 — ZK Voting
What's New
- Landing page reoriented around ZK voting — hero, how-it-works, and feature sections now lead with anonymous on-chain voting
- API quick-start section — curl examples for poll creation, vote casting, and results
- Sealed results — tallies, nullifiers, and commitments are hidden while a poll is active to prevent vote-timing correlation attacks; full results exposed only after the poll closes
Commits
- Reorient landing page around ZK voting
- Tighten hero, add API quick-start section
- Seal poll results while voting is open
v0.6.3: ZK Polls
bitwrap v0.6.3
Anonymous voting with zero-knowledge proofs. Create polls, cast secret ballots, verify results — all from a Petri net model.
ZK Poll System
- Vote template — visual Petri net model for voting state machines (voterRegistry, nullifiers, tallies, pollConfig)
- VoteCast circuit — Groth16 proof of voter eligibility and valid choice without revealing identity or choice
- Secret ballots — vote choice hidden behind blinded commitment
mimcHash(voterSecret, choice), can't be brute-forced - Circuit-enforced bounds —
maxChoicespublic input rejects out-of-range choices at the proof level - 5 public inputs: pollId, voterRegistryRoot, nullifier, voteCommitment, maxChoices
Poll Lifecycle
- Create — wallet signature required (EIP-191 personal_sign), rate limited (5/hr per IP + wallet)
- Vote — ZK proof generated client-side, server re-verifies via gnark, tally updated in real-time
- Close — only the creator's wallet can close
- Results — event-sourced through the Petri net runtime:
State(t) = fold(apply, initialState, events[0..t])
Privacy Model
| Data | Visibility |
|---|---|
| Voter identity | Hidden (nullifier unlinkable to registry leaf) |
| Vote choice | Hidden (blinded commitment, never persisted per-vote) |
| Voter secret | Hidden (never leaves browser) |
| Vote count | Public |
| Per-choice tallies | Public (derived from event log) |
On-Chain Governance
IVerifierinterface with Groth16 proof verification incastVote- Contract stores
voteCommitments[nullifier], not plaintext choices - Foundry bundle: contract + verifier + tests + deploy script (8/8 tests pass)
- Constructor:
(voterRegistryRoot, maxChoices, verifier)
Poll UI
bitwrap.io/poll— create, vote, close, view resultsbitwrap.io/poll#deploy— download Foundry bundle or Solidity contract- MetaMask integration for poll creation and wallet-derived voter secrets
API Endpoints
| Method | Path | Purpose |
|---|---|---|
POST |
/api/polls |
Create poll (wallet sig required) |
GET |
/api/polls/{id} |
Get poll config + state |
POST |
/api/polls/{id}/vote |
Submit ZK-proven vote |
POST |
/api/polls/{id}/close |
Close poll (creator only) |
POST |
/api/polls/{id}/reveal |
Reveal vote (fallback) |
GET |
/api/polls/{id}/results |
Tallies from event log |
GET |
/api/polls/{id}/nullifiers |
Public audit log |
Size Limits
- Title: 200 chars, Description: 2000 chars
- Choices: 2–256 (matches circuit's 8-bit range proof)
- Voter commitments: 10,000 max
- Duration: up to 90 days
v0.2.0
bitwrap v0.2.0
Client-side ZK proving, EVM deployment, and full Go/JS parity.
New: WASM Prover
- Groth16 proving runs entirely in the browser via WASM
- Load pre-compiled keys from server or compile circuits offline
- Build with
make wasm(~4.6MB gzipped)
New: Key Persistence
-key-dir ./keyspersists circuit keys across restarts- First startup compiles circuits + saves keys; subsequent starts load instantly
GET /api/vk/{circuit}— export verifying keyGET /api/vk/{circuit}/solidity— export Solidity verifier contract
New: EVM Deployment
GET /api/bundle/{template}— download complete Foundry project (contract + verifier + tests + deploy script)- Remix plugin now deploys both contract and ZK verifier to workspace
- Added "Foundry Bundle" download button to Remix plugin
New: Full Go/JS Parity
mimc.js— MiMC-BN254 hash (verified against Go)merkle.js— fixed-depth binary Merkle treewitness-builder.js— witness builders for all 6 circuitssafemath.js— U256 overflow-checked arithmeticmodel.js— Petri net model with validationstate.js— state machine execution (fire, enabled, canReach)bridge.js— Schema <-> Model conversion
Breaking Changes
arc/moved frominternal/arc/— now importable asgithub.com/stackdump/bitwrap-io/arcpublic/moved to repo root — CDN path is now@latest/public/internal/static/removedNewArcnetService()now takes akeyDirstring parameter
v0.1.0
bitwrap v0.1.0
First release — Petri nets as ZK containers.
Features
- Visual Petri net editor with JSON-LD save/load
- 6 Groth16 ZK circuits: transfer, mint, burn, approve, transferFrom, vestClaim
- MiMC-BN254 Merkle state trees (Go + JS parity)
- Client-side witness builder for all circuits
- Solidity contract generation from ERC templates (020, 0721, 01155, 04626, 05725)
.btwDSL compiler- CID-based content-addressed model storage
- SVG rendering of Petri net models