Skip to content

Gains and Lighter read their own markets: Mobula's perp pairs catalog is gone - #3035

Merged
Flotapponnier merged 2 commits into
devfrom
fix/perp-gains-lighter-native
Oct 18, 2026
Merged

Flotapponnier merged 2 commits into
devfrom
fix/perp-gains-lighter-native

Conversation

@Flotapponnier

Copy link
Copy Markdown
Collaborator

What was broken

GET api.mobula.io/api/2/perp/pairs answers 404 since 2026-10-12: Mobula deprecated it. It was the only source of:

  • Gains' active market count (perp-active-markets, perp-capital-efficiency)
  • the asset-class split for Gains and Lighter (perp-asset-breadth)

So Gains read as unresponsive on three boards, and Lighter on perp-asset-breadth, for six days. Found by the audit checks (L2) on the release #3021 perp boards.

Fix

Gains: backend-arbitrum.gains.trade/trading-variables. Gains never removes a pair from the array; it delists one by setting its max leverage override to 1 (0.001x at 1e3 precision: MATIC, LUNA, FTT, FB…). Those are left out: 178 tradable of 493 (Mobula listed 355). Class from Gains' own pair groups; an unknown group withholds the split rather than publishing one with a hole. Gains also seeds the crypto/RWA symbol sets Mobula used to seed for the HIP-3 dexes (only change there: BVIV now reads crypto).

Lighter: no class in the payload, so its symbols go through the router's cross-venue classification, crypto as default for an untagged symbol (undercounts a Lighter-only pre-IPO synthetic, never invents one).

Local run, one tick:

venue active crypto forex stocks indices commodities
gains (was, Mobula) 355 246 18 68 14 9
gains (now) 178 123 9 34 7 5
lighter (was, Mobula) 213 172 8 16 4 10
lighter (now) 213 127 10 61 7 8

Spec copy of the three benches stops citing Mobula; the hard-coded "broadest forex catalog (18 pairs)" bullet goes (9 now, tied with Ostium and Vest).

Also: the max leverage tab (#2963 follow-up)

#2963 (on dev, not yet deployed) lets each product answer "Each venue at its max" at its own ceiling and keeps the larger room, so Gains would publish 500x beside the standard pair's 200x room (0.305% instead of 0.12%). Only the ceiling product answers that tab now; test TestAllTabReadsTheCeilingProduct.

Gates

go build, go vet, go test green · pnpm validate green.

#2963 lets each product answer the "Each venue at its max" tab at its own
ceiling and keeps the larger room. Gains' standard pair at 200x leaves
0.305% and the degen pair at 500x 0.12%, so the tab published 500x in the
max leverage column next to the standard pair's room. Only the product
that reaches the venue's ceiling answers that tab now.
… is gone

GET api.mobula.io/api/2/perp/pairs answers 404 since 2026-10-12; Mobula
deprecated it. It was the only source of Gains' active market count and
of the asset-class split for Gains and Lighter, so three boards
(perp-active-markets, perp-asset-breadth, perp-capital-efficiency) have
shown Gains, and perp-asset-breadth Lighter, as unresponsive for six days.

Gains: backend-arbitrum.gains.trade/trading-variables. Gains delists a
pair by setting its max leverage override to 1 (0.001x) and never removes
it, so those are left out: 178 tradable pairs of 493 (Mobula listed 355).
The pair groups give the class; an unknown group withholds the split.
Gains also seeds the cohort's crypto and RWA symbol sets that Mobula used
to seed for the HIP-3 dexes.

Lighter: no class in the payload, so its symbols go through the router's
cross-venue classification, with crypto as the default for a symbol no
venue tags (it is a crypto-first venue, unlike a HIP-3 RWA dex).

The copy of the three specs stops citing Mobula as the source.
@Flotapponnier
Flotapponnier merged commit 59c886b into dev Oct 18, 2026
2 checks passed
Flotapponnier added a commit that referenced this pull request Oct 18, 2026
release: Gains and Lighter back on the perp boards (cherry-pick #2963, #3035, #3036)
bakabhai993 pushed a commit to bakabhai993/OpenChainBench that referenced this pull request Oct 18, 2026
… is gone (ChainBench#3035)

* the max leverage tab printed Gains at 500x beside its 200x room

ChainBench#2963 lets each product answer the "Each venue at its max" tab at its own
ceiling and keeps the larger room. Gains' standard pair at 200x leaves
0.305% and the degen pair at 500x 0.12%, so the tab published 500x in the
max leverage column next to the standard pair's room. Only the product
that reaches the venue's ceiling answers that tab now.

* Gains and Lighter read their own markets: Mobula's perp pairs catalog is gone

GET api.mobula.io/api/2/perp/pairs answers 404 since 2026-10-12; Mobula
deprecated it. It was the only source of Gains' active market count and
of the asset-class split for Gains and Lighter, so three boards
(perp-active-markets, perp-asset-breadth, perp-capital-efficiency) have
shown Gains, and perp-asset-breadth Lighter, as unresponsive for six days.

Gains: backend-arbitrum.gains.trade/trading-variables. Gains delists a
pair by setting its max leverage override to 1 (0.001x) and never removes
it, so those are left out: 178 tradable pairs of 493 (Mobula listed 355).
The pair groups give the class; an unknown group withholds the split.
Gains also seeds the cohort's crypto and RWA symbol sets that Mobula used
to seed for the HIP-3 dexes.

Lighter: no class in the payload, so its symbols go through the router's
cross-venue classification, with crypto as the default for a symbol no
venue tags (it is a crypto-first venue, unlike a HIP-3 RWA dex).

The copy of the three specs stops citing Mobula as the source.

(cherry picked from commit 59c886b)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant