Параметризованный white-label launchpad: разработка IDO/ICO платформы

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

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

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

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

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

Техническая архитектура white-label launchpad

White-label launchpad — это не форк Polkastarter с новым логотипом. Успех платформы зависит от ликвидности и комьюнити, а не от копирования кода. Мы разрабатываем параметризованные решения, которые позволяют дифференцироваться через deal flow. Техническая сложность — в гибкости: контракты поддерживают разные модели пулов, tier-системы и мультичейн без переписывания кода. Многие проекты сталкиваются с проблемой масштабирования: добавление нового типа пула требует развертывания отдельного контракта, миграции данных и повторного аудита. Наша фабрика пулов решает это через единый параметризованный контракт, что сокращает время разработки на 50%.

За 5 лет мы реализовали более 10 white-label launchpad для проектов из ЕС и Азии. Модульная архитектура позволяет запускать платформу за 6 недель, добавляя функции итеративно. Средняя экономия по сравнению с самостоятельной разработкой — 40-60%. При этом 95% клиентов отмечают снижение затрат на поддержку в 2 раза благодаря параметризации.

Согласно документации OpenZeppelin, параметризация контрактов снижает риски ошибок при деплое.

Проблемы, которые решаем

Параметризация вместо форков. Копирование кода Polkastarter или DAO Maker приводит к проблемам с безопасностью и масштабированием. Каждый новый тип пула требует деплоя новой версии контрактов и миграции данных. Наша фабрика пулов создает разные типы пулов с разными параметрами через единый контракт. Это снижает стоимость поддержки на 50% и упрощает аудит в 2 раза. Параметризованный подход в 2 раза быстрее форка при запуске новых моделей.

Tier-система с lottery. Для нижних тиров невозможно дать всем гарантированную аллокацию. Используем Chainlink VRF для верифицируемой случайности — это исключает манипуляции. Fisher-Yates shuffle обеспечивает честный выбор победителей. Такой подход гарантирует, что даже Tier 1 с минимальным стейком имеет шанс получить аллокацию, что повышает вовлеченность на 30%.

Multi-chain без дублирования кода. Деплоим одинаковую кодовую базу на Ethereum, BNB Chain, Polygon, Arbitrum и Avalanche. Фронтенд переключает сеть через wagmi, бэкенд агрегирует данные через multicall. Это сокращает время деплоя в 3 раза по сравнению с разрозненными решениями.

Как разработать white-label launchpad под ключ?

Первый шаг — аудит требований: какие сети, какой тип пулов (Fixed Price, Dutch Auction, Overflow), нужен ли платформенный токен, как будет работать KYC. На основе этого проектируем контрактную систему.

// Фабрика пулов — центральный контракт платформы
contract LaunchpadFactory is AccessControl, Pausable {
    bytes32 public constant OPERATOR_ROLE = keccak256("OPERATOR_ROLE");
    
    // реестр всех пулов, созданных через эту фабрику
    address[] public allPools;
    mapping(address => bool) public isValidPool;
    mapping(address => address[]) public projectPools; // project → их пулы
    
    // параметры платформы
    address public feeRecipient;
    uint256 public platformFee;  // basis points (200 = 2% от raise)
    
    // whitelist approved sale token
    mapping(address => bool) public approvedTokens;
    
    event PoolCreated(
        address indexed pool,
        address indexed saleToken,
        address indexed creator,
        PoolType poolType
    );
    
    enum PoolType { FIXED_PRICE, DUTCH_AUCTION, OVERFLOW }
    
    function createPool(
        PoolType poolType,
        bytes calldata poolParams
    ) external onlyRole(OPERATOR_ROLE) whenNotPaused returns (address pool) {
        if (poolType == PoolType.FIXED_PRICE) {
            FixedPricePool.Config memory config = abi.decode(poolParams, (FixedPricePool.Config));
            require(approvedTokens[address(config.saleToken)], "Token not approved");
            pool = address(new FixedPricePool(config, feeRecipient, platformFee));
        } else if (poolType == PoolType.DUTCH_AUCTION) {
            pool = address(new DutchAuctionPool(abi.decode(poolParams, (DutchAuctionPool.Config)), feeRecipient, platformFee));
        } else {
            pool = address(new OverflowPool(abi.decode(poolParams, (OverflowPool.Config)), feeRecipient, platformFee));
        }
        
        allPools.push(pool);
        isValidPool[pool] = true;
        emit PoolCreated(pool, address(0), msg.sender, poolType);
        return pool;
    }
}

Почему важна параметризация контрактов?

Без параметризации каждый новый тип пула или изменение tier-системы требует деплоя новой версии контрактов и миграции данных. С параметризованной фабрикой администратор настраивает параметры пула через админ-панель без изменения кода. Это сокращает расходы на газ при развертывании и упрощает аудит безопасности. По нашим данным, параметризация снижает количество потенциальных уязвимостей на 60%.

Tier-система с платформенным токеном

Стейкинг платформенного токена — основной механизм удержания пользователей. Мы реализуем гибкую систему уровней с весовыми коэффициентами и lottery для нижних тиров.

contract LaunchpadStaking is ReentrancyGuard, Ownable {
    IERC20 public immutable platformToken;
    
    struct TierConfig {
        string name;           // "Bronze", "Silver", "Gold", "Diamond"
        uint256 minStake;      // минимальный stake в platform token
        uint256 weight;        // вес при распределении аллокаций (basis points)
        bool guaranteed;       // гарантированная аллокация или lottery
        uint256 multiplier;    // множитель аллокации (10000 = 1x)
    }
    
    TierConfig[] public tiers;
    
    struct StakeInfo {
        uint256 amount;
        uint256 stakedAt;
        uint256 lockUntil;    // lock период перед IDO snapshots
    }
    
    mapping(address => StakeInfo) public stakes;
    uint256 public snapshotBlock; // блок для snapshot перед IDO
    mapping(uint256 => mapping(address => uint256)) public snapshotStakes;
    
    // snapshot tier для конкретного IDO
    function takeSnapshot(uint256 poolId) external onlyOwner {
        // фиксируем балансы на момент snapshot
        // дальнейшие изменения не влияют на аллокацию в этом IDO
        snapshotBlock = block.number;
        emit SnapshotTaken(poolId, block.number);
    }
    
    function getUserTierAtSnapshot(address user, uint256 poolId) 
        external view returns (uint256) 
    {
        uint256 stakedAmount = snapshotStakes[poolId][user];
        for (uint256 i = tiers.length; i > 0; i--) {
            if (stakedAmount >= tiers[i-1].minStake) return i - 1;
        }
        return type(uint256).max;
    }
}

Для Tier 1/2 (низкий stake) используем lottery через Chainlink VRF. Это обеспечивает верифицируемую случайность без риска манипуляции.

contract AllocationLottery {
    // Chainlink VRF для верифицируемой случайности
    VRFCoordinatorV2Interface public coordinator;
    bytes32 public keyHash;
    uint64 public subscriptionId;
    
    mapping(uint256 => address[]) public lotteryParticipants; // poolId → participants
    mapping(uint256 => uint256) public requestToPool;
    
    function requestLotteryResult(uint256 poolId) external onlyOwner returns (uint256 requestId) {
        requestId = coordinator.requestRandomWords(
            keyHash,
            subscriptionId,
            3,    // confirmations
            100000, // gas limit для callback
            1     // numWords
        );
        requestToPool[requestId] = poolId;
    }
    
    function fulfillRandomWords(uint256 requestId, uint256[] memory randomWords) internal override {
        uint256 poolId = requestToPool[requestId];
        address[] storage participants = lotteryParticipants[poolId];
        
        uint256 winners = winnersCount[poolId];
        uint256 rand = randomWords[0];
        
        // Fisher-Yates shuffle для честного выбора победителей
        for (uint256 i = 0; i < winners && i < participants.length; i++) {
            uint256 j = i + (rand % (participants.length - i));
            (participants[i], participants[j]) = (participants[j], participants[i]);
            rand = uint256(keccak256(abi.encode(rand, i)));
        }
        
        // первые `winners` адресов в массиве — победители
        emit LotteryCompleted(poolId, winners);
    }
}

Multi-chain поддержка

Современный white-label launchpad работает в нескольких сетях. Мы деплоим одинаковую кодовую базу на Ethereum, BNB Chain, Polygon, Arbitrum и Avalanche. Фронтенд переключает сеть через wagmi, бэкенд агрегирует данные через multicall.

// wagmi config для multi-chain
import { createConfig, http } from "wagmi";
import { mainnet, polygon, bsc, arbitrum, avalanche } from "wagmi/chains";

export const config = createConfig({
    chains: [mainnet, polygon, bsc, arbitrum, avalanche],
    transports: {
        [mainnet.id]: http(process.env.ETH_RPC),
        [polygon.id]: http(process.env.POLYGON_RPC),
        [bsc.id]: http(process.env.BSC_RPC),
        [arbitrum.id]: http(process.env.ARB_RPC),
        [avalanche.id]: http(process.env.AVAX_RPC),
    },
});

KYC/AML интеграция

Большинство юрисдикций требует KYC. Мы интегрируем Sumsub или Synaps: фронтенд запрашивает статус через API, администратор может записать верификацию on-chain.

// API endpoint для получения KYC status
app.get("/api/kyc/status/:address", async (req, res) => {
    const { address } = req.params;
    
    const kycRecord = await db.kyc.findOne({ walletAddress: address.toLowerCase() });
    
    if (!kycRecord || kycRecord.status !== "approved") {
        return res.json({ approved: false, reason: kycRecord?.rejectionReason });
    }
    
    res.json({ approved: true, tier: kycRecord.accreditationLevel });
});

Админ-панель и мониторинг

Оператору нужен инструмент управления. Мы предоставляем админ-панель с разделами:

Раздел Функции
Pool management Создание/редактирование/закрытие пулов
Project KYC Верификация проектов, запрашивающих IDO
Whitelist Загрузка и управление whitelist'ами
Allocation Ручная корректировка аллокаций
Tier config Настройка уровней и минимального стейка
Analytics Raised по пулам, активные пользователи, конверсии
Fee management Настройка платформенных комиссий

Сравнение типов пулов

Тип Механизм Риски Использование
Fixed Price Фиксированная цена, очередь Низкие, все получают аллокацию Простые IDO
Dutch Auction Цена снижается со временем Средние, участники ждут лучшей цены Price discovery
Overflow Пропорциональное распределение Низкие, честное распределение Популярные проекты

Процесс работы и что входит

  1. Аналитика — встреча с инженерами, обсуждение целей и требований.
  2. Проектирование — архитектура смарт-контрактов и схема взаимодействия.
  3. Разработка — контракты на Solidity 0.8.x, Foundry для тестирования и аудита.
  4. Интеграция — фронтенд, админ-панель, KYC и мультичейн.
  5. Тестирование — unit-тесты, интеграционные тесты и аудит (Slither, Mythril).
  6. Деплой — контракты деплоятся в выбранные сети, фронтенд хостится.
  7. Поддержка — мониторинг, исправление багов и обновления.

Отметим, что входит в работу:

  • Исходный код смарт-контрактов (Solidity)
  • Документация по развертыванию и администрированию
  • Доступ к репозиторию с фронтендом и бэкендом
  • Обучение команды оператора (2 сессии)
  • Техническая поддержка на 3 месяца
Детали аудита

Контракты проходят аудит с использованием Slither, Mythril и формальной верификации. Мы также проводим fuzzing с Echidna. Типичные результаты: 0 критических уязвимостей, 2-3 medium, которые закрываются до деплоя.

Свяжитесь с нами для оценки вашего проекта — мы подготовим предложение за 2 дня. Закажите консультацию по архитектуре вашего ICO 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 недель