Section 2 of 6
Vesting and Unlock Schedules
Vesting and Unlock Schedules
You just raised $5M. Your investors got 20% of supply at $0.02/token. If those tokens are immediately liquid, investors dump on day one and your community gets wrecked. Vesting prevents this.
How Vesting Works
Vesting locks tokens for a period and releases them gradually. Two key parameters:
Cliff: A minimum waiting period before any tokens unlock. Common: 6-12 months. Nothing unlocks before the cliff ends. This ensures investors have skin in the game for at least that long.
Linear vesting: After the cliff, tokens unlock on a schedule (daily, monthly, quarterly). Common: 12-36 months total vesting period.
Example: 12-month cliff, 24-month linear vesting
Month 0-12: 0% unlocked (cliff period)
Month 12: 0% unlocks (cliff ends, linear begins)
Month 13: 1/24 unlocks = 4.17%
Month 14: another 4.17%
...
Month 36: 100% fully vested
Vesting in Solidity
Here is a minimal vesting contract:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
contract TokenVesting {
IERC20 public immutable token;
address public immutable beneficiary;
uint256 public immutable start;
uint256 public immutable cliff; // duration in seconds
uint256 public immutable duration; // total vesting duration
uint256 public released;
constructor(
IERC20 _token,
address _beneficiary,
uint256 _cliff,
uint256 _duration
) {
require(_cliff <= _duration, "Cliff exceeds duration");
token = _token;
beneficiary = _beneficiary;
start = block.timestamp;
cliff = _cliff;
duration = _duration;
}
function vestedAmount() public view returns (uint256) {
uint256 totalAllocation = token.balanceOf(address(this)) + released;
if (block.timestamp < start + cliff) {
return 0; // still in cliff period
}
if (block.timestamp >= start + duration) {
return totalAllocation; // fully vested
}
// Linear vesting between cliff and end
uint256 elapsed = block.timestamp - start;
return (totalAllocation * elapsed) / duration;
}
function release() external {
uint256 releasable = vestedAmount() - released;
require(releasable > 0, "Nothing to release");
released += releasable;
token.transfer(beneficiary, releasable);
}
}
Common Vesting Schedules by Stakeholder
| Stakeholder | Typical Cliff | Typical Vesting | Why | |---|---|---|---| | Team/Founders | 12 months | 36-48 months | Longest. Proves long-term commitment. | | Investors (Seed) | 6-12 months | 18-24 months | Medium. Balances liquidity needs with protection. | | Investors (Strategic) | 6 months | 12-18 months | Shorter. Strategic value comes early. | | Advisors | 6 months | 12-24 months | Depends on ongoing involvement. | | Community/Airdrop | 0-3 months | 6-12 months | Shortest. Community needs some liquidity. | | Treasury | No cliff | Governed by DAO vote | Released as needed for operations. |
The Unlock Calendar
Smart founders publish an unlock calendar showing exactly when tokens enter circulation. This transparency prevents panic selling because the market prices in known unlocks.
Plot cumulative unlock over time. The curve should be smooth, not staircase-shaped. Large single-day unlocks (like "50% at TGE") create sell pressure spikes.
Rule of thumb: Never unlock more than 5-10% of total supply in a single event. If your TGE unlock is 20%+, you are giving the market a reason to dump.
Milestone-Based Vesting
Instead of pure time-based vesting, some protocols tie unlocks to milestones:
- "10% unlocks when TVL reaches $50M"
- "15% unlocks at mainnet launch"
- "25% unlocks when 1000 active users reached"
This aligns token release with actual protocol growth. The risk: milestones can be gamed or subjectively interpreted. Use on-chain verifiable milestones when possible.
What Goes Wrong
The Aptos unlock disaster (2023). Aptos launched with 51% of tokens locked in staking by insiders. The unlock schedule was unclear. When large investor unlocks coincided with a market downturn, APT dropped 40% in days. The community felt blindsided because the unlock calendar was not transparent.
The lesson: publish your full unlock calendar before TGE. Every token holder should know exactly when supply increases.
The zero-cliff problem. Many 2021-era projects launched with 0% cliff and "community first" messaging. In practice, insiders dumped immediately. If someone received tokens for free (advisors, influencers, early community), a cliff is non-negotiable.
Verification
What is the name of the minimum waiting period before any vested tokens begin to unlock?
Knowledge Check
Answer correctly to earn lynx
Verify your understanding