> ## Documentation Index
> Fetch the complete documentation index at: https://docs.voltr.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Vault Configuration Updates

> Update vault parameters after creation

After creating a vault, the **admin** can update several configuration parameters such as fees, cap, withdrawal settings, and manager authority.

<Info>
  **Managers:** the [`sdk-scripts` CLI](/vault-owners/operations/cli-and-scripts) 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.
</Info>

## 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:

```text theme={null}
https://voltr.xyz/manage/<VAULT_PUBKEY>
```

## Update Via SDK

The v2 SDK uses `getUpdateVaultConfigInstructionAsync`, one field at a time.

```typescript theme={null}
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

```typescript theme={null}
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

```typescript theme={null}
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:

```typescript theme={null}
const [vaultLpMint] = await findVaultLpMintPda({ vault });
```

The `vault:update-config` command in the [`sdk-scripts`](https://github.com/voltrxyz/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](/vault-owners/operations/cli-and-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 |

<Warning>
  Be careful when changing manager authority. Once moved, the old manager key can no longer operate the vault.
</Warning>
