Разработка дашборда статуса airdrop-eligibility
Мы разрабатываем дашборд, который не просто показывает «попал или нет», а даёт пользователю конкретные шаги для улучшения своего скора до снапшота. Это мощный retention-инструмент: пользователь видит, сколько баллов у него есть, какие действия он может ещё совершить, и как далеко до следующего тира. Технически — это агрегатор данных из нескольких on-chain источников с кэшированием, потому что реальный on-chain запрос для каждого адреса при каждом посещении убьёт любой RPC. Наш опыт — более пяти лет в Web3 и 30+ успешных проектов — гарантирует стабильность и масштабируемость решения. Получите консультацию, чтобы обсудить архитектуру под ваш протокол.
Дашборд не только отображает статус, но и предоставляет actionable рекомендации: «Вам не хватает двух голосований на Snapshot и $500 объёма для перехода в gold tier». Такая обратная связь повышает вовлечённость пользователей и увеличивает вероятность их дальнейшего участия в экосистеме. Мы закладываем гибкость: правила баллов и тиры настраиваются под токеномику любого проекта.
Как устроен дашборд статуса airdrop-eligibility?
Архитектура: источники данных
The Graph subgraph — основной источник для on-chain активности. Subgraph индексирует события контракта и предоставляет GraphQL API. Данные для дашборда:
query UserActivity($address: String!) { user(id: $address) { totalVolume transactionCount firstInteractionTimestamp liquidityProvisions { amount timestamp pool { id symbol } } referrals { count totalVolume } } } Запросы в The Graph — бесплатны до лимита, быстры (< 200ms), не нагружают RPC ноды.
Snapshot.org API используется для tracking governance participation. Мы получаем список голосов пользователя в определённом пространстве. Для on-chain balance checks используем viem multicall — батчит несколько вызовов в один RPC запрос:
import { createPublicClient, http } from 'viem' import { mainnet } from 'viem/chains' const client = createPublicClient({ chain: mainnet, transport: http() }) const results = await client.multicall({ contracts: [ { address: TOKEN_ADDRESS, abi: erc20Abi, functionName: 'balanceOf', args: [userAddress] }, { address: STAKING_ADDRESS, abi: stakingAbi, functionName: 'stakedAmount', args: [userAddress] }, { address: VESTING_ADDRESS, abi: vestingAbi, functionName: 'vestingInfo', args: [userAddress] }, ] }) Один HTTP запрос вместо трёх — критично при высоком трафике. Экономия до 66% на количестве RPC вызовов.
Система баллов и критерии
Eligibility обычно многофакторная. Типичная структура:
interface EligibilityScore { total: number breakdown: { volumeScore: number // 0-40 баллов: торговый объём loyaltyScore: number // 0-20 баллов: дата первого взаимодействия governanceScore: number // 0-20 баллов: голосования на Snapshot referralScore: number // 0-10 баллов: приведённые пользователи holdingScore: number // 0-10 баллов: удержание токенов } tier: 'bronze' | 'silver' | 'gold' | 'platinum' estimatedAllocation: bigint | null // null до объявления missingCriteria: string[] } missingCriteria — самая полезная часть для пользователя. «Вам не хватает двух голосований на Snapshot и $500 объёма для следующего тира» — это actionable информация. Как рассчитывается loyaltyScore?
LoyaltyScore зависит от даты первого взаимодействия с протоколом. Чем раньше пользователь начал, тем выше балл. Например, взаимодействие в первые 30 дней после запуска даёт максимальные 20 баллов, далее снижается линейно до нуля к 180 дню. Это стимулирует раннюю активность и вознаграждает долгосрочных участников.
Backend: кэширование и API
On-chain данные не меняются каждую секунду — кэшировать обязательно.
async function getUserEligibility(address: string): Promise<EligibilityScore> { const cacheKey = `eligibility:${address.toLowerCase()}` const cached = await redis.get(cacheKey) if (cached) return JSON.parse(cached) const [subgraphData, snapshotVotes, onchainBalances] = await Promise.all([ fetchSubgraphData(address), fetchSnapshotVotes(address), fetchOnchainBalances(address), ]) const score = calculateScore(subgraphData, snapshotVotes, onchainBalances) await redis.setex(cacheKey, 300, JSON.stringify(score)) return score } TTL 5 минут для большинства данных достаточно. Для данных снапшота после дедлайна — кэш навсегда. Это снижает нагрузку на RPC и ускоряет загрузку страницы.
Frontend: React дашборд
Дашборд строится на React с использованием wagmi и RainbowKit. Компонент EligibilityDashboard получает данные через React Query, кэширует на клиенте и отображает прогресс-бар тира, разбивку баллов и список недостающих критериев. Пользователь видит не только текущий статус, но и потенциальное распределение (estimatedAllocation), если аирдроп уже объявлен.
Merkle дистрибьюция и claim
После объявления аирдропа — claim интерфейс. Стандартная схема: контракт MerkleDistributor, proof генерируется на сервере:
import { StandardMerkleTree } from '@openzeppelin/merkle-tree' async function getMerkleProof(address: string): Promise<{ proof: string[], amount: bigint }> { const tree = await loadMerkleTree() const [index, [addr, amount]] = tree.entries().find(([, [a]]) => a.toLowerCase() === address.toLowerCase()) return { proof: tree.getProof(index), amount: BigInt(amount) } } На фронте кнопка Claim активируется если !isClaimed && proof !== null. После клейма — отображаем tx hash и обновляем статус через useWaitForTransactionReceipt. Контракты проходят аудит (Slither, Mythril, Echidna) и тестирование на reentrancy и flash loan атаки. Закажите разработку дашборда — мы гарантируем безопасность и производительность.
Почему стоит заказать разработку дашборда у нас?
Мы не просто копируем open-source решения. Каждый дашборд проектируется под конкретный протокол: учитываются уникальные метрики, интеграции с партнёрскими системами, особенности токеномики. Наш процесс работы включает:
| Этап | Длительность | Результат |
|---|---|---|
| Аналитика | 2-5 дней | Спецификация метрик, источников данных |
| Проектирование | 3-7 дней | Архитектура, макеты, API-документация |
| Разработка | 10-20 дней | Бэкенд, фронтенд, смарт-контракты (если нужны) |
| Тестирование | 3-5 дней | Юнит-тесты, интеграционные, нагрузочные |
| Деплой и поддержка | 2-3 дня | Запуск, мониторинг, SLA 99.9% |
Всего от трёх до шести недель в зависимости от сложности. Оценим ваш проект бесплатно — просто напишите.
Что входит в работу?
- Разработка backend API с кэшированием (Redis, Node.js/Python)
- Интеграция с The Graph, Snapshot, RPC (Ethereum, L2)
- Система баллов и тиров с кастомными правилами
- Frontend-дашборд (React, Next.js, wagmi, RainbowKit)
- Merkle-дистрибьюция и интерфейс claim
- Документация и обучение команды
- Поддержка после запуска
Свяжитесь с нами, чтобы обсудить ваш проект. В 80% случаев мы предлагаем решение дешевле и быстрее, чем найм отдельной команды. Получите консультацию — и мы подберём оптимальную архитектуру под ваш бюджет.







