Airdrop — Genesis Allocation design (LOCKED 2026-06-21)
Companion to
airdrop-points-system-design.md. That doc covers the ongoing 4-phase point system (Day 90 / 180 / 270 / 365) for users who show up after launch. This doc covers the Day-0 Genesis Allocation — the Uniswap-anchored one-time hook that brings in the first cohort.
Locked from the 2026-06-21 design session. Numbers (baseline range, multiplier scale, product list) are calibration knobs — operator team finalizes pre-launch based on the airdrop budget split between Genesis Allocation and the 4-phase Hyperliquid-style point system.
Snapshot rule (locked)
Ethereum cutoff for the Uniswap snapshot = last UTC midnight before mainnet genesis block. If mainnet launches at any time on June 22, all Uniswap activity through 2026-06-21 23:59:59 UTC counts; anything after the cutoff block doesn't. The indexer freezes its Ethereum view at the last Ethereum block ≤ cutoff timestamp.
Multiplier scope (locked)
The Uniswap tier multiplier is universal and wallet-level — it multiplies every point that wallet ever earns on sanect, across both the Genesis Allocation and all 4 ongoing phases. It's a quality signal attached to the wallet, set once at snapshot, fixed forever.
Multipliers stack multiplicatively:
points_earned = base_points
× uniswap_tier_multiplier (1.1× / 1.25× / 1.5× / 2×)
× phase_spotlight_multiplier (1.5× when in scope, 1× otherwise)
× diversity_multiplier (per airdrop-points-system-design.md)A T4 Uniswap user (2×) shielding during Phase 2 (1.5× privacy spotlight) with full diversity (1.5×) earns 4.5× on those points. Uncapped by design — those whales are exactly the cohort to overweight.
Goal
Bring in a large initial cohort (~target 1M+ wallets) by piggy-backing on Uniswap's 20M+ user base, while:
- Filtering sybil farmers economically (not algorithmically — they self-filter via day-1 negative cash flow).
- Converting "claim my tokens" intent into actual chain usage (fees + product diversity).
- Smoothing day-1 sell pressure so price discovery isn't a cliff.
- Producing a "X live wallets on sanect" number large enough to support tier-1/2 CEX listing conversations.
Mechanic
Three independent variables, one formula:
allocation_size = uniswap_baseline × uniswap_multiplier
liquid_at_claim = allocation_size × unlock_pct(sanect_products_used)
vested_180d = allocation_size − liquid_at_claimTwo inputs (Uniswap history, on-sanect engagement), two outputs (allocation size, liquid-vs-vested split). Designed to be explainable to a Twitter audience in two sentences.
1. Uniswap baseline — eligibility + size
Snapshot taken from Uniswap v2 + v3 events on Ethereum mainnet, at a block height fixed and published before launch.
| Lifetime Uniswap volume | Wallet age | Baseline SNCT |
|---|---|---|
| < $100 | any | NOT ELIGIBLE |
| $100 – $1k | ≥ 6 months | 100 |
| $1k – $10k | ≥ 6 months | 250 |
| $10k – $100k | ≥ 12 months | 500 |
| $100k – $1M | ≥ 12 months | 750 |
| $1M+ | ≥ 24 months | 1,000 |
Wallet age = block of first observed tx (any contract). Volume = sum of absolute USD value at time-of-tx across all swaps (excludes LP add/remove).
Hard caps prevent farms from gaming the curve by routing volume through a single address — a $50M farmer wallet gets the same 1,000 baseline as a $1M genuine whale.
2. Uniswap multiplier — quality scaling
Multiplier scales the baseline based on quality signals beyond raw volume:
| Tier | Criteria | Multiplier |
|---|---|---|
| T1 | Eligibility baseline only | 1.1× |
| T2 | + ≥ 50 distinct trading days OR holds ≥ $1k LP currently | 1.25× |
| T3 | + active in last 90 days OR ≥ 5 distinct DEX-routers used | 1.5× |
| T4 | All of the above + wallet ≥ 4 years old + volume ≥ $100k | 2× |
Tier is the highest the wallet qualifies for, not stacked. Anti-sybil because "50 distinct trading days" can't be fabricated cheaply — farmers optimize for volume, not breadth-over-time.
3. On-sanect product engagement — unlock %
% of allocation that's liquid at claim. The rest vests linearly over 180 days post-claim.
| Distinct sanect products used | % liquid at claim |
|---|---|
| 0 | not claimable |
| 1 | 5% |
| 2 | 10% |
| 3 | 15% |
| 4 | 20% |
| 5 | 25% |
| 6 | 30% |
| 7 | 35% |
| 8 | 40% |
| 9 | 45% |
| 10+ | 50% (cap) |
Cap at 50% so vesting always has skin in the game — even max-engagement users have 90 days of "stay holding" exposure.
The product list (13 products, cap engagement at 10)
| # | Product | Minimum to count |
|---|---|---|
| 1 | DEX swap | ≥ $5 notional |
| 2 | DEX liquidity position | ≥ $25 notional, held ≥ 7 days |
| 3 | MasterChef farm stake | ≥ $25 notional, held ≥ 7 days |
| 4 | .snct registration | any (the reg fee is the floor) |
| 5 | .snct auction bid | any |
| 6 | .snct marketplace tx (buy or sell) | any |
| 7 | Shielded deposit | ≥ 1 SNCT |
| 8 | Shielded transfer | ≥ 1 SNCT |
| 9 | Shielded withdrawal | ≥ 1 SNCT |
| 10 | Bridge IN (Sepolia → sanect) | ≥ $5 |
| 11 | Bridge OUT (sanect → Sepolia) | ≥ $5 |
| 12 | Native delegation (stake to validator) | ≥ 10 SNCT, held ≥ 14 days |
| 13 | Governance vote on an active proposal | any |
Capping at 10 means users don't need to do every product — natural for people who skip bridge ("don't trust it yet") or governance ("don't have opinions on parameters") without locking them out of max unlock.
4. Worked examples
| Persona | Uniswap profile | Baseline | Mult | Allocation | Products | Liquid | Vested 180d |
|---|---|---|---|---|---|---|---|
| Casual UNI user | $500 vol, 1y wallet | 100 | 1.1× | 110 | 2 | 11 | 99 |
| Active UNI user | $10k vol, 2y wallet | 500 | 1.5× | 750 | 5 | 187 | 563 |
| UNI whale | $200k vol, 4y wallet, breadth | 1000 | 2× | 2,000 | 8 | 800 | 1,200 |
| Pro farmer (5k addresses) | $1k each, 1y each | 250 | 1.1× | 275/addr | 1/addr | 13.75/addr | 261/addr |
Pro farmer's economics at $0.02 SNCT:
- Per address: $0.27 liquid, $5.22 vested
- Cost per address to hit 1 product: ~$0.50 (gas + dust swap)
- Day-1 cash flow per address: −$0.23
- To rescue the position, vested has to hold value over 6 months — farmer becomes structurally long sanect, not a flipper.
Anti-sybil reasoning (without filters)
We don't need probabilistic sybil detection (which always has false positives → community backlash) because the economics filter for us:
| Tier of farmer effort | Liquid value per addr | Cost per addr | Day-1 P/L |
|---|---|---|---|
| 1 product, T1 baseline | $0.27 | $0.50 | −$0.23 |
| 5 products, T1 baseline | $1.37 | $20 | −$18.63 |
| 10 products, T1 baseline | $2.75 | $50 | −$47.25 |
The deeper a farmer commits per address (= the more liquid they unlock), the bigger the per-address loss they take. Combined with vesting, every participation tier is loss-leading on day 1 — only redeemed if SNCT holds price for 6 months. Farmers who claim become structurally long.
Smoothing day-1 sell pressure
Liquid-at-claim caps at 50%, vested linearly over 180 days. Daily unlock per address: 0.5 × allocation / 180 ≈ 0.28% of vested portion per day.
Even if 100k addresses claimed max-unlock and then all dumped simultaneously:
- Day 1 dump: 100k × max_liquid (say avg 200 SNCT) = 20M SNCT
- Daily vest dumps (steady-state): 100k × 200 × 0.0028 ≈ 56k SNCT/day
LayerZero went −70% week one largely because ~100% of allocation was liquid at claim. Our worst case is 50% liquid + slow vest tail, with no single cliff event.
Combined with the 4-phase point system
This Genesis Allocation is the Phase 0 event — a one-time hook fired at mainnet Day 0. After Day 90 it's done.
The existing airdrop-points-system-design.md (4-phase ongoing system) continues to run for users who:
- Don't qualify for Uniswap baseline (~70% of late entrants)
- Want to keep earning beyond their Genesis Allocation
- Joined after the Genesis snapshot
Both systems share the same product list (this doc, section 3) for consistency. A user who completes 10 products for Genesis unlock has also earned full diversity multiplier under the 4-phase system.
Budget split (suggested, operator finalizes): If genesis airdrop total is 300M SNCT, allocate ~30% (90M) to Genesis Allocation and ~70% (210M) to the 4 phases (split per existing doc's Option C).
What to build
- Snapshot indexer (Ethereum) — read Uniswap v2 + v3 Swap events for the snapshot block window, aggregate per-address volume + first-tx block + distinct days. One-off job, dumps to Postgres + S3.
- Multiplier qualifier — derive Tier 1-4 from the snapshot data plus published Uniswap router list. Outputs
(addr, tier, baseline). - Sanect engagement indexer — watch mainnet from Day 0 for the 13 product actions per address, store
(addr, product_id, first_qualifying_tx_block). - Merkle tree of
(addr, allocation, tier)tuples. Standard OZ tree. - Claim contract — Merkle proof verification, calls into each product contract to verify on-sanect engagement count, calculates liquid + vest schedule on-chain, transfers liquid, schedules vest via a linear vesting wrapper.
- Frontend — connect wallet → "you qualify for X SNCT, you've done N/10 products, unlock = M%, claim now or wait for more products."
Out of scope for Day 0
- Sybil ML / clustering (the economics filter for us — extra detection layer = false-positive PR problem, not worth it)
- Cross-chain extension (Solana volume, Aerodrome on Base, etc. — Phase 0 v2 if Uniswap funnel hits scale)
- Anti-MEV protections on claim (if a sandwich on the claim tx ever becomes profitable, we revisit)
Open knobs operator picks before launch
- Snapshot block on Ethereum for Uniswap data.
- Genesis Allocation budget % of total airdrop bucket.
- Whether to publish baseline + multiplier formulas or hash-commit them — publishing maximizes "check if you qualify" virality but lets sybil farms pre-compute optimal address distribution. Hash-commit reveals numbers at snapshot time. Default: publish formulas, hide snapshot block until after the fact.
- Whether Tier 4 (2× multiplier) actually exists — designed for the "Uniswap OG" cohort which is small (<10k addresses) but the marketing optics of "if you're a true OG you get 2×" are strong.