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

# Event Horizon

> Event Horizon — Dark Matter Protocol on Robinhood Chain.

# Event Horizon VIP Pool

The VIP layer of Dark Matter, gated by **MASS** (live DarkMatterNFT mass). It receives
1% of every gross reactor deposit (the second half of the 10%-of-fee-bucket routing)
and pays out weekly in two directions.

## Membership

| Rule | Value |
| - | - |
| Mass threshold | **≥ 32 live mass** (`VIP_MASS_THRESHOLD`) |
| Founder Pass seat | Flat **100 mass** — always a member, mass gates never apply |
| Registration | Automatic on deposit/lootbox-spend; manual `register()` exists but earns nothing without weekly activity |

```solidity theme={null}
function isMember(address user) public view returns (bool) {
    if (founderPass.balanceOf(user) > 0) return true;
    return massSource.totalMassOf(user) >= VIP_MASS_THRESHOLD;
}
```

## Weekly pot — 70/30

Every fee event splits on arrival:

```solidity theme={null}
uint256 raffle = (msg.value * RAFFLE_SHARE_BPS) / 10000;  // 7000 = 70%
w.pot += raffle;            // weighted raffle (5 winners, on-chain draw)
w.dividendPot += msg.value - raffle;  // 30% gravity dividend, paid to EVERY eligible member
```

| Pot | Share | Paid to |
| - | - | - |
| Raffle | **70%** | 5 winners, weight = live mass, drawn on-chain |
| Gravity dividend | **30%** | Pro-rata to **every** eligible member — the heaviest gravity wells earn the most, everyone past the horizon gets paid |

## Weekly eligibility (ALL members, founders included)

| Gate | Requirement |
| - | - |
| Activity floor | **≥ 0.05 ETH combined** this week: mass injections **+ lootbox spend** (`WEEKLY_DEPOSIT_FLOOR`) |
| Streak gate (non-founders only) | Reached a **≥ 3-day** check-in streak at some point during the week (`WEEKLY_STREAK_MIN`) |
| Founders | **Bypass both** — the 0.25 ETH pass mint is the standing contribution |

Notes:

* Deposits credit the floor with the **gross** injection; lootbox spend credits 1:1 with
  the verified full spend (reported by the trusted `spendSource` — the lootbox relayer).
* The streak gate is "reached ≥3 at any point in the week" — one `streakOk` pin is set
  the first time the live read qualifies, and stays for the week.
* A wallet can cross the floor with later activity in the same week — the floor is
  enforced at draw/claim time, not at registration time.

## The on-chain raffle — commit→reveal

Randomness is **commit-to-future-block-hash**: the first draw call commits the current
canonical **L2 block number** (via `ArbSys.arbBlockNumber()` — the EVM block number is
an L1 estimate on this Orbit chain and must not be used), and the next call ≥1 L2 block
later settles using that block's hash — a value that did not exist at commit time:

```solidity theme={null}
uint256 public constant SEED_HORIZON = 256;   // blockhash lookback window
mapping(uint256 => uint256) public raffleCommit;   // week → commit L2 block
```

* **Permissionless**: anyone can commit or settle — nobody can hold a week hostage.
* Stale commits (past the 256-block horizon) simply re-commit.
* Weighted sampling over registered members' mass; five winners drawn.

Older weeks with unclaimed residue (after `SWEEP_DELAY_WEEKS = 4`) can be swept by
**anyone** into the current week — trustless self-healing instead of an admin wallet.

## Worked example

A week receives 20 ETH of gross reactor deposits → 0.20 ETH VIP cut arrives over the
week (1% of gross):

| Pot | Split | Value |
| - | - | - |
| Raffle | 70% | 0.14 ETH → 5 winners |
| Dividend | 30% | 0.06 ETH → all eligible members |

Say 10 members register, all eligible, total weight 500 mass:

* **Dividend:** every member claims `0.06 × (own mass / 500)`. A 50-mass wallet gets
  **0.006 ETH**; the 100-mass founder gets **0.012 ETH**.
* **Raffle:** winner's chance is proportional to mass — the 100-mass founder's ticket
  is 20% of the pool, a 32-mass wallet 6.4%.

## Claims & hygiene

```solidity theme={null}
function weeklyEligibility(uint256 wk, address user) public view returns (bool);
function meetsWeeklyFloor(uint256 wk, address user) public view returns (bool);
```

* Claims are open **forever** per week — nothing expires, nothing is lost.
* `claim`/`drawRaffle` re-verify eligibility at call time and drop wallets below the
  floor (their weight is excluded from the draw).
* Failed dividend ETH sends queue and can be re-claimed; the week's pots are conserved.

Next: [The Treasury & Supernova](pools/treasury.md).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.