Documentation Index
Fetch the complete documentation index at: https://docs.symmetry.fi/llms.txt
Use this file to discover all available pages before exploring further.
Installation
Imports
Token and Oracle Support
- Token standards: SPL and Token Extensions (
Token22) are supported in vault composition and token flows (addOrEditTokenTx,buyVaultTx,sellVaultTx,depositTokensTx,redeemTokensTx, etc.). - Oracle types: Pyth, Raydium CLMM, Raydium CPMM, and LST (SPL/Sanctum stake pool) are supported.
SymmetryCore
Constructor
Configuration
setPriorityFee(priorityFee: number): void
Updates the priority fee for all subsequent transactions.
fetchGlobalConfig(): Promise<GlobalConfig>
Returns the protocol-wide configuration account.
Vault Methods
Fetching
fetchVault(vaultPubkey: string): Promise<Vault>
Fetch a single vault by its on-chain account public key. Does not load oracle prices — call loadVaultPrice() separately.
fetchMultipleVaults(vaultPubkeys: string[]): Promise<Map<string, Vault>>
Batch-fetch multiple vaults. Returns a map keyed by public key.
fetchAllVaults(filter?: VaultFilter): Promise<Vault[]>
Fetch all vaults on-chain with an optional filter:
fetchCreatedVaults(creatorPubkey: string): Promise<Vault[]>
Shorthand for fetchAllVaults({ type: "creator", pubkey }).
fetchHostedVaults(hostPubkey: string): Promise<Vault[]>
Shorthand for fetchAllVaults({ type: "host", pubkey }).
fetchManagedVaults(managerPubkey: string): Promise<Vault[]>
Shorthand for fetchAllVaults({ type: "manager", pubkey }).
fetchVaultsFromMints(mints: string[]): Promise<Map<string, Vault>>
Fetch vaults by their token mint addresses.
deriveVaultsByMints(mints: string[]): Promise<Map<string, string>>
Derive vault account addresses from mint addresses without RPC calls.
loadVaultPrice(vault: Vault): Promise<Vault>
Loads live oracle prices, computes TVL and vault token price. Populates vault.tvl, vault.price, and per-asset price/value.
Creation
createVaultTx(params): Promise<VaultCreationTx>
Creates a new vault. The metadata_uri is a URL (max 200 chars) pointing to a JSON file with the vault’s metadata. The JSON should contain: name (vault token name), symbol (vault token ticker), description (vault description), image (token image/icon URL), and cover (vault cover image URL). You can include additional fields for your own integrations.
Editing
All edit methods accept aTaskContext and settings, returning Promise<TxPayloadBatchSequence>:
| Method | Settings Type | Description |
|---|---|---|
editCreatorTx(ctx, settings) | EditCreatorSettings | Transfer creator role |
editManagersTx(ctx, settings) | EditManagerSettings | Edit managers, weights, authorities |
editFeesTx(ctx, settings) | EditFeeSettings | Update fee structure |
editScheduleTx(ctx, settings) | EditScheduleSettings | Configure repeating time cycles that gate deposits, automation, and management windows |
editAutomationTx(ctx, settings) | EditAutomationSettings | Configure automation |
editLpTx(ctx, settings) | EditLpSettings | Configure LP settings |
editMetadataTx(ctx, settings) | EditMetadataSettings | Update name, symbol, and metadata URI (JSON with name, symbol, description, image, cover) |
editDepositsTx(ctx, settings) | EditDepositsSettings | Enable/disable deposits |
editForceRebalanceTx(ctx, settings) | EditForceRebalanceSettings | Enable/disable force rebalance |
editCustomRebalanceTx(ctx, settings) | EditCustomRebalanceSettings | Enable/disable custom rebalance |
editAddTokenDelayTx(ctx, settings) | EditAddTokenSettings | Set add-token time-lock |
editUpdateWeightsDelayTx(ctx, settings) | EditUpdateWeightsSettings | Set weight-update time-lock |
editSwapDelayTx(ctx, settings) | EditMakeDirectSwapSettings | Set direct-swap time-lock |
Token Composition
addOrEditTokenTx(ctx, settings): Promise<TxPayloadBatchSequence>
Add a new token or edit an existing token’s oracle configuration. Settings type: AddOrEditTokenInput.
updateWeightsTx(ctx, settings): Promise<TxPayloadBatchSequence>
Update target weights for tokens in the vault. Settings type: UpdateWeightsInput.
makeDirectSwapTx(ctx, settings, jup_swap_ix?): Promise<TxPayloadBatchSequence>
Execute a direct token swap within the vault. Settings type: MakeDirectSwapInput.
Intent Methods
Fetching
fetchIntent(intentPubkey: string): Promise<Intent>
fetchMultipleIntents(intentPubkeys: string[]): Promise<Map<string, Intent>>
fetchAllIntents(filter?: IntentFilter): Promise<Intent[]>
fetchCreatedIntents(creatorPubkey: string): Promise<Intent[]>
fetchVaultIntents(vaultPubkey: string): Promise<Intent[]>
Execution & Cancellation
executeVaultIntentTx(params): Promise<TxPayloadBatchSequence>
Execute a pending intent after its time-lock has elapsed.
executeDirectSwapVaultIntentTx(params): Promise<TxPayloadBatchSequence>
Execute a pending direct swap intent with a flash swap.
cancelVaultIntentTx(params): Promise<TxPayloadBatchSequence>
Rebalance Intent Methods
Fetching
fetchRebalanceIntent(pubkey: string): Promise<UIRebalanceIntent>
fetchMultipleRebalanceIntents(pubkeys: string[]): Promise<Map<string, UIRebalanceIntent>>
fetchAllRebalanceIntents(filter?: RebalanceIntentFilter): Promise<UIRebalanceIntent[]>
fetchOwnerRebalanceIntents(ownerPubkey: string): Promise<UIRebalanceIntent[]>
fetchVaultRebalanceIntents(vaultPubkey: string): Promise<UIRebalanceIntent[]>
Deposit & Withdrawal Methods
buyVaultTx(params): Promise<TxPayloadBatchSequence>
Deposit tokens into a vault to receive vault tokens.
depositTokensTx(params): Promise<TxPayloadBatchSequence>
Add more tokens to an existing deposit before locking.
lockDepositsTx(params): Promise<TxPayloadBatchSequence>
Lock deposits and start the auction process.
sellVaultTx(params): Promise<TxPayloadBatchSequence>
Withdraw from a vault by burning vault tokens. If keep_tokens contains ALL mints from the vault’s composition (including inactive), price updates and auctions are skipped — the withdrawal goes directly to the redeem stage. The user can then call redeemTokensTx themselves (no keeper needed) for the fastest withdrawal path. This is still two transactions: sellVaultTx + redeemTokensTx.
Rebalancing Methods
All rebalancing methods are permissionless. Thekeeper parameter is simply the signing wallet.
rebalanceVaultTx(params): Promise<TxPayloadBatchSequence>
Trigger a keeper-initiated rebalance to restore target weights.
cancelRebalanceIntentTx(params): Promise<TxPayloadBatchSequence>
Oracle Price Updates
updateTokenPricesTx(params): Promise<TxPayloadBatchSequence>
Refresh on-chain oracle prices for all tokens during a rebalance. Handles Pyth VAA lifecycle automatically.
updatePythPriceFeedsTx(params): Promise<TxPayloadBatchSequence>
Update specific Pyth price feeds standalone (no rebalance context). Find price feed IDs at Pyth Price Feed IDs.
Flash Swaps
flashSwapTx(params): Promise<TxPayloadBatchSequence>
Execute an atomic flash swap during rebalance auctions.
Minting & Redeeming
These methods are permissionless. Thekeeperparameter is simply the signing wallet — any user can call them. Users performing a fast withdrawal (allkeep_tokens) can callredeemTokensTxdirectly without waiting for a keeper.
mintTx(params): Promise<TxPayloadBatchSequence>
Mint vault tokens after a deposit rebalance completes auctions.
redeemTokensTx(params): Promise<TxPayloadBatchSequence>
Redeem underlying tokens from a withdrawal that has reached the redeem stage. For fast withdrawals (all keep_tokens), this is ready immediately after sellVaultTx.
Bounties
addBountyTx(params): Promise<TxPayloadBatchSequence>
Add bounty to a vault for incentivizing keeper automation.
claimBountyTx(params): Promise<TxPayloadBatchSequence>
Distribute earned bounties to all keepers who completed tasks during the rebalance, award a task bounty to the caller, return unused bounty to the depositor, and close the rebalance intent account. Any wallet can call this.
Fee Management
withdrawVaultFeesTx(params): Promise<TxPayloadBatchSequence>
Withdraw accumulated fees. Auto-detects which fee types the claimer can collect.
claimTokenFeesFromVaultTx(params): Promise<TxPayloadBatchSequence>
Claim remaining fee tokens from an existing WithdrawVaultFees account.
Fee Account Fetching
fetchWithdrawVaultFees(pubkey: string): Promise<WithdrawVaultFees>
fetchMultipleWithdrawVaultFees(pubkeys: string[]): Promise<Map<string, WithdrawVaultFees>>
fetchAllWithdrawVaultFees(filter?: WithdrawVaultFeesFilter): Promise<WithdrawVaultFees[]>
fetchVaultWithdrawVaultFees, fetchManagerWithdrawVaultFees, fetchCreatorWithdrawVaultFees, fetchHostWithdrawVaultFees, fetchSymmetryWithdrawVaultFees.
Lookup Tables
rewriteLookupTablesTx(params): Promise<TxPayloadBatchSequence>
Rebuild address lookup tables for a vault.
Sending Transactions
signAndSendTxPayloadBatchSequence(params): Promise<TransactionSignature[][]>
Sign and send a TxPayloadBatchSequence. Batches are sent sequentially; transactions within a batch in parallel.
signAndSendVersionedTxs(params): Promise<TransactionSignature[][]>
Sign and send pre-built versioned transactions.
Wallet Interface
Standalone Utilities
| Export | Signature | Description |
|---|---|---|
getJupTokenLedgerAndSwapInstructions | (params) => Promise<{tokenLedgerInstruction, swapInstruction, addressLookupTableAddresses, quoteResponse}> | Build Jupiter swap instructions for flash swaps |
getSwapPairs | (rebalanceIntent: RebalanceIntent, vault: Vault) => SwapPair[] | Compute required swap pairs for a rebalance |
isRebalanceRequired | (vault: Vault, connection: Connection) => Promise<boolean> | Check if vault needs rebalancing |
The on-chain program uses “basket” terminology internally (e.g.,
Basket, basket_fees, mint_basket). The SDK and documentation use “vault” as the user-facing term. When reading on-chain data or error messages, “basket” and “vault” refer to the same thing.Constants
| Constant | Value | Description |
|---|---|---|
VAULTS_V3_PROGRAM_ID | BASKT7aKd8n7ibpUbwLP3Wiyxyi3yoiXsxBk4Hpumate | Program address |
COMPUTE_UNITS | 1,000,000 | Default compute unit limit |
PRIORITY_FEE | 25,000 | Default priority fee (micro-lamports) |
MAX_SUPPORTED_TOKENS_PER_VAULT | 100 | Max tokens per vault |
MAX_MANAGERS_PER_VAULT | 10 | Max managers per vault |
MAX_ORACLES_PER_TOKEN | 4 | Max oracle sources per token |
HUNDRED_PERCENT_BPS | 10,000 | 100% in basis points |