An onchain crossword puzzle game with a zero-knowledge twist.
Noirhack 2025 project submission. All work was completed during the 4-week hackathon.
- Uses Noir zero-knowledge system to compute solution privately
- Proof can be verified by third-parties without revealing secret inputs
- So the crossword transforms from single-player to multiplayer
- Onchain verifier generated using Garaga deployed on Starknet Sepolia https://sepolia.starkscan.co/contract/0x05c6f1e14f4165e2721f43262c697a8c7d11c11ca2f73b2f21f0c10065f15c60
- This is a monorepo with
Bun
. It has not been tested with other monorepo tools
This example uses Vite as the frontend framework, and Hardhat to deploy and test.
Want to get started in a pinch? Start your project in a free Github Codespace!
-
Install your favorite package manager. We'll use bun but feel free to use
yarn
or others:curl -fsSL https://bun.sh/install | bash
-
Install dependencies:
bun i
-
Run a node
bunx hardhat node
-
Deploy the verifier contract (UltraPlonk)
bun run deploy
-
Run the dev environment
bun dev
You can run the example test file with
bun run test
This test shows the basic usage of Noir in a TypeScript Node.js environment. It also starts its own network and deploys the verifier contract.
If you want to test only UltraHonk
, you can run:
bun run test:uh
The default scripting targets a local environment. For convenience, we added some configurations for deployment on various other networks. You can see the existing list by running:
bunx hardhat vars setup
If you want to deploy on any of them, just pass in a private key, for example for the holesky network:
bunx hardhat vars set holesky <your_testnet_private_key>
You can then deploy on that network by passing the --network
flag. For example:
bunx hardhat deploy --network holesky # deploys on holesky
Feel free to add more networks, as long as they're supported by wagmi
(list here). Just make sure you:
- Have funds in these accounts
- Add their configuration in the
networks
property inhardhat.config.cts
- Use the name that wagmi expects (for example
ethereum
won't work, aswagmi
calls itmainnet
)
Note: Support for path mappings https://hardhat.org/hardhat-runner/docs/guides/typescript#support-for-path-mappings