Search projects, hackathons, sponsors and tech

    ← All projects

    WakeStake

    An app that liquidates you if you don't get ur ass out of bed using a novel privacy mechanism

    Demo

    About

    WakeStake is an AI-powered, privacy preserving, social anti-snooze system that connects a wake-up alarm, an Ethereum wallet, and an X account, with additional features like a group chat set-up. Users can stake any amount of the erc-20 of their choosing. And can privately withdraw to a fresh account just like in a privacy pool. By creating a zero knowledge proof of their deposit. How ever the user also sets a wake-up time inside the private commitment. And share those secrets to a AI agent and/or their group chat of friends. They are allowed number of five-minute snoozes. How ever snooze for too long.... you lose! To prove they actually got out of bed, they must scan a QR code placed away from the bed, ideally in the bathroom. That QR code leads them to our app which prompts them to privately proof they woke up in time. But if they are too late, they zk circuit forces the withdraw to only be able to go through the pre commited donation address. Thier AI agent wil also analyzes the user’s X environment, such as posts, likes, follows, and audience, to select a legitimate charity the user is unlikely to personally support, making the financial consequence harsher. In group mode, the punishment charity can instead be selected by peer vote until the first penalty occurs. The smartcontract and circuit then enforces the transfers of the staked tokens from the protocol, pre-funded wake-up stake to the selected charity. And WakeStake can automatically publish the failure to the user’s X account. The donation address also can use uniswap v3 to automattically swaps a erc-20 into a preffered asset so the donation address gets a clean token like usdc or eth. Incase the user uses a niche meme coin that donation recipients might not like Example tweet: “I voluntarily gave an AI control over my wallet because apparently I cannot be trusted with an alarm clock. WakeStake just donated 0.004 ETH from my wake-up stake to Vision for Israel because I refused to get out of bed. Proof of Snooze:etherscan.io/tx/0x… Also terrible at mornings? Use WakeStake: github.com/…” WakeStake also supports positive incentives: users can opt into success donations or sponsorships, allowing successful wake-ups to generate donations to causes they personally support. The idea is to combine financial commitment, social accountability, AI personalization, and verifiable on-chain consequences into a morning routine that is much harder to ignore than a normal alarm clock.

    How it's made

    WakeStake is a Solidity contract, a Noir ZK circuit, a React mobile app and a Telegram bot. You lock tokens against a wake-up time. If you're up on time you keep them. If you oversleep, your stake goes to someone else. Groups are setup as contracts controlled by users who all get their own ens V2 domain with their own group subdomain. So for example emmy.wakkyuppygroup.wakestake.eth. Entry to the group is gated by a minimum stake amount wich is enforced by another zk proof of minimum staked. And a group admin. On-chain (Hardhat 3 + viem, deployed and verified on Sepolia). Stakes don't sit in a public mapping. Each stake is a Poseidon commitment (token, amount, and a hash of the nullifier secret, secret hash, wake timestamp and donation address). It goes into a LeanIMT Merkle tree from zk-kit. Deploying took Hardhat Ignition modules that link five libraries: PoseidonT3/T4, LeanIMT, and the RelationsLib and ZKTranscriptLib that the generated verifier needs. ZK (Noir + Barretenberg UltraHonk). The circuit proves membership in the tree and then branches on time. If you wake up before your alarm, you prove you know a secret that only you hold. You then "roll" your stake into a new leaf with the next day's wake time. That's wake(), and the tokens never leave the contract. If you're late, your group already knows everything except that secret. They can prove the deadline passed and withdraw, but only to the donation address. Proofs are generated client-side with noir_js and bb.js to preserve privacy. The novel privacy mechanism: a ZK circuit can't read the current time. Public inputs are static values choosen by the client proving them, a well know limitation of zk. So the prover passes 2 timestamps: a past_timestamp and a future_timestamp about 10 minutes apart. The contract checks them against block.timestamp, and the circuit only has to prove that the wake time falls outside that window. App (React 19 + Vite + TypeScript). This is a mobile-first PWA. Every external dependency sits behind a service interface: wallet, stake, proof, X/Twitter, LLM copywriter and the charity oracle. That let us build the whole UX on mocks and swap in real implementations one at a time. To stop the alarm, you scan a personal QR code that you printed and stuck in your bathroom (jsQR + getUserMedia). Telegram bot (grammY + viem). You add the bot to a group chat. It registers the group automatically, even handling the new chat ID when a group upgrades to a supergroup. It watches the contract and posts "X didn't wake up, claim their stake" with a claim button. A honest acknowledgement of what works and does not: -core protocol and privacy protocol: works, finnished The novel privacy pool where a commitment is checked against the current time works and is good finished code. -group donation are contract only: The contract do work in e2e test to setup a group with ens V2, and also work on sepolia. But the ui does not expose this path of ux -UI only does timer and deposit + withdraws: the ai agent is not setup yet to automatically send the donation and post. But since the cryptography is already there, a user does indeed lose their funds to the donation address if they dont wake up. It only does not automatically sends it. -no relayer: to protect the anonimity better a relayer would be needed. But we choose to limit our scope for the sake of the hackathon. It should be know that the best path to privacy would be a re-write and deployment to aztec. However we choose to use ethereum sepolia to limit scope and potential unstabilities with aztec testnet.