GridCoreGridCore
Rewards & Fees

The Reward Accumulator

Every buyout fee and injected SOL flows to tile holders, split equally per tile.

The Accumulator

How reward distribution is tracked on-chain.

Each grid has a single shared reward accumulator — a 128-bit fixed-point number stored in GridState. When the 1% pool fee enters the vault on a buyout, the accumulator increments proportionally by the fee divided by the number of occupied tiles. Each tile tracks its own reward_debt — the accumulator snapshot at the time it was last acquired or claimed. The difference between the current accumulator and reward_debt is your claimable amount.

Accumulator Math
// When a 1% pool fee enters the vault: accumulator += pool_fee × PRECISION / tiles_held // Your pending claimable reward (equal per tile): pending = (accumulator − reward_debt) / PRECISION
⚡ The accumulator pattern means rewards distribute instantly across all holders at zero per-tile gas cost. No loops, no epochs — just two numbers per tile. Rewards are equal per tile: holding one tile earns the same rate as any other tile in the same grid.
Rewards are per-grid, not global

Each grid has its own accumulator. Rewards from Grid A stay in Grid A's vault and are only claimable by Grid A tile holders.

Equal per tile — tile count is the weight

Every occupied tile in a grid earns the same share of the pool fee. A holder with 3 tiles earns 3× the rewards of a holder with 1 tile, regardless of price.

Rewards sit in the vault until claimed

SOL doesn't move until you call claim_reward. It accumulates passively — no need to check constantly or worry about expiry.

What Feeds the Pool

Where the reward SOL comes from.

Two sources feed the reward accumulator: the automatic 1% pool fee on every transaction, and manual injections via inject_rewards. There is no ongoing tax or deposit drain — rewards only enter the pool when economic activity happens.

Reward Sources
1% pool fee on every buyoutAutomatic — 1% of listed price on each buyout
1% on first claimsSame 1% split applies when empty tiles are claimed
inject_rewards (manual)Anyone can seed the pool directly with any SOL amount
Example — 5 tile buyouts at 1.00 SOL each in one day
Total volume5 × 1.00 = 5.00 SOL
1% pool fee total0.05 SOL enters accumulator
Grid has 20 occupied tiles0.05 / 20 = 0.0025 SOL per tile
Holder with 3 tiles0.0075 SOL claimable that day
⚠ The accumulator only moves when buyouts happen. If a grid has no activity, no rewards flow to holders. Choose active grids to maximise reward income.

inject_rewards

Manually seeding the pool with SOL.

Anyone — creators, partners, whales — can call inject_rewards to send SOL directly into a grid's reward accumulator. If tiles are currently held, the SOL is distributed to the accumulator immediately. If no tiles have been claimed yet, it parks in a pending_seed balance and is flushed to the accumulator when the first tile is claimed.

Reward campaigns

Inject SOL to reward holders during token launches, community milestones, or token buyback events.

Grid bootstrapping

New grids have no buyout history yet. Injecting rewards early makes tiles immediately attractive to claim.

Anyone can inject

Not limited to the creator — partners, whales, or protocols can inject rewards into any grid.

withdraw_seed (creator only)

Before any tiles are claimed, the creator can reclaim injected SOL via withdraw_seed. Once the first tile is claimed the pending_seed flushes to the accumulator and can no longer be withdrawn.

Claiming Rewards

When and how to withdraw your accumulated SOL.

You can claim your pending rewards any time while you hold a tile. Claiming calls the claim_reward instruction, which computes your pending amount, transfers it from the vault to your wallet, and resets your reward_debt to the current accumulator value.

Claim Flow
1. Compute pending(accumulator − reward_debt) / PRECISION
2. Transfer SOLvault → your wallet
3. Reset reward_debtdebt = current accumulator (snapshot updated)
✓ No minimum claim amount and no claim fee. Claim as often as you want. Very small claims are inefficient due to Solana base transaction fees (~0.000005 SOL) — wait for a meaningful amount before claiming.
Claiming doesn't affect your tile

Claiming rewards doesn't change your listed price, multiplier, or tile ownership. It only transfers the accumulated SOL to your wallet and resets your reward_debt.

Claim before abandoning

Unclaimed rewards stay in the accumulator if you abandon your tile — they redistribute to remaining holders. Always claim before abandoning.

Claim before expecting a buyout

When you are bought out, unclaimed rewards are NOT automatically paid out to you. Claim separately before or after if needed — your reward_debt is reset at buyout time.