Skip to content

Operator todo — complete airdrop launch checklist ​

Updated 2026-06-26. Covers everything needed for the full airdrop system. Items marked ✅ are done in code. Items marked 🔧 need your laptop/dashboard.


PHASE 1 — Immediate (tonight, ~45 min) ​

🔧 STEP 1 — Enable multichain on Alchemy (2 min) ​

Issue: your Alchemy app currently only has Ethereum mainnet enabled, which is why the eligibility checker shows "HTTP 403" on Arbitrum, Optimism, Base, Polygon, Avalanche.

  1. Go to https://dashboard.alchemy.com
  2. Open your existing app (the Hyperlane relayer app you already use)
  3. Click "Update Networks" (or gear icon → Networks)
  4. Check: ☑ Arbitrum One, ☑ OP Mainnet, ☑ Base, ☑ Polygon Mainnet, ☑ Avalanche C-Chain
  5. Save

Free tier covers all 6 chains. Same API key works on all of them.

🔧 STEP 2 — Set ALCHEMY_API_KEY on airdrop-app (2 min) ​

If not already set:

  1. Railway → airdrop-app service → Variables
  2. Add: ALCHEMY_API_KEY=<your_key> (same key from STEP 1)
  3. Click "Redeploy"

Verify: https://airdrop.sanect.com/eligibility → try vitalik's address (0xd8da6bf26964af9d7eed9e03e53415d37aa96045) → should show 7+ yr OG tier across all 6 chains, ~500ms response.

🔧 STEP 3 — Create LP incentive pairs (5 min) ​

Locked LP incentive program needs: SNCT/USDC, SNCT/USDT, SNCT/WETH, SNCT/WBTC. First two already exist. Last two need creating.

bash
export RPC_URL=https://rpc.sanect.com
export DEPLOYER_PRIVATE_KEY=<your deployer key>
bash scripts/mainnet/create-lp-incentive-pairs.sh

What this does:

  • Idempotent — skips USDC/WSNCT and USDT/WSNCT since they already exist
  • Creates WETH/WSNCT and WBTC/WSNCT
  • Updates dex-pairs-deployed.json with the new addresses
  • Cost: ~0.01 SNCT in gas

🔧 STEP 4 — Add pools to MasterChef (3 min) ​

bash
export CHEF_OWNER_PRIVATE_KEY=<protocol-governance signer>
bash scripts/mainnet/setup-masterchef-pools.sh

What this does:

  • Reads pair addresses from dex-pairs-deployed.json
  • Calls chef.addPool(allocPoint, lpToken) for each, skipping any already registered
  • Sets allocPoints to 300 / 300 / 200 / 200 (= 30/30/20/20 ratio)
  • Cost: ~0.02 SNCT in gas

After this, dex-app's Farm tab will auto-render the 4 pools.

🔧 STEP 5 — Seed initial LP (15-20 min) ​

Without LP, pools emit SNCT but no one can stake. Use dex-app's "Pool" tab → "Add Liquidity" for each pair:

  • SNCT/USDT: ~$100 each side (~1M SNCT + 100 USDT)
  • SNCT/USDC: ~$100 each side
  • SNCT/WETH: ~$100 each side (~1M SNCT + 0.03 WETH at ETH $3k)
  • SNCT/WBTC: ~$100 each side (~1M SNCT + 0.001 WBTC at BTC $100k)

You'll need ~4M SNCT from treasury + ~$400 of stables + ~$100 each of WETH/WBTC. Bridge in USDT/USDC/WETH/WBTC from Ethereum via swap.sanect.com/bridge first. Users can add more liquidity at their own discretion — the bootstrap seed just makes the swap UI functional.


PHASE 2 — Deploy airdrop-indexer (30 min) ​

The airdrop-indexer v2 is fully rewritten for the locked 13-product points-per-time matrix. It replaces the old binary-engagement design.

🔧 STEP 6 — Create Postgres on Railway ​

Railway → New → Database → Postgres → copy DATABASE_URL

🔧 STEP 7 — Deploy airdrop-indexer service ​

Railway → New Service → Deploy from GitHub repo → root directory: airdrop-indexer

Set env vars:

DATABASE_URL=<from step 6>
SANECT_RPC_URL=http://snapshot-publisher.railway.internal:8080
SANECT_REST_URL=http://snapshot-publisher.railway.internal:8080/rest
SANECT_CHAIN_ID=7628
SANECT_START_BLOCK=1
SNCT_USD_PRICE=0.01
CURRENT_PHASE=1
SWEEP_INTERVAL_MINUTES=60

Contract addresses default to mainnet values — no need to override unless changed.

What this does:

  • Runs the event indexer (block-by-block log scanning for all 13 products)
  • Runs the balance sweep (hourly snapshots for LP/shielded/bridge/delegation)
  • Serves the points API on port 3001
  • Schema auto-migrates on first boot

🔧 STEP 8 — Set custom domain ​

Add custom domain: airdrop-api.sanect.com (Cloudflare CNAME, DNS-only)

🔧 STEP 9 — Wire airdrop-app to indexer ​

Railway → airdrop-app → Variables → Add:

INDEXER_URL=https://airdrop-api.sanect.com

→ Redeploy

After this, /api/points/0x... returns real on-chain data instead of mock.

Verify indexer health ​

bash
curl https://airdrop-api.sanect.com/health
curl https://airdrop-api.sanect.com/api/points/0x...
curl https://airdrop-api.sanect.com/api/leaderboard?limit=10

PHASE 3 — Marketing launch ​

🔧 STEP 10 — Deploy landing-site updates (15 min) ​

Verify https://sanect.com/tokenomics shows the 10-bucket allocation and Day 180/270/360/450 phase dates.

🔧 STEP 11 — Publish blog post (5 min) ​

Content at docs/marketing/blog-tokenomics-announcement.md → copy to CMS or landing/src/pages/blog/

Title suggestion: "SNCT tokenomics + airdrop: locked"

🔧 STEP 12 — Twitter thread (5 min) ​

Content at docs/marketing/twitter-thread-tokenomics.md → post via Typefully or manual

Schedule for 9-11am UTC (highest crypto-Twitter engagement) or post live.

🔧 STEP 13 — Pin TG + Discord (5 min) ​

Content at docs/marketing/telegram-discord-pinned.md → pin in @sanectnetwork TG + Discord #announcements

Optionally repost in #general after 30 min for second wave.

🔧 STEP 14 — Update homepage hero CTA (10 min) ​

Add a small banner above the fold on landing/src/pages/index.astro:

🪂 30% of supply allocated to community via airdrop.
   First snapshot Day 180. Start earning points today →

Linking to /airdrop (which is airdrop.sanect.com).

🔧 STEP 15 — Galxe campaign setup (30 min) ​

Galxe gives you instant off-chain verification (Twitter, TG, Discord, LinkedIn) without building it yourself.

  1. Sign up at galxe.com as project owner
  2. Verify sanect.com domain ownership
  3. Create campaign: "sanect launch quests"
  4. Add quests: Follow Twitter, Join TG, Join Discord, Retweet, Connect wallet
  5. Reward: just points (no immediate token — they redeem at Phase 1 claim)

Galxe pro tier is ~$5-10k/month. Worth it for the first 90 days; can drop after.

🔧 STEP 16 — Influencer outreach (1 hour) ​

Template at docs/marketing/influencer-outreach-template.md

Build a list of 50 mid-tier crypto Twitter accounts (5k-100k followers) in these niches:

  • Privacy/ZK (Aztec, Aleo, Penumbra community voices)
  • Cosmos ecosystem (Sei, Osmosis, Celestia influencers)
  • L1 explainer accounts
  • Airdrop hunters who maintain reputation

Send each: 1-line pitch + tokenomics link + airdrop points doc + their unique referral code (?ref=<address>). No payment — referral commission is their incentive.


What's shipped in code (no action needed) ​

ComponentStatus
✅ airdrop-indexer v213-product points matrix, event indexer, balance sweep, API
✅ Points API endpoints/api/points/:address, /api/leaderboard, /api/stats
✅ Referral systemRegistration + earnings calculation + anti-sybil gates
✅ Off-chain points loadingPOST /api/offchain for Galxe-verified social actions
✅ Eligibility checker6-chain Alchemy, ~300ms response, wallet-age multiplier
✅ LP farm configLocked 30/30/20/20 weights, TVL tier caps
✅ Pool creation scriptsIdempotent pair creation + MasterChef setup
✅ airdrop-app → indexer wiringAutomatic fallback to mock when INDEXER_URL not set
✅ Tokenomics doc10-bucket allocation locked
✅ Points system doc13-product matrix locked
✅ Distributor specRegistered-claim contract spec
✅ Marketing kitBlog, Twitter thread, TG/Discord, influencer template

Files shipped for reference ​

  • airdrop-indexer/ — Full v2 rewrite (event indexer, balance sweep, API, referrals)
  • scripts/mainnet/create-lp-incentive-pairs.sh — Idempotent pair creation
  • scripts/mainnet/setup-masterchef-pools.sh — Idempotent MasterChef setup
  • airdrop-app/app/api/points/[address]/route.ts — INDEXER_URL proxy + mock fallback
  • airdrop-app/app/api/leaderboard/route.ts — INDEXER_URL proxy + mock fallback
  • airdrop-app/app/api/stats/route.ts — INDEXER_URL proxy + mock fallback
  • airdrop-app/lib/genesisAllocation.ts — Speed + correctness fixes
  • airdrop-app/app/eligibility/page.tsx — UX fixes
  • docs/airdrop-points-system-design.md — Phase 1 formula locked
  • docs/tokenomics.md — 10-bucket allocation locked
  • docs/airdrop-distributor-spec.md — Registered-claim contract spec
  • docs/marketing/ — Blog, Twitter thread, TG/Discord, influencer template

What's pending (not blocking launch) ​

ItemETANotes
AirdropDistributor.sol contractDay 7-60Build + audit. Not needed until Day 180 claim
Anti-sybil clustering pipelineDay 150Run T-30 before Phase 1 snapshot
Snapshot CSV publisherDay 1737 days before Phase 1 claim opens
SNCT price oracle integrationWeek 2Replace fixed SNCT_USD_PRICE with CoinGecko + TWAP
Per-token USD oracle for bridge assetsWeek 3Currently uses SNCT price as proxy
Shielded balance per-user trackingWeek 4Currently equal-split among known shielders

Engineering sprint plan ​

WeekFocus
Week 1 (Days 7-14)AirdropDistributor contract + Foundry tests
Week 2 (Days 14-21)Internal audit + fuzz
Week 3 (Days 21-50)External audit engagement
Week 1-3 in parallelPrice oracle integration
Week 4-5Frontend claim flow
Week 6-7Subgraph + dashboard data integration
Week 8-13Anti-sybil pipeline + appeals system

What NOT to do today ​

  • Don't announce specific Phase 1 snapshot block height — that's revealed Day 173 (7 days before snapshot)
  • Don't promise an exact "you'll get X SNCT for action Y" — points convert proportionally to the pool, not to fixed amounts
  • Don't engage with "when claim?" beyond "Day 180 per the public roadmap"
  • Don't ship the AirdropDistributor contract today — wait for audit
  • Don't post specific multisig addresses publicly until Safe migration completes Day 14
  • Don't pay influencers in SNCT directly — referral commission only
  • Don't run "trade $X to earn N points" promos — points are time-locked or fee-locked, volume-loops contradict anti-wash design
  • Don't extend Phase 1 timeline if launch tweets underperform — credibility of a locked roadmap > first-week metrics

What to track this week ​

  • Twitter thread engagement (likes/RTs/replies in first 24h)
  • Galxe campaign signups
  • Referral code activations
  • Telegram + Discord new joins
  • DEX volume on sanect (item #1 in points matrix — early signal of organic activity)
  • Bridge inbound (item #9)

If activity surges, the anti-sybil pipeline needs to be ready faster.


Quick command reference ​

bash
# LP pools
export RPC_URL=https://rpc.sanect.com
export DEPLOYER_PRIVATE_KEY=<key>
bash scripts/mainnet/create-lp-incentive-pairs.sh

export CHEF_OWNER_PRIVATE_KEY=<key>
bash scripts/mainnet/setup-masterchef-pools.sh

# Verify indexer health after deploy
curl https://airdrop-api.sanect.com/health

# Check a wallet's points
curl https://airdrop-api.sanect.com/api/points/0x...

# Check leaderboard
curl https://airdrop-api.sanect.com/api/leaderboard?limit=10

# Load off-chain points (after Galxe verification)
curl -X POST https://airdrop-api.sanect.com/api/offchain \
  -H 'Content-Type: application/json' \
  -d '{"entries":[{"address":"0x...","channel":"twitter","points":100}]}'