Разработка системы листинга токенов
Система листинга токенов — это процесс и инфраструктура добавления новых торговых активов на биржу. Включает форму заявки, due diligence проверки, технические интеграции (новый deposit/withdrawal channel), configuring торговых пар, и наконец публичный анонс. Каждый этап требует как технической, так и операционной работы.
Процесс листинга
Этапы от заявки до торгов
1. Submission (1-2 дня)
└── Команда проекта заполняет листинг форму
└── Загружает документацию
2. Initial Review (3-7 дней)
└── Проверка комплектности документов
└── Basic AML screening контрактов/кошельков
3. Due Diligence (7-21 день)
└── Technical audit контракта
└── Team verification
└── Legal/compliance check
└── Market analysis
4. Commercial Terms (2-5 дней)
└── Listing fee (или нет)
└── Market making обязательства команды
└── Lock-up условия для team tokens
5. Technical Integration (3-10 дней)
└── Настройка deposit/withdrawal
└── Конфигурация торговой пары
└── Тестирование в staging
6. Soft Launch (1-2 дня)
└── Открытие депозитов
└── Pre-market ценообразование (опционально)
7. Trading Start
└── Открытие торгов
└── Публичный анонс
Листинг форма
class ListingApplication(BaseModel):
# Основная информация
project_name: str
token_symbol: str
token_name: str
website: str
whitepaper_url: str
# Контракт
blockchain: str # 'ethereum', 'bsc', 'solana', etc.
contract_address: str
token_standard: str # 'ERC-20', 'BEP-20', 'SPL'
decimals: int
total_supply: int
circulating_supply: int
# Рыночные данные
current_price_usd: float
market_cap_usd: float
volume_24h_usd: float
current_exchanges: list[str] # Где уже торгуется
# Команда
team_members: list[TeamMember]
github_url: str
audit_reports: list[str] # URLs к аудитам
# Запрашиваемые торговые пары
requested_pairs: list[str] # ['TOKEN/USDT', 'TOKEN/BTC']
# Дополнительно
short_description: str
use_case: str
roadmap: str
token_unlock_schedule: dict # когда размораживаются токены команды
Due Diligence checks
Smart Contract проверки
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'
)
Token distribution анализ
Концентрация токенов у немногих кошельков — признак возможного rug pull:
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)
# Исключаем известные адреса (биржи, DEX пулы, burn адреса)
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)
}
Техническая интеграция нового актива
Blockchain node / API интеграция
Для каждого нового блокчейна нужна интеграция с нодой или 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 |
class NewTokenIntegration:
async def setup_erc20_token(self, token_config: TokenConfig):
# Добавляем ABI и адрес контракта
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")
Admin панель листинга
Интерфейс для биржи включает:
- Список заявок со статусами и прогрессом
- Checklist due diligence (каждый пункт с ответственным и статусом)
- Управление торговыми парами: включить/выключить, установить fee tier
- Pre-launch конфигурация: min/max ордер, price band на первые часы
- Анонс планировщик: дата/время публикации, текст для всех каналов
Price band на первые часы торгов критичен: без ограничений возможны экстремальные манипуляции при низкой ликвидности на старте. Стандарт: ±50% от открытия в первые 5 минут, затем расширяется.
Хорошо выстроенный процесс листинга — это репутация биржи. Листинг некачественных проектов приводит к rug pull → пострадавшие пользователи → регуляторное внимание.







