ephemeral

ephemeral Lab · v0.2

ephemeral Lab Privacy Stages

Can a stranger link your main wallet to what a project paid you? We rate this week's most active projects that move value to users: rewards, claims, payouts, creator fees, winnings. Public data only, a link for every claim.

Stage leaderboard · 8 Oct 2026

Request a rating · Changelog

  1. 01ZeroTrace$ZERO · Robinhood ChainStage 1Private optionAAAGAAGG 2 · A 5 · R 0
  2. 02zipcoin$ZC · EthereumStage 1Private optionAAAGA?GG 2 · A 4 · R 0 · ? 1
  3. 03World Grants$WLD · World Chain (WLD also on Ethereum)Stage 0Public map?GAG???G 2 · A 1 · R 0 · ? 4
  4. 04Derive$DRV · EthereumStage 0Public mapRRRARAAG 0 · A 3 · R 4
  5. 05Pons$PONS · Robinhood Chain (4663)Stage 0Public mapRRRRA?AG 0 · A 2 · R 4 · ? 1
  6. 06Claus$CLAUS · EthereumStage 0Public mapRRRRA?AG 0 · A 2 · R 4 · ? 1
  7. 07Zevio$ZEVIO · EthereumStage 0Public mapRRRAR?AG 0 · A 2 · R 4 · ? 1
  8. 08EigenLayer$EIGEN · EthereumStage 0Public mapRRRAA?RG 0 · A 2 · R 4 · ? 1
  9. 09Compound III$COMP · EthereumStage 0Public mapRARRA??G 0 · A 2 · R 3 · ? 2
  10. 10Polymarketno token · Polygon (137)Stage 0Public mapRRRRR?AG 0 · A 1 · R 5 · ? 1
  11. 11Brave Rewards$BAT · Ethereum (BAT), payouts on SolanaStage 0Public mapRRRRR?AG 0 · A 1 · R 5 · ? 1
  12. 12gTrade$GNS · Arbitrum (also Base, Polygon, MegaETH)Stage 0Public mapRRRRR?AG 0 · A 1 · R 5 · ? 1
  13. 13Starknet$STRK · Starknet (STRK token also on Ethereum)Stage 0Public mapRRRRA?RG 0 · A 1 · R 5 · ? 1
  14. 14GROKLET$GROKLET · EthereumStage 0Public mapRRRRA?RG 0 · A 1 · R 5 · ? 1
  15. 15Chainlink Staking$LINK · EthereumStage 0Public mapRRRRA?RG 0 · A 1 · R 5 · ? 1
  16. 16Convex vlCVX$CVX · EthereumStage 0Public mapRRRRA?RG 0 · A 1 · R 5 · ? 1
  17. 17Curve veCRV$CRV · EthereumStage 0Public mapRRRRA?RG 0 · A 1 · R 5 · ? 1
  18. 18Ethena sUSDe$ENA · EthereumStage 0Public mapRARR??RG 0 · A 1 · R 4 · ? 2
  19. 19Sonic$S · SonicStage 0Public mapRRRR???G 0 · A 0 · R 4 · ? 3
  20. 20Blur$BLUR · EthereumStage 0Public mapRRRR???G 0 · A 0 · R 4 · ? 3
  21. 21ZKsync$ZK · ZKsync Era (ZK token also on Ethereum)Stage 0Public mapRRRRR?RG 0 · A 0 · R 6 · ? 1
  22. 22Puffer$PUFFER · EthereumStage 0Public mapRRRR??RG 0 · A 0 · R 5 · ? 2
  23. 23Gitcoin Grants$GTC · Ethereum (GTC), payouts on ArbitrumStage 0Public mapRRRR???G 0 · A 0 · R 4 · ? 3
  24. 24Tape$TAPE · EthereumStage 0Public mapRRRR???G 0 · A 0 · R 4 · ? 3
  25. 25Lighter$LIT · Ethereum (Lighter ZK rollup)Stage 0Public mapRRRR??RG 0 · A 0 · R 5 · ? 2

Most private first: sorted by Stage, then by rows at Green, then at Amber. Ties keep this week's attention order. Open a project for its evidence.

Scale

Three stages, for value flows to users

Like rollup stages, but for the receiving side. The moon shows how much of your payout history is lit up for anyone to read.

Stage 0

Public map

A stranger can link your main wallet to what you received: payouts to that wallet, per-holder amounts on a public ledger, distinctive amounts, claims that need its signature, or a dApp that makes you connect it to receive.

The default on a public ledger. Not a verdict on the team.

Stage 1

Private option

You can receive without that link: a fresh or ERC-5564 stealth address, equal-amount batches, no per-holder public debit. But it is opt-in, or the operator still holds the mapping.

Needs R1 to R4 at Amber or better.

Stage 2

Private by default

Private receiving is the default, amounts carry no fingerprint, you prove entitlement privately (Merkle commitments or ZK), the operator cannot link, and the docs list what still leaks.

Needs R1 to R5 and R7 Green, R6 verified.

Ratings · 8 Oct 2026

This week's five

Picked by attention (24h volume, new listings, trending boosts, age) times relevance (value that reaches users onchain). Open a row for the evidence, the fix path and what holders can do today.

01 Pons$PONS · Robinhood Chain (4663) Stage 0Public map RRRRA?A

Why it is hot

Upbit lists PONS on 8 Oct (KRW, BTC, USDT markets); Coinbase added it to its listing roadmap on 6 Oct. Largest token on Robinhood Chain by market cap.

Value flows to users

Creator fees: 70% of liquidity fees on current launches (90/10 on legacy) accrue in an escrow for the creator fee recipient. 80% of protocol fees buy PONS and burn it.

Contracts · @ponsdotfamily

Rows

  • R1Payout destinationRFees go to creatorFeeRecipient, which defaults to the launching wallet; changes emit CreatorFeeRecipientUpdated. evidence
  • R2Amount fingerprintRFees scale with each token's trading volume, so amounts are unique per creator. evidence
  • R3Ledger visibilityRFee escrow emits Credited and Claimed events; docs: everything reads and writes onchain. evidence
  • R4Claim linkageRRecipients withdraw with claim() or claimToken() from the recipient wallet. evidence
  • R5Operator knowledgeANo offchain account needed to earn; fee recipient takeovers go through an admin-reviewed form. evidence
  • R6Front-end leaks?n/a (unverified): ponsfamily.com was not reachable from our fetch environment. evidence
  • R7Privacy disclosureADocs say onchain data is public and free to read; no privacy section. evidence

Stage 0. R1 to R4 Red: each creator's fee income and claims sit on the public ledger under the launching wallet.

Fix path to Stage 1

Accept an ERC-5564 meta-address as creatorFeeRecipient. Sweep each epoch in one tx: equal units, each to a fresh stealth address; the escrow logs epoch totals only. Opt-in = Stage 1. payouts module · request an integration

What a holder can do today

Creator fees accrue to the address set at launch, and every claim is public.

Launch from a wallet with no history with your main one and claim there; sending fees to your main wallet re-links them.

02 Claus$CLAUS · Ethereum Stage 0Public map RRRRA?A

Why it is hot

AI agent coin with replaceable Uniswap v4 hooks. 300 NFTs each lock 50,000 CLAUS and earn daily ETH from 0.35% of main-pool volume. First payday 6 Oct, about $11,000 for the first 24h.

Value flows to users

Daily ETH to NFT vault holders, weighted by NFT-seconds held, pushed by ClausNFT.payRewards. Burns, liquidity adds and a project wallet share come from the 2% fee.

Contracts · @contractclaus

Rows

  • R1Payout destinationRETH is pushed to the wallet holding each NFT (ClausNFT.payRewards, epoch 0). evidence
  • R2Amount fingerprintRWeighted by NFT-seconds: 15 transfers in one batch, no two equal (0.000254 to 0.004924 ETH). evidence
  • R3Ledger visibilityREach recipient and amount is an internal ETH transfer on the public explorer. evidence
  • R4Claim linkageRNo claim step: ETH is pushed to whichever wallet holds the NFT; each mint is a 50,000 CLAUS deposit from the minting wallet. evidence
  • R5Operator knowledgeAPayouts are computed from public NFT-seconds; no offchain account mapping is documented. evidence
  • R6Front-end leaks?n/a (unverified): page source not inspectable from our fetch environment; no trackers seen in rendered text. evidence
  • R7Privacy disclosureAPrivacy Buy is documented (Journal #23); the NFT reward entries do not say what is public. evidence

Stage 0. R1 to R4 Red: per-holder ETH payouts to the holding wallet are on the public ledger.

Claus already offers a Privacy Pools buy path (Journal #23). That covers buying, not receiving payouts.

8 Oct 20:27 UTC: Claus deployed FeeBatchedPrivacyHook (verified). The source batches buybacks; we found no payout change in it. We re-rate if payouts change.

Fix path to Stage 1

Settle each daily epoch in one tx: split the ETH into equal units, send each unit to a fresh ERC-5564 address from the holder's registered meta-address, log only 'epoch settled'. Opt-in via ERC-6538 first = Stage 1. payouts module · request an integration

What a holder can do today

Payouts land in the wallet that holds the NFT, with the amount visible on Etherscan.

Hold the NFT in a wallet you use for nothing else, and don't sweep payouts straight to your main wallet.

03 Polymarketno token · Polygon (137) Stage 0Public map RRRRR?A

Why it is hot

Protocol V2 rollout this week: one ERC-1155 positions contract, unified router, pUSD collateral. Canary markets run 5 to 30 Oct; new markets switch to V2 from 2 Nov (tentative).

Value flows to users

Prediction-market winnings: winning outcome tokens are redeemed for pUSD into the user's wallet after resolution.

Contracts · @Polymarket

Rows

  • R1Payout destinationRWinnings redeem into the user's wallet; new deposit wallets are CREATE2-derived from the signer. evidence
  • R2Amount fingerprintRA payout equals the position size, so amounts are distinctive. evidence
  • R3Ledger visibilityRPublic Data API, no key: per-wallet PnL, biggest win, positions. evidence
  • R4Claim linkageRRedeem is a transaction the user signs; Polymarket's relayer submits it. evidence
  • R5Operator knowledgeRLegacy proxy wallets were created via Magic Link or Google login; the relayer receives every signed transaction. evidence
  • R6Front-end leaks?n/a (unverified): polymarket.com was not reachable from our fetch environment. evidence
  • R7Privacy disclosureADeveloper docs say all data routes are public; the user-facing policy was not checked. evidence

Stage 0. R1 to R5 Red: winnings, PnL and positions are public per wallet, by design.

Protocol V2 keeps positions per wallet in one ERC-1155 contract. We re-rate at the 2 Nov switch.

Fix path to Stage 1

In V2's unified router, add redeem-to-stealth: winnings go to a fresh ERC-5564 address from a meta-address the user registers once; per-wallet PnL off by default in the Data API. Opt-in = Stage 1. payouts module · request an integration

What a holder can do today

Every position, PnL figure and win is public per wallet through the Data API.

Trade from a wallet that is not your main one, and withdraw winnings to a fresh address.

04 zipcoin$ZC · Ethereum Stage 1Private option AAAGA?G

Why it is hot

Private money on Privacy Pools: zip, unzip, burn to speak, doorstep gifts. First pool 27 Sep; 5,670 holders 11 days in.

Value flows to users

Unzip: withdraw any amount to any address with a ZK proof. Doorstep: anonymous gifts to an ENS name or address. 0.5% of each trade to the treasury.

Contracts · @zipcoincash

Rows

  • R1Payout destinationAUnzip can pay a fresh address or a zk.money tag; plain transfers and doorstep gifts land on the named address. evidence
  • R2Amount fingerprintAUnzip takes any amount; not matching the deposit amount is up to the user. evidence
  • R3Ledger visibilityADeposits are public; withdrawals show recipient and amount, not which deposit paid. evidence
  • R4Claim linkageGA proof built in the browser shows a note is yours without saying which. evidence
  • R5Operator knowledgeATeam runs the relayer and association set: can delay or refuse, cannot move coins. evidence
  • R6Front-end leaks?n/a (unverified): site is closed source. Its open-source chat app has no analytics SDKs and uses a public RPC (publicnode). evidence
  • R7Privacy disclosureGREADME 'Trust and risks' lists the team-run relayer and ASP, upgradeable entrypoint, unaudited contracts. evidence

Stage 1. Private receiving exists and the proof hides the link, but it is opt-in and amounts are free-form.

Only project in this batch with a private receive path today.

Next step to Stage 2

Next, Stage 2: default doorstep gifts and unzips to ERC-5564 stealth addresses for doors with an ERC-6538 registration, fixed unzip denominations, and a published front-end source or no-tracker statement. payouts module · request an integration

What a holder can do today

Zip first, then unzip to a fresh address, not your main wallet.

Use round amounts that differ from your deposit, and let time pass between zip and unzip.

05 Zevio$ZEVIO · Ethereum Stage 0Public map RRRAR?A

Why it is hot

Launched 6 Oct. Discounted AI model access; half of a 1.5% trade fee becomes inference credit for holders, swept hourly. Ships a ZK private billing vault next to a normal dashboard vault.

Value flows to users

Hourly holder credit: 0.75% of trade value, split pro-rata among wallets holding at least 1,000 ZEVIO at each sweep. Paid as inference credit, not redeemable for cash.

Contracts · @zeviodotsh

Rows

  • R1Payout destinationRCredit accrues to the wallet holding at least 1,000 ZEVIO at each hourly sweep. evidence
  • R2Amount fingerprintRPro-rata split, so every wallet gets a distinct amount. evidence
  • R3Ledger visibilityRDocs: every payout is listed on the public leaderboard (per-wallet credit shown). evidence
  • R4Claim linkageANo claim tx, accrual is automatic; how holder credit is spent is not documented. evidence
  • R5Operator knowledgeROperator runs the sweep and an account registry tying sessions and API keys to wallet addresses. evidence
  • R6Front-end leaks?n/a (unverified): page source not inspectable from our fetch environment. evidence
  • R7Privacy disclosureADocs say the leaderboard is public and prompts reach the model provider; no list of what holder credit reveals. evidence

Stage 0. R1 to R3 Red: hourly credit follows the holding wallet and is published per wallet.

Zevio already runs a ZK private billing vault for ETH deposits (operator learns nullifiers and caps only). Per docs, holder credit does not use it.

Fix path to Stage 1

Route holder credit into the existing private vault: each sweep credits equal units to note commitments (or ERC-5564 stealth addresses) the holder registers once; the leaderboard shows sweep totals only. payouts module · request an integration

What a holder can do today

Your hourly credit is tied to the wallet that holds ZEVIO and appears on a public leaderboard.

Hold in a wallet you use for nothing else; for paid usage, the private vault keeps balances from the operator.

06 Derive$DRV · Ethereum Stage 0Public map RRRARAA

Why it is hot

Onchain options and perps exchange. V3 went live 8 Oct with custody on Ethereum and ZK proofs for margin and settlement. Top of CoinGecko trending this morning. Pays weekly DRV staking rewards, maker rewards (up to $500K USDC and 1M DRV per 28-day epoch) and referral fee rewards.

Value flows to users

Weekly DRV staking rewards, pro-rata to stDRV share. Maker rewards per 28-day epoch, allocated by per-wallet score, volume and stDRV holdings. Referral fee rewards per referrer wallet. All credit inside the v3 account; leaving to L1 is a withdrawal that SpotVault pays out in a ZK-proven batch.

Contracts · @DeriveXYZ

Rows

  • R1Payout destinationRWithdrawals default to the owner wallet; a referral reward wallet is listed next to its owner on public/get_all_referral_codes. evidence
  • R2Amount fingerprintRStaking pays pro-rata to stake share, maker rewards follow per-wallet scores; one v3 batch paid 98.179067754835 and 98.179530122423 DRV. evidence
  • R3Ledger visibilityRpublic/get_maker_program_scores returns every wallet's score, volume and holder boost per epoch with no auth; each L1 payout is a SpotVault transfer. evidence
  • R4Claim linkageAThe owner can sign any L1 recipient, but submitBatch posts each Withdrawal with its accountId, recipient and amount in calldata. evidence
  • R5Operator knowledgeROperator runs wallet session logins and session keys (X-DeriveWallet header), screens withdraw addresses and scores wallets in ClickHouse. evidence
  • R6Front-end leaksAVerified in app source: Google Analytics loader (sends page path), Vercel Analytics, PostHog and Datadog RUM hooks; no wallet capture documented. evidence
  • R7Privacy disclosureAAPI docs mark which endpoints are public (wallet to subaccounts, per-wallet scores); no page says what rewards and withdrawals reveal. evidence

Stage 0. R1 to R3 Red: rewards are exact and per wallet, scores and reward wallets sit on public endpoints, and every L1 withdrawal is posted with account ID, recipient and amount.

V3 batches carry SP1 validity proofs (VerifiableApp.submitBatch). The proof covers correctness; the withdrawal list still sits in plain calldata, and deposit() calldata names the subaccountId from the depositing wallet.

public/get_trade_history serves anonymized trades, so trade flow is less exposed than payouts.

R6: the app has /wallet/{address} and /programs/{address} routes and the Google Analytics config sends the page path. We did not confirm an address reaches a tracker, so R6 stays Amber.

Staking docs sit on legacy.docs.derive.xyz; we did not find the v3 staking reward path onchain, so the rating covers rewards as credited in-app and paid out via v3 withdrawals.

Fix path to Stage 1

Keep accountId inside the proof and post only recipient and amount, settle each reward epoch in equal DRV units to fresh ERC-5564 addresses registered once via ERC-6538, and put per-wallet scores and referral reward wallets behind auth. Opt-in first = Stage 1. payouts module · request an integration

What a holder can do today

Your wallet maps to your subaccount IDs on a public endpoint, and every withdrawal posts the account ID, recipient and exact amount on Ethereum.

Withdraw rewards in round amounts to an address you use for nothing else; per-wallet maker scores and referral reward wallets are public.

07 ZeroTrace$ZERO · Robinhood Chain Stage 1Private option AAAGAAG

Why it is hot

Privacy token on Robinhood Chain, launched on Pons on 2 Oct. Shield ZERO into encrypted notes, then send, sell or unshield with a ZK proof built on your device. 0.35% of every ZERO trade buys ZERO for private notes only; no team relayer. After the 12 Oct outflow a new vault went live that can be paused and whose verifier can be replaced.

Value flows to users

Holder yield: the harvester takes 0.7% of every ZERO trade in ETH, sends half to the team, and with the other half tops up the gas deposit and buys ZERO donated to the vault, so every private note is worth more; public ZERO earns nothing. Each private transaction's flat network fee (0.0005 ETH in ZERO) is also donated to the other notes. Value leaves by unshielding to public ZERO or selling for ETH at an address the user picks; private sends, private-address payments and payment links move value between notes.

Contracts · @Zerotrace_so

Rows

  • R1Payout destinationAYield stays inside private notes, but the unshield form starts with the connected address and sales go to any pasted address, with a warning only if it is the connected one. evidence
  • R2Amount fingerprintAYield raises every share's value with no per-user amount, while unshields and sales are user-chosen amounts; the flat 0.0005 ETH fee avoids a percentage that would reveal amounts. evidence
  • R3Ledger visibilityAHarvests and fees show only vault totals (VaultUpdated); each sale or unshield shows the receiving address and amount, not which note paid. evidence
  • R4Claim linkageGA proof built on the device shows note ownership and the circuit checks the wallet's Spend signature inside it, so the owner's address never signs or pays onchain. evidence
  • R5Operator knowledgeANo team relayer and keys stay in page memory, but the team-run indexer, which serves everyone the same data, still sees IP addresses and sync timing. evidence
  • R6Front-end leaksAVerified in app source: the root layout loads Vercel Web Analytics (@vercel/analytics 2.0.1) from a same-origin path the CSP allows and sends page paths; RPC named (rpc.mainnet.chain.robinhood.com); no wallet capture documented. evidence
  • R7Privacy disclosureGThreat model, trust model and 'Staying private' list what stays public (entries, exits, registration, IP and timing to RPC, bundler and indexer) and the small early privacy set. evidence

Stage 1. Yield stays inside private notes and spends are ZK-proven. Cash-outs default to the connected wallet and show recipient and amount.

Post-mortem (12 Oct): a Barretenberg verifier flaw let one proof spend notes covering the whole share supply, so 90,422,336 ZERO left the v1 vault. Every note unspent at block 86632173 is refunded to the wei into a private note of the new vault, via the same ERC-4337 path, so the claiming address does not appear onchain; only note sizes become public, as with an unshield. Grades unchanged: the payout path is the same design.

First project in the Lab whose holder yield creates no per-user payout: harvests buy ZERO into the vault, so every note grows and the chain shows only vault totals.

Docs say the CSP limits the page to the RPC, bundler and indexer. The live CSP header also allows WalletConnect relay and verify hosts, and Vercel Web Analytics loads from a same-origin path (/4e6fa0d136a87808/script.js, HTTP 200). Neither is listed in the trust model.

Payment-link and private-address keys sit after '#', so they are not part of the page path the analytics records.

8.33% of supply is shielded and holders number 2,095; the docs rate residual risk from amount and timing matching as high while the privacy set is small.

A separate token also named Zerotrace (ZERO), 0xe91cAf4b5bC0A8e23D86dd598C234c7Cf10e32dd, appears in the vault's token list; the docs name 0x316fa3AB9A8FD8d7567a823DedecF28d9FEE2894.

Next step to Stage 2

Next, Stage 2: prefill unshield and sale recipients with a fresh ERC-5564 stealth address (or the user's private-address keys) instead of the connected wallet, offer fixed exit sizes, let the app read the chain directly by default or run the indexer without logs, and drop Vercel Web Analytics or list it in the trust model. payouts module · request an integration

What a holder can do today

Had notes in the old vault? Turn privacy on with the same wallet: the refund lands in a new private note, with no deadline.

Replace the prefilled connected address when you unshield, and sell or unshield to a fresh address in amounts and at times that differ from your buys.

08 Sonic$S · Sonic Stage 0Public map RRRR???

Why it is hot

S rose about 34% on 11 Oct ahead of the 15 Oct cutoff: up to 32.6M S from the Season 1 and 2 airdrops that stays unclaimed becomes eligible for burn. Claims run through a dashboard in MySonic; Season 1 paid 25% liquid at claim and 75% as a vesting fNFT.

Value flows to users

Airdrop: 190.5M S minted in June 2025 for airdrops and incentives, earned through Sonic Points (users) and Gems (apps). Eligible wallets claim in MySonic: 25% liquid at claim, 75% as a vesting fNFT that can also be sold on the Paintswap order book. Allocations still unclaimed on 15 Oct 2026 become eligible for burn.

Contracts · @SonicLabs

    Rows

    • R1Payout destinationRAllocations follow the wallet that earned the points; it claims 25% liquid and receives the other 75% as a vesting fNFT. evidence
    • R2Amount fingerprintREach wallet gets a share of the airdrop sized by its points, so claimed amounts are distinct per wallet. evidence
    • R3Ledger visibilityRClaims and fNFTs are transfers to the claiming wallet on Sonic, a public EVM chain; only the unclaimed total is reported in aggregate. evidence
    • R4Claim linkageREligible fNFT holders claim from the wallet holding the fNFT; selling the fNFT on Paintswap is itself an onchain transfer from that wallet. evidence
    • R5Operator knowledge?n/a (unverified): points and anti-bot reviews run offchain; what data they keep was not checked in this snapshot. evidence
    • R6Front-end leaks?n/a (unverified): the MySonic claim page source was not inspected in this snapshot. evidence
    • R7Privacy disclosure?n/a (unverified): the airdrop docs were not checked for a privacy section in this snapshot. evidence

    Stage 0. Each claim pays the wallet that earned the points, in an amount sized by those points, on a public chain.

    Up to 32.6M S from Seasons 1 and 2 becomes eligible for burn if unclaimed by 15 Oct 2026. Claiming before then creates the public link this rating describes.

    The fNFT is transferable, so the right to the vested 75% can change wallets, but the transfer shows both the old and the new wallet.

    This snapshot uses Sonic Labs' own posts on X. Docs, the claim contract and the MySonic page source were not reachable from our environment on 12 Oct, so R5 to R7 are marked n/a. We re-rate when we check them.

    Fix path to Stage 1

    For the next season: let wallets register an ERC-6538 meta-address before the snapshot, pay each claim to a fresh ERC-5564 address in equal units per epoch, and publish only season totals. Opt-in = Stage 1. payouts module · request an integration

    What a holder can do today

    If you are eligible, claim before 15 Oct: unclaimed S becomes eligible for burn.

    Treat the claiming wallet as public. Don't sweep the S or the fNFT straight to your main wallet; that transfer re-links the two.

    09 Blur$BLUR · Ethereum Stage 0Public map RRRR???

    Why it is hot

    On 12 Oct Blur said the blur.io frontend will be deprecated on 12 Nov 2026 and Blend stops matching new loans the same day. BLUR fell 32.1% on the news. The marketplace protocol stays onchain and BLUR keeps control of its fee switch.

    Value flows to users

    Points airdrops: Care Packages and Airdrops 1 to 3, then Seasons 1 to 3, paid BLUR to the wallets that listed and bid, sized by their points. Season 3 also passed 1% of BLAST to Blur traders and BLUR holders. Blend lends ETH against NFTs; after 12 Nov borrowers repay or default and a withdraw tool follows.

    Contracts · @blur_io

      Rows

      • R1Payout destinationREach airdrop went to the wallet that earned it; Airdrop 2 was claimed by placing a bid from that wallet. evidence
      • R2Amount fingerprintRAllocations follow bidding and listing points, so every wallet's amount is its own fingerprint. evidence
      • R3Ledger visibilityRBLUR and the BLAST share for traders and holders arrive as public transfers to those wallets on Ethereum. evidence
      • R4Claim linkageRClaiming took an action from the eligible wallet itself: list an NFT or place a bid before the deadline. evidence
      • R5Operator knowledge?n/a (unverified): points were computed offchain; what Blur keeps about accounts was not checked in this snapshot. evidence
      • R6Front-end leaks?n/a (unverified): the blur.io page source was not inspected; the frontend is deprecated on 12 Nov. evidence
      • R7Privacy disclosure?n/a (unverified): docs were not checked for a privacy section in this snapshot. evidence

      Stage 0. Every Blur airdrop paid the wallet that earned the points, sized by those points, claimed by an action from that same wallet.

      The frontend goes away on 12 Nov. The onchain history does not: every claim, bid and Blend loan stays readable from the same wallets.

      Blend's wind-down means repayments, defaults and withdrawals over the next 30 days, each one an onchain link between a borrower wallet and its NFTs.

      This snapshot uses Blur's own posts on X. Docs, claim contracts and the frontend source were not checked, so R5 to R7 are marked n/a. We re-rate if Blur publishes more.

      Fix path to Stage 1

      For any future distribution: let wallets register an ERC-6538 meta-address before the snapshot, pay claims to fresh ERC-5564 addresses in equal units, publish only totals. Opt-in = Stage 1. payouts module · request an integration

      What a holder can do today

      Revoke marketplace approvals you no longer need before the frontend goes away.

      Moving NFTs or BLUR out before 12 Nov? Don't sweep them straight to your main wallet; that transfer links the two.

      10 Brave Rewards$BAT · Ethereum (BAT), payouts on Solana Stage 0Public map RRRRR?A

      Why it is hot

      BAT is the token Brave pays users for viewing Brave Private Ads. It rose 27% on 13 Oct and about 124% from 13 Sep to 13 Oct after BAT Roadmap 4.0 (9 Jul) and the Brave Rewards Card waitlist (3 Aug). Roadmap 4.0 promises revenue-funded BAT buybacks for user rewards and a self-custody wallet.

      Value flows to users

      Users who opt into Brave Rewards earn BAT for viewing Brave Private Ads. Once a month the earned BAT is paid out, either to a custodial account (custodian ID and deposit address linked to the Rewards Payment ID) or, in eligible countries, on-chain as Wormhole-bridged BAT to a self-custody Solana address the user connects. Roadmap 4.0 adds card cashback in BAT and plans to lock earned BAT into a BravePass.

      Contracts · @brave

      Rows

      • R1Payout destinationRMonthly BAT is deposited directly on-chain to the Solana address the user connected, or to the linked custodial account. evidence
      • R2Amount fingerprintREach payout is the user's own sum of per-ad earnings (0.001 to 0.5 BAT per ad, varying by region and campaign), so amounts like 0.265813 BAT are per-user. evidence
      • R3Ledger visibilityRSelf-custody payouts are SPL-BAT transfers on Solana, so each recipient address and amount is public on-chain. evidence
      • R4Claim linkageRTo connect a Solana address the user verifies ownership with that wallet, and the payout goes to that same address. evidence
      • R5Operator knowledgeRThe Rewards Payment ID is associated with a custodian ID and deposit addresses, or with the self-custody address; IP is kept 7 days when requesting confirmation tokens. evidence
      • R6Front-end leaks?n/a (unverified): Rewards runs inside the Brave browser, not a web dApp; the browser source was not inspected in this snapshot. evidence
      • R7Privacy disclosureAThe privacy policy says Brave cannot tell which ads a user saw and lists what links to the Payment ID, but does not say that payouts are public on-chain. evidence

      Stage 0. Ad views are anonymized, but the monthly payout lands at the wallet the user verified, in a per-user amount, as a public transfer.

      The ad side is built for privacy: confirmations are anonymized and Brave states it cannot tell which ads a user saw. The leak is at the payout step.

      The custodial route links the Payment ID to a custodian ID and deposit address at the custodial partner; the self-custody route makes the payout public on Solana.

      Roadmap 4.0 plans a BravePass that locks earned BAT and a Rewards Card. How those pay out is not yet published; we re-rate when it is.

      Snapshot from Brave's blog posts and privacy policy (last updated 23 Sep 2026). The per-ad payout range comes from a Brave community forum post, not official docs.

      Fix path to Stage 1

      Let users register an ERC-6538 meta-address instead of a fixed payout address, pay each month's earnings in equal fixed units to fresh stealth addresses, and publish only the monthly payout total. Opt-in = Stage 1. payouts module · request an integration

      What a holder can do today

      Treat the address you connect to Brave Rewards as public: every monthly payout to it is visible on Solana.

      Don't sweep payouts straight to your main wallet; that transfer links the two.

      11 gTrade$GNS · Arbitrum (also Base, Polygon, MegaETH) Stage 0Public map RRRRR?A

      Why it is hot

      gTrade is Gains Network's onchain leveraged trading app; traders are paid from gToken vaults when they close in profit. GNS rose 98.7% in 24h on 14 Oct and its volume hit about $19M, the highest in a year. GNS staking rewards are paused under the growth phase voted in June 2026, so trading payouts are the live value flow.

      Value flows to users

      Traders post collateral and open leveraged positions; on close (manual, take profit, stop loss or liquidation) the diamond settles against the gToken vault and sends collateral plus net PnL to the trader's wallet. GNS staking used to share fee revenue, but rewards are paused in the current growth phase. Referral rewards and trading credits are tracked by wallet through the gTrade backend.

      Contracts · @GainsNetwork_io

      Rows

      • R1Payout destinationROn close, 'the final amount is sent to your wallet': payouts land at the trader address that opened the position. evidence
      • R2Amount fingerprintREach payout is the position's exact net PnL plus collateral after fees, so every amount is unique to one trader. evidence
      • R3Ledger visibilityRThe public trading-history API lists every action with trader address, net PnL and tx, and the leaderboard API ranks addresses by total PnL, no key needed. evidence
      • R4Claim linkageRTrades are opened against the connected wallet; even with one-click trading, collateral and PnL stay tied to the trader address. evidence
      • R5Operator knowledgeRThe trading API stores each agent and each read-only API key linked to its trader address, plus a daily spend total per agent. evidence
      • R6Front-end leaks?n/a (unverified): the app's raw page source could not be fetched in this snapshot, so trackers and RPC were not checked. evidence
      • R7Privacy disclosureAThe FAQ says 'All trades are on-chain', but no page lists what is public per trader, such as the address-level PnL in the API. evidence

      Stage 0. Winnings land at the trading wallet in exact per-trade amounts, and a public API lists each close by address with its PnL.

      The leak is twofold: the chain shows each settlement, and gTrade's own backend serves address-level history and a PnL leaderboard without a key.

      One-click trading keeps its delegate key on the device, which helps key safety but not linkage: positions and payouts stay on the main trader address.

      GNS staking rewards are paused under the June 2026 growth phase; we re-rate if staking payouts restart.

      Snapshot from gTrade docs and the public backend API; addresses are not shown here. R6 unverified because the app's raw HTML was blocked from our fetch.

      Fix path to Stage 1

      Let traders set an ERC-5564 stealth meta-address as the close receiver, settle profits in fixed units to fresh stealth addresses, and drop the address field from the public history and leaderboard APIs (or make them opt-in). Opt-in receiver = Stage 1. payouts module · request an integration

      What a holder can do today

      Treat the wallet you trade from as public: every close, PnL figure and leaderboard rank is tied to it.

      Trade from a wallet you use for nothing else, and don't sweep winnings straight to your main wallet; that transfer links the two.

      12 ZKsync$ZK · ZKsync Era (ZK token also on Ethereum) Stage 0Public map RRRRR?R

      Why it is hot

      ZKsync is an Ethereum Layer 2. ZK rose about 50% in the 7 days to 15 Oct with 24h volume near $90M, in a week when Matter Labs announced Prividium in Japan (7 Oct) and Airbender Prime (13 Oct). The value flow to holders is ZKnomics staking: Season 1 paid 5.3M ZK, Season 2 is paused and claims stay open.

      Value flows to users

      Holders stake ZK in the Tally-built ZKStaker contract on ZKsync Era and delegate its voting power to an active delegate. A notifier mints ZK into the staker, rewards stream over 30-day windows pro-rata to each deposit, and the holder claims or claims and restakes from the staking position. Season 1 ran 9 Feb to 11 May 2026; Season 2 is paused, and claiming stays open until announced otherwise.

      Contracts · @zksync

      Rows

      • R1Payout destinationRRewards accrue to 'your staking position' and are claimed from it; the FAQ's claim steps offer no separate, unlinked receiver. evidence
      • R2Amount fingerprintR'Rewards are proportional to their share of the total staked amount', so each claim is an exact pro-rata amount unique to one deposit. evidence
      • R3Ledger visibilityRStakes and claims are public calls to the ZKStaker contract; the Season 1 review counts 4,397 staking addresses and the 5.3M ZK paid to them. evidence
      • R4Claim linkageRRewards are claimed by selecting 'Claim' on your own staking position, so the claim is a transaction from the staking wallet. evidence
      • R5Operator knowledgeRTally runs the staking interface; its privacy policy lists the public wallet address for 'creating user accounts', plus IP address and device identifiers. evidence
      • R6Front-end leaks?n/a (unverified): the staking app's page source could not be fetched in this snapshot, so trackers and RPC were not checked. evidence
      • R7Privacy disclosureRThe staking FAQ covers rewards, delegation and claims but has no section on what is public per staker. evidence

      Stage 0. Rewards are claimed by the staking wallet in exact pro-rata amounts, and every stake and claim is a public call to one contract.

      Staking also requires delegating voting power, so each staking wallet is publicly tied to a chosen delegate as well as to its rewards.

      Season 2 is paused and the capped minters expire on 31 Dec 2026; Season 1 rewards can still be claimed.

      The ZKsync hype this week is about Prividium and Airbender Prime, not staking; we rate the live holder value flow, not the product news.

      Snapshot from ZK Nation forum posts and Tally's privacy policy; addresses of stakers are not shown here. R6 unverified because the staking app's source was not fetched.

      Fix path to Stage 1

      Let a staker set an ERC-5564 stealth meta-address as the reward receiver, settle each 30-day epoch in equal units to fresh stealth addresses, and log only 'epoch settled'. Opt-in receiver = Stage 1. payouts module · request an integration

      What a holder can do today

      Treat the wallet you stake from as public: its stake, its delegate and every reward claim are visible on ZKsync Era.

      Stake from a wallet you use for nothing else, and don't sweep claimed ZK straight to your main wallet; that transfer links the two.

      13 Puffer$PUFFER · Ethereum Stage 0Public map RRRR??R

      Why it is hot

      Puffer is a liquid restaking protocol on Ethereum. On 15 Oct PUFFER led CoinMarketCap's most-searched lists, global and Korea, after rising about 95% in 24h, with volume around 14 times its daily average. Holders who lock PUFFER as vlPUFFER earn CARROT incentives paid through Merkl.

      Value flows to users

      Holders lock PUFFER in vlPUFFER for 30 days to 24 months at a 1x to 24x multiplier; the vlPUFFER balance sets governance weight and reward share. The live campaign pays CARROT incentives (as mtwCARROT) through Merkl: rewards accrue per wallet in a Merkle tree, and the wallet claims them from Merkl's Distributor on Ethereum.

      Contracts · @puffer_finance

      Rows

      • R1Payout destinationRMerkl sends claimed tokens to the user in the Merkle leaf, or to a recipient that user sets onchain with setClaimRecipient. evidence
      • R2Amount fingerprintRDocs: 'Your vlPUFFER balance determines your influence in governance votes and reward distributions'; that balance is the lock times a 1x to 24x multiplier, so each wallet's share is its own. evidence
      • R3Ledger visibilityREvery lock emits Deposit(user, pufferAmount, unlockTime, vlPUFFERAmount) on the verified vlPUFFER contract, and each Merkl claim is a token transfer to the claiming wallet. evidence
      • R4Claim linkageRclaim() takes each user's address, cumulative amount and proof, and only the user claiming for itself can pick another recipient, so the entitled wallet acts onchain. evidence
      • R5Operator knowledge?n/a (unverified): Merkl computes rewards offchain; what Puffer or Merkl keep about wallets was not checked in this snapshot. evidence
      • R6Front-end leaks?n/a (unverified): the app.puffer.fi page source could not be fetched in this snapshot, so trackers and RPC were not checked. evidence
      • R7Privacy disclosureRThe vlPUFFER docs cover locks, multipliers, kicks and delegation, but say nothing about what is public per wallet. evidence

      Stage 0. Rewards follow each wallet's vlPUFFER balance, every lock is logged with wallet and amount, and claims come from that wallet.

      vlPUFFER cannot be transferred (TransfersDisabled in the verified ABI), so the lock size, unlock time and delegate stay public on the wallet that locked.

      Expired locks not withdrawn within 7 days can be kicked by anyone for a 1% fee; the UserKicked event names both the kicker and the user.

      Merkl documents a per-address rewards summary endpoint (amount, claimed, pending) at api.merkl.xyz/v4/users/{address}/rewards/summary; we did not call it, so R3 rests on the onchain lock events.

      Snapshot from Puffer docs, Merkl developer docs and the verified vlPUFFER contract; holder addresses are not shown here. R5 and R6 unverified: app.puffer.fi could not be fetched from our environment.

      Fix path to Stage 1

      Let lockers register an ERC-6538 meta-address and use it as the Merkl claim recipient, settle each campaign epoch in equal CARROT units to fresh ERC-5564 addresses, and keep per-address reward summaries behind auth. Opt-in receiver = Stage 1. payouts module · request an integration

      What a holder can do today

      Treat the wallet you lock from as public: its lock size, unlock time, delegate and every CARROT claim are visible on Ethereum.

      Lock from a wallet you use for nothing else, and don't sweep claimed rewards straight to your main wallet; that transfer links the two.

      14 Starknet$STRK · Starknet (STRK token also on Ethereum) Stage 0Public map RRRRA?R

      Why it is hot

      Starknet is an Ethereum Layer 2 that has been shipping privacy: STRK20 shielded tokens since v0.14.2, and on 13 Oct Shadow Accounts, a private mode apps can switch on. On 16 Oct STRK was #3 on LunarCrush AltRank with 24h volume about 6 times its daily average, after a community poll on Starknet's direction. The value flow to holders is staking: STRK minted each epoch for validators and their delegation pools.

      Value flows to users

      Holders stake STRK as validators or delegate it to a validator's pool. Each epoch the reward supplier mints STRK; validators that attested earn in proportion to their staking power, take a commission, and the rest accrues to delegators by pool share. A delegator claims with the pool's claim_rewards, which transfers the STRK to the reward address set when it entered the pool.

      Contracts · @Starknet

      Rows

      • R1Payout destinationRclaim_rewards pays the reward_address set in enter_delegation_pool; NewPoolMember logs it next to the pool member, and a change emits PoolMemberRewardAddressChanged with old and new address. evidence
      • R2Amount fingerprintRRewards go to validators in proportion to staking power and to delegators by their share in the pool, so each claim is an exact per-member amount. evidence
      • R3Ledger visibilityREvery delegator claim emits PoolMemberRewardClaimed with pool member, reward address and amount; validator claims emit StakerRewardClaimed the same way. evidence
      • R4Claim linkageRThe pool's claim_rewards can be executed only by the pool member address or its reward address. evidence
      • R5Operator knowledgeARewards are computed onchain per epoch from stake and publicly verifiable attestations; the docs describe no offchain account for staking or claiming. evidence
      • R6Front-end leaks?n/a (unverified): the staking dashboard's page source could not be fetched in this snapshot, so trackers and RPC were not checked. evidence
      • R7Privacy disclosureRThe staking page covers rewards, reward addresses and claims, but says nothing about what is public per delegator. evidence

      Stage 0. Each claim pays the reward address its pool member registered, in an exact pro-rata amount, and logs both addresses with the amount.

      Starknet already ships privacy for transfers: STRK20 shielded balances (v0.14.2) and Shadow Accounts (13 Oct). Staking rewards do not use it: per the contract spec, claim_rewards transfers STRK to the registered reward address.

      The docs advise keeping the reward address in a cold wallet. That protects keys, not privacy: NewPoolMember and every claim event publish the pool member and its reward address side by side.

      Validators are graded the same way: the staking contract's claim_rewards pays the staker's reward address and StakerRewardClaimed logs staker, reward address and amount.

      Snapshot from Starknet docs and the starknet-staking contract spec on GitHub; staker addresses are not shown here. R6 unverified because the staking dashboard's source was not fetched.

      Fix path to Stage 1

      Let pool members register an ERC-5564 stealth meta-address instead of a fixed reward_address, settle each epoch's claims in equal STRK units to fresh stealth addresses (or into STRK20 shielded balances), and drop the reward address from the entry and claim events. Opt-in receiver = Stage 1. payouts module · request an integration

      What a holder can do today

      Treat your pool member address and its reward address as one public identity: the entry, every claim and its exact amount are logged together.

      Use a reward address you use for nothing else, and don't sweep claimed STRK straight to your main wallet; that transfer links the two.

      15 GROKLET$GROKLET · Ethereum Stage 0Public map RRRRA?R

      Why it is hot

      GROKLET launched on 15 Oct on Stockereum, a launchpad that opens a permanent Uniswap v4 market for each token against a tokenized stock. On 16 Oct it led our Uniswap v4 scan by 24h volume. Its creator switched on holder rewards: 0.5% of every trade is split across holders and paid in SPCXon, the Ondo tokenized SpaceX token.

      Value flows to users

      Each trade pays a 1% fee in the paired stock token. 0.5% stays with the platform; the creator chose holder rewards for the other 0.5%, so it goes to a HolderDistributor that splits it across holders in proportion to their balance at each trade. A holder claims its share, or anyone calls distribute() to push every pending share in gas-bounded batches; shares below their gas cost keep accruing.

      Contracts

      Rows

      • R1Payout destinationRclaim() and claimFor(holder) send SPCXon to the holder itself and distribute() pushes each share to the holding wallet; no function takes another recipient. evidence
      • R2Amount fingerprintRDocs: rewards are split 'in proportion to their balance at the moment the trade happens'; the first 3 claims paid 0.0103, 0.0748 and 0.3362 SPCXon. evidence
      • R3Ledger visibilityREach payout emits Claimed(holder, to, amount) or Paid(holder, amount), and holdersSlice() returns every holder address from the contract. evidence
      • R4Claim linkageRclaim() pays msg.sender and claimFor pays the holder, so the entitled wallet receives; all 3 Claimed events so far have holder equal to recipient. evidence
      • R5Operator knowledgeAShares are computed onchain from balances at each trade; the docs describe no account or login beyond a wallet connect. evidence
      • R6Front-end leaks?n/a (unverified): the stockereum.com page source was not inspected in this snapshot, so trackers and RPC were not checked. evidence
      • R7Privacy disclosureRThe docs explain fees, holder rewards and burns, but have no section on what is public per holder. evidence

      Stage 0. Rewards are pro rata to each wallet's balance, are paid only to that wallet, and every payout is logged with holder and amount.

      Rewards are paid in SPCXon, a tokenized stock, so every payout is also a public stock-token transfer to the holding wallet.

      The distributor keeps the full holder set onchain (holderCount, holdersSlice), and pendingMany returns each holder's unpaid share, so the whole reward map can be read without an indexer.

      As of 16 Oct 14:40 UTC rewards moved through 3 claims and no distribute() batch; each batch would add one Paid event per holder.

      Snapshot from the verified token and HolderDistributor source on Etherscan, Stockereum's docs and its token page; holder addresses are not shown here. R6 unverified: the page source was not inspected.

      Fix path to Stage 1

      Let holders register an ERC-6538 meta-address in the distributor, have distribute() pay each epoch in equal SPCXon units to fresh ERC-5564 stealth addresses, and replace holdersSlice and per-holder events with an epoch total. Opt-in receiver = Stage 1. payouts module · request an integration

      What a holder can do today

      Treat the wallet that holds GROKLET as public: the distributor lists it as a holder and logs every SPCXon payout to it with the amount.

      Hold from a wallet you use for nothing else, and don't sweep SPCXon straight to your main wallet; that transfer links the two.

      16 EigenLayer$EIGEN · Ethereum Stage 0Public map RRRAA?R

      Why it is hot

      EigenLayer is Ethereum's restaking protocol, now under the EigenCloud brand. On 17 Oct EIGEN entered the LunarCrush AltRank top 10 for the first time in 36 days, up 22.6% in 7 days, with social dominance about 3 times its daily average. Restakers and operators earn AVS rewards and programmatic incentives in EIGEN, WETH and other tokens, claimed from the RewardsCoordinator.

      Value flows to users

      AVSs and EigenLayer's programmatic incentives fund rewards. A daily offchain calculation splits them pro rata by stake weight, with a fixed operator commission, and a rewards updater posts a Merkle root of cumulative earnings per earner to the RewardsCoordinator. The earner, or a claimer it sets, calls processClaim with a proof for its earner leaf and picks a recipient; the app and CLI default that recipient to the earner.

      Contracts · @eigencloud

      Rows

      • R1Payout destinationRDocs: 'the default reward recipient is the Earner'; a different recipient is passed in processClaim calldata next to the earner, and the 10 latest claims all paid the earner itself. evidence
      • R2Amount fingerprintREach staker gets its stake weight over the total stake weight per snapshot, minus a fixed 10% operator commission, so every cumulative amount is per earner. evidence
      • R3Ledger visibilityRPer-earner records (earner, token, cumulative_amount) were published in a public S3 bucket and are served by the open-source Sidecar indexer to anyone who runs it. evidence
      • R4Claim linkageAA claimer set by the earner can claim to any recipient, but the Merkle proof in processClaim names the earner leaf. evidence
      • R5Operator knowledgeARewards are computed from onchain stake data, and the Sidecar that reproduces them is an open-source, permissionless indexer anyone can run. evidence
      • R6Front-end leaks?n/a (unverified): the EigenLayer app's page source was not inspected in this snapshot, so trackers and RPC were not checked. evidence
      • R7Privacy disclosureRThe earners, claimers and recipients page explains who can claim and where tokens go, but says nothing about what is public per earner. evidence

      Stage 0. Rewards are pro rata per earner, published per earner address, and claimed with a proof that names the earner, usually straight to the earner's own address.

      Claimers and recipients help key management, not linkage: the earner leaf in each processClaim proof ties any recipient back to the earner.

      Distribution roots are cumulative, so one claim reveals an earner's whole reward total for each token up to that root.

      10 of 10 processClaim calls between 16 Oct 15:55 and 17 Oct 05:38 UTC sent tokens to the earner's own address; addresses are not shown here.

      Snapshot from EigenCloud docs, the rewards calculation spec and RewardsCoordinator transactions on Etherscan. R6 unverified: the app source was not inspected.

      Fix path to Stage 1

      Let earners register an ERC-6538 meta-address as the default recipient, pay each claim in equal units to fresh ERC-5564 stealth addresses, and stop publishing per-earner cumulative amounts outside the Merkle root. Opt-in recipient = Stage 1. payouts module · request an integration

      What a holder can do today

      Treat the restaking wallet as public: its cumulative rewards per token can be read from public data, and each claim names it.

      Claim to an address you use for nothing else, and don't sweep rewards straight to your main wallet; that transfer links the two.

      17 Gitcoin Grants$GTC · Ethereum (GTC), payouts on Arbitrum Stage 0Public map RRRR???

      Why it is hot

      Gitcoin funds open source and public goods on Ethereum through quadratic funding rounds; grantees receive matching funds from Allo payout contracts. On 17 Oct GTC's LunarCrush Galaxy Score hit a one-year high of 91, with 24h volume about 10 times its daily average.

      Value flows to users

      Donors give to projects during a round. After the round, the pool manager posts a Merkle root of matching amounts and calls distribute, which pushes each project's exact share to its registered recipient address and emits FundsDistributed with amount and recipient. Gitcoin 3.0 also runs rounds on other platforms; this rating covers the Allo payout path.

      Contracts · @gitcoin

      Rows

      • R1Payout destinationRdistribute sends each share to the recipientAddress the project registered in its application, which is stored in the strategy and emitted with every payout. evidence
      • R2Amount fingerprintRMatching follows each project's quadratic funding result: one payout tx gave 104 grantees 101 distinct amounts, from 5.196086 to 10,000 USDC. evidence
      • R3Ledger visibilityREach payout emits FundsDistributed(amount, grantee, token, recipientId), and the Merkle leaf itself is index, recipientId, recipientAddress and amount. evidence
      • R4Claim linkageRNo claim step: only the pool manager can call distribute, which pushes each share to the registered recipient address without any action from the grantee. evidence
      • R5Operator knowledge?n/a (unverified): what Gitcoin and round operators keep from grant applications and reviews was not checked in this snapshot. evidence
      • R6Front-end leaks?n/a (unverified): the grants app page source was not inspected in this snapshot, so trackers and RPC were not checked. evidence
      • R7Privacy disclosure?n/a (unverified): the grants docs were not checked for a section on what is public per grantee in this snapshot. evidence

      Stage 0. Matching funds are pushed to each project's registered address in an exact per-project amount, and every payout is logged with recipient and amount.

      This rates receiving as a grantee. Donor votes in some Gitcoin 3.0 rounds run on MACI and stay private; that does not change how grantees are paid on the Allo path.

      Merkle distributions keep only the root onchain, but each distribute call still emits the recipient address and amount, so the full payout list can be read back from logs.

      The 9 May 2025 payout tx on Arbitrum paid 104 grantees 199,999.999946 USDC in total; 30 more registered recipients got 0. Grantee addresses are not shown here.

      Snapshot from the Allo v2 contracts on GitHub and Arbitrum logs on Arbiscan. R5 to R7 unverified.

      Fix path to Stage 1

      Let grantees register an ERC-6538 meta-address as the recipient, settle each round's matching in equal units to fresh ERC-5564 stealth addresses, and emit only the round total in FundsDistributed. Opt-in recipient = Stage 1. payouts module · request an integration

      What a holder can do today

      Treat a grant's recipient address as public: the matching payout lands on it with its exact amount, logged onchain.

      Use a recipient address you use for nothing else, and don't sweep grant funds straight to your main wallet; that transfer links the two.

      19 Convex vlCVX$CVX · Ethereum Stage 0Public map RRRRA?R

      Why it is hot

      Convex locks CRV and other governance tokens and runs Curve and Frax votes for its users. On 18 Oct CVX was #20 on LunarCrush AltRank with its Galaxy Score up 56% on the week. CVX holders who vote-lock for 16 weeks as vlCVX earn a share of protocol fees, paid as cvxCRV, FXS and cvxFXS from the CvxLockerV2 contract on Ethereum.

      Value flows to users

      CVX holders lock in CvxLockerV2 for 16 weekly epochs; the lock is logged per wallet with its amount. Protocol fees are streamed into the locker as cvxCRV, FXS and cvxFXS and accrue to each account by its locked balance. getReward(account) can be called by anyone and transfers every pending reward token to that account, emitting RewardPaid(account, token, amount); cvxCRV can be staked for the same account instead.

      Contracts · @ConvexFinance

      Rows

      • R1Payout destinationRgetReward(_account) takes no recipient: each reward token is sent with safeTransfer(_account, reward) or staked for _account, so payouts land only at the locking wallet. evidence
      • R2Amount fingerprintRRewards accrue by each account's locked balance; 123 payouts from 14 to 17 Oct had 123 distinct amounts, from 0.0003 FXS to 301,895 cvxCRV. evidence
      • R3Ledger visibilityREvery payout emits RewardPaid(user, rewardsToken, reward) and every lock emits Staked(user, epoch, paidAmount, lockedAmount, boostedAmount). evidence
      • R4Claim linkageRWhoever calls getReward, the tokens go to the entitled account itself; there is no proof or claim path to another address. evidence
      • R5Operator knowledgeARewards are computed onchain from each account's locked balance; no account or login is needed to lock or to claim. evidence
      • R6Front-end leaks?n/a (unverified): the convexfinance.com app's page source was not inspected in this snapshot, so trackers and RPC were not checked. evidence
      • R7Privacy disclosureRThe vote locking page covers fees, the 16 week lock and kicks, and the risks page covers funds; neither says what is public per wallet. evidence

      Stage 0. Fee rewards are paid only to the locking wallet, in amounts set by its locked balance, and every lock and payout is logged with wallet and amount.

      Anyone can trigger getReward for any account, which helps automation, not linkage: the tokens still land on the locking wallet.

      Locks are public too: Staked logs the wallet, the epoch and the locked amount, and lockedBalances(user) returns every lock with its unlock time.

      Unlocked CVX left idle past a 4 epoch grace period can be kicked by anyone for a bounty; KickReward names both the kicker and the kicked wallet.

      Snapshot from the verified CvxLockerV2 source and its RewardPaid logs on Etherscan and the Convex docs; wallet addresses are not shown here. LunarCrush social figures for CVX also count posts about another asset with the same ticker, so this rating cites AltRank and followers only. R6 unverified.

      Fix path to Stage 1

      Let lockers register an ERC-6538 meta-address in the locker, pay each epoch's fee rewards in equal units to fresh ERC-5564 stealth addresses, and emit only per-epoch totals instead of RewardPaid(user, token, amount). Opt-in receiver = Stage 1. payouts module · request an integration

      What a holder can do today

      Treat the wallet you lock from as public: its lock size, unlock time and every reward payout with its amount are readable on Ethereum.

      Lock from a wallet you use for nothing else, and don't sweep cvxCRV or FXS straight to your main wallet; that transfer links the two.

      20 Curve veCRV$CRV · Ethereum Stage 0Public map RRRRA?R

      Why it is hot

      Curve is the stablecoin exchange and crvUSD lender at the base of Ethereum DeFi. On 19 Oct CRV's social dominance hit a one-year high, about 2.3 times its daily average, with CRV around #23 on LunarCrush AltRank. Holders who vote-lock CRV as veCRV earn a share of protocol fees, paid weekly in crvUSD from the FeeDistributor on Ethereum.

      Value flows to users

      CRV holders lock in VotingEscrow for up to 4 years and receive veCRV, which decays toward the unlock date; every lock is logged per wallet with its amount and unlock time. Protocol fees are converted to crvUSD and sent to the FeeDistributor, which splits each week's crvUSD by each wallet's veCRV balance over total veCRV supply. claim(_addr) or claim_many can be called by anyone and transfers the crvUSD to that address, emitting Claimed(recipient, amount, claim_epoch, max_epoch).

      Contracts · @CurveFinance

      Rows

      • R1Payout destinationRclaim(_addr) and claim_many take no recipient: the crvUSD is sent with transfer(_addr, amount), so fees land only at the locking wallet. evidence
      • R2Amount fingerprintREach week pays balance_of * tokens_per_week / ve_supply; 368 claims from 15 to 19 Oct had 368 distinct amounts, from 0.00013 to 68,970 crvUSD. evidence
      • R3Ledger visibilityREvery payout emits Claimed(recipient, amount, claim_epoch, max_epoch), and ve_for_at(user, timestamp) returns any wallet's veCRV balance for any week. evidence
      • R4Claim linkageRWhoever calls claim or claim_many, the tokens go to the entitled address itself; there is no proof or claim path to another address. evidence
      • R5Operator knowledgeAShares are computed onchain from VotingEscrow points; no account or login is needed to lock or to claim. evidence
      • R6Front-end leaks?n/a (unverified): the curve.finance app's page source was not inspected in this snapshot, so trackers and RPC were not checked. evidence
      • R7Privacy disclosureRThe fee distributor docs cover claims, checkpoints and the crvUSD switch, but say nothing about what is public per veCRV holder. evidence

      Stage 0. Weekly crvUSD fees are paid only to the locking wallet, in amounts set by its veCRV balance, and every claim is logged with wallet and amount.

      Anyone can claim for any address, which lets aggregators batch claims (368 claims came in 137 transactions), not unlink them: the crvUSD still lands on the locking wallet.

      Locks are public too: VotingEscrow logs every deposit with the wallet, the amount and the unlock time, so lock size and timing sit on the same wallet that claims.

      Fees before the DAO switch to crvUSD were paid in 3CRV from an older FeeDistributor with the same claim design.

      Snapshot from the verified FeeDistributor source and its Claimed logs on Etherscan and Curve's fee distributor docs; wallet addresses are not shown here. R6 unverified.

      Fix path to Stage 1

      Let veCRV holders register an ERC-6538 meta-address in the FeeDistributor, pay each week's crvUSD in equal units to fresh ERC-5564 stealth addresses, and emit only weekly totals instead of Claimed(recipient, amount). Opt-in receiver = Stage 1. payouts module · request an integration

      What a holder can do today

      Treat the wallet you lock from as public: its lock size, unlock time and every weekly crvUSD claim with its amount are readable on Ethereum.

      Lock from a wallet you use for nothing else, and don't sweep claimed crvUSD straight to your main wallet; that transfer links the two.

      21 Tape$TAPE · Ethereum Stage 0Public map RRRR???

      Why it is hot

      Tape is a new perps exchange on Ethereum: trades up to 1000x against a house that is funded by trader losses, settled onchain in USDC. TAPE launched on 18 Oct with its own Uniswap v4 pool and was #2 by 24h volume in our Uniswap v4 scan on 19 Oct. Its loss mining pays TAPE to traders on every realised loss.

      Value flows to users

      Every trade is a swap between one trader and the house. A winning close credits USDC to the trader's balance on the exchange (or queues it when the house is short), and a withdrawal sends it to an address the trader signs for. A realised loss calls the loss mining hook with the trader's address and the USD lost, and the hook sends TAPE to that address in the same transaction, about 40 TAPE per dollar so far. Half of the exchange fee goes to TAPE stakers, half to the dev recipient.

      Contracts · @TapeTrade_

      • TAPE token (LaunchCoin, opens its own Uniswap v4 pool) 0xd83f...24da
      • Loss mining contract (pays TAPE on realised losses, unverified source) 0x2f6f...dbf3
      • Tape exchange (HybridExchangeProxy, perps settled in USDC) 0xec35...df3c
      • Uniswap v4 pool (TAPE / ETH) 0xd9ba...42fe

      Rows

      • R1Payout destinationRLoss mining pays TAPE to the trading address itself, and a USDC withdrawal to another address logs Withdrawn(user, to, amount), so any redirect is recorded onchain. evidence
      • R2Amount fingerprintRPayouts scale with each trader's exact loss: a $10 loss paid 399.999 TAPE and a $25 loss 999.987 TAPE. evidence
      • R3Ledger visibilityREach payout emits an event with the trader address, the USD loss and the TAPE amount, and the project posted 6 of them with their transactions. evidence
      • R4Claim linkageRNo claim step: the exchange passes the trader's own address to onLoss(user, usd) and the TAPE goes to that address. evidence
      • R5Operator knowledge?n/a (unverified): the contract says operators relay wallet-signed intents and cannot move funds, but no docs on the app backend or accounts were found. evidence
      • R6Front-end leaks?n/a (unverified): the trading site behind the project's X bio link was not inspected in this snapshot. evidence
      • R7Privacy disclosure?n/a (unverified): no docs or privacy statement were found in this snapshot. evidence

      Stage 0. Loss mining pays TAPE straight to the trading wallet, the amount tracks each exact loss, and every payout is logged with wallet, loss and amount.

      Every position open and close also logs the owner address with margin, leverage and PnL (PositionOpened, PositionClosed), so the payout history sits next to the full trading history.

      The loss mining contract source is not verified on Etherscan; the rows use its emitted events, its TAPE transfers and the verified exchange source that calls it.

      As of 19 Oct 14:30 UTC the hook had paid 7 times, all on 18 Oct.

      Snapshot from the verified TAPE and exchange source, the loss mining events on Etherscan and the project's posts on X; trader addresses are not shown here. R5 to R7 unverified.

      Fix path to Stage 1

      Let traders register an ERC-6538 meta-address on the exchange, have the loss mining hook accrue rewards per epoch and pay them in equal TAPE units to fresh ERC-5564 stealth addresses, and log only an epoch total instead of wallet, loss and amount. Opt-in receiver = Stage 1. payouts module · request an integration

      What a holder can do today

      Treat the wallet you trade from as public: every open, close, PnL figure and TAPE loss payout is logged against it.

      Trade from a wallet you use for nothing else, and don't sweep TAPE or USDC straight to your main wallet; that transfer links the two.

      22 World Grants$WLD · World Chain (WLD also on Ethereum) Stage 0Public map ?GAG???

      Why it is hot

      World, formerly Worldcoin, gives WLD grants to people who verify as human with World ID: a first grant, then a recurring grant every month, claimed in World App on World Chain. On 20 Oct WLD was #3 on LunarCrush AltRank with engagements about 2.4 times its daily average and 24h volume near $416M.

      Value flows to users

      Verified humans get a first grant and then a recurring monthly grant, the same amount for everyone with the same credential (Orb or passport), falling over time. World App builds a World ID proof whose signal is the receiver address, and a relayer calls RecurringGrantDrop.claim(grantId, receiver, root, nullifierHash, proof) through a multicall. The contract checks the proof, marks the nullifier hash as used, sends the grant's WLD from the grant wallet to the receiver and emits GrantClaimed(grantId, receiver). TFH pays the gas.

      Contracts · @worldnetwork

      Rows

      • R1Payout destination?n/a (unverified): claim() pays whatever receiver the proof commits to, so any address works, but which address World App passes by default is not documented. evidence
      • R2Amount fingerprintGEach grant pays one fixed amount to every claimer (getAmount(grantId) in the grant contract); the latest 30 payouts were 24 of 0.96 WLD and 6 of 1.16 WLD. evidence
      • R3Ledger visibilityAEach claim logs GrantClaimed(grantId, receiver) and a WLD transfer to the receiver, but the World ID behind it appears only as a nullifier hash. evidence
      • R4Claim linkageGThe claim carries a World ID zero-knowledge proof and a nullifier hash that blocks a second claim, so it shows a verified human is claiming without saying which one. evidence
      • R5Operator knowledge?n/a (unverified): a relayer submits the claims and TFH pays the gas, so it handles each claim request; what TFH or World App keep about it was not checked in this snapshot. evidence
      • R6Front-end leaks?n/a (unverified): grants are claimed in World App, a mobile app, not a web dApp; its source was not inspected in this snapshot. evidence
      • R7Privacy disclosure?n/a (unverified): the whitepaper lists grant amounts and contracts; World's privacy notices were not checked for what grant claims make public. evidence

      Stage 0. The ZK claim hides which human is paid and every grant is the same size, but each claim logs its receiver, and where World App sends it is not documented.

      First rating in the Lab with R2 Green: grant amounts are equal per grant, so the amount fingerprints nobody. The receiver is what stays public.

      If the same receiver collects the grant month after month, its GrantClaimed history publicly marks it as a verified human for every month it claimed.

      The receiver is the proof's signal, so a relayer cannot redirect a grant; it also means the receiver is fixed when World App builds the proof.

      The 30 payouts sampled went out on 20 Oct between 06:23 and 06:25 UTC, batched through Multicall3 by a relayer; receiver addresses are not shown here.

      Snapshot from the World whitepaper (tokenomics, 24 Mar 2026), the RecurringGrantDrop source on GitHub, its claim transactions and grant transfers on Worldscan. R1 and R5 to R7 unverified.

      Fix path to Stage 1

      Have World App derive a fresh ERC-5564 stealth address for every grant claim and use it as the proof's receiver, so equal grants never collect on one address, and document that default. A fresh receiver per claim by default = Stage 1. payouts module · request an integration

      What a holder can do today

      Treat the address your grants land on as public: each claim marks it as a verified human for that month.

      Don't sweep grants straight to your main wallet; that transfer links the two.

      23 Ethena sUSDe$ENA · Ethereum Stage 0Public map RARR??R

      Why it is hot

      Ethena issues USDe, a synthetic dollar on Ethereum; holders who stake it as sUSDe earn the protocol's USDe rewards. On 20 Oct ENA traded about $329M in 24h, about 1.4 times its daily average, with the number of creators posting about it up 19% on the day.

      Value flows to users

      USDe holders deposit into the sUSDe vault and receive shares. Every 8 hours the rewarder calls transferInRewards, which moves one USDe total into the vault (RewardsReceived) and vests it linearly over 8 hours, so each share is worth more and no per-holder payout is sent. To exit, the holder calls cooldownShares or cooldownAssets: the shares burn, the exact USDe moves to the USDeSilo and is booked under the calling wallet with a cooldown end. After the cooldown, that same wallet calls unstake(receiver) and the silo sends the full amount to the receiver.

      Contracts · @ethena

      Rows

      • R1Payout destinationRunstake(receiver) can pay any address, but only the wallet that started the cooldown can call it, so a redirect sits in its own calldata; the 54 latest unstakes all paid the caller. evidence
      • R2Amount fingerprintARewards raise the share value with no per-holder amount; exits are amounts the holder picks in cooldownShares or cooldownAssets. evidence
      • R3Ledger visibilityRRewards show only vault totals (14 RewardsReceived of 51,328.71 USDe from 16 to 20 Oct), but each cooldown emits Withdraw with the owner and its exact USDe, and each unstake is a USDe transfer to the receiver. evidence
      • R4Claim linkageRThe cooldown is stored under msg.sender and unstake reads cooldowns[msg.sender], so only the entitled wallet can release its USDe. evidence
      • R5Operator knowledge?n/a (unverified): rewards and exits run onchain without an account; what Ethena's app or the rewarder keep about stakers was not checked in this snapshot. evidence
      • R6Front-end leaks?n/a (unverified): the Ethena app's page source was not inspected in this snapshot, so trackers and RPC were not checked. evidence
      • R7Privacy disclosureRThe staking page explains rewards every 8 hours, the cooldown and the USDeSilo, but says nothing about what is public per staker. evidence

      Stage 0. Yield lands as one vault total, but each exit logs the staking wallet with its exact USDe, which only that wallet can release.

      First rating in the Lab where holder yield needs no per-user payout on Ethereum mainnet: 14 reward transfers from 16 Oct 03:01 to 20 Oct 11:05 UTC were each 51,328.71 USDe into the vault, one every 8 hours.

      The fingerprint is the exit: Withdraw(caller, silo, owner, assets, shares) names the staking wallet and its exact USDe, and the unstake then pays that USDe out in the same amount.

      sUSDe is an ERC-20, so shares can move to another address before the cooldown, but that transfer is itself a public link between the two.

      The contract lets Ethena's blacklist managers restrict an address from staking or unstaking; that is a control, not a linkage, and does not change the grades.

      Snapshot from the verified StakedUSDeV2 source, its RewardsReceived logs and the 200 latest sUSDe transactions on Etherscan, and Ethena's staking docs; staker addresses are not shown here. R5 and R6 unverified.

      Fix path to Stage 1

      Let stakers name an ERC-5564 stealth meta-address when they start a cooldown, release each day's unstakes from the silo in equal USDe units to fresh stealth addresses, and log only a daily total instead of Withdraw with owner and amount. Opt-in receiver = Stage 1. payouts module · request an integration

      What a holder can do today

      Treat the wallet you stake from as public: its cooldown, the exact USDe it unstakes and the address that receives it are readable on Ethereum.

      Stake from a wallet you use for nothing else, and don't sweep unstaked USDe straight to your main wallet; that transfer links the two.

      24 Compound III$COMP · Ethereum Stage 0Public map RARRA??

      Why it is hot

      Compound is one of Ethereum's oldest lending protocols; in Compound III each market lends one base asset, such as USDC, and suppliers earn interest on it. On 21 Oct COMP was in the LunarCrush AltRank top 10, with 24h volume about 4.4 times its daily average and its Galaxy Score at a one-year high. The live value flow to users is supply interest; COMP reward claims on the Ethereum USDC market have paid almost nothing since September.

      Value flows to users

      Suppliers deposit the base asset (USDC in cUSDCv3) and their balance grows with the supply index, so interest is never sent as a separate payout. To exit, the account calls withdraw, which pays msg.sender, or withdrawTo, which pays another address; an allowed manager can do the same with withdrawFrom. Each exit emits Withdraw(src, to, amount). COMP rewards accrue per account in the market and are claimed from CometRewards, which pays the account or a recipient it permits and emits RewardClaimed(src, recipient, token, amount).

      Contracts · @compoundfinance

      Rows

      • R1Payout destinationRwithdraw pays the calling account and a redirect is logged as Withdraw(src, to, amount); 41 of the 44 withdrawals from 20 Oct 08:03 to 21 Oct 05:30 UTC paid the account itself. evidence
      • R2Amount fingerprintAInterest raises each balance through the supply index with no per-user payout; exits are amounts the account picks in withdraw. evidence
      • R3Ledger visibilityREvery supply and exit emits Supply(from, dst, amount) or Withdraw(src, to, amount), and balanceOf(account) returns any account's balance with interest. evidence
      • R4Claim linkageROnly the account or a manager it allowed can withdraw or claim (hasPermission(src, msg.sender)), so the entitled account signs or authorizes onchain. evidence
      • R5Operator knowledgeAInterest and reward accrual are computed onchain from each account's principal and the market indexes; no account or login is needed to supply, withdraw or claim. evidence
      • R6Front-end leaks?n/a (unverified): the Compound app's page source was not inspected in this snapshot, so trackers and RPC were not checked. evidence
      • R7Privacy disclosure?n/a (unverified): the Compound docs could not be fetched in this snapshot, so a statement on what is public per account was not checked. evidence

      Stage 0. Interest grows inside each balance, but every exit logs the supplying account with its amount, and balances are readable per account.

      Interest needs no per-user payout: each balance grows with the market's supply index. The fingerprint is the account itself, since balanceOf and every Supply and Withdraw event name it.

      COMP rewards: from 1 Sep to 21 Oct the Ethereum CometRewards contract logged one RewardClaimed event, 0.000006 COMP on 13 Sep; later claim calls went through without a payout.

      Withdraw also covers borrows, so the 44 events sampled include borrowers drawing USDC as well as suppliers exiting; 3 named another recipient, which logs both addresses.

      Snapshot from the verified CometRewards source and cUSDCv3 Withdraw and RewardClaimed logs on Etherscan; account addresses are not shown here. R6 and R7 unverified.

      Fix path to Stage 1

      Let suppliers name an ERC-5564 stealth meta-address for exits, settle each day's withdrawals in equal USDC units to fresh stealth addresses, and emit a daily total instead of Withdraw(src, to, amount). Opt-in receiver = Stage 1. payouts module · request an integration

      What a holder can do today

      Treat the account you supply from as public: its balance with interest, every deposit and every withdrawal with its amount are readable on Ethereum.

      Supply from an account you use for nothing else, and don't sweep withdrawals straight to your main wallet; that transfer links the two.

      25 Lighter$LIT · Ethereum (Lighter ZK rollup) Stage 0Public map RRRR??R

      Why it is hot

      Lighter is a perpetuals exchange that runs as a ZK rollup on Ethereum; LIT holders can stake in its LIT Staking Pool for rewards and for access to its liquidity pool, the LLP. On 22 Oct LIT was in the LunarCrush AltRank top 5 with its Galaxy Score at a one-year high, trading about twice its daily average volume.

      Value flows to users

      Users stake LIT in the LIT Staking Pool on Lighter and earn a fixed reward in LIT; unstaking has a 3 day lockup, and each staked LIT unlocks up to 10 USDC of deposits in the Lighter Liquidity Pool (LLP), whose profits reach depositors through pool shares. A Lighter account is created by a deposit from an Ethereum address, logged as Deposit(toAccountIndex, toAddress, assetIndex, routeType, amount). To leave, a secure withdrawal settles through the ZkLighter contract on Ethereum and pays only the owner address, logging WithdrawPending(owner, assetIndex, amount); a fast withdrawal pays any Ethereum address from a liquidity pool, with the destination in the memo of a transfer the owner signs with its L1 key.

      Contracts · @Lighter_xyz

      Rows

      • R1Payout destinationRA secure withdrawal pays only the L1 address that owns the account and logs WithdrawPending(owner, asset, amount); 271 such exits from 21 Oct 09:00 to 22 Oct 09:00 UTC went to 180 owner addresses. evidence
      • R2Amount fingerprintRThe LIT utility page states a fixed 6% APR for stakers, so each staker's reward is an exact share of their own stake. evidence
      • R3Ledger visibilityRGET /api/v1/account?by=l1_address returns an account's positions with PnL, its assets and its pool shares with entry USDC; the endpoint answered without a key in this snapshot. evidence
      • R4Claim linkageRA secure exit is signed with the account's API key and pays only the L1 address that owns the account; a fast exit to another address also needs the owner's L1 signature. evidence
      • R5Operator knowledge?n/a (unverified): Lighter runs the sequencer and the API; what it keeps beyond the public account index and L1 address, such as referral sign-ups, was not checked in this snapshot. evidence
      • R6Front-end leaks?n/a (unverified): the app at app.lighter.xyz loads its scripts at runtime and its page source could not be read in this snapshot, so trackers and RPC were not checked. evidence
      • R7Privacy disclosureRThe LIT utility page covers the staking pool, the 3 day unstake lockup and LLP access, and the withdrawals guide covers both exit routes; neither says what is public per account. evidence

      Stage 0. Rewards stay on an account tied to one Ethereum address, every secure exit pays that owner with its exact amount logged, and the API serves balances by address.

      One staked LIT unlocks up to 10 USDC of LLP deposits, so a participant's stake caps their LLP deposit and the two balances are sized together.

      Referral rewards are paid weekly as L2 transfers from one published sender address, so they land on the referrer's account like any other balance.

      A fast withdrawal can pay any Ethereum address from Lighter's liquidity pool, but it needs the owner's L1 signature and names the destination in the transfer memo.

      Snapshot from the verified ZkLighter source and WithdrawPending logs on Etherscan, Lighter's docs and its public API (read only for the LLP pool account); account addresses are not shown here. R5 and R6 unverified.

      Fix path to Stage 1

      Let stakers and LLP depositors name an ERC-5564 stealth meta-address for exits, pay each day's withdrawals in equal USDC units to fresh stealth addresses with only a daily total logged, and stop serving balances by L1 address on the public API. Opt-in receiver = Stage 1. payouts module · request an integration

      What a holder can do today

      Treat the address you deposit from as public: your Lighter account, its positions, pool shares and every exit to Ethereum can be read by that address.

      Stake and trade from an address you use for nothing else, and don't send withdrawals straight to your main wallet; that transfer links the two.

      G Green · A Amber · R Red · ? n/a (unverified). R6 is unverified for all five: our fetcher sees rendered text, not page source. We mark it instead of guessing.

      Method

      Seven rows

      Each row is Green, Amber or Red, with a one-line note and a link to a tx, contract, doc or page.

      RowGreenAmberRed
      R1 Payout destinationLands at a fresh or ERC-5564 stealth address by defaultUser can opt into an unlinked addressLands at the entitled wallet, or any redirect is recorded onchain
      R2 Amount fingerprintEqual fixed amounts per recipientRounded or user-chosen amountsExact per-user pro-rata amounts
      R3 Ledger visibilityLedger shows epoch totals or commitments onlyRecipient or amount public, but not linked to the sourcePer-recipient amounts onchain or on a published list
      R4 Claim linkageEntitlement proven privately (ZK)Claim can go elsewhere, but the proof names the entitled addressClaim or receipt needs the entitled wallet: signature, tx, or push to it
      R5 Operator knowledgeOperator cannot link recipients, even with its own dataOperator sees only public chain data, or cannot link by proof but runs infraOperator holds an offchain map: accounts, logins, sessions, API keys
      R6 Front-end leaksNo third-party trackers in the dApp source; RPC namedTrackers present, no wallet capture documentedTrackers that receive wallet addresses
      R7 Privacy disclosureDocs list what is public and the remaining leaksPartial statementsNo statement

      How the Stage is set. Each row sets a ceiling and the Stage is the lowest one. R1 to R4: Red caps at Stage 0, Amber at Stage 1. R5 and R7 below Green cap at Stage 1. R6 Red or unverified caps at Stage 1. An unverified R1 to R4 row caps at Stage 0.

      Rules

      How we rate

      Fix path

      From Stage 0 to Stage 1

      Pay through stealth addresses, in equal batches

      • One epoch settles in one transaction.
      • Equal amount per recipient, so amounts carry no fingerprint.
      • Each payment goes to a fresh ERC-5564 address.
      • The ledger logs only "epoch settled".

      github.com/siriusthemaster/ephemeral/tree/main/payouts

      Toy module, unaudited, MIT. Read it, fork it, test it before mainnet.

      Rated project? Reply in public

      Quote the rating on X or open an issue on GitHub with links to what changed. We re-rate within 24h, and the change goes into the changelog with its date and reason.

      Shipped a fix? Show us the transaction that pays users the new way. A Stage moves on onchain evidence, not on announcements.

      Open an issue

      Request a rating

      Ask us to rate a project

      Anyone can ask, for any project that moves value to users. One post on X.

      @ephemeral_eth audit $TICKER

      Or audit @project. Here "audit" means a Privacy Stage rating of how users receive value. It is not a code security review.

      Rateable when

      • Value reaches users onchain: rewards, claims, airdrops, revenue share, creator fees, winnings.
      • Contracts or docs are public, so every row can link its evidence.
      • It runs on an EVM chain. Others when we can verify them.
      1. Ask

        Post the line above. More asks from different accounts move a project up the queue.

      2. Pick

        We work the queue by asks times relevance: is value reaching users onchain, and how much attention is on it this week.

      3. Rate

        Seven rows from public data only, each Green, Amber or Red with a link. What we cannot verify is marked n/a, never guessed. The Stage is the lowest ceiling.

      4. Publish

        The rating goes on this page with its snapshot time, a fix path and what holders can do today. The project can reply; we re-rate within 24h and log it.

      Changelog

      Every change, dated

      Ratings, re-rates, method changes and page changes, newest first. A re-rate names the project, the old and new Stage, the reason and the evidence.

      • 2026-10-22AddedLighter (LIT), Ethereum: Stage 0, rating LIT staking rewards, LLP access and exits to Ethereum while LIT was in the LunarCrush AltRank top 5 on 22 Oct. Snapshot 22 Oct, 09:45 to 10:00 UTC, from the verified ZkLighter source and its WithdrawPending logs on Etherscan, Lighter's docs and public API; R5 and R6 unverified. First rating of a ZK rollup exchange.
      • 2026-10-21AddedCompound III (COMP), Ethereum: Stage 0, rating supply interest and exits on the cUSDCv3 market while COMP was in the LunarCrush AltRank top 10 on 21 Oct. Snapshot 21 Oct, 06:20 to 06:40 UTC, from the verified CometRewards source and cUSDCv3 Withdraw and RewardClaimed logs on Etherscan; R6 and R7 unverified.
      • 2026-10-20AddedEthena sUSDe (ENA), Ethereum: Stage 0, rating USDe staking rewards and sUSDe exits while ENA traded about 1.4 times its daily volume on 20 Oct. Snapshot 20 Oct, 14:20 to 14:45 UTC, from the verified StakedUSDeV2 source, its RewardsReceived logs, the latest sUSDe transactions and Ethena's staking docs; R5 and R6 unverified. First rating where rewards reach holders as vault totals on Ethereum mainnet.
      • 2026-10-20AddedWorld Grants (WLD), World Chain: Stage 0, rating the recurring WLD grants to verified humans after WLD reached #3 on LunarCrush AltRank on 20 Oct. Snapshot 20 Oct, 06:20 to 06:50 UTC, from the World whitepaper, the RecurringGrantDrop source and grant transfers on Worldscan; R1 and R5 to R7 unverified. First rating with R2 Green.
      • 2026-10-19AddedTape (TAPE), Ethereum: Stage 0, rating loss mining payouts in TAPE from the new Tape perps exchange after TAPE ranked #2 by 24h volume in our Uniswap v4 scan on 19 Oct. Snapshot 19 Oct, 14:15 to 14:35 UTC, from the verified TAPE and exchange source and the loss mining events; R5 to R7 unverified.
      • 2026-10-19AddedCurve veCRV (CRV), Ethereum: Stage 0, rating weekly crvUSD fee payouts to veCRV holders from the FeeDistributor while CRV social dominance hit a one-year high on 19 Oct. Snapshot 19 Oct, 06:45 to 07:00 UTC, from the verified FeeDistributor source, its Claimed logs and Curve's fee distributor docs; R6 unverified.
      • 2026-10-18AddedConvex vlCVX (CVX), Ethereum: Stage 0, rating vote-locked CVX fee rewards paid from CvxLockerV2 while CVX was #20 on LunarCrush AltRank on 18 Oct. Snapshot 18 Oct, 15:20 to 15:35 UTC, from the verified CvxLockerV2 source, its RewardPaid logs and the Convex docs; R6 unverified.
      • 2026-10-18AddedChainlink Staking (LINK), Ethereum: Stage 0, rating Staking v0.2 rewards claimed from the RewardVault while LINK trended on 18 Oct. Snapshot 18 Oct, 06:25 to 06:45 UTC, from the verified RewardVault source, LINK transfers on Etherscan and Chainlink's staking overview and privacy policy; R6 unverified.
      • 2026-10-17AddedGitcoin Grants (GTC): Stage 0, rating quadratic funding payouts to grantees on Allo v2 after GTC's Galaxy Score hit a one-year high on 17 Oct. Snapshot 17 Oct, 14:15 to 14:40 UTC, from the Allo v2 contracts and Arbitrum payout logs; R5 to R7 unverified.
      • 2026-10-17AddedEigenLayer (EIGEN), Ethereum: Stage 0, rating restaking rewards claimed from the RewardsCoordinator after EIGEN entered the LunarCrush AltRank top 10 on 17 Oct. Snapshot 17 Oct, 06:20 to 06:50 UTC, from EigenCloud docs, the rewards calculation spec and RewardsCoordinator transactions; R6 unverified.
      • 2026-10-16AddedGROKLET (GROKLET), Ethereum: Stage 0, rating Stockereum holder rewards paid in SPCXon after GROKLET led our Uniswap v4 scan by 24h volume on 16 Oct. Snapshot 16 Oct, 14:25 to 14:50 UTC, from the verified token and HolderDistributor source and Stockereum docs; R6 unverified.
      • 2026-10-16AddedStarknet (STRK), Starknet: Stage 0, rating STRK staking and delegation rewards after STRK reached #3 on LunarCrush AltRank on 16 Oct. Snapshot 16 Oct, 06:55 to 07:40 UTC, from Starknet docs and the starknet-staking contract spec; R6 unverified.
      • 2026-10-15AddedZKsync (ZK), ZKsync Era: Stage 0, rating ZKnomics staking rewards after ZK rose about 50% in 7 days to 15 Oct. Snapshot 15 Oct, 06:20 to 07:00 UTC, from ZK Nation forum posts and Tally's privacy policy; R6 unverified.
      • 2026-10-15AddedPuffer (PUFFER), Ethereum: Stage 0, rating vlPUFFER lock rewards paid through Merkl after PUFFER rose about 95% on 15 Oct. Snapshot 15 Oct, 14:20 to 15:00 UTC, from Puffer docs, Merkl developer docs and the verified vlPUFFER contract; R5 and R6 unverified.
      • 2026-10-14AddedgTrade (GNS), Arbitrum: Stage 0, rating trader payouts after GNS rose 98.7% on 14 Oct. Snapshot 14 Oct, 14:20 to 14:45 UTC, from gTrade docs and its public backend API; R6 unverified.
      • 2026-10-14Re-rateZeroTrace (ZERO): Stage 1 kept, review closed. The 12 Oct post-mortem traces the v1 vault outflow to a verifier soundness flaw, not the payout design; unspent notes are refunded to the wei into private notes of a new, pausable vault. Grades unchanged; contracts and holder guidance updated.
      • 2026-10-14AddedBrave Rewards (BAT): Stage 0, rating the monthly BAT payouts for Brave Private Ads after BAT rose 27% on 13 Oct. Snapshot 14 Oct, 06:30 to 07:30 UTC, from Brave's blog and privacy policy; R6 unverified.
      • 2026-10-13ReviewZeroTrace (ZERO): Stage 1 rating on hold. 90.4M ZERO left the v1 PrivateVault in one sell call on 12 Oct, 11:18 UTC; the team has promised a post-mortem. The Lab grades payout linkability, not contract security. Re-rate within 24h of the post-mortem.
      • 2026-10-13AddedBlur (BLUR), Ethereum: Stage 0, rating the points airdrops after the 12 Oct frontend deprecation notice. Snapshot 13 Oct, 06:20 to 06:30 UTC, from Blur's posts on X; R5 to R7 unverified.
      • 2026-10-12AddedSonic (S), Sonic: Stage 0, rating the Season 1 and 2 airdrop claims before the 15 Oct burn cutoff. Snapshot 12 Oct, 06:20 to 06:50 UTC, from Sonic Labs' posts on X; R5 to R7 unverified.
      • 2026-10-11AddedZeroTrace (ZERO), Robinhood Chain: Stage 1. Snapshot 11 Oct, 06:30 to 06:36 UTC. First rating where holder yield creates no per-user payout.
      • 2026-10-10AddedDerive (DRV), Ethereum: Stage 0. Snapshot 10 Oct, 06:00 to 07:30 UTC. First rating with R6 verified from page source.
      • 2026-10-09PageStage leaderboard at the top, a Request a rating explainer, and this changelog with change types. Ratings unchanged.
      • 2026-10-09Publishedv0.1: first five ratings published: Pons, Claus, Polymarket, zipcoin, Zevio. Snapshot 8 Oct, 20:20 to 21:20 UTC.

      Watching for a re-rate

      • ZeroTraceWallet reopensPost-mortem read 14 Oct, Stage 1 kept. When the app reopens on the new vault we check the unshield form and the pause and verifier-upgrade roles, and re-rate R1 and R5.
      • Sonic15 OctUnclaimed Season 1 and 2 S becomes eligible for burn. We check docs, claim contract and MySonic source and re-rate R5 to R7.
      • Polymarket2 Nov (tentative)Protocol V2 switch for new markets. We re-rate at the switch.
      • ClausWhen payouts changeFeeBatchedPrivacyHook (8 Oct) batches buybacks, not payouts. We re-rate if the payout path changes.
      • Blur12 NovFrontend deprecation and Blend stop. We check the withdraw tool and re-rate if Blur publishes how exits work.
      • Brave RewardsBravePass launchRoadmap 4.0 locks earned BAT into a BravePass and adds a Rewards Card. We read how payouts change and re-rate.
      • gTradeStaking rewards restartGNS staking rewards are paused in the growth phase. We re-rate if staking payouts return or the APIs drop trader addresses.
      • ZKsyncSeason 2 unpauseStaking Season 2 is paused and the capped minters expire 31 Dec 2026. We re-rate if Season 2 starts or rewards move to fee buybacks.
      • PufferNext CARROT campaignvlPUFFER rewards run as Merkl campaigns. We re-rate if claims move to stealth recipients or rewards stop following the locking wallet.
      • StarknetRewards meet STRK20Starknet ships STRK20 privacy for transfers and Shadow Accounts for apps. We re-rate if staking rewards can be claimed into shielded balances or fresh addresses.
      • GROKLETFirst distribute() batchHolder rewards have moved through 3 claims so far. We read the Paid events after the first batch and re-rate if payouts move to fresh addresses.
      • EigenLayerRewards v2 changesWe re-rate if claims can go to fresh stealth addresses by default or per-earner amounts stop being published.
      • Gitcoin GrantsNext Gitcoin roundWe re-rate if grantees can receive matching at fresh stealth addresses or payouts stop emitting recipient and amount.
      • Chainlink StakingNext staking upgradeWe re-rate if the RewardVault lets stakers pick a fresh recipient or claims stop logging staker and amount.
      • Convex vlCVXLocker upgradeWe re-rate if vlCVX rewards can be claimed to a fresh recipient or payouts stop logging wallet and amount.
      • Curve veCRVFee distributor changeWe re-rate if veCRV fees can be claimed to a fresh recipient or claims stop logging wallet and amount.
      • TapeLoss mining source verified or docs publishedWe re-check R5 to R7 and re-rate if rewards can go to a fresh recipient or payouts stop logging wallet, loss and amount.
      • World GrantsGrant receiver documentedWe re-rate R1 if World documents which address World App claims grants to, or claims move to a fresh stealth receiver each time.
      • Ethena sUSDeStaking contract changeWe re-rate if unstakes can be released to a fresh stealth receiver by default or cooldowns stop logging owner and amount.
      • Compound IIIRewards restart or market upgradeWe re-rate if COMP rewards resume on Ethereum, or exits can go to a fresh stealth receiver by default, or Withdraw stops logging account and amount.
      • LighterStaking or exit changeWe re-rate if exits can go to fresh stealth addresses by default or the public API stops serving balances by L1 address.

      Sources for this snapshot: DexScreener API, Blockscout API, project docs and journals, ChainCatcher, Crypto Briefing, CryptoTicker, crypto.news. This page loads no third-party scripts, fonts or trackers until you press subscribe.

      the weekly Lab digest

      one email a week: the Lab rating of the week, the leak numbers that moved, what shipped. no spam, leave anytime.

      the form loads from beehiiv only after you press subscribe.