Gridsteal
Rewards & Fees

The Reward Accumulator

Every tax payment and buyout fee flows to tile holders, proportional to their deposit.

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 fees enter the vault (Harberger tax or buyout fees), the accumulator bumps up proportionally. Each tile tracks its own reward_debt — the accumulator snapshot at the time it last claimed or joined. The difference between current accumulator and reward_debt is your claimable amount.

Accumulator Math
// When a fee enters the pool: accumulator += fee × PRECISION / total_deposited // Your pending claimable reward: pending = (accumulator − reward_debt) × deposit / 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 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.

Deposit is the weight — not tile count

A holder with 0.20 SOL deposit earns 4× more than one with 0.05 SOL deposit in the same grid, regardless of tile price or seat index.

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.

Tax Distribution

Where Harberger tax goes when it's collected.

Harberger tax is deducted from a tile's deposit continuously (5% per month on listed price). The deducted SOL doesn't leave the vault — it stays in place and is credited to the reward accumulator, redistributing value from tile holders to all tile holders proportionally.

Harberger Tax Flow
Rate5% per year on listed price
Deducted fromTile holder's deposit (inside the vault)
Credited toGrid reward accumulator → all holders
Net vault balanceUnchanged — just redistributed internally
⚠ Tax is computed lazily — it's only calculated when a tile is touched by any instruction (buyout, price change, deposit add/withdraw, claim). Off-chain displays show estimates; on-chain state is settled at instruction time.
Example — 1.00 SOL tile, 1 month of tax
Monthly Harberger tax (5%)0.05 SOL / month
Daily equivalent~0.00167 SOL / day
Deducted from holder deposit−0.05 SOL / month from deposit
Added to accumulator+0.05 SOL shared across all holders

Deposit Weights

Your deposit determines your reward share.

Rewards are distributed proportionally to deposit size — not tile count, not listed price. The most efficient way to maximise rewards is to hold a large deposit relative to the grid's total deposited amount.

Grid with 3 Holders — Reward Share Breakdown
Alice deposit0.20 SOL → 40% of rewards
Bob deposit0.20 SOL → 40% of rewards
Carol deposit0.10 SOL → 20% of rewards
Total deposited0.50 SOL
0.05 SOL enters poolAlice +0.02, Bob +0.02, Carol +0.01 SOL
Add deposit to increase your share

Any time you top up your deposit, your reward_debt is reset so your new weight applies going forward.

Tax reduces your weight over time

As Harberger tax drains your deposit, your share of the accumulator shrinks. Holders who top up regularly maintain stronger reward positions.

Buyouts reset the new holder's debt

When a buyout occurs, the new holder's reward_debt is set to the current accumulator × their deposit. They earn from fees after they join, not retroactively.

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. Accrue tax to nowTax settled before reward calculation
2. Compute pending(accumulator − debt) × deposit / PRECISION
3. Transfer SOLvault → your wallet
4. Reset reward_debtdebt = accumulator × deposit / PRECISION
✓ 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 — wait for a meaningful amount.
Claiming doesn't affect your tile

Claiming rewards doesn't change your listed price, deposit level, or tax runway. It only transfers the accumulated SOL to your wallet.

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.