Технічна архітектура white-label launchpad
White-label launchpad — це не просто форк Polkastarter з новим логотипом. Успіх платформи залежить від ліквідності та ком'юніті, а не від копіювання коду. Ми розробляємо параметризовані рішення, які дозволяють диференціюватися через deal flow. Технічна складність — у гнучкості: контракти підтримують різні моделі пулів, tier-системи та мультичейн без переписування коду. Багато проєктів стикаються з проблемою масштабування: додавання нового типу пулу потребує розгортання окремого контракту, міграції даних та повторного аудиту. Наша фабрика пулів вирішує це через єдиний параметризований контракт, що скорочує час розробки на 50%.
За час роботи ми реалізували понад 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 просто зараз.







