> For the complete documentation index, see [llms.txt](https://docs.ensemble.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.ensemble.io/how-it-works/nav-and-share-accounting.md).

# NAV and share accounting

How contracts value vault assets and convert between USDC and shares.

The vault calculates what belongs to shareholders, then uses that value to price shares. That calculation includes trading assets, fees, and reserves. A token balance or portfolio chart alone is not the price for your next deposit or withdrawal.

```mermaid
flowchart LR
    EVM["Spendable and reserved EVM assets"] --> NAV["Contract-computed NAV"]
    Core["HyperCore collateral and positions"] --> NAV
    Liabilities["Fees and contract-recognized liabilities"] --> NAV
    NAV --> NPS["NAV per share"]
    Supply["Outstanding share supply"] --> NPS
    NPS --> Preview["Deposit and redemption previews"]
```

## Total NAV

Net asset value, or NAV, is the value left for shareholders after the contract's accounting adjustments. It includes more than cash held on HyperEVM.

The vault's gross NAV combines its tracked EVM `accountedBalance`, HyperCore spot USDC, and perpetual account equity, less the funded bridge reserve. In owner-confirmed Standard separate-ledger mode, negative perpetual equity does not reduce spot or EVM assets. Without that attestation, it remains a liability. Deposits and ordinary redemptions require confirmed Standard mode.

The contract also reserves the cost of unwinding current exposure under its configured price-band and execution-fee policy. In Standard mode, that reserve cannot exceed positive perpetual equity. Accrued fees, including builder liabilities, and pending management fees are then deducted to produce total NAV. Displays should use the contract result rather than independently recomputing a competing NAV from wallet balances or indexed positions.

## NAV per share

NAV per share is the contract's price for one whole share. It adds fixed offsets of one USDC and one share to keep pricing defined when the vault is empty and to handle small share supplies.

In whole-unit terms, before integer rounding:

```
share price in USDC = (shareholder NAV in USDC + 1) / (outstanding whole shares + 1)
```

The contract uses 6-decimal USDC, 18-decimal shares, a `1e30` conversion scale, and integer rounding. See [Formulas](/reference/formulas.md) for the exact scaled calculation. Use the contract result for a transaction quote.

## Deposit preview

A deposit buys shares with the USDC remaining after the deposit fee.

The vault computes the fee from requested assets and rounds the resulting share amount down:

```
shares = (assets - deposit fee) × share scale / NAV per share
```

The actual transaction can differ if NAV, elapsed management fees, supply, fee-exemption context, or capacity changes before execution.

## Redemption preview

A redemption converts shares to USDC and deducts the withdrawal fee.

The vault rounds gross assets down before calculating the fee and net assets:

```
gross assets = shares × NAV per share / share scale
net assets = gross assets - withdrawal fee
```

Capacity is a separate question: a correct value preview does not guarantee the amount is immediately redeemable from the tracked EVM buffer or through the current CircuitBreaker route.

## Tracked assets versus token balance

Sending USDC directly to the vault address is not a deposit and does not mint shares. It can increase the token balance without increasing the assets tracked for shareholders.

Normal redemptions use the lesser of the physical USDC balance and tracked `accountedBalance`. Unsolicited transfers therefore do not automatically create more redeemable value.

## What to display

A useful quote shows what was read and when, so the user can judge the estimate.

For a transaction quote, display the observed block, total NAV, NAV per share, previewed output, Lens capacity, CircuitBreaker capacity, fee assumptions, and timestamp. Do not label a historical earlier observation as the current contract quote.

## Data-quality rule

Some reads can return a saved accounting value when live venue data is unavailable. A returned number alone does not prove that the quote is current.

`computeNav()` and fee-sensitive previews require live venue reads. `totalAssets()` and `convertTo*()` may instead return the last fee-net accounting checkpoint when a recognized precompile read fails. A successful conversion read alone therefore does not establish a fresh executable quote.

If live NAV or its required inputs cannot be read, show unavailable or stale. Do not reuse a previous observation as current without a visible timestamp.
