Token Economics
Math08 May 20268 min read

Calculating Token Sell Pressure: The Math Founders Skip

The math every founder claims to know but few have actually computed.

“Sell pressure” is the most over-used and least-understood term in token-launch discourse. Every founder claims theirs is low. Almost none can derive the number. Here’s the math.

DEFINITION

Sell pressure in tokenomics is the dollar value of tokens unlocking in a given period that could be sold by the recipient. It is a upper-bound number — the actual realised sell volume is always lower, because not everyone sells at unlock. But the upper bound is what matters for scenario-planning the worst case.

The basic formula

For a single allocation in a single month, the unlocked-tokens value is:

UNLOCKED TOKENS, ONE ALLOCATION, MONTH t
unlocked(t) = totalSupply × (allocation.percent / 100)
            × unlockFraction(allocation.vesting, t)

Where unlockFraction(vesting, t) returns the fraction of the allocation cumulatively unlocked at month t. For a typical cliff + linear vest:

UNLOCK FRACTION FOR CLIFF + LINEAR
unlockFraction(vesting, t) {
  const tge = vesting.tgeUnlock / 100;       // 0.0 to 1.0
  if (t <= 0)                          return tge;
  if (t < vesting.cliffMonths)         return tge;
  if (vesting.durationMonths === 0)    return 1;     // fully vested at TGE
  const sinceCliff = t - vesting.cliffMonths;
  const linearProgress = Math.min(sinceCliff / vesting.durationMonths, 1);
  return tge + (1 - tge) × linearProgress;
}

So at any month t, you have a per-allocation cumulative unlocked token count. To get the incremental unlock for that month — the new tokens released between t-1 and t — you simply subtract:

INCREMENTAL UNLOCK
incrementalTokens(allocation, t) = unlocked(allocation, t)
                                  - unlocked(allocation, t - 1)

Sum this across all allocations to get total tokens unlocking in month t. Multiply by your assumed launch price (typically targetFDV / totalSupply) to convert to dollars:

DOLLAR SELL PRESSURE
launchPrice = meta.targetFDV / meta.totalSupply
sellPressureUSD(t) = sum over all allocations of:
    incrementalTokens(allocation, t) × launchPrice

That’s the formula the visual editor on this site computes for the live sell-pressure chart, and the same formula compute_sell_pressure runs in the MCP. You can call it yourself and inspect the per-month series.

Worked example: Arbitrum’s March 2024 cliff

ARB launched in March 2023 with a 12-month cliff on team (26.94%) and investors (17.53%). The cliff date was March 2024 — month 12. Let’s walk through what the formula predicts.

ARB unlock at the cliff date (month 13, first post-cliff month). 10B total supply.
AllocationPercentTGE %Cliff (mo)Linear (mo)Tokens unlocked m13
Team + future hires26.94%01236~75M ARB
Investors17.53%01236~49M ARB
DAO Treasury42.78%00120~36M ARB
Airdrop11.62%100000 (already circulating)
Sub-total month 13~160M ARB

At a launch price of approximately $1.20 (close to the ARB 12-month price), 160M tokens × $1.20 = roughly $192M of paper sell pressure in month 13. That number sounds enormous. The reality was much smaller because most recipients didn’t sell — locked tokens often unlock to people who choose to keep holding. But the upper bound is the thing markets price in ahead of the date.

Sell pressure is an upper-bound stress-test number. The realised sell volume is almost always lower. But the market prices the upper bound, not the realised.

What the formula doesn’t capture

Three real-world dynamics this simple model misses, in rough order of importance:

1. Holder behaviour heterogeneity

Investor allocations sell more aggressively than team allocations (their return horizon is shorter). Airdrop recipients sell faster than locked recipients (no hurdle rate). Some recipients lock voluntarily into vote-escrow or staking. The simple model treats every unlocked token as equally likely to be sold, which is a useful upper bound but a poor central estimate.

2. Buyback / sink mechanisms

Protocols with active buyback programmes (Aerodrome, GMX’s ETH-paid fee rewards, MKR burn) reduce net sell pressure even as gross unlocks proceed. A protocol earning $100M/year in fees that buys back tokens with all of it has effectively zero net sell pressure as long as buyback ≥ unlock.

3. Voluntary holding by aligned recipients

Allocations to users behave differently from allocations to investors. A user-grant allocation (Worldcoin’s 75% to verified humans) is almost certain to be sold instantly because users have no asymmetric upside. An investor allocation in a project they believe in might be locked into staking for years.

The most useful refinement to the basic formula is a per-allocation sell-through ratio:

REFINED MODEL WITH SELL-THROUGH ASSUMPTIONS
realisedSellPressureUSD(t) = sum over allocations of:
    incrementalTokens(allocation, t)
    × launchPrice
    × sellThroughRatio(allocation.category)

// Indicative sell-through ratios:
// airdrop:    0.85  (most claimers sell immediately)
// public:     0.60  (sale buyers split holding/selling)
// investors:  0.50  (early-fund LPs need DPI; later funds hold)
// team:       0.30  (longer alignment, taxes paid quarterly)
// treasury:   0.10  (governance can decide not to sell)
// liquidity:  0.00  (already in LP, not sold)

These ratios are not laws — they’re calibration parameters. Tune them to your project’s ecosystem (Solana NFT airdrops sell harder than EVM retroactive ones; Korean retail behaves differently from US institutional). The point is: two designs with identical gross unlocks can have wildly different realised sell pressure depending on who’s holding and why.

Finding the worst month

The single most useful output of this calculation is the answer to: what is the worst single month over the next 48 months, and why? In code:

WORST-MONTH ANALYSIS
const horizonMonths = 48;
let worst = { month: 0, usdValue: 0 };
for (let t = 1; t <= horizonMonths; t++) {
  const usd = sellPressureUSD(t);
  if (usd > worst.usdValue) worst = { month: t, usdValue: usd };
}
// Then: which allocation contributed most to that month?
// Almost always: the cliff-date for the largest insider allocation.

For a typical 12 + 36 vesting profile, the worst month is almost always month 13 — the first post-cliff month, when the largest insider allocations begin distributing. The second-worst is usually the first treasury-emission month (often month 1, with a small TGE unlock).

Practical use: stress-testing your design

Run the calculation, find the worst month, then ask: does the protocol generate enough demand in that month to absorb the unlock? Three rough thresholds:

  • Sell pressure < 1× monthly trading volume: easily absorbed. Price impact minimal even if every unlocked token sells.
  • 1× to 5× monthly volume: meaningful price impact. Founders should plan for week-of-cliff volatility and likely a 20–40% drawdown that recovers over weeks.
  • > 5× monthly volume: dangerous. Either the cliff is too large, the protocol hasn’t generated enough organic demand, or both. Either redesign the schedule or pre-arrange OTC blocks for major holders.

The MCP tool compute_sell_pressure returns the full per-month series plus the peak month, so an AI assistant or your own script can run this check without writing the math from scratch. The visual editor on this site runs the same calculation continuously while you edit.

USE THE TOOL

Open any of the 13 real-world examples — try Arbitrum or Ethena — and look at the SELL PRESSURE chart in the editor’s Vesting step. The peak month is annotated. Or call compute_sell_pressure via the tokenomics MCP with your own design JSON to get the full series back.

Try the tool

Token Economics is the free designer behind every chart and computation in this article. Replicate any of 300+ real-world tokenomics, edit allocations, see live sell-pressure and health-score updates.

Open the editor

Building something similar?

3UILD is the web3 services team behind Token Economics. We audit tokenomics, deploy contracts, and advise on launches. 30-min review, no pitch.

Talk to 3UILD

Related reading