Skip to main content
Symmetry is on-chain infrastructure on Solana for creating and managing multi-token vaults with automated rebalancing. It is a protocol — not a single application. Anyone can build on top of it.

What Symmetry Does

Symmetry allows anyone to create a vault that:
  1. Holds multiple SPL tokens (up to 100) with individually configurable target weights.
  2. Mints its own SPL token — holders have proportional ownership of all underlying tokens.
  3. Uses multi-source oracle pricing (Pyth, Raydium CPMM; Raydium CLMM and Switchboard currently disabled) with configurable aggregation per token.
  4. Supports automated rebalancing to maintain target weights via a keeper network, with configurable deviation thresholds, cooldowns, and schedule windows that control when rebalancing is allowed.
  5. Has a flexible fee structure (deposit, withdrawal, management, performance) split across creator, host platform, managers, and the protocol, with performance fees gated by a high watermark. Management and performance fees are currently disabled at the protocol level.
  6. Uses an intent system for all configuration changes with optional time-locks and bounties.

Architecture

Vault (on-chain)

Each vault stores SPL token holdings (up to 100), target weights (basis points summing to 10,000), oracle aggregators per token, fee settings (4 tiers × 4 categories), and its own SPL token mint.
Three systems interact with the vault:

Intents

Configuration changes — editing fees, updating metadata, adding tokens, changing weights, or making direct swaps.

Rebalance Intents

Deposits, withdrawals, and periodic rebalances that move the vault toward target weights through auctions.

Keepers

Off-chain agents that execute intents, process rebalances, update prices, and earn bounties.

Roles

RoleDescriptionHow Set
CreatorCreates the vault. Receives creator fees. Can transfer the role.Set at vault creation. Transferable via editCreatorTx.
HostPlatform hosting the vault UI. Receives host fees.Set at vault creation. Immutable.
Managers (up to 10)Control vault settings per authority bitmasks. Receive manager fees split by weight.Set via editManagersTx.
KeepersOff-chain agents that execute tasks and earn bounties.Permissionless. Anyone can run a keeper.
UsersDeposit/withdraw tokens. Hold vault tokens for proportional ownership.Permissionless.
Symmetry ProtocolCollects protocol-level fees.Configured in global config by admin.

Core Concepts

Vaults

A vault is an on-chain account (program-derived from the vault’s SPL token mint) that stores:
  • A list of SPL tokens with amounts, target weights, and oracle configurations.
  • Settings: fees, schedule, automation, LP, metadata, manager authorities, and more.
  • Its own SPL token mint — when users deposit, they receive vault tokens proportional to their contribution. When they withdraw, they burn vault tokens to receive underlying tokens.
The vault’s value (TVL) is computed from live oracle prices of all held tokens. The vault token price = TVL / total supply of vault tokens. See Vaults for the full vault system documentation.

Intents

All configuration changes to a vault go through the intent system. An intent is an on-chain account that stores a proposed change — editing fees, updating metadata, adding tokens, changing weights, or making direct swaps. Intents have:
  • An activation timestamp (when the change can be applied).
  • An expiration timestamp (when the intent becomes cancellable).
  • A bounty (reward for the keeper who executes it).
  • A modification delay (enforced per-setting time-lock).
If the relevant setting has zero modification delay AND no scheduled activation, the intent is created and executed in the same transaction. See Intents for the full intent system documentation.

Deposits, Withdrawals & Rebalances

Deposits, withdrawals, and periodic rebalances are processed through the same on-chain flow (internally called “rebalance intents”). This flow progresses through a multi-step auction:
  1. Create & Initialize — The deposit, withdrawal, or rebalance is created on-chain.
  2. Deposit Tokens (deposits only) — User contributes SPL tokens into the vault.
  3. Lock Deposits (deposits only) — Freezes contributions and starts the process.
  4. Update Prices — Oracle prices are refreshed on-chain for all vault tokens. Done by keepers.
  5. Auction — Three sequential auction stages. Keepers execute flash swaps (atomic withdraw → swap via Jupiter or any DEX → deposit) to settle the vault toward target weights. Pricing starts wide (using oracle confidence bands), crosses through mid-price at the midpoint, and ends at the opposite extreme — creating increasing incentive for keepers over time.
  6. Mint (deposits) — Vault tokens are minted to the depositor.
  7. Redeem (withdrawals) — Underlying tokens are sent to the withdrawer.
  8. Claim Bounty — Keepers collect their bounty rewards. The rebalance intent account is closed.
See Rebalancing for the full rebalancing documentation.

Keepers

Keepers are off-chain agents that monitor the protocol and execute pending tasks:
  • Execute configuration intents after their activation time.
  • Cancel expired intents.
  • Update oracle prices during rebalances.
  • Execute flash swaps during auction windows.
  • Mint vault tokens after deposits complete.
  • Redeem tokens after withdrawals complete.
  • Claim bounties after all tasks are done.
Keepers earn bounties for each task. All keeper operations are permissionless — any wallet can call the same SDK methods (updateTokenPricesTx, flashSwapTx, mintTx, redeemTokensTx, claimBountyTx, etc.) directly. Developers can build custom keeper bots using these methods. The SDK also ships with KeeperMonitor and RebalanceHandler as reference implementations that can be used directly or as a starting point. See Keeper Infrastructure for setup and operation.

Authority Bitmasks

Each vault setting has an authority bitmask that controls which managers (and the creator) can modify it. The bitmask is a u16 where bits 0–9 correspond to manager slots and bit 10 corresponds to the creator. If bit N is set, the entity at that index has authority to modify the setting. Authority categories:
CategoryControls
managersEdit manager list, weights, and authority bitmasks
feesEdit fee settings
scheduleEdit schedule settings
automationEdit automation settings
lpEdit LP settings
metadataEdit name, symbol, URI
depositsEnable/disable deposits
force_rebalanceEnable/disable force rebalance
custom_rebalanceEnable/disable custom rebalance
add_tokenAdd tokens or edit oracle configs
update_weightsChange token target weights
make_direct_swapExecute direct swaps within the vault

Modification Delays

Most vault settings have a configurable modification delay (in seconds). When a modification delay is set:
  1. The intent is created on-chain but NOT immediately executed.
  2. After the delay period elapses, a keeper can execute the intent.
  3. This provides a safety window where users can see upcoming changes and exit the vault if they disagree.
Settings with zero delay are executed immediately in the same transaction as the intent creation.

Transaction Model

All SDK methods that modify on-chain state return a TxPayloadBatchSequence. This is a sequence of transaction batches:
  • Batches are sent sequentially (batch 0 must confirm before batch 1 is sent).
  • Transactions within a batch are sent in parallel.
This model handles complex multi-step operations like vault creation (which needs account creation, resizing, and initialization in sequence) or rebalance price updates (which need Pyth VAA creation, verification, and feed updates in sequence).
const signatures = await sdk.signAndSendTxPayloadBatchSequence({
  txPayloadBatchSequence: tx,
  wallet,
  simulateTransactions: false,
});

Networks

NetworkUSDC MintWSOL Mint
mainnetEPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1vSo11111111111111111111111111111111111111112
devnetUSDCoctVLVnvTXBEuP9s8hntucdJokbo17RwHuNXemTSo11111111111111111111111111111111111111112