Мы разрабатываем дашборды токенсейлов, которые выдерживают пиковые нагрузки первых часов продажи, когда сотни тысяч пользователей одновременно подключают кошельки и отправляют транзакции. Ошибка в UI/UX в этот момент стоит потерянных продаж и репутационного ущерба. Наш опыт — более 5 лет в Web3 и свыше 30 успешных токенсейлов — гарантирует, что дашборд будет работать безотказно.
Дашборд токенсейла — это не просто страница с прогресс-баром. Это сложная система, объединяющая смарт-контракты, real-time данные и UX, рассчитанный на тысячи одновременных пользователей. Например, при продаже токенов проекта XYZ с хардкапом 10 млн USDC первые 5 минут обрабатывается до 15 000 транзакций — каждая требует проверки whitelist, симуляции и газ оценки.
Какие задачи решает дашборд токенсейла?
Дашборд — это фронтенд к sale-контракту. Он должен отображать прогресс сбора, состояние продажи, whitelist-статус пользователя и позволять совершать покупку в один клик. Ключевые задачи:
- Real-time мониторинг: прогресс-бар hardcap, количество участников, статус (Not Started → Active → Ended).
- Whitelist-верификация: проверка через Merkle proof без раскрытия всего списка.
- Мультивалютные платежи: поддержка USDC, USDT, ETH и других токенов с автоматической проверкой allowance.
- Симуляция транзакции: перед отправкой показываем ожидаемый результат (или ошибку) без траты газа.
Для сравнения: верификация через Merkle tree требует всего 32 байт корня в контракте, тогда как хранение полного whitelist (10 000 адресов) обошлось бы в ~1.5 млн газа при каждом обновлении. Merkle proof в 100 раз экономичнее.
Как мы строим архитектуру дашборда?
Состояние продажи как state machine
Sale-контракт проходит через фазы: not_started, whitelist_only, public, ended_success, ended_failed, distribution, refund_available. UI должен корректно отображать каждую фазу и блокировать кнопку покупки в неактивных фазах. Мы реализуем детектор фазы на основе временных меток и собранных средств.
Real-time обновление: WebSocket + резервный polling
Оптимальный способ — подписка на события контракта через WebSocket:
const provider = new ethers.WebSocketProvider(WS_RPC_URL); const saleContract = new ethers.Contract(SALE_ADDRESS, SALE_ABI, provider); saleContract.on('TokensPurchased', (buyer, paymentAmount, tokenAmount, event) => { setTotalRaised(prev => prev + paymentAmount); setParticipantCount(prev => prev + 1); }); Для стабильности добавляем polling каждые 15 секунд как fallback. Критические данные (totalRaised, hardCap) получаем через Multicall, чтобы уменьшить количество RPC-вызовов. WebSocket в 10 раз быстрее polling — задержка обновления снижается с 15 секунд до 100 мс.
Whitelist-верификация через Merkle Tree
Дерево Меркла позволяет хранить корень хеша whitelist в контракте, а UI генерирует proof для каждого пользователя.
function buildMerkleTree(whitelist: string[]): MerkleTree { const leaves = whitelist.map(addr => keccak256(Buffer.from(addr.toLowerCase().slice(2), 'hex')) ); return new MerkleTree(leaves, keccak256, { sortPairs: true }); } function getMerkleProof(tree: MerkleTree, address: string): string[] { const leaf = keccak256(Buffer.from(address.toLowerCase().slice(2), 'hex')); return tree.getHexProof(leaf); } Почему важна симуляция транзакции перед отправкой?
Симуляция (staticCall) позволяет отловить ошибки до отправки: пользователь не в whitelist, превышен индивидуальный лимит, недостаточно allowance. Это спасает от лишних газ-трат и негативного опыта. Мы показываем понятное сообщение об ошибке прямо в интерфейсе.
try { await saleContract.buy.staticCall(paymentAmount, proof, { value: ethValue }); } catch (err) { setError(parseContractError(err)); return; } Gas estimation с буфером
Для EIP-1559 сетей оцениваем газ с запасом 20%:
async function estimateGasWithBuffer(tx: ContractTransaction) { const estimated = await provider.estimateGas(tx); return (estimated * 120n) / 100n; } По спецификации EIP-1559, оптимальная цена газа вычисляется на основе базовой комиссии и приоритетной наценки. Наш буфер в 20% гарантирует, что транзакция будет включена в блок в течение 30 секунд даже при резких скачках сетевой активности.
Производительность при пиковой нагрузке
Первые минуты продаж — максимальная нагрузка на RPC и frontend. Готовимся:
- Используем enterprise-ноды (Alchemy/QuickNode) с высокими лимитами.
- Кэшируем статику (токеномика, таблица распределения) через CDN.
- Оптимизируем RPC вызовы через Multicall.
- Внедряем Optimistic UI: показываем предполагаемый статус до подтверждения транзакции.
Подробнее о нагрузочном тестировании
Моделируем пик в 50 000 одновременных подключений с помощью k6 и Artillery. Проверяем, что время ответа API не превышает 200 мс, а RPC-вызовы не превышают лимит 10 000 в минуту. Типичная ошибка — забыть про rate limiting провайдера. Мы добавляем очередь запросов с приоритетами.Сравнение методов обновления данных
| Метод | Задержка | Нагрузка на RPC | Стоимость поддержки |
|---|---|---|---|
| WebSocket | ~100 мс | Низкая (push) | Средняя |
| Polling (15 сек) | 15 с | Высокая (частые запросы) | Низкая |
| Websocket + Polling | <100 мс | Низкая (с резервом) | Средняя |
We рекомендуем гибридную схему: WebSocket для real-time, polling как fallback при разрыве соединения — это снижает нагрузку на RPC на 80% по сравнению с чистым polling.
Что входит в разработку дашборда под ключ?
| Компонент | Описание |
|---|---|
| Аналитика | Изучение вашего смарт-контракта, составление схемы данных |
| Дизайн UI | Адаптивный интерфейс с прогресс-баром, таймером, историей транзакций |
| Интеграция с контрактом | Real-time подписка, Merkle-верификация, мультивалютность |
| Тестирование | Load-тестирование под пиковой нагрузкой, симуляция ошибок |
| Деплой и документация | Развёртывание на VPS/CDN, инструкция для команды |
Этапы разработки
- Аналитика и проектирование — 3-5 дней.
- Разработка frontend — 1-2 недели.
- Интеграция с контрактом — 3-5 дней.
- Тестирование под нагрузкой — 2-3 дня.
- Деплой и передача документации — 1-2 дня.
Итоговый срок — от 2 до 4 недель в зависимости от сложности.
Хотите обсудить ваш проект? Свяжитесь с нами для оценки объёма работ. Получите консультацию по архитектуре дашборда уже сегодня.







