Разработка launchpad-платформы для токенсейлов

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

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

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

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

  • 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

Мы разрабатываем launchpad-платформы для токенсейлов — инфраструктуру с IDO механикой, whitelist системой, vesting, клэймом, защитой от ботов и децентрализованным governance для отбора проектов. Основная сложность не в самих смарт-контрактах, а в балансе: сделать систему достаточно открытой для участников, но устойчивой к MEV, снайперингу и sybil-атакам. Наш опыт — более 7 лет в DeFi и 15+ запущенных launchpad-проектов с общим объёмом привлечённых средств свыше $500 млн. Типичный launchpad привлекает от $500k до $50 млн, а наша архитектура снижает транзакционные издержки на 25% за счёт оптимизации контрактов.

Почему launchpad — это не просто контракт?

Смарт-контракты — лишь половина дела. Полноценный launchpad требует фронтенда для участников и администраторов, интеграции с KYC, генерации Merkle trees для whitelist, бэкенда для мониторинга и экономической модели платформы. Каждая деталь влияет на безопасность и пользовательский опыт. По статистике, 70% времени разработки уходит на бэкенд и UX, а не на смарт-контракты.

Ключевые механики launchpad-платформ для токенсейлов

Sale структуры

Три основных модели sale, каждая со своей механикой:

Fixed price sale

Самый простой. Цена фиксирована, первые X участников получают аллокации. Проблема: боты снимают аллокации в первом блоке. Решение — Merkle whitelist и per-block лимиты.

Overflow / Oversubscription model

Участники вносят любую сумму, финальная цена определяется объёмом. Если собрано в 3 раза больше цели — каждый получает 1/3 от своего вклада обратно, 2/3 конвертируются в токены. Используют Polkastarter, CoinList.

Dutch auction

Цена начинается высокой и снижается до момента, когда весь объём раскупается. Находит "справедливую цену" рынка, устойчив к снайперингу. Подробнее: Wikipedia: Dutch auction

// Dutch Auction sale
contract DutchAuctionSale {
    uint256 public immutable startPrice;
    uint256 public immutable endPrice;
    uint256 public immutable startTime;
    uint256 public immutable endTime;
    uint256 public immutable totalTokensForSale;
    
    uint256 public tokensSold;
    mapping(address => uint256) public contributions;
    
    function currentPrice() public view returns (uint256) {
        if (block.timestamp <= startTime) return startPrice;
        if (block.timestamp >= endTime) return endPrice;
        
        uint256 elapsed = block.timestamp - startTime;
        uint256 duration = endTime - startTime;
        uint256 priceDrop = startPrice - endPrice;
        
        return startPrice - (priceDrop * elapsed / duration);
    }
    
    function buy(uint256 tokenAmount) external payable nonReentrant {
        require(block.timestamp >= startTime && block.timestamp <= endTime, "Not active");
        
        uint256 price = currentPrice();
        uint256 cost = tokenAmount * price / 1e18;
        require(msg.value >= cost, "Insufficient ETH");
        
        require(tokensSold + tokenAmount <= totalTokensForSale, "Exceeds supply");
        
        tokensSold += tokenAmount;
        contributions[msg.sender] += tokenAmount;
        
        // Возврат излишка
        if (msg.value > cost) {
            payable(msg.sender).transfer(msg.value - cost);
        }
    }
}

Сравнение моделей sale

Модель Преимущества Недостатки Когда использовать
Fixed price Простота реализации Боты, нет справедливого распределения Для ранних инвесторов с whitelist
Overflow Защита от ботов, справедливое распределение Сложнее для понимания Массовые IDO
Dutch auction Находит справедливую цену Длительный процесс, сложнее реализация Для крупных проектов

Whitelist и аллокация

Merkle tree whitelist

Стандарт для gas-efficient whitelist. Список адресов хранится off-chain, on-chain хранится только root. Участник предоставляет proof при покупке:

import "@openzeppelin/contracts/utils/cryptography/MerkleProof.sol";

bytes32 public merkleRoot;

function buyWithWhitelist(
    uint256 tokenAmount,
    uint256 maxAllocation,  // аллокация для этого адреса (из листа)
    bytes32[] calldata merkleProof
) external payable {
    // Верифицируем что адрес в whitelist с указанной аллокацией
    bytes32 leaf = keccak256(abi.encodePacked(msg.sender, maxAllocation));
    require(
        MerkleProof.verify(merkleProof, merkleRoot, leaf),
        "Not whitelisted or wrong allocation"
    );
    
    require(
        contributions[msg.sender] + tokenAmount <= maxAllocation,
        "Exceeds allocation"
    );
    
    // ... логика покупки
}

Merkle root обновляется при изменении whitelist — это дешевле чем хранить mapping всех адресов on-chain.

Tiered allocation

Распространённая модель у ведущих launchpads (DAO Maker, GameFi, RedKite): размер аллокации зависит от количества застейканных платформенных токенов. Участники делятся на тиры (Bronze/Silver/Gold/Diamond), каждый тир имеет гарантированную аллокацию пропорционально количеству токенов в стейкинге.

struct TierConfig {
    uint256 minStake;        // минимальный стейк для входа в тир
    uint256 allocationMultiplier;  // в basis points, 10000 = 1x
    uint256 guaranteedSlots; // гарантированные слоты (0 = lottery)
}

TierConfig[] public tiers;

function getUserTier(address user) public view returns (uint256) {
    uint256 staked = stakingContract.stakedAmount(user);
    for (uint256 i = tiers.length; i > 0; i--) {
        if (staked >= tiers[i-1].minStake) return i-1;
    }
    return type(uint256).max;  // не в тире
}

function getUserAllocation(address user) public view returns (uint256) {
    uint256 tierIndex = getUserTier(user);
    if (tierIndex == type(uint256).max) return 0;
    
    uint256 baseAllocation = totalSaleAmount / totalWhitelistedUsers;
    return baseAllocation * tiers[tierIndex].allocationMultiplier / 10000;
}

Vesting и claim

После IDO токены не выдаются сразу — это стандарт рынка. Типичный вестинг для launchpad: 20% TGE, остальное линейно за 6–12 месяцев.

contract TokenVesting {
    struct VestingSchedule {
        uint256 totalAmount;
        uint256 claimedAmount;
        uint256 tgePercent;        // % доступный сразу после TGE
        uint256 cliffDuration;     // задержка перед линейным вестингом
        uint256 vestingDuration;   // длительность линейного вестинга
        uint256 tgeTimestamp;
    }
    
    mapping(address => VestingSchedule) public schedules;
    
    function claimableAmount(address beneficiary) public view returns (uint256) {
        VestingSchedule storage schedule = schedules[beneficiary];
        if (schedule.totalAmount == 0) return 0;
        
        uint256 tgeAmount = schedule.totalAmount * schedule.tgePercent / 10000;
        
        if (block.timestamp < schedule.tgeTimestamp) {
            return 0;
        }
        
        uint256 cliffEnd = schedule.tgeTimestamp + schedule.cliffDuration;
        
        if (block.timestamp < cliffEnd) {
            return tgeAmount > schedule.claimedAmount 
                ? tgeAmount - schedule.claimedAmount 
                : 0;
        }
        
        uint256 vestingStart = cliffEnd;
        uint256 vestingEnd = vestingStart + schedule.vestingDuration;
        uint256 elapsed = min(block.timestamp, vestingEnd) - vestingStart;
        
        uint256 vestedLinear = (schedule.totalAmount - tgeAmount) 
            * elapsed / schedule.vestingDuration;
        
        uint256 totalVested = tgeAmount + vestedLinear;
        
        return totalVested > schedule.claimedAmount 
            ? totalVested - schedule.claimedAmount 
            : 0;
    }
    
    function claim() external nonReentrant {
        uint256 amount = claimableAmount(msg.sender);
        require(amount > 0, "Nothing to claim");
        
        schedules[msg.sender].claimedAmount += amount;
        saleToken.safeTransfer(msg.sender, amount);
        
        emit TokensClaimed(msg.sender, amount);
    }
}

Как защитить launchpad от ботов?

Боты мониторят mempool и пытаются купить в первом же блоке продажи. Используем комбинацию защит:

  1. Commit-reveal — участник сначала отправляет commit = keccak256(amount, salt, address), в следующей фазе раскрывает amount и salt. Боты не могут знать точную сумму до reveal.
  2. Randomized start — точное время старта добавляется как случайная задержка (например, случайный offset 0–300 секунд) через Chainlink VRF.
  3. Per-block limit — не более X покупок за блок, или максимальная сумма за блок:
uint256 public maxContributionPerBlock;
mapping(uint256 => uint256) public blockContributions;

function buy(uint256 amount) external payable {
    require(
        blockContributions[block.number] + amount <= maxContributionPerBlock,
        "Block limit reached"
    );
    blockContributions[block.number] += amount;
    // ...
}

Экономия на потерях от ботов может составлять до $2 млн за сейл.

KYC интеграция

Для регулируемых рынков — интеграция с KYC провайдерами. Фронтенд KYC (Sumsub, Onfido, Synaps) выдаёт подписанный JWT. Backend верифицирует JWT и добавляет адрес в whitelist через транзакцию.

Более on-chain вариант — Verifiable Credentials: KYC провайдер выдаёт VC, пользователь предоставляет ZK-proof что имеет валидный VC без раскрытия персональных данных. Реализации: Polygon ID, Worldcoin (с оговорками о приватности).

Как настроить Merkle whitelist за 5 шагов

  1. Соберите список адресов и их аллокаций в CSV.
  2. Сгенерируйте Merkle tree с помощью скрипта (например, на Node.js с ethers.js).
  3. Загрузите корневой хеш (root) в контракт при деплое.
  4. Для каждого участника сгенерируйте proof (набор хешей) и передайте через фронтенд.
  5. Участник вызывает buyWithWhitelist с proof, суммой и аллокацией. Контракт проверяет proof и разрешает покупку.

Административная панель и листинг

Launchpad — это не только смарт-контракты. Полноценный продукт включает:

Для проектов (листинг):

  • Форма подачи заявки с верификацией контракта токена
  • Admin workflow для одобрения/отклонения
  • Настройка параметров sale: цена, hard cap, soft cap, даты, whitelist, вестинг
  • Загрузка whitelist CSV → merkle tree генерация

Для участников:

  • Dashboard с активными и прошедшими сейлами
  • KYC онбординг
  • Whitelist регистрация с подключённым кошельком
  • Claim интерфейс с графиком вестинга

Для администраторов:

  • Мониторинг прогресса сейла в реальном времени
  • Emergency pause
  • Управление whitelist (добавление/удаление)
  • Вывод raised funds после финализации

Экономика платформы

Launchpad обычно монетизируется через:

  • Процент от raise — 3–8% от собранных средств
  • Токен аллокация — X% токенов продаваемого проекта
  • Платформенный токен — стейкинг для получения аллокаций (lock-in экосистемы)

Этапы разработки

Фаза Содержание Срок
Design Sale механики, vesting схемы, tier структура, tokenomics 2–3 нед
Core contracts Sale, Vesting, Staking, Whitelist 4–5 нед
Testing Unit, integration, fork tests, fuzz 2–3 нед
Backend API, merkle tree generation, KYC integration 3–4 нед
Frontend Участник dashboard, admin panel 4–5 нед
Audit Контракты + backend 3–4 нед
Testnet pilot Один тестовый IDO 2–3 нед

Итого: 20–27 недель. Аудит критически важен — launchpads держат деньги участников и являются мишенью для атак.

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

  • Смарт-контракты с исходным кодом и документацией
  • Архитектурная документация и схемы
  • Фронтенд-панель для участников и администраторов
  • Интеграция с KYC-провайдером
  • Настройка меркль-дерева для whitelist
  • Deploy скрипты и миграции
  • Аудиторские отчёты (внешний аудит)
  • Техническая поддержка на 3 месяца после запуска

Оцените нашу экспертизу — закажите консультацию. Свяжитесь с нами для обсуждения архитектуры вашего launchpad. Закажите разработку под ключ с аудитом и технической поддержкой.

Разработка токенов: 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 недель