After creating a vault, the admin can update several configuration parameters such as fees, cap, withdrawal settings, and manager authority.
Managers: the sdk-scripts CLI updates one field per call with vault:update-config and handles the extra-account wiring for you. This page shows the programmatic SDK path for embedding config updates in your own code.
What Can Be Updated
| Parameter | Updatable | Updated By |
|---|
| Max cap | Yes | Admin |
| Locked profit degradation duration | Yes | Admin |
| Withdrawal waiting period | Yes | Admin |
| Performance fees | Yes | Admin |
| Management fees | Yes | Admin |
| Issuance fee | Yes | Admin |
| Redemption fee | Yes | Admin |
| Manager | Yes | Admin |
| Vault name | No | — |
| Vault description | No | — |
| Asset mint | No | — |
Update Via UI
The simplest path is the Voltr manage page:
https://voltr.xyz/manage/<VAULT_PUBKEY>
Update Via SDK
The v2 SDK uses getUpdateVaultConfigInstructionAsync, one field at a time.
import fs from "fs";
import { createKeyPairSignerFromBytes } from "@solana/kit";
import {
getUpdateVaultConfigInstructionAsync,
findVaultLpMintPda,
VaultConfigField,
} from "@voltr/vault-sdk";
const adminSigner = await createKeyPairSignerFromBytes(
Uint8Array.from(JSON.parse(fs.readFileSync("/path/to/admin.json", "utf-8")))
);
const vault = "YOUR_VAULT_ADDRESS" as const;
Update A u64 Field
const data = new Uint8Array(Buffer.alloc(8));
Buffer.from(data).writeBigUInt64LE(18_446_744_073_709_551_615n, 0);
const updateIx = await getUpdateVaultConfigInstructionAsync({
admin: adminSigner,
vault,
field: VaultConfigField.MaxCap,
data,
});
Update A Fee Field
const feeData = new Uint8Array(Buffer.alloc(2));
Buffer.from(feeData).writeUInt16LE(1_500, 0);
const updateIx = await getUpdateVaultConfigInstructionAsync({
admin: adminSigner,
vault,
field: VaultConfigField.ManagerPerformanceFee,
data: feeData,
});
Management Fee Special Case
For ManagerManagementFee and AdminManagementFee, append the vault LP mint account to the final instruction accounts:
const [vaultLpMint] = await findVaultLpMintPda({ vault });
The vault:update-config command in the sdk-scripts CLI handles this extra-account pattern for you — run it with --mode print to inspect the exact accounts before executing. See CLI & Scripts.
Update Manager
Manager and pending-admin changes use a 32-byte encoded address as the payload.
Serialization Reference
| Field Type | Encoding |
|---|
u64 | 8 bytes, little-endian |
u16 | 2 bytes, little-endian |
| address | 32-byte encoded address |
Be careful when changing manager authority. Once moved, the old manager key can no longer operate the vault.