Техническая архитектура 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 | Пропорциональное распределение | Низкие, честное распределение | Популярные проекты |
Процесс работы и что входит
- Аналитика — встреча с инженерами, обсуждение целей и требований.
- Проектирование — архитектура смарт-контрактов и схема взаимодействия.
- Разработка — контракты на Solidity 0.8.x, Foundry для тестирования и аудита.
- Интеграция — фронтенд, админ-панель, KYC и мультичейн.
- Тестирование — unit-тесты, интеграционные тесты и аудит (Slither, Mythril).
- Деплой — контракты деплоятся в выбранные сети, фронтенд хостится.
- Поддержка — мониторинг, исправление багов и обновления.
Отметим, что входит в работу:
- Исходный код смарт-контрактов (Solidity)
- Документация по развертыванию и администрированию
- Доступ к репозиторию с фронтендом и бэкендом
- Обучение команды оператора (2 сессии)
- Техническая поддержка на 3 месяца
Детали аудита
Контракты проходят аудит с использованием Slither, Mythril и формальной верификации. Мы также проводим fuzzing с Echidna. Типичные результаты: 0 критических уязвимостей, 2-3 medium, которые закрываются до деплоя.
Свяжитесь с нами для оценки вашего проекта — мы подготовим предложение за 2 дня. Закажите консультацию по архитектуре вашего ICO launchpad уже сегодня.







