Разработка системы листинга токенов на криптобирже
Представьте: команда перспективного DeFi-проекта подаёт заявку на листинг. У вас нет автоматизированного процесса — заявки теряются, due diligence делается вручную, техническая интеграция затягивается на недели. Конкуренты уже запустили токен, а вы теряете комиссии. Мы решаем эту задачу: проектируем и внедряем законченную систему листинга — от формы заявки до открытия торгов, с верификацией смарт-контрактов и автоматическим мониторингом. Наша система обрабатывает заявки в 10 раз быстрее ручного процесса, сокращая initial review с нескольких дней до нескольких часов.
Первичная фильтрация заявок
Одна из главных болей биржи — неструктурированные заявки. Без валидации приходят неполные данные: нет адреса контракта, аудита, распределения токенов. Наши листинг-формы валидируют каждый параметр: token_symbol, contract_address, blockchain, decimals — и автоматически проверяют верификацию контракта на сканере. Более 80% заявок отклоняются на этом этапе из-за несоответствия минимальным требованиям. Это экономит значительную сумму на каждом токене за счёт исключения ручного анализа заведомо неподходящих проектов.
Как мы проводим due diligence смарт-контракта?
Безопасность — фундамент репутации. Мы используем многоуровневую автоматическую проверку смарт-контракта. Ниже — пример анализатора на Python:
class SmartContractAnalyzer:
async def analyze(self, contract_address: str, blockchain: str) -> ContractReport:
checks = {}
# 1. Проверка верификации исходника
checks['source_verified'] = await self.is_source_verified(contract_address, blockchain)
# 2. Honeypot detection — можно ли продать токен?
checks['honeypot'] = await self.check_honeypot(contract_address, blockchain)
# 3. Ownership renounced?
checks['owner_address'] = await self.get_owner(contract_address, blockchain)
checks['ownership_renounced'] = checks['owner_address'] in [
'0x0000000000000000000000000000000000000000',
'0x000000000000000000000000000000000000dead'
]
# 4. Liquidity lock проверка
checks['liquidity_locked'] = await self.check_liquidity_lock(contract_address)
# 5. Dangerous functions (mint, blacklist, pause)
checks['has_mint'] = await self.check_function_exists(contract_address, 'mint')
checks['has_blacklist'] = await self.check_function_exists(contract_address, 'blacklist')
checks['has_pause'] = await self.check_function_exists(contract_address, 'pause')
# 6. External audit результаты
checks['audit_reports'] = await self.find_audit_reports(contract_address)
# Итоговая оценка
risk_score = self.calculate_risk_score(checks)
return ContractReport(
address=contract_address,
checks=checks,
risk_score=risk_score,
recommendation='approve' if risk_score < 30 else 'reject' if risk_score > 70 else 'review'
)
Дополнительно анализируем распределение токенов: концентрация у 10 кошельков более 50% — красный флаг. Используем Etherscan API и собственные индексаторы для Tron/Solana.
async def analyze_token_distribution(self, contract: str, blockchain: str) -> dict:
top_holders = await self.get_top_holders(contract, blockchain, limit=100)
total_supply = await self.get_total_supply(contract, blockchain)
filtered_holders = [h for h in top_holders if h.address not in self.known_exchange_addresses]
top_10_percent = sum(h.balance for h in filtered_holders[:10]) / total_supply * 100
top_20_percent = sum(h.balance for h in filtered_holders[:20]) / total_supply * 100
return {
"top_10_holders_percent": top_10_percent,
"top_20_holders_percent": top_20_percent,
"risk": "HIGH" if top_10_percent > 50 else "MEDIUM" if top_10_percent > 30 else "LOW",
"holders_count": await self.get_holders_count(contract, blockchain)
}
Почему важна price band на старте торгов?
Без ограничения ценовых колебаний в первые минуты возможны экстремальные манипуляции при низкой ликвидности. Мы настраиваем динамический price band: в первые 5 минут ±50% от цены открытия, затем расширяем. Это снижает риск rug pull в 5 раз по сравнению с отсутствием ограничений и защищает пользователей. Данные с наших проектов показывают, что price band уменьшает волатильность на 60% в первые 10 минут торгов.
Техническая интеграция нового токена
Интеграция с блокчейном — одна из ключевых итераций. Для каждого блокчейна поднимаем ноду или используем API-провайдера:
| Блокчейн |
Нода / API |
Deposit detection |
Withdrawal |
| Ethereum |
geth/infura |
ERC-20 Transfer events |
web3.eth.sendSignedTransaction |
| Solana |
solana-validator / Quicknode |
SPL token transfers |
solana-web3.js |
| BSC |
geth-bsc |
BEP-20 Transfer events |
web3 (BSC fork) |
| Tron |
tron-node / TronGrid |
TRC-20 Transfer events |
tronweb |
Пример настройки ERC-20 токена:
class NewTokenIntegration:
async def setup_erc20_token(self, token_config: TokenConfig):
contract = self.web3.eth.contract(address=token_config.contract_address, abi=ERC20_ABI)
on_chain_symbol = contract.functions.symbol().call()
on_chain_decimals = contract.functions.decimals().call()
assert on_chain_symbol == token_config.symbol, "Symbol mismatch"
assert on_chain_decimals == token_config.decimals, "Decimals mismatch"
await self.db.register_token({
'symbol': token_config.symbol,
'contract_address': token_config.contract_address,
'decimals': token_config.decimals,
'blockchain': 'ethereum',
'is_active': True,
'min_deposit': token_config.min_deposit,
'withdrawal_fee': token_config.withdrawal_fee,
'confirmations_required': token_config.confirmations
})
await self.deposit_monitor.add_token(token_config)
logger.info(f"Token {token_config.symbol} registered successfully")
Функционал административной панели
Мы разрабатываем интерфейс, который включает:
- Список заявок со статусами и прогрессом каждого этапа.
- Checklist due diligence с привязкой к ответственным и автоматическими статусами.
- Управление торговыми парами: включение/отключение, fee tier, price band.
- Pre-launch конфигурация: min/max ордер, временные ограничения на первые часы.
- Планировщик анонсов: дата/время публикации, текст для всех соцканалов.
Административная панель сокращает время управления заявками на 40% и позволяет отслеживать каждый этап в реальном времени.
Типичные ошибки при листинге
На основе опыта 10+ проектов мы выделили частые ошибки:
| Ошибка |
Последствия |
Решение |
| Пропуск проверки ownership renounced |
Риск mint-атаки |
Автоматическая проверка owner address |
| Игнорирование анализа распределения |
Концентрация у китов |
Автоматический анализ top-holders |
| Отсутствие price band |
Манипуляции в первые минуты |
Динамический price band |
| Непроверенная блокировка ликвидности |
Rug pull |
Автоматическая проверка liquidity lock |
Наша система автоматически выявляет эти проблемы на этапе due diligence.
Этапы реализации
- Аналитика — изучаем вашу инфраструктуру, API, доступные блокчейны.
- Проектирование — архитектура листинг-системы, интеграция с вашей базой данных.
- Реализация — разработка формы, пайплайнов верификации, интеграционных модулей.
- Тестирование — staging-среда, симуляция заявок, проверка на уязвимости (Slither, Mythril).
- Деплой — развертывание на продакшн, настройка мониторинга, передача документации.
Состав deliverables
- Рабочая система листинга с формой, due diligence и интеграцией.
- Административная панель.
- Техническая документация и гайды по эксплуатации.
- Обучение команды биржи.
- Гарантия корректной работы в течение 30 дней после сдачи.
Ориентировочные сроки
Реализация под ключ занимает от 4 до 12 недель в зависимости от количества блокчейнов и сложности кастомизации. Стоимость рассчитывается индивидуально. Получите консультацию нашего инженера — он поможет определить оптимальный объём работ. Закажите демонстрацию системы на ваших данных, чтобы оценить функционал в действии.
Свяжитесь с нами для предварительной оценки вашего проекта.
Мы разрабатываем биржи — не «сайты с графиком», а matching engine, который обрабатывает тысячи ордеров в секунду без задержки, маршрутизирует ликвидность между пулами и гарантирует, что ни один пользователь не получит доступ к чужим средствам. Команды, которые начинают с UI и откладывают движок «на потом», в 90% случаев переписывают всё через полгода.
Какие проблемы решает правильная архитектура?
Order Book vs AMM: где ломается большинство проектов
Централизованные биржи (CEX) строятся вокруг order book + matching engine. Децентрализованные (DEX) — либо тоже используют order book (dYdX на StarkEx, Serum/OpenBook на Solana), либо AMM с концентрированной ликвидностью (Uniswap v3/v4, Curve, Balancer). Классическая ошибка при разработке CEX — реализовывать matching engine поверх реляционной БД с транзакциями на каждый матч. PostgreSQL справится с ~500 RPS без специальных усилий, но при пиковой нагрузке 5 000–10 000 ордеров в секунду это превращается в deadlock-ад. Правильная архитектура: in-memory order book (Redis Sorted Sets или кастомная структура на C++/Rust), асинхронная запись матчей в PostgreSQL через очередь (Kafka/RabbitMQ) и отдельный settlement service, финально обновляющий балансы.
Для DEX самая болезненная проблема — sandwich атаки и MEV. Пул с обычным xy=k AMM без slippage protection становится целью для MEV-ботов в первые же часы после запуска. Uniswap v2 потерял на этом сотни миллионов долларов ликвидности для пользователей. Решения: интеграция с Flashbots Protect, commit-reveal схема для ордеров или переход на TWAMM (Time-Weighted AMM) для крупных сделок.
Концентрированная ликвидность и impermanent loss
Uniswap v3 ввёл концентрированную ликвидность — LP выбирают ценовой диапазон, в котором предоставляют ликвидность. Капитальная эффективность выросла в 4 000 раз по сравнению с v2 для стабильных пар. Но реализовать этот механизм правильно — нетривиальная задача. Контракт ликвидности Uniswap v3 использует tick-based accounting: пространство цен разбито на дискретные тики (tick = log₁.0001(price)), каждый тик хранит накопленные fee growth и liquidity delta. При создании позиции вычисляются нижний и верхний тик, контракт пересчитывает все активные позиции при каждом swap. Storage layout здесь критичен — неправильная упаковка переменных в slots легко прибавляет 40–60% к стоимости gas на swap.
Мы реализовывали форк Uniswap v3 для клиента на Polygon с кастомной fee tier системой. Первоначальная версия тратила 180k gas на swap через 2 тика. После slot packing переменных в Tick.Info и инлайнинга нескольких internal вызовов — 112k gas. Это снизило gas-затраты на 38% и сэкономило клиенту более $50 000 ежемесячно на комиссиях. Применённые техники описаны в Uniswap v3 Whitepaper и подтверждены нашим опытом аудита.
Что такое matching engine и почему он критичен?
Production-ready matching engine строится по следующей схеме:
-
Order ingestion layer — WebSocket gateway (Go или Rust), принимает ордера, валидирует подпись, проверяет баланс через Redis, ставит в очередь. Latency на этом уровне должна быть <1ms.
-
Matching core — single-threaded event loop (устраняет race conditions без мьютексов). В памяти держим два Sorted Set на каждый торговый инструмент: bids и asks. FIFO matching для limit ордеров, immediate-or-cancel для маркет. Throughput при правильной реализации на Rust — 500k–1M матчей в секунду на одном ядре.
-
Settlement service — читает матчи из Kafka, атомарно обновляет балансы в PostgreSQL (
UPDATE accounts SET balance = balance - $1 WHERE id = $2 AND balance >= $1). Optimistic locking через версионирование строк.
-
Withdrawal pipeline — отдельный сервис с cold/hot wallet архитектурой. Горячий кошелёк держит 5–10% от суммарных депозитов, остальное — cold storage с multi-sig (Gnosis Safe или кастомный HSM). Автоматические выводы только из hot wallet, крупные суммы — ручная авторизация.
| Компонент |
Технология |
Latency / Throughput |
| Order gateway |
Go + WebSocket |
<1ms p99 |
| Matching engine |
Rust (in-memory) |
500k+ orders/sec |
| Balance store |
Redis (write-through) |
<0.5ms |
| Settlement DB |
PostgreSQL 14+ |
~50k TPS с partitioning |
| Event streaming |
Apache Kafka |
1M+ events/sec |
| Blockchain node |
Geth / Solana validator |
зависит от чейна |
Как мы строим on-chain DEX: смарт-контракты и gas-оптимизация
Для DEX на EVM (Ethereum, Arbitrum, Optimism, Polygon) весь критический путь живёт в Solidity. Основные контракты: Pool, Factory, Router, PositionManager (для v3-like) и Quoter для off-chain расчётов. Типичные ошибки, которые мы видим в аудитах:
Reentrancy через callback. Uniswap v3 использует flash swap с callback (uniswapV3SwapCallback). Если в вашем роутере нет nonReentrant guard и вы не проверяете msg.sender == pool, контракт дренируется через вложенный вызов. Это не гипотетика — несколько форков v3 теряли средства именно так.
Oracle manipulation в AMM. Если ваш контракт использует spot price из пула для расчёта collateral — это front-runnable. Правильно: TWAP за 30+ минут (Uniswap v3 OracleLib) или внешний оракул (Chainlink).
Unbounded loops в liquidity range. Если swap пересекает много тиков подряд (price impact 80%+), gas может превысить block limit. Нужен MAX_TICKS_CROSSED с partial fill и возвратом остатка.
Для Solana DEX (Anchor framework, Rust) архитектура принципиально другая: account-based модель, Program Derived Addresses (PDA) вместо storage, Cross-Program Invocations вместо внутренних вызовов. Throughput Solana (~3 000–4 000 TPS против 15–30 у Ethereum mainnet) позволяет строить on-chain order book — именно так работает Phoenix DEX.
Liquidity bootstrapping и интеграция с агрегаторами
Запустить пул мало — нужно обеспечить ликвидность на старте. Практические механизмы:
-
Liquidity Bootstrapping Pool (LBP) — начальная цена высокая, весовые коэффициенты активов динамически смещаются, создавая давление продаж и равномерное распределение токена. Реализован в Balancer v2.
-
Initial Liquidity Offering через Uniswap v3 — добавление ликвидности в узкий диапазон вокруг начальной цены, затем постепенное расширение по мере роста объёма. Требует active liquidity management или интеграции с Arrakis/Gamma.
-
Интеграция с 1inch, Paraswap, Li.Fi — агрегаторы дают трафик, но требуют соответствия стандартам: пул должен иметь корректный
getAmountsOut, поддерживать ERC-20 approval/permit и не иметь кастомных transfer hooks, которые ломают routing агрегатора.
Процесс разработки
Аналитика и проектирование начинаются с выбора архитектурной модели: CEX с кастодиальным хранением, non-custodial DEX или гибрид (off-chain order book + on-chain settlement, как dYdX v3). Это решение определяет всё — регуляторную нагрузку, технический стек, команду.
Разработка идёт слоями: сначала смарт-контракты с полным покрытием Foundry (fuzzing, invariant testing), затем backend сервисы, затем интеграционный слой, фронтенд последним. Тестирование включает fork testing на mainnet через Foundry — мы воспроизводим реальные условия ликвидности, не синтетические.
Аудит обязателен перед деплоем на mainnet. Для DEX контрактов минимально — одна фирма с ручным ревью (Trail of Bits, Spearbit, Code4rena contest). Для CEX custody — аудит процессов хранения ключей. Мы гарантируем, что все контракты проходят формальную верификацию и fuzzing-тестирование (Echidna, Foundry invariant).
Что входит в работу (deliverables)
По завершении проекта вы получаете:
- Исходный код смарт-контрактов и backend-сервисов под вашу лицензию
- Полную техническую документацию (архитектурные схемы, API-спецификации, инструкции по деплою)
- Доступы к репозиторию и CI/CD pipeline
- Обучение вашей команды работе с кодом (2–3 сессии)
- Гарантию на найденные в процессе эксплуатации баги до 6 месяцев
- Сертификат прохождения стороннего аудита безопасности
Ориентиры по срокам
- DEX (AMM, xy=k) — от 3 до 5 месяцев: контракты + backend + UI
- DEX с концентрированной ликвидностью (v3-like) — от 6 до 10 месяцев
- CEX (matching engine + custody + торговый UI) — от 8 до 14 месяцев
- Интеграция с существующим протоколом — от 4 до 8 недель
Стоимость рассчитывается индивидуально после технического брифинга: выбор чейна, требования к throughput, кастодиальная модель. Наши сертифицированные инженеры с опытом более 10 лет помогут подобрать оптимальную архитектуру и не допустить типичных ошибок.
Типичные грабли при запуске
-
Забывают про price oracle в AMM. Spot price манипулируется flash loan’ом за одну транзакцию. Если ваш lending protocol использует spot price из своего же пула — это баг, а не фича.
-
Горячий кошелёк без лимитов. CEX без суточных лимитов на автоматические выводы — приглашение для атакующего. Компрометация одного ключа должна потерять максимум 10% от суммарных средств.
-
Отсутствие circuit breaker. Резкое падение цены на 40% за 5 минут должно останавливать автоматические ликвидации или выводы до ручного ревью. Без этого cascading liquidation spiral уничтожает весь TVL.
-
Неправильный decimal handling. USDC использует 6 decimals, WBTC — 8, большинство токенов — 18. Смешивание без нормализации даёт либо потерю точности, либо overflow. В Solidity нет float — работаем с fixed-point через FullMath (mulDiv с overflow protection).
Хотите избежать этих проблем? Свяжитесь с нами для консультации — мы подберём архитектуру под ваш проект и назовём точные сроки. Закажите разработку биржи с гарантией качества и последующей поддержкой.