R
Web3
Did not win. A submission-blocking SDK version mismatch prevented the deposit flow from completing; documented in the submission rather than hidden.

Redact

Non-custodial stablecoin privacy app built on Monad for a hackathon. ZK privacy layer for private balance management, client-side duress mode.

Yesimplemented120+transparency cited
TypeScriptSolidityZKMonad

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

Stack

TypeScriptReact frontend with Wagmi
SolidityPrivacy contract on Monad
ZKEncrypted balance commitments
MonadFast finality and near-zero fees