Search projects, hackathons, sponsors and tech

    ← All projects

    Demo

    About

    The problem it solves ## 1. Eliminating "Cheap Talk" in Polling Traditional social media polls often suffer from spam, bots, or low-effort participation. By implementing a **"skin in the game"** mechanism where users must stake **ETH** to vote, **VETO** ensures that every vote carries weight and conviction. This results in higher-quality data and true sentiment analysis, leveraging the _Keynesian Beauty Contest_ theory. ## 2. Decentralized & Transparent Trust In centralized betting or polling platforms, users must trust the platform operator not to manipulate results or withhold funds. **VETO** runs entirely on the **Lisk** blockchain. The logic for determining winners, calculating result percentages, and distributing the reward pool is **immutable** and **open-source**. Funds are locked in a smart contract, ensuring winners are always paid out automatically. ## 3. SocialFi & Gamification Communities need better ways to engage. **VETO** turns passive surveying into an active, competitive sport. It tracks: - **Streaks** for consecutive wins. - **Leaderboards** for top predictors. - **Accuracy Rates** for user reputation.

    How it's made

    Challenges we ran into ## 1. Managing On-Chain Data Costs (Images) One of the biggest hurdles was allowing users to add visual flair (images for each option) without bloating the blockchain or incurring massive gas fees. Storing images directly on Ethereum/Lisk is impractical. **How I got over it:** I integrated **IPFS (via Pinata)**. The frontend uploads images to IPFS through a lightweight backend proxy (to secure API keys) and retrieves a _Content Identifier (CID)_. The Smart Contract was optimized to store `string[] optionImages` arrays containing only these CIDs. This keeps gas costs low while maintaining decentralized storage. ## 2. Handling Dynamic Reward Distribution Writing the logic to split a reward pool among an unknown number of winners was tricky. If 100 people win, the contract needs to distribute funds without hitting the block gas limit or suffering from rounding errors (dust). **How I got over it:** I implemented a robust `distributeRewards` functionality in Solidity that calculates the `rewardPerWinner` using precise integer division. I added frontend checks to ensure the pool state is synchronized before distribution to prevent failed transactions. ## 3. User Experience (ETH vs USD) Web3 users often think in USD, but the blockchain works in ETH/Wei. Showing only ETH values made it hard for users to understand the real-world value of their bets. **How I got over it:** I built a global state system using **Zustand** that fetches the live ETH price via the **CoinGecko API**. I then implemented a "Currency Toggle" that instantly recalculates all input fields, pool sizes, and estimated winnings across the entire dApp into USD, significantly improving accessibility.