Overview
Quickstart
Get a wallet onto Sepolia, deploy a CommunityPool, fund it, and withdraw — all from the dApp.
Prerequisites
- A browser wallet (MetaMask, Rabby, or Coinbase Wallet)
- A CommunityPool account — sign up at /signup
- Sepolia test ETH (next step)
1. Get Sepolia test ETH
Sepolia is Ethereum's primary public test network. You need a small amount of Sepolia ETH in your wallet to pay for deploying and funding pools. The gas cost for a full deploy-and-fund flow is usually well under 0.05 Sepolia ETH.
Switch your wallet to Sepolia
- Open your wallet's network picker. In MetaMask this is the dropdown at the top of the extension.
- Enable test networks if they're hidden (MetaMask: Settings → Advanced → Show test networks).
- Select Sepolia.
- Copy your wallet address — you will paste it into a faucet next.
Request ETH from a faucet
Faucets dispense a small amount of Sepolia ETH per request, usually gated by a GitHub or Google account to prevent abuse. Any of these work — try the first, fall back to the next if it's empty or rate-limited:
- Google Cloud Sepolia faucet — Google account, typically 0.05 ETH per request.
- Chainlink faucet — also dispenses test LINK, useful if you plan to experiment with oracle-powered features.
- Alchemy Sepolia faucet — requires an Alchemy account.
- QuickNode Sepolia faucet — requires a mainnet ETH balance on the connected wallet as an anti-abuse check.
Paste the address you copied in step 4, solve the captcha, and wait 1–2 minutes for the transfer to land. Refresh your wallet — you should see a Sepolia ETH balance.
2. Sign in and connect a wallet
- Sign in at /login.
- From the dashboard, click the wallet button in the top bar and choose Connect wallet. Approve the connection request in your wallet extension.
- Confirm the connected network is Sepolia. The header shows the active network; if it's wrong, switch in your wallet and the app will refresh.
3. Deploy a pool
Head to /pools and click Deploy a CommunityPool. The modal walks through these fields:
- Pool name and description — shown to funders on the pool page.
- Minimum contribution (USD) — enforced on-chain. Any single contribution below this USD value reverts.
- Assets this pool will accept — ETH by default; add any whitelisted ERC-20 (e.g. WBTC on Sepolia) if you want token contributions too. Each token is paired with its Chainlink USD feed at deploy time.
- Pool owners — you are added automatically. Use Add owner to include co-owners; any owner can withdraw before expiry.
- Pool expiration date — after this timestamp, owner withdraws are disabled and anyone can release remaining funds to you (the deployer).
- Initial fund — an optional first contribution bundled into the deploy transaction so the pool has a non-zero balance on creation.
Click Deploy, approve the transaction in your wallet, and wait for the confirmation. The success panel shows the contract address, the deploy transaction hash, and (if you bundled an initial fund) the fund transaction hash.
4. Fund the pool
From any pool row on /pools, click Fund. The fund modal lets a funder:
- Pick the asset — ETH or any whitelisted ERC-20 the pool accepts.
- Enter a USD amount. The app shows the equivalent asset amount at the current Chainlink rate.
- For ERC-20s, approve the token if this is the first time the pool is spending from your wallet, then sign the fund transaction.
The transaction reverts if the USD amount is below the pool's minimum, or if the pool has expired.
5. Withdraw
Any pool owner can withdraw before expiry. Click Withdraw from Pool on a pool you own. The modal supports three withdrawal modes:
- ETH only— sweep some or all of the pool's ETH balance to your wallet.
- ERC-20 only — sweep some or all of a whitelisted token balance.
- Both — combine an ETH withdraw and a token withdraw in a single flow (two signed transactions).
Amounts are entered in USD. Pools that support partial withdraws show an amount input; legacy pools (deployed before partial withdraws shipped) only support full-balance sweeps — the UI detects this and hides the amount input automatically. See the lifecycle page for the full rules.
6. After expiry
Once the pool's expiration timestamp passes:
- New contributions revert.
- Owner withdraws revert.
- Anyone (including you) can call
releaseExpiredFundsToDeployer()on the pool contract to sweep all ETH and whitelisted ERC-20 balances to the original deployer.
// Callable by anyone after expiresAt
pool.releaseExpiredFundsToDeployer();What to read next
- How pools work — the mental model (deployer vs. owners, per-pool state, immutables).
- USD pricing & Chainlink — how dollar minimums are enforced on-chain.
- CommunityPool.sol reference — every function, event, and custom error.
- Pro API — read-only HTTP endpoints for indexing pools, funders, and events.