End-to-end token launch readiness: allocation design → vesting contracts → liquidity math → investor docs.
Standard allocation buckets (adjust to project):
Category% SupplyCliffVestingTGE UnlockTeam15–20%12 mo36 mo0%Investors (seed)10–15%6 mo24 mo0–5%Investors (priv)8–12%3 mo18 mo5–10%Ecosystem/DAO20–30%048 mo5%Community/Airdrop10–15%00–12 mo100%Liquidity5–10%00100%Reserve/Treasury10–20%0Governance0–5%
Output format: Markdown table + CSV for investor decks.
OZ VestingWallet handles cliff + linear release natively.
solidity
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
import "@openzeppelin/contracts/finance/VestingWallet.sol";
// Deploy one per beneficiary (or use a factory)
// constructor(address beneficiary, uint64 startTimestamp, uint64 durationSeconds)
// Example: 12mo cliff + 24mo linear for team member
// start = TGE timestamp + 12 months (cliff built in by setting start = cliff end)
// duration = 24 months (linear release after start)
VestingWallet teamVest = new VestingWallet(
teamMemberAddress,
uint64(tgeTimestamp + 365 days), // start after 12mo cliff
uint64(730 days) // 24mo linear vesting
);
Key methods:
release(token) — beneficiary calls to claim vested tokensvestedAmount(token, timestamp) — query how much is unlockablereleasable(token) — current claimable balanceCliff pattern: Set startTimestamp = TGE + cliffDuration. Vesting begins linearly after cliff with no special code needed.
Multi-beneficiary factory pattern: See references/vesting-factory.md
Calculate monthly unlock amounts for each category:
text
Monthly unlock (post-cliff) = (allocation_tokens / vesting_months)
TGE unlock = allocation_tokens × tge_pct
Remaining = allocation_tokens × (1 - tge_pct)
Linear_per_month = Remaining / vesting_months_after_cliff
Circulating supply projection formula:
text
CS(t) = Σ [tge_i + max(0, (t - cliff_i) / vest_i) × (1 - tge_pct_i)] × supply_i
Where t = months since TGE, i = each allocation bucket.
Model month-by-month in a table through month 48. Flag any month where unlock > 5% of circulating supply (selling pressure risk).
text
Initial price = ETH_amount / TOKEN_amount
k = ETH_amount × TOKEN_amount
Slippage for trade size S:
price_impact = S / (ETH_reserve + S)
tokens_out = TOKEN_reserve × S / (ETH_reserve + S)
Recommended: price impact < 1% for typical retail trade size
→ Pool depth = trade_size / 0.01
Example: Target $10k retail trade at <1% impact → Need $1M TVL in the pool
[P_low, P_high] where P = token price in ETH/USDCtickLower / tickUpper = log(price) / log(1.0001)Listing price discovery:
text
FDV_target = total_supply × listing_price
Implied_MC = circulating_supply × listing_price
Liquidity_ratio = pool_TVL / MC → target 5–15% for healthy launch
See references/uniswap-math.md for deeper tick/range calculations.
markdown
## Token: [NAME] ($TICKER)
- Total Supply: X,000,000,000
- TGE Date: [DATE]
- Network: Ethereum / [L2]
- Contract: [0x...]
## This Round
- Round: Seed / Private / Strategic
- Raise: $X at $Y/token → $Z FDV
- Allocation: X% of supply
- Vesting: X mo cliff, X mo linear, X% TGE
- VestingWallet: [contract address or "to be deployed"]
## Token Release Schedule
[Month-by-month unlock table for this tranche]
## Use of Funds
[breakdown]
After deploying VestingWallet, provide:
vestedAmount(tokenAddress, block.timestamp) callrelease() automation → beneficiaries forget; use a keeper scriptreferences/vesting-factory.md — Solidity VestingWallet factory + batch deploymentreferences/uniswap-math.md — Detailed Uniswap v2/v3 tick math and liquidity formulasreferences/allocation-templates.md — Pre-built allocation tables for DeFi, GameFi, DAO, Infrastructuresolidity-audit-precheckdefi-position-trackermulti-sig-treasuryupgrade-solidity-contracts