Settings
Fund ideas. On-chain.
Kickstarter-style crowdfunding with no middleman: pledge ETH to a campaign, the creator claims it if the goal is met — otherwise every backer pulls their own refund. A 1% platform fee keeps the lights on.
Launch a campaign
Set a funding goal and a deadline. Backers pledge ETH; you claim it all on success.
Campaigns loading…
Platform Controls you are the factory owner
Platform fee
Basis points on every successful claim (100 = 1%). Capped at 10% — applies to future campaigns only.
Withdraw fees
Pull accrued platform fees to any address.
Live Activity (recent events from the chain)
| Event | Details | Block | Tx |
|---|---|---|---|
| Loading… | |||
How it works (using the dApp + the on-chain flow)
How to use
- Connect your wallet — press “Connect Wallet” (top-right). The dApp runs on Sepolia testnet; if the chain badge shows another network, open ⚙ Settings and pick Sepolia, then top up with faucet ETH.
- Launch a campaign — in the “Launch a campaign” card, fill in Goal (ETH) and Duration (days) and press “Create campaign”.
- Pledge to a campaign — on any Active card in Campaigns, enter an amount and press “Pledge”. Creators cannot pledge to their own campaign.
- Claim or refund after the deadline — if the goal was met, the creator presses “Claim funds”; otherwise every backer presses “Refund my … ETH” to pull their pledge back.
- Owner controls — if you are the factory owner, Platform Controls lets you “Update fee” (basis points, max 1000) or “Withdraw” accrued fees to any address.
- Watch the chain — Live Activity shows the latest events from the network; press ↻ Refresh to re-sync.
The process — what happens on-chain
- CrowdFundFactory.createCampaign() deploys a fresh CrowdFundCampaign for the caller, registers it in the allCampaigns index and the isCampaign whitelist, and emits CampaignCreated. The platform fee is frozen per campaign at creation.
- CrowdFundCampaign.pledge() receives each backer’s ETH, updating pledged and totalPledged until the deadline; it reverts zero pledges and blocks the creator from self-funding.
- CrowdFundCampaign.status() resolves the lifecycle at the deadline: Successful when totalPledged ≥ goal, otherwise Failed.
- CrowdFundCampaign.claim() pays out on success: state is settled first (checks-effects-interactions), the platform fee is sent to the factory via CrowdFundFactory.creditFees(), then the rest goes to the creator — all guarded by ReentrancyGuard.
- CrowdFundCampaign.refund() lets each backer pull their own ETH on failure; the entitlement is zeroed before the transfer, making refunds DoS-proof.
- CrowdFundFactory.setFeeBps() / withdrawFees() are owner-only: the fee is capped at 1000 bps and only affects future campaigns, and accrued fees are withdrawn with a pull transfer.
Flow graph
After the deadline, status() resolves the branch: goal met → the creator claims (the platform fee is credited to the factory); goal missed → each backer pulls a refund.