Skip to main content

createInitializeVaultInstruction

Builds a raw instruction to create a new Strategy Vault with roles, token entries, an LP mint, and Squads smart account integration. This sets up the full vault infrastructure including the Squads multisig for strategy execution. Called by the vault creator.

Usage

import { createInitializeVaultInstruction } from "@exponent-labs/exponent-sdk/client/vaults";
import { Keypair, PublicKey } from "@solana/web3.js";

const ix = createInitializeVaultInstruction(
  {
    payer: wallet.publicKey,
    vault: vaultPda,
    exponentPrices: exponentPricesPda,
    mint: underlyingMintAddress,
    mintLp: lpMintPda,
    tokenLpEscrow: lpEscrowPda,
    feeTreasury: feeTreasuryPda,
    lpDst: payerLpTokenAccount,
    tokenProgram: TOKEN_PROGRAM_ID,
    systemProgram: SYSTEM_PROGRAM_ID,
    associatedTokenProgram: ASSOCIATED_TOKEN_PROGRAM_ID,
    addressLookupTable: lookupTableAddress,
    squadsProgram: SQUADS_PROGRAM_ID,
    squadsProgramConfig: squadsProgramConfigPda,
    squadsTreasury: squadsTreasuryPda,
    squadsSettings: squadsSettingsPda,
    squadsVault: squadsVaultPda,
    squadsPolicy: squadsPolicyPda,
    squadsSettingsTransaction: squadsSettingsTransactionPda,
    squadsProposal: squadsProposalPda,
  },
  {
    manager: managerPublicKey,
    feeTreasuryLpBps: 500,
    tokenEntries: [
      { mint: usdcMint, oracle: usdcOracle, decimals: 6 },
    ],
    maxLpSupply: BigInt(1_000_000_000_000),
    seedId: new Uint8Array([1, 2, 3, 4, 5, 6, 7, 8]),
    initialLpAmount: BigInt(1_000_000),
    lpDecimals: 6,
    vaultType: { openEnded: {} },
    roles: {
      manager: managerPublicKey,
      sentinel: sentinelPublicKey,
    },
    proposalVoteConfig: null,
  }
);

Accounts

NameSignerWritableDescription
payerYesYesThe vault creator and fee payer
vaultNoYesThe Strategy Vault PDA to initialize
exponentPricesNoYesGlobal ExponentPrices account
mintNoNoUnderlying token mint
mintLpNoYesLP token mint to create
tokenLpEscrowNoYesLP token escrow account to create
feeTreasuryNoYesFee treasury LP token account to create
lpDstNoYesPayer’s LP token destination account
tokenProgramNoNoSPL Token program
systemProgramNoNoSystem program
associatedTokenProgramNoNoAssociated Token program
addressLookupTableNoNoAddress lookup table for the vault
squadsProgramNoNoSquads v4 program
squadsProgramConfigNoYesSquads program config PDA
squadsTreasuryNoYesSquads treasury PDA
squadsSettingsNoYesSquads settings account
squadsVaultNoNoSquads vault PDA
squadsPolicyNoYesSquads policy PDA
squadsSettingsTransactionNoYesSquads settings transaction PDA
squadsProposalNoYesSquads proposal PDA

Args

NameTypeDescription
managerPublicKeyManager authority for the vault
feeTreasuryLpBpsnumberFee treasury share in basis points (u16)
tokenEntriesTokenEntry[]Array of token entries the vault accepts
maxLpSupplybigintMaximum LP token supply cap (u64)
seedIdUint8Array8-byte seed identifier for vault PDA derivation
initialLpAmountbigintInitial LP tokens to mint to the creator (u64)
lpDecimalsnumberDecimal places for the LP token mint (u8)
vaultTypeVaultTypeVault type variant (e.g. { openEnded: {} })
rolesVaultRolesRole assignments (manager, sentinel, etc.)
proposalVoteConfigProposalVoteConfig | nullGovernance vote configuration, or null to disable

Returns

TransactionInstruction — a transaction instruction ready to be added to a transaction.