Разработка дашборда статуса airdrop-eligibility под ключ

Разработка дашборда статуса airdrop-eligibility Мы разрабатываем дашборд, который не просто показывает «попал или нет», а даёт пользователю конкретные шаги для улучшения своего скора до снапшота. Это мощный retention-инструмент: пользователь видит, сколько баллов у него есть, какие действия он мо

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

Часто задаваемые вопросы

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

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

Разработка дашборда статуса 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% случаев мы предлагаем решение дешевле и быстрее, чем найм отдельной команды. Получите консультацию — и мы подберём оптимальную архитектуру под ваш бюджет.