xVault Docs
Protocol

Vault lineup

The four initial vault SKUs — compositions, weighting, rebalance triggers, and pause policy.

xVault launches with four curated, governance-defined SKUs. Curation (as opposed to user-created vaults) keeps weight definitions auditable, corporate-action response operationally sane, and lets keeper policy be tuned per basket.

Initial SKUs

VaultTickerCompositionWeightingRebalance trigger
Mag 7vMAG7AAPLx, MSFTx, NVDAx, GOOGLx, AMZNx, METAx, TSLAxEqual-weight3% drift or 7 days
SemisvCHIPNVDAx, AMDx, TSMx, AVGOx, INTCxMarket-cap3% drift or 7 days
DividendvDIVKOx, JNJx, PGx, XOMxEqual-weight5% drift or 30 days
SPY-LitevSPYSPYx + USDC bufferFixed 95 / 52% drift

Cash buffer

Every vault also carries a small USDC buffer (typically 0.5–5% TVL) to absorb deposits and withdrawals without forcing an immediate rebalance. The buffer naturally refills from deposits; the keeper liquidates to top it up only if it drops below the target floor.

How weighting works

  • Equal-weight: each leg carries the same target weight. Drift accrues through differential returns, and the keeper rebalances back to target on a scheduled cadence.
  • Market-cap: target weights are refreshed periodically from an external market-cap feed; drift is measured against the refreshed target.
  • Fixed ratio: the vault always targets the configured split (e.g. SPY-Lite at 95% SPYx / 5% USDC).

All target weights are stored on-chain in the vault_state PDA and can only be mutated by the admin multisig behind a 48h timelock.

Rebalance triggers

A rebalance kicks in when either of the vault-configured triggers fires:

  • Drift-based: any leg's deviation from target exceeds the threshold (2–5% depending on SKU).
  • Time-based: a rebalance has not occurred within the configured window (7, 30 days, etc.).

The keeper runs drift-scan every 60 seconds, enqueues a rebalance job when a trigger fires, and executes legs individually — one xChange (or Jupiter) fill per rebalance_leg instruction.

Pause policy

Certain corporate actions require vault intervention rather than automatic continuation. The keeper watches /public/corporate-actions/upcoming hourly and runs a (eventId, version, status) reconciler. For severe types within 48 h of activation it sets pause_flags.deposits_paused = true and rebalance_paused = true. When the xStocks feed marks the action Cancelled / Dismissed, or the event drops from /upcoming, the reconciler clears the pause.

caTypeEffect
SpinOffPause; multisig decides whether to distribute the spin or exit the leg.
CashMergerPause; likely force-exit the leg and rebalance into the remainder.
StockMergerPause; may require basket reconfiguration.
StockAndCashMergerPause; hybrid — requires manual reconciliation.
RedemptionPause; force-exit via redemptionPriceUsd.
WorthlessRemovalPause; remove the leg and redistribute weight.
RightsDistributionPause; rights are typically handled off-chain.

Paused vaults reject deposits, rebalances, and fee collection but always permit withdraw_in_kind so users are never trapped. See Integrations → Corporate actions for the PauseFlags breakdown and the reconciler contract.

Why curated (for now)

  • Auditable weights. Every leg is traceable to a multisig-approved state transition.
  • Tractable corporate actions. 4 baskets × 13 caType events is a workable operational surface; arbitrary user-created vaults are not.
  • Safer keeper policy. Keeper parameters (slippage bounds, quote timeouts, fallback rules) are tuned per SKU.
  • Governance-quality index selection. Basket replacement is a multisig ix, not a free-for-all.

Permissionless vault creation is on the roadmap for a later version, once corporate-action automation covers all 13 caType values without multisig intervention.

On this page