Разработка launchpad под ключ: смарт-контракты, KYC, аудит

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

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

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

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

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

Как работает IEO-платформа?

Каждая IEO-платформа сталкивается с тремя критическими вызовами: справедливое распределение аллокаций, защита от манипуляций и соответствие регуляторам. От того, как вы решите эти задачи, зависит доверие инвесторов и успех всего проекта. Мы разрабатываем IEO-платформы — полноценные решения для Initial Exchange Offering, которые не просто продают токены, а обеспечивают верификацию проектов, справедливое распределение аллокаций и интеграцию с биржами. Binance Launchpad и KuCoin Spotlight — примеры таких систем. Собственная платформа даёт полный контроль над комиссиями, условиями продажи и ликвидностью. Мы помогаем пройти путь от концепции до запуска, включая аудит смарт-контрактов. На рынке мы уже более 5 лет и реализовали свыше 15 launchpad-проектов, поэтому знаем все подводные камни.

Компоненты платформы

Компонент Ответственность
Project Registry Верификация и хранение данных проектов
Allocation Engine Распределение лотов между участниками
KYC/AML Gateway Интеграция с провайдером верификации
Token Sale Contract Исполнение продажи on-chain
Staking Contract Стейкинг платформенного токена для tier-системы
Distribution Contract Vesting и клейм токенов
Admin Dashboard Управление проектами, параметрами продаж

Как работает распределение аллокаций?

Существуют два основных подхода.

Guaranteed allocation

Каждый участник получает гарантированную аллокацию пропорционально тиру. Это простой и предсказуемый метод, но часть токенов может остаться непроданной.

contract GuaranteedSale {
    mapping(address => uint256) public maxAllocation;
    mapping(address => uint256) public purchased;

    function buy(uint256 amount) external payable {
        require(saleActive(), "Sale not active");
        require(purchased[msg.sender] + amount <= maxAllocation[msg.sender], "Exceeds allocation");

        uint256 cost = amount * price;
        require(msg.value >= cost, "Insufficient ETH");

        purchased[msg.sender] += amount;
        totalSold += amount;
        if (msg.value > cost) payable(msg.sender).transfer(msg.value - cost);
    }
}

Lottery с oversubscription

Более справедливый подход при большом спросе. Участники регистрируются, после чего случайный выбор победителей пропорционален их тиру. На практике лотерея с Chainlink VRF даёт в 3 раза меньше жалоб на несправедливость по сравнению с гарантированной аллокацией при переподписке. Это подтверждают данные крупных launchpad — Polkastarter и TrustPad перешли на лотерею именно по этой причине.

Почему Chainlink VRF обязателен?

Для честной лотереи on-chain необходима проверяемая случайность. blockhash или block.timestamp манипулируются валидаторами, поэтому используем Chainlink VRF — это стандарт безопасности для launchpad-платформ.

contract LotteryAllocation is VRFConsumerBaseV2Plus {
    mapping(uint256 => address[]) public tierParticipants;
    mapping(address => bool) public isWinner;
    uint256 public randomSeed;

    function register() external {
        require(registrationActive(), "Registration closed");
        StakeInfo memory info = staking.stakes(msg.sender);
        require(info.tier > 0, "No tier");
        tierParticipants[info.tier].push(msg.sender);
    }

    function requestRandomness() external onlyOwner {
        uint256 requestId = s_vrfCoordinator.requestRandomWords(
            VRFV2PlusClient.RandomWordsRequest({
                keyHash: keyHash,
                subId: subscriptionId,
                requestConfirmations: 3,
                callbackGasLimit: 500000,
                numWords: 1,
                extraArgs: VRFV2PlusClient._argsToBytes(
                    VRFV2PlusClient.ExtraArgsV1({nativePayment: false})
                )
            })
        );
    }

    function fulfillRandomWords(uint256, uint256[] calldata randomWords) internal override {
        randomSeed = randomWords[0];
        _selectWinners();
    }

    function _selectWinners() internal {
        uint256 seed = randomSeed;
        for (uint8 tier = 5; tier >= 1; tier--) {
            uint256 winnersForTier = tierWinners[tier];
            address[] storage participants = tierParticipants[tier];
            uint256 shuffleLen = participants.length;

            for (uint256 i = 0; i < winnersForTier && i < shuffleLen; i++) {
                uint256 j = i + (uint256(keccak256(abi.encodePacked(seed, tier, i))) % (shuffleLen - i));
                (participants[i], participants[j]) = (participants[j], participants[i]);
                isWinner[participants[i]] = true;
                seed = uint256(keccak256(abi.encodePacked(seed, i)));
            }
        }
    }
}

Как настроить tier-систему?

Большинство успешных платформ (Polkastarter, TrustPad) используют модель: чем больше пользователь застейкал платформенный токен, тем выше его приоритет в аллокации. Типичные tier-ы: 100 токенов — бронза, 1000 — серебро, 5000 — золото. Каждый tier даёт множитель аллокации: x1, x3, x10. Такая система увеличивает вовлеченность пользователей в 2 раза по сравнению с фиксированными аллокациями.

contract TierStaking {
    struct Tier {
        uint256 minStake;
        uint256 multiplier;
        uint256 poolWeight;
    }

    Tier[] public tiers;

    struct StakeInfo {
        uint256 amount;
        uint256 stakedAt;
        uint256 lockEnd;
        uint8   tier;
    }

    mapping(address => StakeInfo) public stakes;

    function stake(uint256 amount, uint256 lockDuration) external {
        require(lockDuration >= MIN_LOCK, "Lock too short");
        token.safeTransferFrom(msg.sender, address(this), amount);

        uint8 tier = calculateTier(amount);
        stakes[msg.sender] = StakeInfo({
            amount: amount,
            stakedAt: block.timestamp,
            lockEnd: block.timestamp + lockDuration,
            tier: tier
        });

        emit Staked(msg.sender, amount, tier);
    }

    function calculateTier(uint256 amount) public view returns (uint8) {
        for (uint8 i = uint8(tiers.length - 1); i >= 0; i--) {
            if (amount >= tiers[i].minStake) return i;
        }
        return 0;
    }
}

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

IEO-платформа работает с регуляторными требованиями. Используем SaaS-провайдеров: Fractal ID, Synaps или Sumsub. После верификации адрес добавляется в on-chain белый список. Также возможен подход с Soulbound токенами (EIP-5484), где KYC-статус представлен как non-transferable NFT. Обратитесь к нам для подбора оптимального решения KYC.

Escrow и распределение средств

Средства от продажи не должны поступать напрямую проекту — стандартная защита покупателей. Используем эскроу с milestones:

contract IEOEscrow {
    struct Milestone {
        string description;
        uint256 releasePercent;
        uint256 releaseTime;
        bool approved;
        uint256 approvalVotes;
        uint256 rejectionVotes;
    }

    Milestone[] public milestones;
    uint256 public totalRaised;
    address public project;

    function voteMilestone(uint256 milestoneId, bool approve) external {
        require(projectToken.balanceOf(msg.sender) > 0, "Must hold tokens");
    }

    function releaseFunds(uint256 milestoneId) external {
        Milestone storage ms = milestones[milestoneId];
        require(ms.approved, "Not approved");
        require(block.timestamp >= ms.releaseTime, "Too early");

        uint256 amount = (totalRaised * ms.releasePercent) / 100;
        payable(project).transfer(amount);
    }
}

Листинг и post-sale ликвидность

Часть привлечённых средств автоматически добавляется в DEX для обеспечения начальной ликвидности. LP-токены при этом блокируются на 180 дней.

function finalizeAndAddLiquidity() external onlyOwner {
    require(saleFinished(), "Sale not finished");

    uint256 liquidityETH = (totalRaised * liquidityPercent) / 100;
    uint256 liquidityTokens = calculateLiquidityTokens(liquidityETH);

    token.approve(address(uniswapRouter), liquidityTokens);
    uniswapRouter.addLiquidityETH{value: liquidityETH}(
        address(token),
        liquidityTokens,
        0,
        0,
        address(this),
        block.timestamp + 3600
    );

    lpLockEnd = block.timestamp + 180 days;
}

Типичные ошибки при разработке IEO-платформы

  1. Использование простого blockhash для лотереи — это позволяет валидаторам манипулировать результатом. Вместо этого применяйте проверяемую случайность (Chainlink VRF): лотерея с VRF в 3 раза эффективнее для предотвращения споров.
  2. Неправильная настройка vesting — если токены проектов можно вывести мгновенно, это увеличивает риск dump. Устанавливайте vesting с линейным распределением на 6-12 месяцев.
  3. Отсутствие эскроу — средства инвесторов уходят проекту напрямую, и при срыве условий их не вернуть. Эскроу с milestons обязателен.
  4. Недостаточное тестирование gas-оптимизации: неоптимизированные контракты могут стоить пользователям лишних средств (при крупной продаже комиссии могут превышать $50 000). Проводите тщательное тестирование и оптимизацию.

Что входит в работу

  • Аудит требований и составление ТЗ
  • Разработка смарт-контрактов стейкинга, продажи, эскроу
  • Backend API и admin panel
  • Интеграция KYC/AML
  • Фронтенд для пользователей
  • Аудит безопасности контрактов сторонними командами (стоимость такого аудита начинается от $30k)
  • Тестирование и развёртывание

Сроки разработки

Компонент Срок
Смарт-контракты (стейкинг, продажа, эскроу, дистрибуция) 6–8 недель
Backend API + admin panel 4–6 недель
KYC интеграция 1–2 недели
Frontend (пользовательский интерфейс) 4–6 недель
Аудит смарт-контрактов 3–4 недели
Тестирование + QA 2–3 недели

Полный цикл от ТЗ до запуска занимает 4–5 месяцев. Бюджет на аудит зависит от сложности и выбранной команды. Свяжитесь с нами для оценки вашего проекта. Получите консультацию по архитектуре.

Разработка токенов: 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 недель