Airdrops & Rewards
Complete airdrop lifecycle management from eligibility checking to reward distribution and vesting.
The Airdrops & Rewards category provides comprehensive tools for managing the entire airdrop and reward ecosystem. From checking eligibility across multiple protocols to claiming rewards and tracking vesting schedules.
Components Overview
- AirdropChecker - Multi-protocol eligibility verification and tracking
- ClaimInterface - Streamlined token claiming with gas optimization
- RewardTracker - Comprehensive reward accumulation and history
- ReferralSystem - Built-in referral tracking and affiliate management
- VestingSchedule - Token vesting and unlock timeline management
- DistributionTracker - Airdrop distribution analytics and monitoring
Key Features
- Multi-Protocol Support: Check 50+ protocols including Uniswap, Arbitrum, Optimism, and more
- Real-time Tracking: Live eligibility updates and reward accumulation
- Gas Optimization: Batch claiming and optimal timing recommendations
- Vesting Management: Complete vesting schedule tracking and notifications
- Referral Systems: Built-in affiliate and referral reward tracking
- Analytics Dashboard: Distribution metrics and claiming statistics
Quick Start
Set up a complete airdrop and rewards dashboard:
Airdrop Eligibility Checker
Check your wallet across multiple protocols for claimable airdrops
Connect Your Wallet
Automatically check eligibility for your connected address
<template>
<div class="space-y-6">
<!-- Airdrop Overview -->
<AirdropChecker
:wallet-address="userAddress"
:protocols="supportedProtocols"
@eligibility-found="handleEligibilityFound"
@check-complete="handleCheckComplete"
/>
<!-- Claimable Rewards -->
<ClaimInterface
v-if="claimableRewards.length"
:rewards="claimableRewards"
:gas-price="gasPrice"
@claim="handleClaim"
@batch-claim="handleBatchClaim"
/>
<!-- Reward History -->
<div class="grid grid-cols-1 lg:grid-cols-2 gap-6">
<RewardTracker
:rewards="allRewards"
:total-claimed="totalClaimed"
:pending-rewards="pendingRewards"
/>
<VestingSchedule
:vesting-positions="vestingTokens"
:upcoming-unlocks="upcomingUnlocks"
@claim-vested="handleClaimVested"
/>
</div>
<!-- Referral System -->
<ReferralSystem
v-if="referralEnabled"
:user-code="userReferralCode"
:referral-stats="referralStats"
@generate-link="handleGenerateLink"
/>
</div>
</template>
<script setup>
const userAddress = ref('0x742d35Cc6635C0532925a3b8f39ddc87')
const supportedProtocols = ref([
'uniswap', 'arbitrum', 'optimism', 'polygon', 'apecoin'
])
const claimableRewards = ref([])
const allRewards = ref([])
const vestingTokens = ref([])
const referralEnabled = ref(true)
const handleEligibilityFound = (eligibility) => {
console.log('Found eligibility:', eligibility)
claimableRewards.value.push(eligibility)
}
const handleClaim = async (reward) => {
console.log('Claiming reward:', reward)
// Handle individual claim transaction
}
const handleBatchClaim = async (rewards) => {
console.log('Batch claiming:', rewards)
// Handle batch claim transaction
}
const handleClaimVested = async (vesting) => {
console.log('Claiming vested tokens:', vesting)
// Handle vested token claim
}
</script>
Common Patterns
Eligibility Dashboard
<AirdropChecker
:wallet-address="userWallet"
:check-history="true"
:auto-refresh="60000"
show-potential-eligibility
/>
Batch Claiming
<ClaimInterface
:rewards="claimableTokens"
enable-batch-claiming
:max-batch-size="10"
gas-optimization
/>
Vesting Overview
<VestingSchedule
:positions="vestingPositions"
show-timeline
:notification-settings="vestingNotifications"
/>
Advanced Features
Multi-Protocol Eligibility Checking
Airdrop Eligibility Checker
Check your wallet across multiple protocols for claimable airdrops
Connect Your Wallet
Automatically check eligibility for your connected address
<template>
<div class="space-y-4">
<!-- Protocol Selection -->
<div class="flex flex-wrap gap-2 mb-4">
<UButton
v-for="protocol in availableProtocols"
:key="protocol.id"
:variant="selectedProtocols.includes(protocol.id) ? 'solid' : 'outline'"
size="xs"
@click="toggleProtocol(protocol.id)"
>
<img :src="protocol.logo" class="w-4 h-4 mr-1" />
{{ protocol.name }}
</UButton>
</div>
<!-- Eligibility Results -->
<AirdropChecker
:protocols="selectedProtocols"
:wallet-address="checkAddress"
:deep-scan="true"
@scan-progress="handleScanProgress"
/>
<!-- Results Summary -->
<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
<div class="bg-green-50 dark:bg-green-900/20 p-4 rounded-lg">
<h3 class="font-semibold text-green-700 dark:text-green-300">Eligible</h3>
<p class="text-2xl font-bold text-green-600">{{ eligibleCount }}</p>
</div>
<div class="bg-yellow-50 dark:bg-yellow-900/20 p-4 rounded-lg">
<h3 class="font-semibold text-yellow-700 dark:text-yellow-300">Pending</h3>
<p class="text-2xl font-bold text-yellow-600">{{ pendingCount }}</p>
</div>
<div class="bg-blue-50 dark:bg-blue-900/20 p-4 rounded-lg">
<h3 class="font-semibold text-blue-700 dark:text-blue-300">Total Value</h3>
<p class="text-2xl font-bold text-blue-600">${{ totalValue }}</p>
</div>
</div>
</div>
</template>
<script setup>
const selectedProtocols = ref(['uniswap', 'arbitrum', 'optimism'])
const availableProtocols = ref([
{ id: 'uniswap', name: 'Uniswap', logo: '/protocols/uniswap.png' },
{ id: 'arbitrum', name: 'Arbitrum', logo: '/protocols/arbitrum.png' },
// ... more protocols
])
const eligibleCount = ref(3)
const pendingCount = ref(2)
const totalValue = ref(4250.00)
const toggleProtocol = (protocolId) => {
const index = selectedProtocols.value.indexOf(protocolId)
if (index > -1) {
selectedProtocols.value.splice(index, 1)
} else {
selectedProtocols.value.push(protocolId)
}
}
</script>
Gas-Optimized Claiming
Claimable Airdrops
Check and claim your eligible airdrops
Not Eligible
No Airdrops Available
Connect your wallet to check for eligible airdrops.
<template>
<ClaimInterface
:rewards="claimableRewards"
:gas-price="currentGasPrice"
:gas-recommendations="gasRecommendations"
@claim-optimized="handleOptimizedClaim"
>
<template #gas-optimizer>
<div class="bg-blue-50 dark:bg-blue-900/20 p-4 rounded-lg mb-4">
<h4 class="font-semibold mb-2">Gas Optimization</h4>
<div class="space-y-2 text-sm">
<div class="flex justify-between">
<span>Current Gas Price:</span>
<span class="font-mono">{{ currentGasPrice }} gwei</span>
</div>
<div class="flex justify-between">
<span>Recommended Time:</span>
<span class="text-green-600">{{ bestTime }}</span>
</div>
<div class="flex justify-between">
<span>Potential Savings:</span>
<span class="text-green-600">${{ gasSavings }}</span>
</div>
</div>
</div>
</template>
</ClaimInterface>
</template>
<script setup>
const currentGasPrice = ref(25)
const bestTime = ref('Off-peak hours (2-6 AM UTC)')
const gasSavings = ref(12.50)
const handleOptimizedClaim = async (claimData) => {
// Execute optimized claim with best timing
}
</script>
Vesting Timeline Visualization
Airdrop History
Track your claimed airdrops and their value over time
No Airdrop History
Your claimed airdrops will appear here once you start claiming them.
<template>
<VestingSchedule
:positions="vestingPositions"
:visualization="'timeline'"
:show-notifications="true"
@setup-notifications="handleNotifications"
>
<template #timeline>
<div class="relative">
<!-- Vesting Timeline -->
<div class="flex items-center space-x-4 overflow-x-auto py-4">
<div
v-for="(milestone, index) in vestingMilestones"
:key="index"
class="flex flex-col items-center min-w-[120px]"
>
<div
:class="[
'w-4 h-4 rounded-full border-2',
milestone.unlocked ? 'bg-green-500 border-green-500' :
milestone.upcoming ? 'bg-yellow-500 border-yellow-500' :
'bg-gray-300 border-gray-300'
]"
/>
<div class="text-xs mt-2 text-center">
<div class="font-semibold">{{ milestone.amount }} tokens</div>
<div class="text-gray-500">{{ milestone.date }}</div>
</div>
</div>
</div>
</div>
</template>
</VestingSchedule>
</template>
<script setup>
const vestingMilestones = ref([
{ amount: 1000, date: '2024-01-01', unlocked: true },
{ amount: 1000, date: '2024-04-01', unlocked: true },
{ amount: 1000, date: '2024-07-01', upcoming: true },
{ amount: 1000, date: '2024-10-01', upcoming: false }
])
</script>
Referral System Integration
Complete Referral Dashboard
<ReferralSystem
:user-code="userReferralCode"
:commission-rate="0.1"
:referral-stats="referralAnalytics"
:reward-history="referralRewards"
@generate-custom-link="handleCustomLink"
/>
Multi-Tier Referrals
<ReferralSystem
:tiers="referralTiers"
:user-tier="currentTier"
show-tier-benefits
/>
Distribution Analytics
Airdrop Campaign Tracking
<DistributionTracker
:campaign="airdropCampaign"
:total-supply="campaignSupply"
:claimed-percentage="claimedPercentage"
show-analytics
/>
Community Metrics
<DistributionTracker
:community-stats="communityMetrics"
:geographic-distribution="geoData"
:claiming-velocity="claimingStats"
/>
Notification System
Eligibility Alerts
<AirdropChecker
:notification-settings="notificationPrefs"
@new-eligibility="sendNotification"
@claim-reminder="sendClaimReminder"
/>
Vesting Reminders
<VestingSchedule
:reminder-settings="vestingReminders"
@unlock-approaching="handleUnlockReminder"
/>
Mobile Experience
Mobile-Optimized Claiming
<ClaimInterface
mobile-optimized
:touch-friendly="true"
simplified-ui
/>
Push Notifications
<AirdropChecker
:push-notifications="true"
:notification-permissions="notificationPerms"
/>
Integration Examples
Complete Airdrop Portal
Airdrop Eligibility Checker
Check your wallet across multiple protocols for claimable airdrops
Connect Your Wallet
Automatically check eligibility for your connected address
<template>
<div class="airdrop-portal space-y-8">
<!-- Header Stats -->
<div class="grid grid-cols-1 md:grid-cols-4 gap-4">
<StatCard
title="Total Eligible"
:value="stats.totalEligible"
icon="i-lucide-gift"
color="green"
/>
<StatCard
title="Total Claimed"
:value="stats.totalClaimed"
format="currency"
icon="i-lucide-check-circle"
color="blue"
/>
<StatCard
title="Pending Claims"
:value="stats.pendingClaims"
icon="i-lucide-clock"
color="yellow"
/>
<StatCard
title="Vesting Unlocks"
:value="stats.upcomingUnlocks"
icon="i-lucide-unlock"
color="purple"
/>
</div>
<!-- Main Content Tabs -->
<UTabs :items="tabItems">
<template #eligible>
<AirdropChecker
:wallet-address="userAddress"
:protocols="allProtocols"
auto-check
/>
</template>
<template #claim>
<ClaimInterface
:rewards="claimableRewards"
enable-batch-claiming
gas-optimization
/>
</template>
<template #vesting>
<VestingSchedule
:positions="vestingPositions"
show-timeline
enable-notifications
/>
</template>
<template #referrals>
<ReferralSystem
:user-stats="referralStats"
:commission-history="commissionHistory"
/>
</template>
</UTabs>
</div>
</template>
Related Components
- AirdropChecker - Eligibility verification
- ClaimInterface - Token claiming
- ReferralSystem - Referral management