SECTION 1: LEARNING OBJECTIVES
By the end of this lesson, you will be able to:
-
Define token distribution and allocation strategies.
-
Explain the different stages of token distribution (seed, private, public).
-
Understand vesting schedules and their importance.
-
Describe distribution methods (ICO, IDO, IEO, airdrops, etc.).
-
Differentiate between fair launch and pre-mined distributions.
-
Identify the stakeholders and their allocations.
-
Implement a token vesting simulation in Python.
-
Develop a framework for equitable token distribution.
SECTION 2: TOKEN DISTRIBUTION STAGES
2.1 Overview
Token distribution is the process of allocating tokens to various stakeholders. A well-designed distribution ensures alignment of incentives, fair access, and long-term sustainability.
2.2 Distribution Stages
┌─────────────────────────────────────────────────────────────────────────────┐ │ TOKEN DISTRIBUTION STAGES │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ SEED ROUND │ │ ┌──────────────────────────────────────────────────────────────────────┐ │ │ │ • Early-stage investors │ │ │ │ • Large discount │ │ │ │ • Long vesting periods (12-24 months) │ │ │ │ • Small allocation (~1-5%) │ │ │ └──────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ v │ │ PRIVATE SALE │ │ ┌──────────────────────────────────────────────────────────────────────┐ │ │ │ • VC firms, strategic partners │ │ │ │ • Discounted price │ │ │ │ • Medium vesting (6-12 months) │ │ │ │ • Medium allocation (~5-15%) │ │ │ └──────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ v │ │ PUBLIC SALE (ICO/IDO/IEO) │ │ ┌──────────────────────────────────────────────────────────────────────┐ │ │ │ • General public │ │ │ │ • Market price │ │ │ │ • Limited or no vesting │ │ │ │ • Variable allocation │ │ │ └──────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ v │ │ COMMUNITY & ECOSYSTEM │ │ ┌──────────────────────────────────────────────────────────────────────┐ │ │ │ • Airdrops │ │ │ │ • Staking rewards │ │ │ │ • Liquidity mining │ │ │ │ • Governance participation │ │ │ └──────────────────────────────────────────────────────────────────────┘ │ │ │ │ │ v │ │ TEAM & ADVISORS │ │ ┌──────────────────────────────────────────────────────────────────────┐ │ │ │ • Core team │ │ │ │ • Advisors │ │ │ │ • Long vesting (24-48 months) │ │ │ │ • Significant allocation (~15-25%) │ │ │ └──────────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘
2.3 Distribution Methods
| Method | Description | Pros | Cons |
|---|---|---|---|
| ICO (Initial Coin Offering) | Direct token sale to public | Direct fundraising | Regulatory risk |
| IDO (Initial DEX Offering) | Token sale on DEX | Decentralised, immediate liquidity | Volatility |
| IEO (Initial Exchange Offering) | Token sale on exchange | Trust, exchange support | Gatekeeping |
| Airdrop | Free token distribution | Community building | May attract speculators |
| Mining | Proof of work rewards | Decentralised | Energy-intensive |
| Staking | Proof of stake rewards | Incentivises holding | Dilution |
| Liquidity Mining | Rewards for providing liquidity | Bootstraps liquidity | Short-term participants |
SECTION 3: VESTING SCHEDULES
3.1 What is Vesting?
Vesting is the process by which tokens are released over time to prevent immediate selling and align long-term incentives. It ensures that team members and early investors remain committed to the project.
3.2 Vesting Parameters
| Parameter | Description | Example |
|---|---|---|
| Cliff Period | Time before any tokens are released | 6 months |
| Vesting Period | Time over which tokens are released | 24 months |
| Release Schedule | How tokens are released | Linear, monthly |
| Lock-Up Period | Time tokens cannot be transferred | 12 months |
| TGE (Token Generation Event) | Date tokens are first distributed | Launch date |
3.3 Vesting Models
┌─────────────────────────────────────────────────────────────────────────────┐ │ VESTING MODELS │ ├─────────────────────────────────────────────────────────────────────────────┤ │ │ │ 1. LINEAR VESTING │ │ ┌──────────────────────────────────────────────────────────────────────┐ │ │ │ • Tokens released evenly over time │ │ │ │ • Predictable, simple │ │ │ │ • Example: 1/24 per month for 24 months │ │ │ └──────────────────────────────────────────────────────────────────────┘ │ │ │ │ 2. CLIFF VESTING │ │ ┌──────────────────────────────────────────────────────────────────────┐ │ │ │ • No tokens released until cliff date │ │ │ │ • Large release at cliff date │ │ │ │ • Example: 25% after 6 months, then linear │ │ │ └──────────────────────────────────────────────────────────────────────┘ │ │ │ │ 3. GRADUAL VESTING │ │ ┌──────────────────────────────────────────────────────────────────────┐ │ │ │ • Increasing release rate over time │ │ │ │ • Rewards long-term commitment │ │ │ │ • Example: 10% first year, 20% second year │ │ │ └──────────────────────────────────────────────────────────────────────┘ │ │ │ │ 4. PERFORMANCE-BASED VESTING │ │ ┌──────────────────────────────────────────────────────────────────────┐ │ │ │ • Release tied to milestones │ │ │ │ • Aligns with project goals │ │ │ │ • Example: 10% per major protocol upgrade │ │ │ └──────────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────────────┘
SECTION 4: STAKEHOLDER ALLOCATION
4.1 Typical Allocation Breakdown
| Stakeholder | Typical Allocation | Vesting | Rationale |
|---|---|---|---|
| Team | 15-25% | 24-48 months | Long-term commitment |
| Advisors | 2-5% | 12-24 months | Expertise and guidance |
| Seed Investors | 5-10% | 12-24 months | Early funding |
| Private Investors | 10-20% | 6-12 months | Growth funding |
| Public Sale | 10-20% | 0-6 months | Market access |
| Community | 15-30% | Variable | Adoption and engagement |
| Treasury | 10-20% | Controlled | Development and operations |
4.2 Allocation Factors
| Factor | Description | Impact |
|---|---|---|
| Project Stage | Earlier stages need more incentives | Higher team/investor allocation |
| Funding Need | More funding needed = higher investor allocation | Increased investor portion |
| Decentralisation Goal | More decentralised = higher community allocation | Lower team/investor portion |
| Network Type | Protocol vs application | Different stakeholder priorities |
| Regulatory Environment | Compliance requirements | Restrictions on allocations |
SECTION 5: FAIR LAUNCH VS PRE-MINED
5.1 Fair Launch
Definition: A token launch where no tokens are pre-allocated to the team or investors. All tokens are distributed through mining, staking, or other permissionless mechanisms.
Examples: Bitcoin, Litecoin, Dogecoin
Pros:
-
Truly decentralised
-
No pre-allocated advantage
-
Community-driven
Cons:
-
No funding for development
-
Slower growth
-
Vulnerability to attacks
5.2 Pre-Mined Launch
Definition: A token launch where tokens are created before the public launch and allocated to the team, investors, and other stakeholders.
Examples: Ethereum, most DeFi tokens
Pros:
-
Funding for development
-
Faster growth
-
Team incentives aligned
Cons:
-
Centralisation of ownership
-
Insider advantage
-
Regulatory scrutiny
SECTION 6: IMPLEMENTATION IN PYTHON
# =================================================================== # MODULE 6, LESSON 2: TOKEN DISTRIBUTION AND ALLOCATION # =================================================================== import pandas as pd import numpy as np import matplotlib.pyplot as plt from typing import Dict, List import warnings warnings.filterwarnings('ignore') print("="*70) print("TOKEN DISTRIBUTION AND ALLOCATION") print("="*70) # ---------------------------------------------------------------- # PART A: VESTING SCHEDULE SIMULATION # ----------------------------------------------------------------- print("\n" + "-"*60) print("PART A: Vesting Schedule Simulation") print("-"*60) class VestingSchedule: """ Simulated token vesting schedule. """ def __init__(self, total_tokens: int, cliff_months: int, vesting_months: int, tge_percentage: float = 0.0): self.total_tokens = total_tokens self.cliff_months = cliff_months self.vesting_months = vesting_months self.tge_percentage = tge_percentage self.released = 0 self.vested = [] self.schedule = [] def calculate_vesting(self, months: int) -> Dict: """Calculate vesting at a given month.""" if months < self.cliff_months: return {'released': 0, 'vested': 0, 'lock': self.total_tokens} # TGE release tge_tokens = self.total_tokens * self.tge_percentage # Linear vesting after cliff months_after_cliff = months - self.cliff_months if months_after_cliff >= self.vesting_months: tge_tokens = self.total_tokens else: remaining_tokens = self.total_tokens - tge_tokens monthly_vest = remaining_tokens / self.vesting_months vested_after_cliff = monthly_vest * months_after_cliff vested = tge_tokens + vested_after_cliff return { 'released': min(vested, self.total_tokens), 'vested': min(vested, self.total_tokens), 'lock': max(0, self.total_tokens - min(vested, self.total_tokens)) } def generate_schedule(self, total_months: int) -> pd.DataFrame: """Generate a full vesting schedule.""" data = [] for month in range(total_months + 1): result = self.calculate_vesting(month) data.append({ 'month': month, 'released': result['released'], 'vested': result['vested'], 'lock': result['lock'], 'percentage_released': result['released'] / self.total_tokens * 100 }) self.schedule = data return pd.DataFrame(data) # Simulate different vesting schedules print("Vesting Schedule Simulations:") # Schedule 1: Standard team vesting team_vesting = VestingSchedule( total_tokens=1000000, cliff_months=12, vesting_months=24, tge_percentage=0.0 ) # Schedule 2: Investor vesting investor_vesting = VestingSchedule( total_tokens=1000000, cliff_months=6, vesting_months=12, tge_percentage=0.25 ) # Schedule 3: Community vesting community_vesting = VestingSchedule( total_tokens=1000000, cliff_months=0, vesting_months=6, tge_percentage=0.50 ) # Generate schedules schedules = { 'Team': team_vesting, 'Investor': investor_vesting, 'Community': community_vesting } for name, schedule in schedules.items(): df = schedule.generate_schedule(36) print(f"\n{name} Vesting Schedule (36 months):") print(f" Total Tokens: {schedule.total_tokens:,}") print(f" Cliff: {schedule.cliff_months} months") print(f" Vesting: {schedule.vesting_months} months") print(f" TGE Release: {schedule.tge_percentage:.0%}") print(f" Released at 36 months: {df.iloc[-1]['percentage_released']:.0f}%") # Visualise vesting schedules fig, ax = plt.subplots(figsize=(12, 6)) for name, schedule in schedules.items(): df = schedule.generate_schedule(36) ax.plot(df['month'], df['percentage_released'], label=name, linewidth=2) ax.set_xlabel('Months Since TGE') ax.set_ylabel('Percentage of Tokens Released') ax.set_title('Token Vesting Comparison') ax.legend() ax.grid(True, alpha=0.3) plt.tight_layout() plt.savefig('vesting_schedules.png', dpi=300, bbox_inches='tight') plt.show() print("Vesting schedule chart saved as 'vesting_schedules.png'") # ---------------------------------------------------------------- # PART B: TOKEN ALLOCATION MODELS # ----------------------------------------------------------------- print("\n" + "-"*60) print("PART B: Token Allocation Models") print("-"*60) allocation_models = { "Balanced": { 'Team': 20, 'Advisors': 5, 'Seed': 8, 'Private': 15, 'Public': 12, 'Community': 25, 'Treasury': 15 }, "Community-Focused": { 'Team': 12, 'Advisors': 3, 'Seed': 5, 'Private': 10, 'Public': 15, 'Community': 40, 'Treasury': 15 }, "Investor-Focused": { 'Team': 25, 'Advisors': 5, 'Seed': 12, 'Private': 22, 'Public': 10, 'Community': 16, 'Treasury': 10 }, "Decentralised": { 'Team': 10, 'Advisors': 2, 'Seed': 3, 'Private': 5, 'Public': 20, 'Community': 45, 'Treasury': 15 } } # Create comparison dataframe comparison_data = [] for model_name, allocations in allocation_models.items(): row = {'Model': model_name} row.update(allocations) comparison_data.append(row) comparison_df = pd.DataFrame(comparison_data) print("Token Allocation Models:") print(comparison_df.to_string(index=False)) # Visualise allocation models fig, axes = plt.subplots(2, 2, figsize=(14, 10)) for idx, (model_name, allocations) in enumerate(allocation_models.items()): ax = axes[idx // 2, idx % 2] labels = list(allocations.keys()) values = list(allocations.values()) colors = ['#ff6b6b', '#ffd93d', '#6bcb77', '#4d96ff', '#9b59b6', '#1abc9c', '#f39c12'] ax.pie(values, labels=labels, autopct='%1.1f%%', startangle=90, colors=colors[:len(labels)]) ax.set_title(f'{model_name} Allocation Model') plt.tight_layout() plt.savefig('token_allocation_models.png', dpi=300, bbox_inches='tight') plt.show() print("Allocation model chart saved as 'token_allocation_models.png'") # ---------------------------------------------------------------- # PART C: DISTRIBUTION METHOD COMPARISON # ----------------------------------------------------------------- print("\n" + "-"*60) print("PART C: Distribution Method Comparison") print("-"*60) method_data = { 'Method': ['ICO', 'IDO', 'IEO', 'Airdrop', 'Mining', 'Staking', 'Liquidity Mining'], 'Centralisation': ['High', 'Medium', 'High', 'Low', 'Very Low', 'Low', 'Low'], 'Cost': ['High', 'Medium', 'Medium', 'Low', 'High', 'Medium', 'Medium'], 'Access': ['Limited', 'Open', 'Limited', 'Open', 'Open', 'Open', 'Open'], 'Regulatory Risk': ['High', 'Medium', 'Medium', 'Low', 'Low', 'Medium', 'Medium'], 'Community Building': ['Low', 'Medium', 'Medium', 'High', 'High', 'High', 'High'] } method_df = pd.DataFrame(method_data) print(method_df.to_string(index=False)) # ---------------------------------------------------------------- # PART D: STAKEHOLDER INCENTIVE ALIGNMENT # ----------------------------------------------------------------- print("\n" + "-"*60) print("PART D: Stakeholder Incentive Alignment") print("-"*60) incentive_data = { 'Stakeholder': ['Team', 'Advisors', 'Seed Investors', 'Private Investors', 'Public', 'Community'], 'Primary Goal': ['Project Success', 'Guidance', 'Return on Investment', 'Return on Investment', 'Value', 'Participation'], 'Time Horizon': ['Long', 'Medium', 'Medium-Long', 'Medium', 'Short-Medium', 'Long'], 'Risk Tolerance': ['High', 'Medium', 'High', 'Medium', 'Low-Medium', 'Medium'], 'Key Incentive': ['Tokens + Equity', 'Tokens', 'Tokens', 'Tokens', 'Tokens', 'Governance + Rewards'] } incentive_df = pd.DataFrame(incentive_data) print(incentive_df.to_string(index=False)) # ---------------------------------------------------------------- # PART E: SUMMARY AND RECOMMENDATIONS # ----------------------------------------------------------------- print("\n" + "="*70) print("PART E: Summary and Recommendations") print("="*70) print(""" Token Distribution and Allocation – Key Takeaways: 1. Token distribution stages: seed, private, public, community, team. 2. Vesting schedules: cliff period, vesting period, release schedule. 3. Vesting models: linear, cliff, gradual, performance-based. 4. Distribution methods: ICO, IDO, IEO, airdrops, mining, staking, liquidity mining. 5. Fair launch: no pre-allocation, decentralised distribution. 6. Pre-mined launch: pre-allocated tokens, faster growth. 7. Stakeholder allocation: team (15-25%), investors (20-30%), community (15-30%), treasury (10-20%). Recommendations: - Design fair and transparent token distribution. - Implement appropriate vesting schedules for each stakeholder. - Align incentives across all stakeholders. - Consider decentralisation in allocation decisions. - Be transparent about allocation and vesting. - Monitor token concentration and distribution. - Engage with the community on distribution decisions. """)