Back to all articles

SparkRewards claims by batch

18 September 2026

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/:

  1. sparkrewards_claimed — Claimed rows, partition evt_block_date >= DATE '2025-06-01', plus the 5293021 batch CASE.
  2. sparkrewards_claimers — one row per (batch, account). Used only as a CTE; the address list is not stored.
  3. sparkrewards_claimed_batches — COUNT(*) wallets and SUM(amount_claimed) SPK, ordered by first claim.

The chart JSON is the exported aggregate from that query.

3. Claimed wallets and SPK

Claimed wallets and SPK by SparkRewards batch. SPK bars use the orange stop (#FFA930) of the official SPK token gradient.

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.