What Rails Covers
Details of the protocols we cover and the depth in which we cover them.
Explorer capability matrix
included not yet built built, awaiting the first on-chain instance the protocol can't provide it — open the cell for the why
| Explorer | Health factor, collateral ratio, rates read live from the protocol's contracts | USD from the protocol's own oracle — the same prices it liquidates with, not a price-API approximation | The protocol's own oracle read back at each event's block, what the position was worth when it happened, never today's price | An offline verifier re-derives the explorer's figures directly from the chain via a second data path, and checks them against the indexed values and the constants the explorer states — run against mainnet when the explorer is built or changed, not a check that runs as the page renders | Export the position as Markdown or CSV, ready to paste into an LLM or agent context | A plain-language explainer on every event card | What was seized, the premium paid, health at the moment it fired — every explorer flags and links liquidations on the timeline | Protocol-level pages that read the whole system's own state live at head — market rosters, branch comparisons, redemption queues, balance sheets; what each explorer's view shows opens from its own row of the matrix |
|---|---|---|---|---|---|---|---|---|
Aave V3 Aave V3's Base deployment — a separate Pool with its own reserves and risk parameters, every wallet's account read whole from the contracts, no modeled state | The Base Pool's full reserve roster — sizes, rates, risk configuration and oracle prices — with every risk parameter decoded from the reserve's own configuration rather than a copied governance table. | |||||||
Aave V3 on Base is a separate deployment from Aave V3 on Ethereum — its own Pool, its own reserves, its own risk parameters and its own oracle — so a wallet's position on one says nothing about its position on the other, and the two are separate explorers rather than a switch inside one. What sets this explorer apart from the Ethereum one is not what it shows but where each figure comes from. The Ethereum listing is a replay of an indexed event stream; this one is not a replay at all. Every account that ever touched the Pool is found from the Pool's own events, and each account's balances and dollar values are read from the Pool, its reserve tokens and its oracle at the block its row names and read again after any event; risk is read live on the position page. So a listing figure here is a fact the chain stated at a block the row names, never a reconstruction. That is also why the listing states its own completeness: the account set comes from the Base box's capture of the Pool's history from its first block, and the chain read covers a budget of accounts per pass, so the listing says on its face how far each has got, from the coverage record Rails keeps for both, rather than letting a partial roster look whole. Opening a position reads that one wallet's whole history from the same capture, from the Pool's first block, which is why the timeline reaches the position's genesis rather than a recent window, why the economics tower can state lifetime deposits, withdrawals and the interest inside the debt, and why a timeline states underneath itself anything its history is missing. When the capture cannot answer, Rails sweeps the Pool's own logs for the wallet instead. Since 4 September 2026 every event block the Base box captures is also read for the Pool's own oracle — every reserve's price, liquidation bonus and protocol fee, all at that block and stored — so a liquidation card served from the index values both legs at the prices the seizure was computed with and states the premium against the bonus read from the same block, and an ordinary row names its reserve's price at its own block. The newest blocks are priced within minutes and every liquidation block is priced; older ordinary rows are priced as the historic walk reaches them and render token-only until then, and a position holding such rows says so above its timeline, with the date the walk is expected to reach them. | ||||||||
Compound V3 Compound V3's Base deployment — five Comets read live, and a wallet's standing in every one of them found by asking each market directly | The five Comets on Base, each with its own base asset, collateral roster, rate curve and reserve line — and one of them reading above 100% utilised, which is what a growing reserve line looks like. | |||||||
Compound V3 on Base is a separate deployment from Compound V3 on Ethereum — five Comet markets of its own, with their own collateral rosters, their own risk parameters and their own accounts — so the two are separate explorers rather than a switch inside one. A Comet market is single-base and multi-collateral: one asset is both the lend and the borrow side, every collateral asset backs borrowing of that base alone, and nothing is cross-collateralised between markets. So a wallet has a separate standing and a separate liquidation line in each market it touches, and this explorer never states a combined one. It also never totals across them, because they do not all measure in the same unit: four quote in dollars and cWETHv3 quotes in ETH, which is the unit each market's own oracle answers in. That unit is a fact about the market rather than about its base asset — cAEROv3's base is the volatile asset and it still quotes in dollars. What sets this explorer apart from Compound V3 Ethereum's is where each figure comes from, and in one respect it reaches further. The Ethereum listing is a replay of an indexed event stream; this one is not a replay at all: every (market, account) pair that ever held a position is found from the five Comets' own events, and each account's base and collateral are read from that Comet at the block its row names and read again after any event — risk is read live on the position page — so a listing figure is a fact the chain stated rather than a reconstruction — and the page states its own completeness, how far the history walk and the sweep have each got, rather than letting a partial roster look whole. Opening a row answers the whole wallet at once — every market in the roster asked about the account, and the address's history read from the Base box's capture of every Comet's events from the earliest market's first block (a live sweep of their logs stands in when the capture cannot answer), so the history reaches each position's genesis rather than a recent window, and the economics tower can state lifetime flows and the interest inside the debt. Comet has no borrow or repay event — a withdrawal past the balance is the borrow and a supply against a negative balance is the repayment — so those flows are read off the running balance's zero crossings, as the protocol itself defines them. A timeline states underneath itself anything its history is missing. Two facts of this deployment are stated rather than smoothed over: one market's borrows stand above its supplies, which is the borrow index outrunning the supply index by the spread between the two rates rather than a shortfall, and four different proxies on Base answer to the name cUSDCv3, only one of which Compound governance deployed — so the roster here is settled from the Configurator's own deployment log rather than from a name. | ||||||||
Basedollar A Liquity V2 fork on Base minting BD across five collateral branches — captured from Base directly, each Trove's collateral and debt read straight from events | The same branch surface as Ebisu's, read on Base — each branch's own price, size, TCR and rate span, and the same per-branch link into the listing sorted by rate. | |||||||
Moonwell Moonwell's Base deployment — twenty-one markets under one Comptroller, every account's standing read from the contracts themselves, no modeled state | The same surface as Moonwell Ethereum's, over the twenty-one markets Base actually runs — including the two whose supply cap now sits below what they hold, which is how governance closes a market to new deposits. | |||||||
Moonwell is a Compound v2 fork, and Base is where it actually runs: twenty-one markets against Ethereum's four, and tens of millions supplied against a few million. The two are separate deployments with separate contracts, so they are separate explorers rather than a switch inside one — a wallet's position on Base says nothing about its position on Ethereum. What sets this explorer apart from Moonwell Ethereum's is where each figure comes from. The Ethereum listing is a replay of an indexed event stream; this one is not a replay at all. Every wallet that ever held a position is found from the twenty-one markets' own events on the Base box — with a routed mint or redeem resolved to its real owner through the same-transaction transfer leg, the way the Ethereum index does it — and each account's balances, debt, exchange rates and dollar values are read from the mTokens, the Comptroller and its own oracle at the block its row names and read again after any event; risk is read live on the position page. So a listing figure here is a fact the chain stated at a block the row names, never a reconstruction, and the page states its own completeness — how far the history walk and the sweep have each got — rather than letting a partial roster look whole. Opening a position reads that one wallet's whole history from the Base box's capture of the twenty-one markets' events, from the Comptroller's first block. That is why the timeline reaches the position's genesis rather than a recent window, why the economics tower can state lifetime deposits, withdrawals and the interest inside the debt, and why the account surface can say which of a wallet's supplies are actually entered as collateral (minting alone does not enter a market, and an un-entered supply backs nothing) beside the Comptroller's own verdict on how far it sits from liquidation. When the capture cannot answer, Rails sweeps the chain instead, and not in the way it is cheap on Aave: a Compound v2 market indexes nothing on its own events, so the sweep anchors on the reward distributor — the one contract on this deployment that names the account on every action — and reads each transaction it names. A timeline states underneath itself anything its history is missing — on the few accounts too large to send whole, from which date onward it is drawn. Two facts of this deployment are stated rather than smoothed over: two markets carry a supply cap BELOW what they already hold, which is governance closing them to new deposits rather than a ceiling being breached, and two different markets both answer to the mToken symbol "mUSDC" (the bridged and the native USDC), so only an address identifies a market here. Since 4 September 2026 every event block the Base box captures is also read for the Comptroller's own oracle — every market's price and exchange rate, the incentive and the close factor, all at that block and stored — so a liquidation card values both legs at the prices the seizure was computed with and states the premium against the incentive read from the same block, and an ordinary row names its market's price at its own block. The newest blocks are priced within minutes and every liquidation block is priced; older ordinary rows are priced as the historic walk reaches them and render token-only until then, and a position holding such rows says so above its timeline, with the date the walk is expected to reach them. Since 4 September 2026 a position that held a market’s shares across a step in that market’s own exchange rate also carries a market note on its timeline — a receipted row rather than an event, never counted in any total, placed between the two of the account’s own events that bracket the step, stating the rate at each end and what the position’s own shares were worth at each. The rate is derived rather than read: every Mint and Redeem in a market emits the underlying amount and the mTokens it was exchanged for, and their quotient is the market’s rate at that block, so this needs no oracle. A step is stated only where the change over the whole market’s series exceeds ten times the interest the market could have accrued over the same seconds — across the twenty-one markets’ entire history three such steps exist. A live note sits above the newest row for any entered market the account still holds: the same market’s own exchange rate read live at the chain head, against the account’s own newest Mint or Redeem in it, holding the account’s CURRENT holding fixed and moving only the rate — shown whatever the move, because nothing having changed since is itself the fact it states. | ||||||||
Morpho Blue Morpho Blue's Base deployment — more than 4,300 isolated markets, every borrower position across them listed, and a wallet's whole standing found by asking the singleton directly | Loan-token units by design — Morpho Blue has no USD oracle | The same surface over Base's markets — more than 4,300 of them, over twice Ethereum's roster, and the same nine loan-to-values across all of it. | ||||||
Morpho Blue is one immutable singleton, deployed to the same address on Base as on Ethereum — so what separates these two explorers is not the contract but the markets. A Blue market is a parameter tuple, not a deployment, and Base carries more than 4,300 of them against Ethereum's more than 1,700, with disjoint positions. Everything the Ethereum explorer says about the protocol's shape holds here: each market measures in its own loan token with no dollar anywhere, its single loan-to-value is both the borrow limit and the liquidation line, and its totals are the last-settled balance rather than the balance now, because Blue accrues only when a market is touched. What is different is how the explorer finds anything. Blue will not enumerate itself — a position is a slot you can only read with a market id already in hand, and there is no per-user or per-market list — so the roster is censused from the CreateMarket log and shipped as data, complete as of the census block stated on every surface. Having every id is what lets this explorer open on a wallet rather than on a market: it asks the singleton about every one of those markets at once and finds every position the wallet holds. The sweep is exact rather than a sample, so an obscure market hides nothing — as of the census block, which every surface states; a market created after it is found once the roster is censused again. The listing of every borrower comes from Rails' own index of the singleton's logs, kept on a Base capture box: each (market, borrower) pair those logs name, with its position read from the chain at a pinned block. Behind each position the explorer reads the wallet's whole history from the same index — every event naming it since the contract's first block — and reads it from the chain instead whenever the index cannot vouch for the whole life, replaying it per market into the same cards, economics tower and liquidation forensics the Ethereum explorer draws; the replayed shares are checked against the live slots to the wei before a card stands on them. Each vault position's timeline replays that wallet's whole share-transfer history from chain and checks it wei-exact against the vault's own balance before drawing anything — a mismatch means no rows rather than a wrong one. The roster of holders comes from a daily sweep of every vault's whole history, proven complete against the vault's own total supply; a sweep that can't prove complete doesn't get published, and yesterday's set stands instead. There's no USD, APY or yield figure — just the flows and share prices as they happened, plus, on each row, which of the vault's underlying markets the deposit sat in at that point. | ||||||||
Seamless An Aave V3 fork on Base, frozen since April 2025 — every position read whole from the contracts, and none of them can grow | The full reserve roster of a market that is closing — eighteen reserves, every one of them carrying the frozen bit, with the sizes, rates and risk parameters the Pool still enforces on what is left. | |||||||
Seamless is an Aave V3 fork on Base, verified as one by interface rather than by reputation: its Pool answers the identical account, reserve and configuration calls, which is what lets the same reader serve it. So the model is Aave's — one Pool, one cross-collateralised account per wallet, one health factor — and everything the Aave V3 Base explorer says about reading risk off each reserve's own configuration word holds here too. What is different is that this market is closed. All eighteen reserves were frozen in a single block on 15 April 2025, which is one governance action rather than a market fading asset by asset, and the freeze was read off the chain by binary search over the frozen bit rather than taken from an announcement. A frozen reserve still accrues interest, still liquidates, and still lets a holder repay and withdraw; what it will not accept is a new supply or a new borrow. So every rate and threshold this explorer shows is live and enforced, and none of it is an invitation — which is why the surfaces say so rather than leaving a reader to infer it from a borrow APR on a market nobody can borrow from. The listing here is not a replay: every account that ever touched the Pool is found from the Pool's own events, and each account's balances and dollar values are read from the Pool, its reserve tokens and its oracle at the block its row names and read again after any event — risk is read live on the position page — so a listing figure is a fact the chain stated rather than a reconstruction — and the page states on its face how far the history walk and the sweep have each got, rather than letting a partial roster look whole. The census has an unusual shape here, and it is worth naming: because the Pool is frozen, the set of accounts that can ever hold a position on it is closed and can only shrink, so once taken it stays complete rather than going stale. That is true of no other explorer on this roster. Opening a position reads that one wallet's whole history from the Base box's capture of this Pool's events, from its first block (a live sweep of the Pool's own logs stands in when the capture cannot answer), which is why the timeline reaches the position's genesis rather than a recent window. Since 4 September 2026 every event block the Base box captures is also read for the Pool's own oracle — every reserve's price and liquidation bonus at that block, stored — so a liquidation card served from the index values both legs at the prices the seizure was computed with and states the premium against the bonus read from the same block (this Pool keeps no protocol share of it), and an ordinary row names its reserve's price at its own block. The historic walk has reached the Pool's first event, so every row names its reserve's price at its own block. | ||||||||
Aave V3's Base deployment — a separate Pool with its own reserves and risk parameters, every wallet's account read whole from the contracts, no modeled state
Compound V3's Base deployment — five Comets read live, and a wallet's standing in every one of them found by asking each market directly
A Liquity V2 fork on Base minting BD across five collateral branches — captured from Base directly, each Trove's collateral and debt read straight from events
Liquidation forensics — Basedollar liquidations would render token-only: the per-block branch-price capture that values seized collateral is a mainnet filler with no Base counterpart yet. None have fired so far either
Moonwell's Base deployment — twenty-one markets under one Comptroller, every account's standing read from the contracts themselves, no modeled state
Morpho Blue's Base deployment — more than 4,300 isolated markets, every borrower position across them listed, and a wallet's whole standing found by asking the singleton directly
Oracle USD — loan-token units by design — Morpho Blue has no USD oracle
An Aave V3 fork on Base, frozen since April 2025 — every position read whole from the contracts, and none of them can grow
In every explorer
Every position, not just yours — browse all open positions in the protocol, search any wallet
Read-only by design — no wallet connection, no signatures, no permissions; works when the official frontend doesn't
Full position history — every action as a card: what happened, what it changed, what it cost in gas, linked to the transaction
No modeled state — every number replayed from the protocol's own on-chain events, nothing estimated or interpolated
Provenance on every figure — open a receipt showing exactly which contract event or storage read produced a number
Live — follows the chain head, updated as blocks land
Lifetime economics — the position's flows over its whole life, interest split from principal where the flows reconcile
Bookmarks — pin wallets and positions across explorers