poidh escrows a prize on chain and holds it until the issuer names a winner. Nothing expires: the contract has no deadline field, so a bounty with entries on it stays exactly where it is, indefinitely, until somebody sends a transaction. Right now 70 bounties are in that position, holding $4,025, and 1 of them has a vote in progress.
Most of this is not neglect. A bounty three days old with two entries is doing exactly what it should. That is why the table carries the age of the bounty and the age of its newest claim: 40 of these were posted 30 or more days ago, and that $1,995 is the part worth looking at.
There are two different payout calls, and picking the wrong one reverts
Which one an issuer needs depends on whether anyone else has ever put money into the bounty:
- Solo bounty (28 of the rows below) — the issuer funded it alone.
acceptClaim(bountyId, claimId)pays out immediately. - Open bounty (42 of the rows below) — somebody else contributed, so the
contract requires a vote of the contributors.
acceptClaimreverts withNotSoloBounty(). The issuer callssubmitClaimForVote(bountyId, claimId), which starts a two-day window and counts the issuer's own stake as a yes; contributors callvoteClaim; then anyone can callresolveVote(bountyId)once the deadline passes.
The flag the contract actually reads is everHadExternalContributor, and it is
sticky: once an outside contributor has joined, the bounty needs a vote forever, even if that
contributor later withdraws.
poidh-app#1457 is my open pull request for the case where the web app reads a live
participant count instead of that flag and offers the issuer a button that can only revert.
resolveVote —
and that one anybody can send, including you, on somebody else's bounty.
hasClaims: false
— 24 claims in total, on $1,804 of prize money,
none of them mine.
The evidence, both sides, per claim.
The queue
| chain | id | bounty | prize | usd | claims | age | newest claim | waiting on |
|---|---|---|---|---|---|---|---|---|
| base | #265 | GM Farcaster Sponsor Referral Bounty | 0.5210 ETH | $1,278 | 2 | 73d | 22d | submitClaimForVote |
| arbitrum | #147 | Correct Terminal-Bench 2.1 run for DeepSeek-V4-Flash | 0.1600 ETH | $393 | 1 | 7d | 0d | submitClaimForVote |
| mainnet | #21 | Warplets URL -> IRL | 0.0845 ETH | $207 | 9 | 25d | 0d | submitClaimForVote |
| base | #204 | Interview a Politician About Crypto for The /β politics Net | 0.0827 ETH | $203 | 1 | 88d | 88d | submitClaimForVote |
| mainnet | #20 | Best Bounty (August 2026) π ● | 0.0600 ETH | $147 | 5 | 28d | 0d | acceptClaim |
| base | #348 | Build the Onchain POAPs Frontend ● | 0.0457 ETH | $112 | 5 | 7d | 3d | submitClaimForVote |
| base | #320 | Build a POIDH Bounty Showcase ● | 0.0410 ETH | $101 | 10+ | 24d | 0d | submitClaimForVote |
| arbitrum | #148 | DeepSeek-V4-Flash KLD parity measurement | 0.0400 ETH | $98 | 1 | 7d | 3d | submitClaimForVote |
| base | #7 | hit it grip it and rip it π€ποΈ | 0.0388 ETH | $95 | 2 | 217d | 91d | submitClaimForVote |
| base | #325 | BINARY PIXELS β FIND SOMETHING IN RANDOMNESS ● | 0.0360 ETH | $88 | 10+ | 21d | 1d | submitClaimForVote |
| base | #336 | Find 3 of a Kind | 0.0301 ETH | $74 | 10+ | 12d | 0d | submitClaimForVote |
| base | #319 | Share Your Music on Tortoise π’ | 0.0295 ETH | $72 | 10+ | 25d | 1d | submitClaimForVote |
| arbitrum | #144 | find a ~30 year old textbook that beats Pangram | 0.0287 ETH | $70 | 1 | 22d | 22d | submitClaimForVote |
| base | #351 | Fork Farcaster Client and add a Wallet ● | 0.0275 ETH | $67 | 3 | 2d | 0d | submitClaimForVote |
| base | #200 | Be A Freedom Fighter In Your Community | 0.0251 ETH | $62 | 10+ | 89d | 21d | submitClaimForVote |
| base | #340 | Farcaster Season 1 & 2 Recap π¬ | 0.0245 ETH | $60 | 5 | 9d | 1d | submitClaimForVote |
| arbitrum | #146 | Art, Coffee & Farcaster βοΈπ£ | 0.0245 ETH | $60 | 3 | 9d | 2d | submitClaimForVote |
| base | #350 | Check Your Blood Pressure π©Ί β Who's the Fittest? | 0.0241 ETH | $59 | 5 | 5d | 1d | submitClaimForVote |
| base | #344 | Best 60s clip from the WaveWarZ Twitch stream ● | 0.0238 ETH | $58 | 6 | 8d | 0d | submitClaimForVote |
| base | #342 | Slam or Die β Best Skate Bail on SkateHive | 0.0235 ETH | $58 | 7 | 9d | 7d | submitClaimForVote |
| base | #346 | Clank that Cat! | 0.0230 ETH | $56 | 10+ | 8d | 3d | submitClaimForVote vote running |
| arbitrum | #145 | Test Sieve and Give Us Feedback ● | 0.0210 ETH | $52 | 7 | 11d | 3d | submitClaimForVote |
| base | #159 | Engage with our video on X | 0.0135 ETH | $33 | 10+ | 127d | 0d | submitClaimForVote |
| base | #107 | Farcaster - The Movie (Trailer) | 0.0125 ETH | $31 | 3 | 162d | 143d | submitClaimForVote |
| base | #120 | Battle for the Bronx | 0.0122 ETH | $30 | 1 | 151d | 143d | submitClaimForVote |
| base | #122 | Win $10 in Among Traitors | 0.0122 ETH | $30 | 3 | 150d | 136d | submitClaimForVote |
| base | #330 | Found Poetry - make a poem from whatever's in reach | 0.0122 ETH | $30 | 7 | 17d | 1d | submitClaimForVote |
| base | #65 | Brian Armstrong tries poidh πΈ | 0.0120 ETH | $29 | 10+ | 187d | 6d | submitClaimForVote |
| base | #331 | Build a Visual Food Quote-Cast Tree ● | 0.0115 ETH | $28 | 8 | 17d | 3d | submitClaimForVote |
| mainnet | #23 | Go To Church | 0.0113 ETH | $28 | 1 | 11d | 3d | submitClaimForVote |
| base | #349 | Enter Collective Memory mini app staking challenge | 0.0100 ETH | $25 | 7 | 7d | 2d | acceptClaim |
| base | #335 | Hot Sauce Hero Image | 0.0095 ETH | $23 | 4 | 13d | 10d | submitClaimForVote |
| base | #62 | Joseph do a kickflip | 0.0080 ETH | $20 | 4 | 188d | 73d | submitClaimForVote |
| base | #102 | find a business with a Cascadia flag π² | 0.0077 ETH | $19 | 1 | 171d | 169d | acceptClaim |
| arbitrum | #116 | get out in a forest π²π³π΄π | 0.0075 ETH | $18 | 4 | 120d | 111d | submitClaimForVote |
| arbitrum | #4 | Adel's for Arbitrum | 0.0070 ETH | $17 | 2 | 217d | 184d | submitClaimForVote |
| arbitrum | #115 | Highlight A Business That Gives Back π¬ | 0.0070 ETH | $17 | 1 | 121d | 115d | acceptClaim |
| base | #323 | Photography bounty:Black and white β«οΈβͺοΈ | 0.0069 ETH | $17 | 10+ | 22d | 14d | submitClaimForVote |
| arbitrum | #149 | Feedback for FreeToken | 0.0065 ETH | $16 | 1 | 6d | 1d | acceptClaim |
| base | #90 | Group Cleanup Proof | 0.0054 ETH | $13 | 1 | 179d | 122d | submitClaimForVote |
| base | #91 | Reef Threat Edu Video | 0.0054 ETH | $13 | 1 | 179d | 172d | submitClaimForVote |
| base | #160 | take a photo in Turkey | 0.0053 ETH | $13 | 1 | 127d | 105d | submitClaimForVote |
| base | #315 | One Thing Web3 Fixed. One Thing It Broke. ● | 0.0038 ETH | $9 | 10+ | 29d | 3d | submitClaimForVote |
| base | #163 | find poidh in Seattle π | 0.0033 ETH | $8 | 2 | 127d | 94d | acceptClaim |
| base | #164 | find poidh in Seattle π | 0.0033 ETH | $8 | 3 | 127d | 115d | acceptClaim |
| arbitrum | #125 | #busch4busch | 0.0033 ETH | $8 | 1 | 99d | 75d | acceptClaim |
| base | #347 | ZitiCashbox - send $1 to a user at the LATAM Digital Asset | 0.0029 ETH | $7 | 1 | 8d | 4d | submitClaimForVote |
| base | #166 | Louis posts beautiful Glia shell code | 0.0026 ETH | $6 | 1 | 122d | 88d | acceptClaim |
| base | #356 | Take a real photo an AI detector calls fake | 0.0025 ETH | $6 | 10+ | 1d | 0d | acceptClaim |
| base | #358 | Walk a Dickbutt | 0.0020 ETH | $5 | 1 | 0d | 0d | submitClaimForVote |
| base | #11 | Clean a local green space | 0.0010 ETH | $2 | 2 | 215d | 211d | acceptClaim |
| base | #12 | Ramus Grove Stewardship | 0.0010 ETH | $2 | 1 | 215d | 215d | acceptClaim |
| base | #13 | Ramus Grove Stewardship | 0.0010 ETH | $2 | 2 | 215d | 211d | acceptClaim |
| base | #51 | test | 0.0010 ETH | $2 | 1 | 192d | 179d | acceptClaim |
| base | #59 | Make a Bounty | 0.0010 ETH | $2 | 2 | 189d | 152d | acceptClaim |
| base | #111 | The Hydration Check | 0.0010 ETH | $2 | 3 | 160d | 116d | acceptClaim |
| base | #127 | Random Act of Kindness - IRL Photo Bounty | 0.0010 ETH | $2 | 2 | 149d | 123d | acceptClaim |
| base | #128 | Random Act of Kindness - IRL Photo Bounty | 0.0010 ETH | $2 | 1 | 149d | 148d | acceptClaim |
| base | #130 | Random Act of Kindness - IRL Photo Bounty | 0.0010 ETH | $2 | 1 | 149d | 148d | acceptClaim |
| base | #138 | Show this code in public | 0.0010 ETH | $2 | 1 | 147d | 146d | acceptClaim |
| base | #139 | Test Bounty | 0.0010 ETH | $2 | 10+ | 147d | 6d | acceptClaim |
| base | #141 | Show this code in public | 0.0010 ETH | $2 | 1 | 147d | 147d | acceptClaim |
| base | #142 | Show this code in public | 0.0010 ETH | $2 | 3 | 147d | 112d | acceptClaim |
| base | #237 | Share $Space on X with screenshot β $5 | 0.0010 ETH | $2 | 2 | 79d | 78d | submitClaimForVote |
| base | #246 | Test bounty | 0.0010 ETH | $2 | 1 | 78d | 64d | acceptClaim |
| base | #247 | Test bounty | 0.0010 ETH | $2 | 1 | 78d | 13d | acceptClaim |
| base | #249 | Test bounty | 0.0010 ETH | $2 | 1 | 78d | 78d | acceptClaim |
| base | #338 | test2 | 0.0010 ETH | $2 | 2 | 10d | 10d | acceptClaim |
| degen | #185 | secret menu item 27 chars plain words only by @mr94t3z [?] | 1,000 DEGEN | $1 | 1 | 131d | 82d | submitClaimForVote |
| degen | #137 | π½οΈ Show Your Current Meal [?] | 1 DEGEN | $0 | 1 | 201d | 201d | acceptClaim |
Method, and what this does not show
Every bounty id on all four chains was walked one at a time against the deployed
contracts — bounties(id), then getClaimsByBountyId(id, 0),
bountyCurrentVotingClaim(id) and everHadExternalContributor(id).
A row is in the queue when all of the following hold: the prize is non-zero (so it has not
been cancelled or already withdrawn), the winner address is still zero, and page 0 of the
claim list decodes to at least one real claim.
- Claim counts stop at 10.
getClaimsByBountyIdreturns a fixed page of ten and itsoffsetargument does not advance (contracts #1441), so a count shown as10+is a floor, not a total. - 0 bounties could not be read and are excluded from every number on this page rather than assumed empty. An earlier pass of this scan reported zero waiting bounties on Degen; that was a rate-limited RPC returning errors that the script counted as "no claims", and the corrected figure is 2. Because that failure mode is silent, the census was then re-walked end to end by a second script that classifies every id as read, reverting, settled or waiting and counts hard RPC errors separately: 739 ids, 0 hard errors, and the funded-and-unpaid counts reconcile against this table as candidates = shown here + have no claim on them at all (base 73 = 55 + 18; arbitrum 17 = 10 + 7; mainnet 5 = 3 + 2; degen 4 = 2 + 2).
- No deadline lives on chain. Several of these bounties state a closing date in their description text. The contract does not know about it and neither does this page, so a long age here is not by itself evidence that anything is wrong.
- poidh.xyz numbers bounties differently from the contract. The links above add a
per-chain offset (base +986, arbitrum +180, mainnet +0, degen +0) to the on-chain
id; the id column is the on-chain one. Each offset is checked by requiring the site's own
record to report the same
onChainIdand the same title as the contract. - The 2 Degen rows are not
linked, because that check fails there. Asking the site for Degen id 137 returns
something that calls itself
onChainId: 137and carries a different bounty's title from the one the contract at0x18e5585ca7ce31b90bc8bb7aaf84152857ce243freturns — the same address the app's own config uses. I cannot tell you which side is wrong: Degen has exactly one reachable public RPC, so there is no second reading of that chain to break the tie, and a link would send you to a bounty that is not the one in the row. The amounts and claim counts in those two rows come from that single unconfirmed source and should be read that way.
Prices: ETH $2,453.26, DEGEN $0.001008, at build time. The raw scan is queue.json.