> For the complete documentation index, see [llms.txt](https://docs.keystonefi.xyz/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.keystonefi.xyz/run-it/keeper-bot/utilization.md).

# Utilization Metrics

How to work out where the vault's money is sitting at any given moment.

> Everything here comes from `vault.cached_nav_usdc` and the position fields. There are no view helpers to call; just read the `Vault` account directly.

***

## Buckets

Everything the vault holds falls into one of these:

| Bucket            | Source                                                                                     |
| ----------------- | ------------------------------------------------------------------------------------------ |
| Liquidity buffer  | Vault USDC ATA balance — sized to `liquidity_buffer_bps × cached_nav_usdc / 10_000` target |
| Parked capital    | Kamino USDC reserve via `lend_idle_usdc`                                                   |
| jitoSOL spot leg  | jitoSOL held unlevered (normal basis) — `spot holdings × oracle jitoSOL price`             |
| Perp-venue margin | USDC margin on Phoenix via Ember (normal basis)                                            |
| Perp PnL          | Settled funding + mark-vs-entry PnL on the open position                                   |

***

## Derived ratios

```ts
const buffer        = vaultUsdcAtaBalance;          // off-chain query
const target        = vault.cachedNavUsdc.muln(vault.liquidityBufferBps).divn(10_000);
const bufferUtilBps = Number(buffer.mul(10_000n).div(target.toBigInt()));  // 10_000 = exactly on target

const queuePendingRatioBps = vault.queuePendingUsdc * 10_000n / vault.cachedNavUsdc;
const navPerShare1e9       = vault.cachedNavUsdc * 1_000_000_000n / vault.totalShares;
```

| Ratio                  | What it means                                                                                                                                                               |
| ---------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `bufferUtilBps`        | Whether the buffer holds enough to cover instant withdrawals. 10,000 means exactly on target. Below 9,000 it's underfunded and the keeper should move more capital into it. |
| `queuePendingRatioBps` | How much USDC is owed to queued withdrawals, as a share of NAV. If this stays above 10%, the keeper needs to unwind position to free up cash.                               |
| `navPerShare1e9`       | The live share price, scaled by 1e9. Drifts up with carry, and only ever starts at par on the very first deposit.                                                           |

***

## When to alert

| Condition                                                           | Interpretation                                                                |
| ------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| `bufferUtilBps < 5_000` for > 1h                                    | The buffer is under half its target, so instant withdrawals may start failing |
| `queuePendingRatioBps > 1_500` for > 6h                             | The queue is over 15% of NAV; the keeper should unwind position faster        |
| Perp margin or jitoSOL value drifts > 5% from what the mode implies | Something is wrong with margin, the oracle, or settlement. Investigate.       |

***

## Related

* [NAV & share pricing](/how-it-works/strategy-and-modes/nav-calculation.md) — full NAV formula
* [Monitoring](/run-it/keeper-bot/monitoring.md) — what to watch
* [Withdraw](/start-here/withdraw.md) — instant vs. queued paths
