materraldocs

Using Materral

Reading a gap. What each number means.

A gap is one route, buy on venue A and sell on venue B, whose price difference has crossed a threshold. Here is how to read one.

Spread: gross and net#

Gross is the price gap before any fee: what you would receive selling on one venue minus what you would pay buying on the other, at your size. It is shown in basis points (bps), where 1 bp is 0.01%.

Net is gross minus every cost: venue taker fees, pool fees, network gas, quote conversion and latency risk. Each cost appears exactly once. Costs explains them.

text
gross = sell quote before fees − buy quote before fees
net   = gross − venue fees − pool fees − gas − quote conversion − latency risk

Needs +N bps#

When net is negative, the gap shows how far it is from breaking even: needs +N bps means the gross spread would have to widen by N basis points, at the same size and costs, before net reached zero. It tells you how close a route is, and whether a lower fee tier would close the difference.

Profitable#

A gap is profitable when its net is above zero after every cost at your size. The terminal can filter to only these. With base-tier exchange fees this filter is often empty; that is the normal state.

Capacity#

Capacity is the size, in USD, that both legs can fill from the depth Materral can see. If either side cannot take your full size, both legs are re-evaluated at the size both can fill, and the gap is flagged.

  • HyperCore shows at most 20 levels per side; size beyond that is reported as depth unknown.
  • Pool size beyond the loaded ticks is reported as unpriced, never extrapolated.

Age#

Age is how long the gap has been open. For a closed gap it becomes how long the gap lasted, shown with its peak gross spread.

New, Open and Closed#

The gap tracker sorts every gap into one of three states.

StateMeaning
NewThe gross spread reached 2 bps on fresh quotes in the last 60 seconds.
OpenStill at or above 0.5 bps gross, and older than 60 seconds. Gaps that were already open when you started watching (in the first 10 seconds) start here, not as New.
ClosedGross fell under 0.5 bps, a quote went stale, or the route could no longer be priced. Closed gaps stay listed for 15 minutes.

The open threshold (2 bps) is higher than the close threshold (0.5 bps) so a gap hovering near one value does not flicker open and shut. Both are measured on gross, before costs; net is recorded alongside and never hidden.

Freshness#

Every quote has an age. A gap built on an old quote is not a gap, so:

  • A route with a stale quote stays visible but is excluded from ranking, and a tracked gap closes.
  • If the two legs were observed more than 1.5 s apart, the route is flagged non_simultaneous.
  • If a venue's clock and the receive time disagree, it is flagged clock_skew.
  • If the best price moved after the depth snapshot, it is flagged book_drift.

The age limits per source are in How it works.

Flags you will see often#

FlagMeaning
fees_exceed_spreadThe price gap is positive but costs remove it.
fee_estimateA fee could not be fully confirmed, or gas is not loaded yet, or on Arbitrum/Base the L1 data fee is not included.
valuation_assumptionA wrapped token (WBTC, cbBTC, WETH, UBTC, UETH, USOL) is valued 1:1 with BTC, ETH or SOL.
requires_inventoryNeeds funds already on both venues. Exchange withdrawals are not modelled.
not_atomicLegs execute separately. One can fill while the other fails or moves.
dynamic_feeThe pool's fee can change before execution (nest).
depth_unknown / exceeds_tickPart of the size is beyond the visible book or the loaded ticks.

materral docs. Read-only, no keys, no real orders. Not investment advice.