> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flashnet.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Earning Flashpoints

> How balances, token holdings, and trading volume determine Flashpoint awards

export const WeightExample = () => {
  const rows = [{
    factor: "USDB",
    calculation: "sqrt(10,000) × 1.25",
    weight: "125",
    color: "green"
  }, {
    factor: "Other tokens",
    calculation: "sqrt(2,500)",
    weight: "50",
    color: "blue"
  }, {
    factor: "Volume",
    calculation: "sqrt(500) × 1.5",
    weight: "34",
    color: "purple"
  }];
  const colorClasses = {
    green: "text-green-600 dark:text-green-400",
    blue: "text-blue-600 dark:text-blue-400",
    purple: "text-purple-600 dark:text-purple-400"
  };
  return <div className="not-prose my-6 overflow-hidden rounded-xl border border-zinc-200 dark:border-zinc-700">
      <div className="grid grid-cols-3 bg-zinc-100 dark:bg-zinc-800 text-sm font-semibold">
        <div className="p-3 text-zinc-600 dark:text-zinc-400">Factor</div>
        <div className="p-3 text-zinc-600 dark:text-zinc-400">Calculation</div>
        <div className="p-3 text-right text-zinc-600 dark:text-zinc-400">Weight</div>
      </div>
      {rows.map((row, idx) => <div key={idx} className={`grid grid-cols-3 text-sm ${idx % 2 === 0 ? 'bg-white dark:bg-zinc-900' : 'bg-zinc-50 dark:bg-zinc-800/50'}`}>
          <div className={`p-3 font-medium ${colorClasses[row.color]}`}>{row.factor}</div>
          <div className="p-3 font-mono text-zinc-600 dark:text-zinc-400">{row.calculation}</div>
          <div className="p-3 text-right font-mono text-zinc-900 dark:text-white">{row.weight}</div>
        </div>)}
      <div className="grid grid-cols-3 bg-zinc-100 dark:bg-zinc-800 text-sm font-semibold">
        <div className="p-3 text-zinc-900 dark:text-white">Total weight</div>
        <div className="p-3"></div>
        <div className="p-3 text-right font-mono text-zinc-900 dark:text-white">209</div>
      </div>
    </div>;
};

export const WeightFormula = () => {
  return <div className="not-prose my-6 p-6 rounded-xl border border-zinc-200 dark:border-zinc-700 bg-gradient-to-br from-zinc-50 to-zinc-100 dark:from-zinc-800 dark:to-zinc-900">
      <div className="text-sm text-zinc-500 dark:text-zinc-400 mb-2">Contribution Weight Formula</div>
      <div className="font-mono text-lg text-zinc-900 dark:text-white mb-4">
        weight = <span className="text-green-600 dark:text-green-400">sqrt(usdb)</span> × 1.25 + <span className="text-blue-600 dark:text-blue-400">sqrt(other_tokens)</span> + <span className="text-purple-600 dark:text-purple-400">sqrt(volume)</span> × 1.5
      </div>
      <div className="text-sm text-zinc-500 dark:text-zinc-400">
        Your daily points = (your_weight / total_weight) × 100,000
      </div>
    </div>;
};

export const EarnFactors = () => {
  const factors = [{
    icon: <img src="/assets/usdb.svg" alt="USDB" className="w-6 h-6" />,
    title: "USDB Balance",
    description: "Average balance",
    badge: "1.25x weight"
  }, {
    icon: <svg className="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
          <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" />
        </svg>,
    title: "Eligible Tokens",
    description: "Tokens on Spark",
    badge: "1.0x weight"
  }, {
    icon: <svg className="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
          <path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M13 7h8m0 0v8m0-8l-8 8-4-4-6 6" />
        </svg>,
    title: "Trading Volume",
    description: "24-hour volume",
    badge: "1.5x weight"
  }];
  return <div className="not-prose grid grid-cols-1 md:grid-cols-3 gap-4 my-6">
      {factors.map((factor, idx) => <div key={idx} className="p-5 rounded-xl border border-zinc-200 dark:border-zinc-700 bg-white dark:bg-zinc-800/50 flex flex-col">
          <div className="flex items-center gap-3 mb-3">
            {factor.icon}
            <span className="font-semibold text-zinc-900 dark:text-white">{factor.title}</span>
          </div>
          <div className="flex flex-col items-start">
            <span className="text-sm text-zinc-600 dark:text-zinc-400 whitespace-nowrap">{factor.description}</span>
            <span className="text-xs font-bold text-zinc-900 dark:text-white mt-1">{factor.badge}</span>
          </div>
        </div>)}
    </div>;
};

<Note title="Coming Soon">
  Flashpoints are not yet live. This documentation is for preview purposes only.
</Note>

Flashpoints are awarded based on three factors:

<EarnFactors />

## Eligible Tokens

Beyond USDB, you can earn Flashpoints by holding other tokens on Spark that meet minimums for TVL (0.25 BTC), market cap (1 BTC), and 24-hour volume (1 BTC).

## How Points Are Distributed

Each day, the 100,000 Flashpoint pool is split among users proportionally based on their contribution weight:

<WeightFormula />

The square root scaling prevents whales from dominating. A user with 4x your balance gets 2x your weight, not 4x.

## Example: Daily Flashpoints

**User Profile:** Holds `$10,000` USDB, holds `$2,500` in eligible tokens, and trades `$500` per day.

<WeightExample />

If the total weight across all users that day is `100,000`, this user receives:

* `(209 / 100,000) x 100,000 = 209 Flashpoints`

## Maximizing Your Flashpoints

<CardGroup cols={2}>
  <Card title="Hold USDB">
    USDB has a 1.25x weight multiplier compared to other tokens
  </Card>

  <Card title="Trade Actively">
    Trading volume has a 1.5x weight multiplier
  </Card>

  <Card title="Diversify Holdings">
    Other eligible Spark tokens contribute at 1.0x weight
  </Card>

  <Card title="Stay Consistent">
    Points are distributed daily based on that day's activity
  </Card>
</CardGroup>
