B
Bounty App
bounty, fun
The problem Bounty App solves
Problem It Solves
- Trust-minimized payouts: Escrows bounty funds on-chain and automates winner payouts, removing manual admin risk and disputes.
- Transparent coordination: Emits verifiable events and indexes them into a queryable DB, creating an auditable history of bounties, claims, votes, and winners.
- Scalable engagement: Makes it easy to run solo or multiplayer bounties, accept
on-chain submissions, and reward contributors with tokens and NFTs. - Portable data: Exposes REST/GraphQL APIs so communities, apps, and dashboards can easily consume live bounty data.
Who It’s For
- DAOs and communities: Run community challenges with verifiable payouts and on-
chain governance (voting). - Open-source maintainers: Post tasks, accept claims, pay contributors, and main
tain a public trail. - Brands/creators: Launch engagement quests with on-chain rewards and NFT badges
. - Hackathons: Manage submissions, multi-winner prizes, and instant distribution
at scale.
What You Can Do
- Create bounties: Solo or open bounties, in ETH or supported ERC-20 tokens (USD
C/ENB), with configurable max winners and fees. - Join and fund: Participants can join open bounties and add to the prize pool (
multiplayer). - Submit claims: Contributors submit work with title/description/URI; issuers ac
cept or send to vote. - Vote and resolve: Community voting on claims; resolve to pick winners and auto
matically pay them. - NFT rewards: Accepted claims mint an ERC721 (proof of achievement) with royalty support.
- Leaderboards: Track paid/earned amounts and NFTs held for reputation and insights.
- Moderation: Admins/issuers can ban abusive bounties/claims using signed messages.
- Idea generation: Built-in AI route to generate fun/creative bounty prompts.
Why It’s Safer/Better
- On-chain escrow: Funds are locked in the contract; payouts happen only via acc
epted claims/resolved votes. - Event-driven audit: Every lifecycle step (create, join, withdraw, claim, accept, vote) is emitted and indexed.
- Typed data access: Prisma + Postgres schemas and TRPC reduce app-side errors; Ponder keeps DB in sync with chain.
- Signature-gated moderation: Restricts ban actions to admins/issuers with verif
iable signatures. - Multi-token awareness: Normalizes token amounts (decimals) for accurate sorting/analytics.
How It Works
- Contracts:
ENBBountymanages bounties, participants, claims, voting, and payouts;ENBBountyNftmints NFTs for accepted claims. - Indexer: Ponder listens to contract events, writes into Postgres tables (Bount
ies, Claims, Votes, Winners, etc.), and serves REST/GraphQL. - App: Next.js + TRPC + Prisma read from the DB and call the indexer for aggregated data (winners, votes, supported tokens); Wagmi hooks execute contract calls
from the UI.
Integrations & APIs
- REST (Hono):
GET /bounty/:chainId(lists),/live/bounty/:chainId,/voting/bounty/:ch ainId,/past/bounty/:chainIdGET /bounty/:chainId/:bountyId(details),/bounty/:chainId/:bountyId/winners,/bounty/:chainId/:bountyId/votes,/bounty/:chainId/:bountyId/voting-statsGET /claim/:chainId,/claim/:chainId/:claimId,/bounty/claims/:chainId/ :bountyIdGET /tokens/:chainId(supported tokens),/user/:address/wins/:chainId/graphqlfor schema-backed queries,/swaggerfor docs.
- App TRPC (selected):
supportedTokens,bounties(with pagination/sorting),bounty,bountyClaims,participationsbountyWinners,bountyVotes,userVotes- Moderation:
banBounty,banClaim(signature-verified)
- Web3 hooks (Wagmi):
- Create:
createSoloBounty,createOpenBounty,createTokenBounty,createOpenTokenBounty - Claims:
createClaim,acceptClaim - Voting:
submitClaimForVote,voteClaim,resolveVote,resetVotingPeriod
- Create:
Quick Use Cases
- Community challenge: Create an “open” bounty with 5 winners; members join and
fund; contributors submit claims; the community votes; funds auto-split to 5 winners; each winner gets an NFT. - OSS issue bounty: Post a solo bounty in USDC, accept a claim, and the contributor is paid automatically with an on-chain audit trail.
- Creator quests: Run weekly themed tasks; winners get ETH tips and collectible
NFTs; leaderboards highlight top fans.
Challenges I ran into
Challenges & Fixes
1. Local Contract Address Mismatch
- Issue: UI and indexer pointed to different contract addresses, so data didn’t align.
- Fix: Synced contract addresses in
.env.localandconfig.tswith Hardhat deployment outputs.
2. Prisma Schema Drift (Dev vs Prod)
- Issue: Wrong schema (
enbpublicvs default) caused missing tables/empty reads. - Fix: Created correct schema and used matching commands (
dev:generate/migratevsprod:generate/migrate). KeptDATABASE_URLconsistent.
3. Silent Indexer Failures
- Issue: TRPC proxy returned empty lists on indexer errors, masking misconfigs (bad
INDEXER_URL, syncing delays). - Fix: Added health checks, logs, and surfaced errors/toasts to UI.
4. Signature Verification Hardcoded
- Issue: Always checked Base chain, causing invalid signatures on other chains.
- Fix: Made verification chain-aware (
chains[input.chainName]or bychainId).
5. AI Route Inconsistencies
- Issue: Docs said Gemini first, but code used Moonshot’s
kimi-latestfirst; env vars mismatched. - Fix: Standardized provider order, env var names, and normalized JSON response handling.
6. Token Amount Normalization
- Issue: Different token decimals (ETH/ENB = 18, USDC = 6) skewed analytics/sorting.
- Fix: Normalized values in the indexer and added
amountSortcolumn for consistent ordering.
7. Event Race Conditions (Local)
- Issue: Events processed out of order (join/withdraw before creation) caused null lookups.
- Fix: Defensive checks, warnings, and guidance to reset DB or replay from block 0 after redeploys.
8. Direct DB Reads vs Indexer Reads
- Issue: Divergent data between Prisma and indexer (claims vs winners).
- Fix: Aligned Prisma schemas to indexer’s tables; used indexer for derived/aggregate views.
9. Docs/Repo Drift
- Issue: README pointed to wrong indexer repo, causing mismatched endpoints and APIs.
- Fix: Updated docs to point to in-repo indexer and aligned
INDEXER_URL.
🔑 Summary
Most issues came from misaligned configs (addresses, schemas, env vars), inconsistent data views (DB vs indexer), and hidden errors (silent failures, hardcoded logic).
The fixes focused on alignment, normalization, explicit error handling, and repo standardization.
Smart Contract Address(es)
https://basescan.org/address/0x68c9cd893341220863e16e27800d81f01f6dfb83
https://basescan.org/token/0xfc3db3f829765d2d192f3d5c3aa6f24121068346
Other Onchain Proof


Tracks Applied (1)
Top 5 Live Consumer Apps
Cheer Project
Cheering for a project means supporting a project you like with as little as 0.0025 ETH. Right now, you can Cheer using ETH on Arbitrum, Optimism and Base.
Discussion
Builders also viewed
See more projects on Devfolio