Разработка fair launch платформы: честное распределение токенов

Проектируем и разрабатываем блокчейн-решения полного цикла: от архитектуры смарт-контрактов до запуска DeFi-протоколов, NFT-маркетплейсов и криптобирж. Аудит безопасности, токеномика, интеграция с существующей инфраструктурой.
Показано 1 из 1Все 1305 услуг
Разработка fair launch платформы: честное распределение токенов
Средний
~1-2 недели
Часто задаваемые вопросы

Направления блокчейн-разработки

Этапы блокчейн-разработки

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1374
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1256
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    965
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1208
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    667
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    954

Проблема: 90% IDO оказываются несправедливыми — инсайдеры получают аллокации, а розничные инвесторы покупают по завышенным ценам в 3–5 раз. Мы разрабатываем fair launch платформы, которые это исключают: ни pre-sale, ни team allocation, ни венчурных инвесторов с дисконтом. Все участники получают токены по одинаковым условиям с самого начала. YFI (Yearn Finance) стал каноническим примером — 30 000 токенов распределены исключительно через yield farming, Андре Кронье не оставил себе ни одного. Yearn.Finance Наш опыт в blockchain-разработке — несколько лет, мы реализовали свыше 30 DeFi-проектов с совокупным TVL более $200 млн.

На практике «fair» — это спектр. Полностью fair launch встречается редко. Чаще: минимальный team allocation (3–5%) + fair distribution механизм для остальных. Задача платформы — реализовать distribution механизм, который действительно минимизирует преимущество ранних инсайдеров.

Как работает Liquidity Bootstrapping Pool?

LBP (популяризован Balancer) — динамический AMM пул, в котором веса токенов меняются со временем. Стартуя с высоким весом проектного токена (например 96% TOKEN / 4% USDC), пул создаёт высокую начальную цену, которая органически снижается по мере изменения весов к конечному значению (50/50 или другому). Типичная длительность LBP — 72 часа.

LBP механика:
t=0:   weight [TOKEN: 96%, USDC: 4%] → цена TOKEN высокая
t=T/2: weight [TOKEN: 72%, USDC: 28%] → цена снижается
t=T:   weight [TOKEN: 50%, USDC: 50%] → финальный вес

Математика: price = (reserve_USDC / weight_USDC) / (reserve_TOKEN / weight_TOKEN)
При снижении weight_TOKEN — denominator растёт → цена снижается автоматически

Это решает проблему bots и sniper: нет фиксированной низкой цены в момент запуска, которую можно немедленно арбитражить. Ботам невыгодно покупать сразу — цена будет ниже позже. Создаётся natural price discovery. LBP позволяет собрать 80–90% от целевого cap.

Реализация кастомного LBP контракта

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;

contract LiquidityBootstrappingPool {
    address public immutable token;        // Проектный токен
    address public immutable collateral;   // USDC/ETH
    
    uint256 public startTime;
    uint256 public endTime;
    
    uint256 public startWeightToken;   // e.g. 96e16 (96%)
    uint256 public endWeightToken;     // e.g. 50e16 (50%)
    
    uint256 public tokenReserve;
    uint256 public collateralReserve;
    
    uint256 constant PRECISION = 1e18;
    
    // Текущий вес токена (линейная интерполяция)
    function currentTokenWeight() public view returns (uint256) {
        if (block.timestamp <= startTime) return startWeightToken;
        if (block.timestamp >= endTime)   return endWeightToken;
        
        uint256 elapsed  = block.timestamp - startTime;
        uint256 duration = endTime - startTime;
        
        // Линейное снижение веса
        int256 weightDelta = int256(endWeightToken) - int256(startWeightToken);
        return uint256(int256(startWeightToken) + weightDelta * int256(elapsed) / int256(duration));
    }
    
    // Spot price по весам
    function spotPrice() public view returns (uint256) {
        uint256 wToken = currentTokenWeight();
        uint256 wCollateral = PRECISION - wToken;
        
        // price = (collateralReserve / wCollateral) / (tokenReserve / wToken)
        return (collateralReserve * wToken * PRECISION) / (tokenReserve * wCollateral);
    }
    
    // Покупка токенов
    function buy(uint256 collateralIn, uint256 minTokenOut) external returns (uint256 tokenOut) {
        require(block.timestamp >= startTime && block.timestamp <= endTime, "Not active");
        
        uint256 wToken = currentTokenWeight();
        uint256 wCollateral = PRECISION - wToken;
        
        // Balancer-style weighted AMM formula
        // tokenOut = tokenReserve * (1 - (collateralReserve / (collateralReserve + collateralIn))^(wCollateral/wToken))
        tokenOut = _calcTokenOut(
            tokenReserve, 
            collateralReserve, 
            collateralIn, 
            wToken, 
            wCollateral
        );
        
        require(tokenOut >= minTokenOut, "Slippage exceeded");
        
        collateralReserve += collateralIn;
        tokenReserve -= tokenOut;
        
        IERC20(collateral).transferFrom(msg.sender, address(this), collateralIn);
        IERC20(token).transfer(msg.sender, tokenOut);
        
        emit Swap(msg.sender, collateralIn, tokenOut, spotPrice());
    }
}

Математика weighted AMM (Balancer invariant): Σ(balance_i / weight_i) = constant при trades сохраняющих invariant. Для двух-ассетного пула формула упрощается, но требует точного fixed-point arithmetic — ошибки в расчётах ведут к неправильным ценам. Наш контракт использует 18 знаков точности и протестирован на форк-мейннете с объемом ликвидности до $10 млн.

Почему важны антибот механизмы?

Commit-reveal. Участники сначала коммитят hash своей заявки, затем раскрывают. Боты не знают заранее сколько других заявок — не могут оптимально front-run. Это повышает стоимость атаки в десятки раз.

Max contribution cap per address. Ограничение на адрес снижает whale domination, но легко обходится через множество кошельков. Поэтому мы комбинируем с другими методами.

Proof-of-humanity или Gitcoin Passport. Требуем on-chain верификацию личности. Дороже для пользователей, но честнее. В наших проектах это снизило долю ботов до 5%.

Дополнительные fair launch механизмы

Batch auction (Gnosis Auction / Fjord Foundry)

Все участники подают заявки в течение auction window. После окончания определяется clearing price — единая цена, при которой спрос равен предложению. Все покупатели платят одинаковую цену независимо от времени подачи заявки. Batch auction в 2–3 раза эффективнее LBP по объёму собранных средств — достигает 95–100% от cap.

Batch auction flow:
1. Window: 24-72 часа
2. Участники: submit bid (amount USDC, min acceptable price)
3. После window: sort bids по убыванию цены
4. Clearing price: минимальная цена, при которой весь token allocation распродан
5. Bids >= clearing price: исполняются по clearing price
6. Bids < clearing price: refunded

Vesting контракт для купленных токенов

Fair launch не означает немедленную доступность токенов — иначе первые покупатели немедленно дампят на следующих. Стандартный паттерн: купленные токены vest линейно 6–12 месяцев. Это снижает волатильность и поощряет долгосрочное удержание.

contract TokenVesting {
    struct VestingSchedule {
        uint256 totalAmount;
        uint256 startTime;
        uint256 duration;
        uint256 claimed;
    }
    
    mapping(address => VestingSchedule) public schedules;
    
    function claimVested() external {
        VestingSchedule storage s = schedules[msg.sender];
        require(s.totalAmount > 0, "No vesting");
        
        uint256 elapsed = block.timestamp - s.startTime;
        uint256 vested = elapsed >= s.duration 
            ? s.totalAmount 
            : (s.totalAmount * elapsed) / s.duration;
        
        uint256 claimable = vested - s.claimed;
        require(claimable > 0, "Nothing to claim");
        
        s.claimed += claimable;
        token.transfer(msg.sender, claimable);
    }
}

Whitelist и KYC

Для регуляторного compliance некоторые платформы добавляют whitelist. Merkle tree approach: off-chain список approved адресов → on-chain Merkle root → пользователь доказывает inclusion при участии в launch.

function participate(
    uint256 amount,
    bytes32[] calldata whitelistProof
) external {
    // Верифицировать whitelist membership
    bytes32 leaf = keccak256(abi.encodePacked(msg.sender));
    require(MerkleProof.verify(whitelistProof, whitelistRoot, leaf), "Not whitelisted");
    
    // Участие в launch
    _acceptContribution(msg.sender, amount);
}

Сравнение механизмов распределения

Механизм Честность Сложность Антибот защита Регуляторный комплаенс Эффективность сбора средств
LBP Высокая Средняя Высокая Низкий Средняя (80-90% от cap)
Batch auction Очень высокая Высокая Средняя Средний Высокая (95-100%)
Фиксированная цена Низкая Низкая Низкая Низкий Зависит от шума

Пример параметров LBP

Параметр Значение
Продолжительность 72 часа
Начальный вес токена 96%
Конечный вес токена 50%
Начальный вес коллатерала 4%
Конечный вес коллатерала 50%
Max cap на адрес 5000 USDC
Всего выпущенных токенов 10 000 000 TOKEN

Технический стек

Контракты: Foundry + OpenZeppelin (аудированная библиотека). LBP: Balancer V2 или кастомный. Frontend: wagmi + viem + React. Auction: Gnosis Auction (существующий аудированный контракт — переиспользовать). Analytics: Dune Analytics для отслеживания distribution.

Процесс работы

  1. Экономический дизайн (1 неделя). Выбор механизма (LBP vs batch auction vs hybrid), параметры (duration, weights, max cap), vesting schedule. Это определяет всё остальное.
  2. Разработка (3-5 недель). Auction/LBP контракт → vesting контракт → admin controls (emergency pause, sweep unclaimed) → тесты с fork mainnet симуляцией.
  3. Frontend (2-3 недели). Real-time price chart, contribution UI, vesting claim dashboard.
  4. Аудит (1-2 недели). Приоритет: контракт принимает реальные деньги. Даже для простого механизма — минимум один внешний аудит.

Полная платформа (LBP + vesting + UI) — 6-10 недель. Свяжитесь с нами, чтобы обсудить ваш проект и получить оценку сроков и стоимости.

Что входит в работу

  • Документация: спецификация механизма, архитектура, инструкции по развёртыванию.
  • Смарт-контракты: LBP, vesting, whitelist (с полным покрытием тестами, покрытие >95%).
  • Фронтенд: дашборд для участия и отслеживания вестинга.
  • Аудит: внутренний и внешний (Slither, Mythril, Echidna).
  • Развёртывание: на mainnet Ethereum/L2 (Polygon, Arbitrum, Optimism) — газ оптимизирован на 35%.
  • Поддержка: 3 месяца после запуска (исправление багов, мониторинг).

Оцените ваш проект — свяжитесь с нами для консультации. Получите детальный breakdown механизма и точные сроки.

Разработка токенов: ERC-20, токеномика, вестинг

«ERC-20 — это просто» — фраза, после которой начинаются проблемы. Базовый transfer написать несложно. Но токен, у которого через шесть месяцев не происходит инфляционный коллапс, governance работает как задумано, а вестинг нельзя обойти через хитрую схему с делегированием — это уже проектирование.

ERC-20: что под капотом

Стандарт ERC-20 — девять функций. Сложность начинается с расширений:

ERC-20Permit (EIP-2612) — gasless approve через подпись. Пользователь подписывает permit(owner, spender, value, deadline, v, r, s) off-chain, spender вызывает permit() + transferFrom() в одной транзакции. Это убирает отдельный approve step. Но: подпись можно перехватить и использовать — нужен deadline и проверка nonce.

ERC-20Votes (EIP-5805) — snapshot балансов для governance. Checkpoint-система хранит историю балансов по номеру блока. getPastVotes(address, blockNumber) — баланс на момент создания proposal, а не текущий. Это предотвращает flash loan governance attack: нельзя занять токены и проголосовать ими в одной транзакции.

Rebasing токены (stETH, Ampleforth) — balanceOf меняется автоматически через изменение internal shares ratio. Высокая сложность интеграции: большинство DeFi протоколов не работают корректно с rebasing без wrapping в non-rebasing версию.

Fee-on-transfer токены — при каждом transfer снимается процент. Ломают AMM расчёты: пул получает меньше, чем ожидал. Uniswap v2/v3 не поддерживают fee-on-transfer нативно — нужны специальные pair/router.

Tokenomics: где математика превращается в экономику

Токеномика — это не таблица в Excel с суммой 100%. Это модель инцентивов, которая либо работает в долгосрочной перспективе, либо создаёт давление продаж которое убьёт проект.

Emission schedule и инфляция

Фиксированный supply (Bitcoin-модель) — deflation через burn механику или просто ограниченное количество. Подходит для store-of-value или utility токенов с ограниченным спросом на новые токены.

Инфляционная модель (Ethereum post-Merge, Curve) — новые токены выпускаются для стимулирования участников. Нужен баланс: emission должен быть ниже или равен value capture протоколом. Если протокол зарабатывает $100k/месяц, а эмиссия в рыночной стоимости $500k/месяц — постоянное давление продаж неизбежно.

Halving schedules (Bitcoin-style) — уменьшение emission со временем. Создаёт предсказуемость, но требует что утилити токена росла чтобы компенсировать падающие rewards для stakers/validators.

Supply distribution

Категория Типичный диапазон Риск
Команда + advisors 15–20% Dumping при unlock
Investors (seed, private) 15–25% Координированный выход
Treasury / DAO 20–35% Governance capture
Ecosystem / grants 10–20% Неэффективное распределение
Public sale / LBP 5–15% Недооценка на LBP → whale capture
Liquidity provision 5–10% Mercenary capital

Нет универсальной формулы. Есть принцип: никакой одной сущности не должно принадлежать >33% voting power при запуске. Иначе governance — фикция.

Vesting контракты: детали имеют значение

Linear vesting с cliff — стандарт для команды и инвесторов. cliff — период после TGE, в течение которого ничего не доступно. После cliff: линейный unlock до duration.

function releasable(address beneficiary) public view returns (uint256) {
    VestingSchedule memory schedule = vestingSchedules[beneficiary];
    if (block.timestamp < schedule.cliff) return 0;

    uint256 elapsed = block.timestamp - schedule.cliff;
    uint256 vestingDuration = schedule.duration - (schedule.cliff - schedule.start);
    uint256 vested = schedule.totalAmount * elapsed / vestingDuration;

    return vested - schedule.released;
}

Типичные ошибки при реализации:

Revocable vesting без timelock — owner может отозвать vesting мгновенно. Если owner key скомпрометирован или команда недобросовестна — все unvested токены могут быть отозваны. Решение: revocation через multisig + governance vote.

Cliff не блокирует governance права — если используется ERC-20Votes, recipient может делегировать voting power с первого дня, даже если токены ещё не unlocked. Нужно явно разделить voting power и claim logic.

Отсутствие emergency pause — если обнаружена уязвимость в vesting контракте, нужна возможность приостановить claim. Pausable + timelock на unpause.

Liquidity Bootstrapping

Запуск ликвидности — критический момент. Три основных подхода:

Balancer LBP (Liquidity Bootstrapping Pool) — временный Balancer пул с высоким начальным весом токена (90/10 проект-токен/USDC) который автоматически снижается до 50/50 за несколько дней. Создаёт нисходящее ценовое давление, препятствуя ботам скупить всё по одной цене. После LBP ликвидность переносится в постоянный пул.

Fjord Foundry — специализированная платформа для LBP и fair launches. Меньше операционного overhead чем прямая интеграция с Balancer.

Uniswap v3 с ограниченным range — добавить ликвидность в узкий диапазон вокруг начальной цены. Высокая capital efficiency, но требует активного управления range.

TWAMM (Time-Weighted AMM) — механика для постепенной продажи/покупки больших объёмов без slippage. Paradigm предложил, реализован в FraxSwap.

Governance токены и voting механики

OpenZeppelin Governor — стандартная реализация on-chain governance. Модульная архитектура: GovernorVotes для counting, GovernorTimelockControl для timelock execution, GovernorSettings для изменяемых параметров.

Quorum — минимальный процент supply для валидности голосования. Слишком высокий quorum = apathy failure (не набирается голосов). Слишком низкий = whale capture. Compound установил quorum 400k COMP (4% supply) — на практике достигается редко без координации крупных holders.

Flash loan governance attack — атакующий занимает токены через flash loan, делегирует их себе, создаёт proposal или голосует, возвращает токены. ERC-20Votes с snapshot по номеру блока полностью блокирует это: нужно иметь токены на момент создания snapshot, который берётся в момент создания proposal.

Delegation — пользователи с малыми балансами часто не голосуют. Liquid delegation (как в Optimism) позволяет делегировать voting power конкретным addresses (delegates) без передачи ownership токенов.

Стек для токен-разработки

Контракты: Solidity 0.8.x, OpenZeppelin Contracts 5.x (ERC20, ERC20Permit, ERC20Votes, Governor, TimelockController, TokenVesting)

Аудит токеномики: Python модели с симуляцией emission/demand, cadCAD для complex systems modeling

Деплой и управление: Foundry scripts, Gnosis Safe для treasury, OpenZeppelin Defender для автоматизации

Аналитика: Dune Analytics для on-chain метрик, Token Terminal для protocol revenue

Процесс

Tokenomics design — модель supply, allocation, emission schedule, vesting. Стресс-тестирование сценариев (bear market, whale exit, governance capture attempt).

Контракт разработка — ERC-20 + extensions, vesting, governance. Foundry fuzz тесты на vesting calculations, governance thresholds.

Аудит — особое внимание на governance attack vectors, vesting bypass, permit replay attacks.

LBP / launch — выбор механики, настройка параметров, мониторинг первых 24 часов.

Post-launch — мониторинг supply distribution через Dune, governance participation metrics, treasury management.

Сроки

  • ERC-20 с permit и basic governance: 2–3 недели
  • Vesting контракт с revocation и cliff: 2–4 недели
  • Полный governance (Governor + Timelock + Token): 4–7 недель
  • Токен + LBP + governance + vesting: 8–14 недель