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

Запуск IDO/ICO платформи часто впирається в шаблонні рішення, які не дають гнучкості та гальмують масштабування. Ми розробляємо параметризовані white-label launchpad, які налаштовуються під вашу бізнес-модель без переписування коду. Наша команда реалізує проєкт під ключ — від архітектури смарт-контрактів до запуску та подальшої підтримки, забезпечуючи надійну основу для зростання вашої платформи.
Часті запитання

Технічна архітектура 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 просто зараз.

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

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1542
  • Розробка веб-додатків для компанії FEEDME
    Розробка веб-додатків для компанії FEEDME
    1393
  • Розробка веб-сайту для компанії БЕЛФІНГРУП
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    1081
  • Розробка інтернет магазину для компанії FURNORO
    Розробка інтернет магазину для компанії FURNORO
    1368
  • Розробка логотипу компанії B2B Advance
    Розробка логотипу компанії B2B Advance
    815
  • Розробка веб-додатків для компанії Enviok
    Розробка веб-додатків для компанії Enviok
    1139