Your wallet remembers what. WhyTx remembers why.
WhyTx is a private memory and proof layer for crypto transactions. It lets a wallet owner attach encrypted context to a confirmed Monad transaction, preserve version history, selectively reveal fields, and prove that the revealed context matches a timestamped onchain commitment.
Built from scratch for the Spark hackathon, July 13–19, 2026.
Open the live app · Watch the onchain demo
- Connect a browser or mobile EVM wallet through Reown AppKit and sign a gas-free unlock message once per tab session.
- Choose Monad Mainnet or Monad Testnet and import a confirmed transaction involving that wallet.
- Add a purpose, category, counterparty label, status, follow-up date, and private details.
- Encrypt the readable record locally with AES-GCM.
- Secure a salted Merkle root on the selected Monad network; no readable note goes onchain.
- Create a verification link containing only selected fields and their Merkle proofs.
- Independently verify both the field proofs and the onchain anchor.
- Edit the record as a new linked version; earlier anchors remain intact.
WhyTx proves that a wallet created a particular cryptographic record at an onchain time, that the record was linked to a transaction, and that revealed values match that record. It does not prove a personal statement is true, agreed by the counterparty, or legally enforceable.
- A deterministic wallet signature derives a browser-local AES-256-GCM key.
- The derived key is cached in
sessionStorageso a refresh does not require another signature; disconnecting or closing the tab clears the session. - Full records and per-field random salts are stored only as ciphertext in
localStorage. - Each record field becomes a salted Merkle leaf. The contract receives only the root, original transaction hash, and previous-version ID.
- Reveal data is encoded in the URL fragment (
#...), which browsers do not send to the hosting server. - A verifier can check disclosed leaves without learning hidden values.
This hackathon implementation is local-first: clearing browser storage removes the encrypted records. A production release should add encrypted backup and a reviewed recovery design.
- React 19, TypeScript, Vite
- Reown AppKit with its Ethers v6 adapter for non-custodial wallet connections
- viem for Monad RPC and contract interaction
- Web Crypto API for AES-GCM
- Solidity
WhyTxRegistrycontract - Vitest for cryptographic proof tests
Requirements: Node.js 22+ and a Reown-compatible EVM wallet.
npm install
cp .env.example .env
npm run devRun every check:
npm run checkThat command runs linting, unit tests, Solidity compilation, TypeScript, and the production build.
The contract is intentionally small and append-only. Compile it with:
npm run contract:compileThe build artifact is written to artifacts/WhyTxRegistry.json.
Deploy to mainnet with a funded key supplied only through the environment:
DEPLOYER_PRIVATE_KEY=0x... npm run contract:deploy:mainnet
npm run contract:verify-mainnet- Contract:
0xc5e6f9952e5dd685f073922ad1221cdaad4f46f9 - Deployment transaction:
0x2ea390ac6909a1798e10d4cacab3adace368f60f90bf2b303d125b27cdb1e143 - Integration test:
0xf003a809e3778f3ac5a6fe521fad39c3bf161743da133d1f8b91f18dc1689912(event and persisted fields verified) - Deployment metadata:
deployments/monad-mainnet.json
- Contract:
0x3ccacaa6fa6ca64e1f8f8f8f448f0a5a97581129 - Deployment transaction:
0x0e1994fdce64e130d3e00de263b675c4cdf711d25c0e8a82f1b72650b51e3bf9 - Integration test:
0xbe274c628f38925228e4437c31d5b8697f00aad4201966c4ac94f00ae0b271ed(event and persisted fields verified) - Source verification:
perfectmatch on MonadVision - Deployment metadata:
deployments/monad-testnet.json
- Monad Mainnet — chain ID
143, RPChttps://rpc.monad.xyz, explorerhttps://monadscan.com - Monad Testnet — chain ID
10143, RPChttps://testnet-rpc.monad.xyz, explorerhttps://testnet.monadexplorer.com
Connected users can switch between both networks from the dashboard. Transaction imports, contract writes, explorer links, and verification links remain bound to the selected chain.
contracts/ onchain commitment registry
scripts/ reproducible Solidity compiler
src/lib/chain.ts live Monad reads and wallet client
src/lib/appkit.ts Reown wallet connection and Monad network setup
src/lib/merkle.ts field commitments and selective proofs
src/lib/vault.ts browser encryption
src/lib/reveal.ts privacy-preserving verification links
src/App.tsx product UI and complete user flow
MIT