Skip to content

[T6.1] Run finalize script + approve distribution (settlement) #1262

Description

@realproject7

Epic: #1229 · Spec: §5, §8 Phase 6 · Type: OPERATOR · Estimate: 1 day

Pre-settlement checks

  • 7-day TWAP window of pl_daily_prices captured cleanly (no missing days)
  • If TWAP looks manipulated (per R12), delay settlement up to 7d via operator judgment
  • Bonding-curve depth check (per R17) — if insufficient liquidity for unlock, delay claim opening
  • T2.7 sweep-enabled MerkleClaim contract code merged + tested on testnet

Scope

This is finalize + review only. NO on-chain execution. The actual contract deploy / unlock / fund / burn / announce all happens in #1263 (T6.2 settlement day).

  1. Run scripts/airdrop-finalize.ts (T2.6) in DRY-RUN mode first
  2. Review output:
    • Total eligible wallets (matches eligible_activation_count from /status)
    • Total weighted spend
    • Per-tier released_pool value based on 7-day TWAP FDV (per §4.3: Bronze 20K / Silver 60K / Gold 100K / Diamond 200K)
    • Per-wallet share table (CSV)
    • Merkle root
  3. Distribution dispute audit: publish CSV of per-wallet weighted spends to a public location BEFORE running for-real
  4. Approve: confirm dry-run output looks correct, no anomalies, no is_blacklisted review issues
  5. Run finalize for-real → writes pl_airdrop_proofs table + outputs final Merkle root
  6. Record Merkle root in this issue (for [T6.2] Settlement day (deploy contract + fund + announce) #1263 settlement-day deploy)
  7. Confirm CLAIM_WINDOW_DAYS value (from T2.1 config, default 30) and reference it in this issue for [T6.2] Settlement day (deploy contract + fund + announce) #1263 — actual claimDeadline is computed at [T6.2] Settlement day (deploy contract + fund + announce) #1263 Step 1 deploy time based on intended claim-open timestamp, NOT from CAMPAIGN_END.

Branching by tier outcome — hand off to #1263

Normal flow (FDV ≥ Bronze threshold)

Sub-Bronze flow (FDV < $100K)

Zero-recipient flow (FDV ≥ Bronze but proof_count = 0) — RE1 r29

Even if the milestone tier is hit, if no wallet has positive weighted_spend (e.g., everyone activated but nobody bought storyline tokens), there are NO recipients to distribute to.

Detection during T6.1 dry-run: if finalize SQL returns 0 rows (because WHERE weighted_spend > 0 filters everything out), surface this clearly in dry-run output before for-real run. Don't write empty pl_airdrop_proofs.

Critical clarification: this ticket (T6.1) does NO on-chain execution under any branch. The 200K burn for sub-Bronze AND zero-recipient is executed in #1263, not here.

What T6.1 does NOT do

Acceptance

Dependencies

End of 3-month campaign window; #1260 T5.2 launch-day (live with real campaign data — was previously #1261 T5.3 before round-9 merge); T2.6 (#1248 — finalize script merged); T2.7 (#1267 — sweep-enabled contract code merged + tested)

Metadata

Metadata

Assignees

No one assigned

    Labels

    airdropPLOT 10x Airdrop CampaignoperatorRequires manual operator actionsuperseded-by-v6Closed in favor of v6 Base Ecosystem Sprint redesign

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions