SparkRewards claims by batch
Abstract. Spark pays SPK airdrops and points seasons through several SparkRewards deployments. Dune decodes all of them into spark_ethereum.sparkrewards_evt_claimed. This note charts who has already claimed and how much SPK moved, by the same batch labels Spark uses on query 5293021. It does not count merkle-eligible wallets or “available to claim” — those figures are not stored on-chain.
1. What the contract actually pays
claim checks a merkle leaf keccak(epoch, account, token, cumulativeAmount) against the current root, then pays cumulativeAmount - preClaimed. The Claimed event’s amount is that increment. Summing Claimed.amount per (account, epoch, token) is the SPK that left the payer wallet for that campaign — not an ERC-20 Transfer scan of the SPK token.
Season is contract + epoch, not epoch alone. Ignition and Overdrive share 0xCBA0C0a2…724d (epochs 1 and 2). Points S1–S4 share 0xe9eaE48E…a909. Layer3 prefarm and the unnamed “other” distributor are separate deployments with the same bytecode.
2. Method
SQL lives in the onchain-research repo under research/spark/sql/:
sparkrewards_claimed— Claimed rows, partitionevt_block_date >= DATE '2025-06-01', plus the 5293021 batchCASE.sparkrewards_claimers— one row per(batch, account). Used only as a CTE; the address list is not stored.sparkrewards_claimed_batches—COUNT(*)wallets andSUM(amount_claimed)SPK, ordered by first claim.
The chart JSON is the exported aggregate from that query.
3. Claimed wallets and SPK
Layer3 prefarm is the widest wallet set (~11 000) and the largest SPK print (~340M). Ignition closed with ~8 600 wallets and ~55.6M SPK. Points S1 is the next wallet cluster (~7 500); S4 is smaller in wallets (~980) but already ~134M SPK. The unnamed “other” distributor is a thin tail.
4. What this is not
The merkle leaves (eligible wallets and each wallet’s cumulativeAmount) are generated off-chain. On-chain you only get the root, the payer wallet, and Claimed for people who showed up. Spark’s dashboard caps (max_amount_* in 5293021) and the docs’ 325.5M Ignition allocation are not chain reads. Ignition and Overdrive also share one payer wallet, so a token balance cannot split those two batches.
Until a leaf file can be hashed against MerkleRootUpdated, published numbers here stay claimed users and claimed SPK.
5. Takeaways
Use sparkrewards_evt_claimed plus the batch CASE for participation and SPK paid. Do not use SPK Transfer as airdrop accounting. Treat “eligible” and “unclaimed inventory” as a later, merkle-verified layer — not as a column on this chart.