Skip to main content
After creating a vault, the admin can update various configuration parameters. This is useful for adjusting fees, changing deposit caps, or modifying the withdrawal waiting period.

What Can Be Updated

ParameterUpdatableUpdated By
Max capYesAdmin
Locked profit degradation durationYesAdmin
Withdrawal waiting periodYesAdmin
Performance fees (admin/manager)YesAdmin
Management fees (admin/manager)YesAdmin
Issuance feeYesAdmin
Redemption feeYesAdmin
ManagerYesAdmin
Vault nameNo
Vault descriptionNo
Asset mintNo
Vault name, description, and asset mint are set at creation and cannot be changed afterward. Choose carefully during vault creation.

Update via UI

The simplest way to update vault configuration is through the Ranger manage page:
https://vaults.ranger.finance/manage/<VAULT_PUBKEY>
Connect with the admin wallet and use the configuration update form.

Update via SDK

The createUpdateVaultConfigIx method updates one field at a time. You specify which field to update using the VaultConfigField enum and provide the serialized value as a Buffer.
import { BN } from "@coral-xyz/anchor";
import { VoltrClient, VaultConfigField } from "@voltr/vault-sdk";
import {
  Connection,
  Keypair,
  PublicKey,
  sendAndConfirmTransaction,
} from "@solana/web3.js";
import fs from "fs";

// Setup
const connection = new Connection("your-rpc-url");
const client = new VoltrClient(connection);

const adminKp = Keypair.fromSecretKey(
  Uint8Array.from(JSON.parse(fs.readFileSync("/path/to/admin.json", "utf-8")))
);

const vault = new PublicKey("your-vault-pubkey");

Update Max Cap (u64 field)

const newMaxCap = new BN("18446744073709551615"); // Uncapped (u64 max)
const data = newMaxCap.toArrayLike(Buffer, "le", 8);

const updateMaxCapIx = await client.createUpdateVaultConfigIx(
  VaultConfigField.MaxCap,
  data,
  {
    vault,
    admin: adminKp.publicKey,
  }
);

await sendAndConfirmTransaction([updateMaxCapIx], connection, [adminKp]);

Update a Fee (u16 field)

const newFee = 1500; // 15% in basis points
const feeData = Buffer.alloc(2);
feeData.writeUInt16LE(newFee, 0);

const updateFeeIx = await client.createUpdateVaultConfigIx(
  VaultConfigField.ManagerPerformanceFee,
  feeData,
  {
    vault,
    admin: adminKp.publicKey,
  }
);

await sendAndConfirmTransaction([updateFeeIx], connection, [adminKp]);
Management fee updates require passing vaultLpMint in the accounts object:
const updateMgmtFeeIx = await client.createUpdateVaultConfigIx(
  VaultConfigField.ManagerManagementFee,
  feeData,
  {
    vault,
    admin: adminKp.publicKey,
    vaultLpMint: client.findVaultLpMint(vault),
  }
);

Update Manager (PublicKey field)

const newManager = new PublicKey("new-manager-pubkey");
const managerData = newManager.toBuffer();

const updateManagerIx = await client.createUpdateVaultConfigIx(
  VaultConfigField.Manager,
  managerData,
  {
    vault,
    admin: adminKp.publicKey,
  }
);

await sendAndConfirmTransaction([updateManagerIx], connection, [adminKp]);

VaultConfigField Reference

FieldData TypeSerialization
MaxCapu64new BN(value).toArrayLike(Buffer, "le", 8)
StartAtTsu64new BN(value).toArrayLike(Buffer, "le", 8)
LockedProfitDegradationDurationu64new BN(value).toArrayLike(Buffer, "le", 8)
WithdrawalWaitingPeriodu64new BN(value).toArrayLike(Buffer, "le", 8)
ManagerPerformanceFeeu16Buffer.alloc(2); buf.writeUInt16LE(value, 0)
AdminPerformanceFeeu16Buffer.alloc(2); buf.writeUInt16LE(value, 0)
ManagerManagementFeeu16Buffer.alloc(2); buf.writeUInt16LE(value, 0)
AdminManagementFeeu16Buffer.alloc(2); buf.writeUInt16LE(value, 0)
RedemptionFeeu16Buffer.alloc(2); buf.writeUInt16LE(value, 0)
IssuanceFeeu16Buffer.alloc(2); buf.writeUInt16LE(value, 0)
ManagerPublicKeynew PublicKey("...").toBuffer()
Be extremely careful when updating the Manager field. Once transferred, the old keypair loses all manager authority. There is no way to reverse this without the new keypair holder’s cooperation.