FINALIZED———————Open the map
03Method

How the map is drawn.

Everything on a BasketMap report is either read from a finalized account, computed from those reads with the formulas below, or explicitly marked unknown. Nothing is estimated to fill a gap.

1 · Identity before arithmetic

A basket is accepted only when all of these hold for the mint you pasted:

  • The mint account exists and is owned by the SPL Token or Token-2022 program.
  • An account exists at the PDA ["index", mint] under the DiversiFi program.
  • That account is owned by the program, has a known size and discriminator 1.
  • Its token_mint field equals the mint you pasted. A non-empty PDA alone is not enough.

A token that fails any check is unsupported — even if its name or ticker looks like a basket, and even if it pays rewards in a basket token. Holding a reward coin is not holding a share of a vault.

2 · One finalized batch

  1. Discovery reads the index PDAs and basket mints, then the constituent mints (their token program decides each vault address).
  2. Final read: index config, basket mint, constituent mints and every vault in a single getMultipleAccounts at finalized commitment.
  3. The config bytes in the final read are compared with discovery. If they moved, the read is repeated; after two retries the report is labelled unstable_snapshot and never called atomic.
  4. Each registry asset has an approved price-age limit: 15 minutes for actively traded tokens, 1 hour for thin markets the source re-prices less often. Older observations are stale and shown as last-known.
  5. Every account is hashed (sha256 of raw data) and listed in Evidence with its role and owner.

Live reports are cached for 60 seconds. If a source fails, the last good report is shown with its age; it is never relabelled as live.

3 · Index layout

The public integration guide documents a 246-byte index account with five constituent slots. Every index on mainnet today is 348 bytes with eight slots. The adapter decodes both by size and discriminator and records the version it read:

disc      u8        = 1
manager   pubkey
token_mint pubkey   ← must equal the pasted mint
min_deposit u64
fee       u16      (bps)
bump      u8
mints     [ { mint: pubkey, target: u16 bps } ; 5 | 8 ]   empty = 1111…1111

4 · The arithmetic

S_k   basket supply, atomic units
Q_k   your quantity, same units
B_ki  vault balance of underlying i, atomic units

A_ki = Q_k × B_ki / S_k                 kept as a fraction; rounded only on screen
V_ki = A_ki / 10^dec_i × P_i            only with a fresh, unit-confirmed price
w_ki = V_ki / Σ_i V_ki                  only when every constituent is valued
O(k,l) = Σ_i min(w_ki, w_li)            exact mint, fully valued pairs only

Targets (basis points from the config) are shown next to actual weights and never stand in for a price or a balance. Exposure across your positions adds A_ki by exact mint; wrapped or bridged versions of the same asset are not merged.

5 · Data states

StateMeaningEffect
ValuedVault read, price within its asset limit, unit confirmedCounts toward totals and weights
Zero balanceVault exists and holds 0A real zero; does not block
Missing vaultVault account not foundBasket partial
No priceNo observation for that exact mintQuantities kept, totals withheld
Stale priceObservation older than the asset's limitShown as last-known, totals withheld
Price = 0Source returned 0Treated as no price, not as worthless
Unit unconfirmedToken-2022 scaled-UI multiplier ≠ 1, transfer fee or interest-bearing unitValuation blocked for that constituent
Supply 0Basket mint has no supplyNo shares computed; no division

6 · Report axes

  • account_snapshot — verified · partial · unknown
  • price_coverage — complete · partial · stale · conflicting
  • protocol_support — supported · partial · unsupported

A refresh creates a new report version with its own id; an older version keeps its slot and age. A shared link carries the frozen snapshot itself, so it can never quietly turn into live data.

7 · What it is not

  • Not a redeemable NAV: fees, liabilities, redemption limits and slippage are not deducted.
  • Not a risk or correlation score: overlap describes shared observed holdings only.
  • Not advice: BasketMap does not suggest what to buy, sell or rebalance.
  • Nested baskets are shown as unsupported constituents and are not expanded.

Open the map →