
PoolTime Mini App
Save to win
About
The problem it solves PoolTime: Seamless Prize Savings on Base & Farcaster ---------------------------------------------------- ### The Problem It Solves Interacting with DeFi protocols is often a disconnected and complex experience. Users have to navigate away from their communities on social platforms to use dApps that can be intimidating for newcomers. Saving money, a cornerstone of financial health, is perceived as a low-engagement, boring activity. PoolTime tackles these problems head-on. ### What can people use it for? PoolTime is a mini-app that integrates the PoolTogether V5 protocol into the social fabric of Farcaster, with a primary focus on the Base ecosystem. It allows people to: * **Save & Win:** Deposit crypto assets (like USDC, WETH, etc.) into audited savings vaults. By doing so, you get a chance to win daily prizes funded by the interest generated across the entire pool. * **Never Lose Your Deposit:** The core of the PoolTogether protocol is that you can withdraw your full deposit at any time. It's a "no-loss" prize savings account, making saving both fun and risk-free. * **Interact Natively on Farcaster:** Through Farcaster Frames, users can check prize pools, view their deposits, and even initiate a deposit without ever leaving their feed. * **Explore the Prize-Savings Universe:** The app provides a clean, comprehensive dashboard to view all active vaults across multiple chains including Base, Optimism, Arbitrum, and more. You can track TVL, prize amounts, and historical winners. * **Track Your Performance:** Connect your wallet to see your personal deposits, claim any prizes you've won, and see your place on the leaderboard. ### How it makes existing tasks easier/safer PoolTime simplifies and secures the process of participating in decentralized prize savings in several ways: * **Easier - DeFi in your Feed:** The biggest hurdle for DeFi adoption is complexity. By bringing core functions into a Farcaster Frame, we meet users where they are. There's no need to find the right URL, navigate a complex interface, or leave the social context you're in. It makes DeFi participation as easy as liking a cast. * **Easier - Unified View:** PoolTogether is a multi-chain protocol. PoolTime aggregates all this information into one simple, user-friendly interface, removing the need for users to switch between different block explorers or UIs to track their positions. * **Safer - Battle-Tested Protocol:** The app is a frontend for the PoolTogether protocol, which has been live for years, holds millions in deposits, and is thoroughly audited. Users can save with peace of mind, knowing their funds are in a secure contract. * **Safer - Simplified Interaction:** By curating the information and providing a streamlined UI, PoolTime reduces the surface area for user error. It presents a clear path for depositing and claiming, which can be a point of confusion on more complex, professional-focused DeFi interfaces. Smart Contract Address(es) The PoolTime application is a frontend for the PoolTogether V5 protocol on Base. The protocol is composed of a set of core contracts that manage prize distribution and a series of Vault contracts where users deposit their assets. ### Core Protocol Contracts (Base) These are the central contracts that manage the overall prize savings protocol. * **Prize Pool:** 0x45b2010d8a4f08b53c9fa7544c51dfd9733732cb * This is the main contract that coordinates the entire protocol, linking vaults, draws, and prizes together. * **Draw Manager:** 0x8a2782bedc79982ebfa3b68b315a2ee40daf6ab0 * Manages the prize draw scheduling and execution. * **TWAB Controller:** 0x7e63601f7e28c758feccf8cdf02f6598694f44c6 * Calculates users' time-weighted average balances, which determines their odds of winning. * **Claimer:** 0x5ffeee76d1e2d2d1d18ba0bc77d8d047b85e1e87 * The contract users interact with to claim any prizes they have won. * **RNG Service:** 0x74ebf391831c0757b5a4335f2f3abbb1499d18f0 * The Random Number Generator service used to pick winners in a verifiable way. ### Deposit Vaults (Base) These are the specific vault contracts that users deposit their assets into. Each vault holds a different type of token. * **Prize POOL Vault:** 0x6B5a5c55E9dD4bb502Ce25bBfbaA49b69cf7E4dd * **Prize USDC Vault:** 0x7f5C2b379b88499aC2B997Db583f8079503f25b9 * **Prize AERO Vault:** 0x8d1322CaBe5Ef2949f6bf4941Cc7765187C1091A * **Prize cbETH Vault:** 0x5b623C127254C6fec04b492ecDF4b11c45FBB9D5 * **Prize wstETH Vault:** 0x75D700F4C21528A2bb603b6Ed899ACFdE5c4B086 * **Prize WETH Vault:** 0x4e42f783db2d0c5bdff40fdc66fcae8b1cda4a43 * **Prize superOETHb Vault:** 0x78adc13c9ab327c79d10cab513b7c6bd3b346858 Other Onchain Proof ### Other Onchain Proof The on-chain proof for PoolTime is demonstrated by the significant and continuous activity of the underlying PoolTogether V5 protocol on Base, which our app makes more accessible than ever before through Farcaster.Our project is a new gateway for users, and its success is tied to the health and growth of the protocol it serves. The following on-chain points of evidence showcase the vibrant ecosystem that PoolTime users are now part of:**1\. Verifiable Protocol TVL and User Deposits:**The core of the protocol is the PrizePool contract, which interacts with various deposit vaults. You can verify the total value locked (TVL) and the flow of funds directly on-chain. The przUSDC vault is one of the most popular on Base. * **Base Prize Pool Contract:** https://basescan.org/address/0x45b2010d8a4f08b53c9fa7544c51dfd9733732cb * This contract shows the total number of prize claims and interactions with the core protocol. * **Example Vault (Prize USDC on Base):** https://basescan.org/address/0x7f5C2b379b88499aC2B997Db583f8079503f25b9 * By viewing this contract, you can see thousands of deposit transactions and a substantial number of unique depositors who are actively saving. The value of the tokens held by this contract represents the real savings of users on Base. **2\. Consistent Daily Prize Draws:**The protocol awards prizes every single day. Every draw is an on-chain transaction that can be verified. The DrawManager contract shows a consistent history of these prize awards being fulfilled. * **Base Draw Manager Contract:** https://basescan.org/address/0x8a2782bedc79982ebfa3b68b315a2ee40daf6ab0 * Reviewing the transactions on this contract will show the daily awardPrize function calls, proving the reliability and consistency of the prize system. **3\. Social Traction on Farcaster:**While the above points prove the protocol's traction, our project's specific traction is social. We are bringing this on-chain activity directly into the Farcaster feed.
How it's made
Challenges we ran into Challenges I ran into --------------------- My biggest challenge was not in the core smart contract interactions, but in bridging the gap between a standard web dApp and the embedded, mobile-first environment of a Farcaster mini-app. The primary goal was to make saving on Base feel like a native Farcaster experience, which introduced two main hurdles: seamless wallet connections and smooth, trustworthy transaction handling. #### The Hurdle: The Wallet Connection Experience A typical dApp has a simple "Connect Wallet" button, which works fine on a desktop browser. Inside a Farcaster mini-app on a mobile device, this flow is clunky and breaks the user experience. The initial problem was how to make wallet connection feel integrated and intuitive. How do you prompt a user inside the Warpcast app to connect their Coinbase Wallet (or other mobile wallet) without making them feel like they're being redirected to a sketchy, untrusted site?Furthermore, the app needed to be context-aware. It needed to know it was running inside Farcaster and who the Farcaster user was, so it could eventually link their on-chain actions to their social identity for features like leaderboard shoutouts. How I Overcame It ----------------- I solved this by focusing on a mobile-first, Base-native wallet setup. 1. **Leveraging Modern Wallet Libraries:** I used wagmi and RainbowKit, configuring them specifically for the Base network as the default and only option. This removes the confusing network selection step for the user. I spent significant time tweaking the mobile display to ensure the connection modal felt like a natural extension of the app. 2. **Passing State from Frames:** The user journey starts from a Farcaster Frame. I designed the frames to pass information (like which vault to feature) directly into the mini-app via URL parameters. When the mini-app loads, it reads these parameters to present a relevant view, making the transition from feed to app feel seamless and intelligent. 3. **Farcaster-Aware Logic:** I used the Neynar API to fetch the Farcaster user data (like FID and username) associated with the viewer. While I didn't fully implement social-linking features due to time, this setup is crucial for building a truly social finance app and was a key architectural decision. **The Hurdle: Clear and Reliable Transactions** Once the wallet was connected, the next challenge was the transaction experience itself. Simply calling a write function and hoping for the best is not a viable option. The user might sign the transaction in their wallet app and switch back to Farcaster, unsure of what happened. Was it successful? Is it pending? Did it fail? Leaving the user in this state of uncertainty is a recipe for a bad experience. **How I Overcame It** --------------------- I implemented a robust transaction feedback system to guide the user every step of the way. 1. **Using wagmi Hooks:** I relied heavily on the useWriteContract and useWaitForTransactionReceipt hooks from wagmi. This combination allowed me to create a state machine that tracks the entire lifecycle of a transaction. 2. **Building a Step-by-Step UI:** When a user initiates a deposit, the UI doesn't just freeze. It updates to explicitly tell them what to do next: * First, a clear prompt: "Please confirm the transaction in your wallet." * Once the transaction is sent to the network, the button changes to a "Depositing..." state, and a link to the transaction on Basescan is provided. This gives the user transparency and the ability to track it themselves. * Finally, upon confirmation, a clear "Success!" message appears, and the UI updates to reflect their new balance. If there's an error, it is caught and displayed in a user-friendly way. By tackling these UX and wallet-integration challenges head-on, I was able to build a mini-app that feels much more integrated into the Base and Farcaster ecosystems than a standard, standalone dApp.