ROHIT SHARMA


Sentinel Verify

A dashboard over a platform that watches Ethereum and its layer twos in real time, indexes what lending protocols are holding, and works out how much capital is at risk — then checks its own answer against the one the protocol publishes about itself.

Four metrics carry the top of the view: total allocation, risk capital, total capital and prime debt exposure, each with its own history. The interesting part is the line underneath — every figure names where it came from, because on this platform two sources can legitimately disagree.

Sentinel Verify dashboard showing total allocation, risk capital, total capital and prime debt exposure as four sparkline cards above an allocations table

Two sources of truth, and the gap between them

The platform indexes positions directly from chain state. The protocol also publishes its own figures. These are measurements of the same thing by different routes, and where they diverge that divergence is the product — not an error to be smoothed over. An early version merged the two feeds into one column and quietly reported a 1.5× mismatch as a single number; a join defect in the same view showed $0 against a $20.3M position.

So the interface stopped averaging and started attributing. Each allocation carries its per-model results side by side — the platform’s own two models and the published figure — and the reader sees the spread rather than a reconciled fiction.

Allocation detail panel listing per-model results for one position, with each model's required risk capital and coverage ratio shown on its own row alongside the protocol's published figure

Down to the position

The allocations table is the working surface: every position with its underlying asset, balance, chain and category, filterable by network and protocol, with the age of the most recent on-chain activity against each row so a stale figure announces itself.

Allocations table listing positions with their underlying assets, balances, latest activity times and categories, filtered by network and protocol

Opening a position gives the collateral behind it — every backing asset, its amount, price and share of the total, and the liquidation threshold that decides when it stops being collateral at all. Prices carry their oracle and how long ago it last spoke.

Allocation detail view with total backing, largest exposure and weighted liquidation threshold summarised above a table of collateral assets with amounts, prices and liquidation thresholds

Above the positions sits the prime-level view: collateral, encumbrance against a breach level, and debt exposure, each as a trend rather than a reading, because the question is rarely what a number is and usually whether it is moving.

Prime-level cards showing total allocation, exposure and total risk capital as area charts, with prime collateral, encumbrance and prime debt exposure beneath

Underneath: a Go service indexing blocks, a Python API serving the risk models, TimescaleDB holding the series, and a React front end on the toolkit. Fixing one incident here meant finding hypertables recompressed without segment keys, which defeated chunk pruning and made every query decompress everything.

Source