loading…

A continuously running Rust indexer that subscribes to Solana account writes for Kamino Lend over a Yellowstone gRPC stream, decodes them with Anchor discriminators, and lands them in ClickHouse. This page is a static export: a job on the indexer host queries a read-only database user every 60 seconds and publishes stats.json to object storage. Nothing here is a live database connection.

Live Data Flow

The four stages an account write passes through, moving at the rate the pipeline is actually running. The dots are paced by measured throughput, not by a fixed animation — when ingest stops, this stops. A diagram that keeps flowing while nothing is being written would be the same lie as a green light wired to nothing.

account writes per minute
60 min agonow
Market Overview

The current state of every Kamino Lend position the indexer has seen. Health factor is the ratio of a borrower's collateral to what they owe: below 1.0 the position can be liquidated by anyone. Positions with no borrows carry a sentinel value and are excluded from every average here, because including them would drag the median toward infinity.

Risk Radar

The fifteen borrowers closest to liquidation, most at-risk first.

ObligationOwnerHealthDepBorStatus
loading…
Liquidity Depth

The largest lending pools by available liquidity, in native token units.

ReserveAvailableDecBorrowed
loading…
Pipeline Health

Ingestion state, not container state. A process can report healthy while its stream is silently dead, so the number that matters is how far the checkpoint trails the chain. One slot is roughly 400ms.

How It Works

Four stages, each with a failure mode the design has to answer for.

1 · Yellowstone gRPC

Subscribes to klend account writes, filtered by Anchor discriminator so the stream carries only Obligation, Reserve, and LendingMarket.

2 · Rust decoder

Classifies each account by the first 8 bytes and decodes it. Raw bytes are kept regardless, so a decode bug is recoverable.

3 · Batched insert

Buffers rows and flushes on size or a timer over the native protocol. Data is written first, the checkpoint second, always.

4 · Static export

A timer queries a SELECT-only user every 60s and publishes JSON to object storage. This page reads that file.