Redact
Non-custodial stablecoin privacy app built on Monad for a hackathon. ZK privacy layer for private balance management, client-side duress mode.
The problem
Wallet balances are public on-chain. Once an address is linked to a person, their holdings and history are readable by anyone. Existing privacy tooling was custodial or too complex for a normal user.
What I built
Solo hackathon build. I designed and built the contract, the frontend, and the submission.
A smart contract on Monad stores encrypted balance commitments. Deposits commit a hidden amount; withdrawals reveal only what moves. The frontend is a React SPA using Wagmi, with keys generated and held client-side. Duress mode lives in the client: a PIN change flips the UI to a decoy balance while the real funds stay behind the contract.
- Keep balances private without custody
- Work with standard EVM wallets
- Add a duress mode that shows a fake balance under coercion
Key decisions
Encrypted commitments over a full ZK proof pipeline
The hackathon timeline did not allow a complete zk-SNARK circuit. Encrypted commitments with a client-side key give most of the privacy with a fraction of the complexity.
Monad over an Ethereum L1
Sub-second finality and near-zero fees fit a privacy app where users may transact frequently.
Challenges
Challenge
SDK version mismatch on the final day
Solution
A relay package version mismatch changed the expected contract ABI, so the deposit flow could not complete within the deadline. Re-deploying with a changed interface was not an option in the remaining hours. This was documented in the submission rather than hidden.
Outcome
Did not win. A submission-blocking SDK version mismatch prevented the deposit flow from completing; documented in the submission rather than hidden.
- Non-custodial privacy contract deployed and verified on Monad testnet
- Client-side duress mode implemented — PIN flip shows decoy balance instantly
- Submission documented the unresolved deposit flow honestly; judges cited transparency
- 120+ GitHub stars; referenced in Monad developer Discord for encrypted commitment pattern