Skip to main content

Overview

The PriceClient provides methods to fetch vault holdings across all supported protocols (tokens, Drift, Kamino) and generate pricing instructions for on-chain valuation.

Methods

getVaultHoldings

Fetches all holdings in the vault including token balances and DeFi positions.
getVaultHoldings(
  commitment: Commitment,
  priceBaseAssetMint?: PublicKey
): Promise<VaultHoldings>
commitment
Commitment
required
Solana commitment level for fetching account data
priceBaseAssetMint
PublicKey
default:"PublicKey.default"
Base asset for pricing. Default is USD. Pass a token mint (e.g., WSOL) to denominate prices in that asset.
Example
const holdings = await glamClient.price.getVaultHoldings("confirmed");

console.log(`Vault state: ${holdings.vaultState.toBase58()}`);
console.log(`Slot: ${holdings.slot}`);
console.log(`Timestamp: ${holdings.timestamp}`);
console.log(`Total holdings: ${holdings.holdings.length}`);

holdings.holdings.forEach(holding => {
  console.log(`${holding.protocol}: ${holding.uiAmount} ${holding.mintAddress.toBase58()}`);
  console.log(`  Price: $${holding.price}`);
  console.log(`  Value: $${holding.uiAmount * holding.price}`);
});
Holdings by protocol
// Get holdings denominated in SOL
const solHoldings = await glamClient.price.getVaultHoldings(
  "confirmed",
  new PublicKey("So11111111111111111111111111111111111111112")
);

// Group by protocol
const byProtocol = solHoldings.holdings.reduce((acc, h) => {
  if (!acc[h.protocol]) acc[h.protocol] = [];
  acc[h.protocol].push(h);
  return acc;
}, {} as Record<string, typeof solHoldings.holdings>);

console.log("Token holdings:", byProtocol.Token?.length ?? 0);
console.log("Drift positions:", byProtocol.DriftProtocol?.length ?? 0);
console.log("Kamino positions:", byProtocol.KaminoLend?.length ?? 0);

priceVaultIxs

Generates pricing instructions for on-chain vault valuation.
priceVaultIxs(): Promise<TransactionInstruction[]>
Returns array of instructions that price all vault positions. Used internally by subscribe/redeem operations. Example
const pricingIxs = await glamClient.price.priceVaultIxs();
console.log(`Generated ${pricingIxs.length} pricing instructions`);

validateAumIx

Generates an instruction to validate the vault’s assets under management.
validateAumIx(): Promise<TransactionInstruction>

priceVaultTokensIx

Generates an instruction to price vault token balances.
priceVaultTokensIx(): Promise<TransactionInstruction>

priceKaminoObligationsIxs

Generates instructions to price Kamino lending positions.
priceKaminoObligationsIxs(): Promise<TransactionInstruction[]>

priceKaminoVaultSharesIx

Generates instructions to price Kamino vault shares.
priceKaminoVaultSharesIx(): Promise<TransactionInstruction[] | null>

priceDriftUsersIx

Generates an instruction to price Drift protocol positions.
priceDriftUsersIx(): Promise<TransactionInstruction | null>

priceDriftVaultDepositorsIx

Generates an instruction to price Drift vault depositor positions.
priceDriftVaultDepositorsIx(): Promise<TransactionInstruction | null>

priceStakeAccountsIx

Generates an instruction to price native SOL stake accounts.
priceStakeAccountsIx(): Promise<TransactionInstruction | null>

Types

VaultHoldings

class VaultHoldings {
  holdings: Holding[];
  
  constructor(
    readonly vaultState: PublicKey,
    readonly vaultPda: PublicKey,
    readonly priceBaseAssetMint: PublicKey,
    readonly slot: number,
    readonly timestamp: number,
    readonly commitment: Commitment
  );
  
  toJson(): string;
}

Holding

Represents a single asset holding within a vault.
class Holding {
  readonly uiAmount: number;
  
  constructor(
    readonly mintAddress: PublicKey,
    readonly decimals: number,
    readonly amount: BN,
    readonly price: number,
    readonly priceMeta: Record<string, any>,
    readonly protocol: string,
    readonly protocolMeta: Record<string, any>
  );
}
Protocol values:
  • "Token" - SPL token balances
  • "DriftProtocol" - Drift trading positions
  • "DriftVaults" - Drift vault shares
  • "KaminoLend" - Kamino lending positions
  • "KaminoVaults" - Kamino vault shares
ProtocolMeta examples:
// Token holding
{
  tokenAccount: PublicKey
}

// Drift spot position
{
  user: PublicKey,
  marketIndex: number,
  direction: "long" | "short",
  marketType: "spot"
}

// Kamino lending position
{
  obligation: PublicKey,
  market: PublicKey,
  reserve: PublicKey,
  direction: "deposit" | "borrow"
}

Build docs developers (and LLMs) love