poidh v1 — per-wallet payouts, earnings and NFT holdings

Every wallet that ever touched the original poidh contract on Arbitrum, 0xdffe8a4a…9b940 — which is both the bounty escrow and the NFT collection. Rebuilt from all 3,466 logs it has ever emitted, then checked against the contract's own state.

496
bounties
278
completed
169
cancelled
49
still open
722
claims / NFTs
415
wallets
3.7269
ETH paid out
6.5365
ETH ever funded

Download the CSV → 415 rows, one per wallet, 16 columns. The three the bounty asked for are eth_paid_out, eth_earned and nfts_held; the rest are the working behind them.

"Paid out" and "earned" are not the same number, so both are given. The contract takes a 2.5% fee on acceptance — fee = amount * 25 / 1000, which holds exactly on all 278 completed bounties — and sends the remaining 97.5% to the claimant. So an issuer's outflow is the full bounty amount while the claimant's inflow is 97.5% of it. Across all of v1: 3.726923002 ETH left issuers, 3.633749927 ETH reached claimants, and 0.093173075 ETH went to the treasury at 0x1a706a29…3fef9. The CSV carries all three as separate columns, so you can add up whichever definition you meant.
444 of the 722 NFTs are held by the contract, not by people. v1 mints a claim's NFT to itself and only releases it when that claim is accepted — and it releases it to the bounty issuer, not the claimant. Every rejected or never-judged claim therefore leaves its NFT locked in the contract forever. That is why the contract address is the largest holder in the table below, and why only 80 real wallets hold anything. It is listed rather than dropped so the column still sums to totalSupply() = 722.

Every wallet

click a header to sort

How it was built

Five small scripts, no dependencies beyond an ABI decoder, each linked below. There is no database and no indexer: the whole history is one eth_getLogs call.

The claim NFT's metadata and its image are generated by a sixth script, gen_card.py, which reads every figure it prints out of summary.json, the CSV and verify.txt at render time and refuses to draw at all if the verification output is not clean — an image of a data pull that disagrees with the data pull is worse than no image.

Why you can trust the numbers

This contract has no verified source — it is not on Sourcify and Arbiscan wants an API key — so the event signatures came from openchain's topic database and the ABI was reconstructed. That is exactly the situation where a plausible-looking CSV can be quietly wrong, so every assumption is pinned by something that would break loudly if it were false:

Two invariants failed on the first run and both were real: the claim NFT is minted to the contract rather than the claimant, and the event's 7th word repeats the claim id rather than being the timestamp. Both are fixed above; the failures are why the checks exist.