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

Технічна архітектура white-label launchpad White-label launchpad — це не просто форк Polkastarter з новим логотипом. Успіх платформи залежить від ліквідності та ком'юніті, а не від копіювання коду. Ми розробляємо параметризовані рішення, які дозволяють диференціюватися через deal flow. Технічна с

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

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1309
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1005
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1270
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    719
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    1011

Технічна архітектура 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 Пропорційний розподіл Низькі, чесний розподіл Популярні проєкти

Процес роботи та що входить

  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 просто зараз.