What Symmetry Does
Symmetry allows anyone to create a vault that:- Holds multiple SPL tokens (up to 100) with individually configurable target weights.
- Mints its own SPL token — holders have proportional ownership of all underlying tokens.
- Uses multi-source oracle pricing (Pyth, Raydium CPMM; Raydium CLMM and Switchboard currently disabled) with configurable aggregation per token.
- 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.
- 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.
- 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.
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
| Role | Description | How Set |
|---|---|---|
| Creator | Creates the vault. Receives creator fees. Can transfer the role. | Set at vault creation. Transferable via editCreatorTx. |
| Host | Platform 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. |
| Keepers | Off-chain agents that execute tasks and earn bounties. | Permissionless. Anyone can run a keeper. |
| Users | Deposit/withdraw tokens. Hold vault tokens for proportional ownership. | Permissionless. |
| Symmetry Protocol | Collects 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.
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).
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:- Create & Initialize — The deposit, withdrawal, or rebalance is created on-chain.
- Deposit Tokens (deposits only) — User contributes SPL tokens into the vault.
- Lock Deposits (deposits only) — Freezes contributions and starts the process.
- Update Prices — Oracle prices are refreshed on-chain for all vault tokens. Done by keepers.
- 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.
- Mint (deposits) — Vault tokens are minted to the depositor.
- Redeem (withdrawals) — Underlying tokens are sent to the withdrawer.
- Claim Bounty — Keepers collect their bounty rewards. The rebalance intent account is closed.
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.
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:| Category | Controls |
|---|---|
managers | Edit manager list, weights, and authority bitmasks |
fees | Edit fee settings |
schedule | Edit schedule settings |
automation | Edit automation settings |
lp | Edit LP settings |
metadata | Edit name, symbol, URI |
deposits | Enable/disable deposits |
force_rebalance | Enable/disable force rebalance |
custom_rebalance | Enable/disable custom rebalance |
add_token | Add tokens or edit oracle configs |
update_weights | Change token target weights |
make_direct_swap | Execute direct swaps within the vault |
Modification Delays
Most vault settings have a configurable modification delay (in seconds). When a modification delay is set:- The intent is created on-chain but NOT immediately executed.
- After the delay period elapses, a keeper can execute the intent.
- This provides a safety window where users can see upcoming changes and exit the vault if they disagree.
Transaction Model
All SDK methods that modify on-chain state return aTxPayloadBatchSequence. 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.
Networks
| Network | USDC Mint | WSOL Mint |
|---|---|---|
mainnet | EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v | So11111111111111111111111111111111111111112 |
devnet | USDCoctVLVnvTXBEuP9s8hntucdJokbo17RwHuNXemT | So11111111111111111111111111111111111111112 |