Skip to main content

Overview

BaseClient provides core functionality used by all GLAM SDK clients. It manages connections, programs, transactions, and common utilities.

Constructor

new BaseClient(config?: GlamClientConfig)
config
GlamClientConfig
Configuration options for the client

Properties

cluster

client.cluster: ClusterNetwork
The Solana cluster network the client is connected to.

provider

client.provider: anchor.Provider
Anchor provider instance used for RPC calls and transaction signing.

connection

client.connection: Connection
Solana web3 connection instance.

signer

client.signer: PublicKey
Public key of the transaction signer from the provider.

wallet

client.wallet: Wallet
Wallet instance for signing transactions.

statePda

client.statePda: PublicKey
State account public key. Must be set to interact with a vault.
client.statePda = new PublicKey("...");

vaultPda

client.vaultPda: PublicKey
Vault account public key, derived from statePda.

mintPda

client.mintPda: PublicKey
Mint account public key, derived from statePda.

escrowPda

client.escrowPda: PublicKey
Escrow account public key, derived from mintPda. Used for queued subscriptions/redemptions.

isVaultConnected

client.isVaultConnected: boolean
Returns true if a vault state PDA has been set.

isMainnet

client.isMainnet: boolean
Returns true if connected to mainnet-beta.

Program accessors

These getters provide access to GLAM program instances. All are lazy-loaded.

protocolProgram

client.protocolProgram: GlamProtocolProgram
GLAM protocol program for vault state management.

mintProgram

client.mintProgram: GlamMintProgram
GLAM mint program for share token operations.

extSplProgram

client.extSplProgram: ExtSplProgram
Extension program for SPL token operations.

extDriftProgram

client.extDriftProgram: ExtDriftProgram
Extension program for Drift protocol integration.

extKaminoProgram

client.extKaminoProgram: ExtKaminoProgram
Extension program for Kamino protocol integration.

extMarinadeProgram

client.extMarinadeProgram: ExtMarinadeProgram
Extension program for Marinade Finance integration.

extStakePoolProgram

client.extStakePoolProgram: ExtStakePoolProgram
Extension program for SPL stake pool integration.

extCctpProgram

client.extCctpProgram: ExtCctpProgram
Extension program for CCTP (Circle) integration.

extOffchainProgram

client.extOffchainProgram: ExtOffchainProgram
Extension program for off-chain operations.

Transaction methods

intoVersionedTransaction

async intoVersionedTransaction(
  tx: Transaction,
  options: TxOptions
): Promise<VersionedTransaction>
Converts a legacy transaction into a versioned transaction with compute budget optimization and lookup tables.
tx
Transaction
required
Legacy transaction to convert
options
TxOptions
required
This method automatically:
  • Simulates the transaction to compute optimal CU limit
  • Adds compute budget instructions
  • Includes GLAM-specific lookup tables
  • Fetches fresh blockhash

sendAndConfirm

async sendAndConfirm(
  tx: VersionedTransaction | Transaction,
  additionalSigners?: Keypair[]
): Promise<TransactionSignature>
Signs, sends, and confirms a transaction.
tx
VersionedTransaction | Transaction
required
Transaction to send
additionalSigners
Keypair[]
Additional keypair signers
Returns the transaction signature.
const tx = await client.intoVersionedTransaction(transaction, {});
const signature = await client.sendAndConfirm(tx);
console.log("Transaction:", signature);
This method:
  • Uses a dedicated TX RPC endpoint on mainnet if configured via TX_RPC env var
  • Skips preflight since simulation already occurred
  • Waits for confirmation via WebSocket or polling
  • Throws GlamError with parsed program logs on failure

Account data methods

fetchStateAccount

async fetchStateAccount(statePda?: PublicKey): Promise<StateAccount>
Fetches the raw state account data.

fetchStateModel

async fetchStateModel(statePda?: PublicKey): Promise<StateModel>
Fetches and builds a complete state model from on-chain accounts.
const state = await client.fetchStateModel();
console.log("Vault name:", state.nameStr);
console.log("Assets:", state.assets);
console.log("Base asset:", state.baseAssetMint);

fetchGlamStates

async fetchGlamStates(filterOptions?: {
  owner?: PublicKey;
  delegate?: PublicKey;
  type?: string;
}): Promise<StateModel[]>
Fetches all GLAM vaults with optional filters.
filterOptions
object
// Get all vaults owned by a manager
const vaults = await client.fetchGlamStates({
  owner: managerPublicKey,
  type: "tokenizedVault"
});

fetchRequestQueue

async fetchRequestQueue(requestQueuePda?: PublicKey): Promise<RequestQueue>
Fetches the request queue for pending subscriptions/redemptions.

fetchProtocolPolicy

async fetchProtocolPolicy<T>(
  integProgramId: PublicKey,
  protocolBitflag: number,
  policyClass: { decode(buffer: Buffer, staging?: boolean): T }
): Promise<T | null>
Fetches a specific protocol policy from the state account.

Balance methods

getSolAndTokenBalances

async getSolAndTokenBalances(owner: PublicKey): Promise<{
  balanceLamports: number;
  uiAmount: number;
  tokenAccounts: TokenAccount[];
}>
Returns SOL and all token balances for an owner.

getVaultBalance

async getVaultBalance(): Promise<number>
Returns vault’s SOL balance in SOL units.

getVaultLamports

async getVaultLamports(): Promise<number>
Returns vault’s SOL balance in lamports.

getVaultTokenBalance

async getVaultTokenBalance(mintPubkey: PublicKey): Promise<{
  amount: BN;
  uiAmount: number;
}>
Returns vault’s token balance for a specific mint.
const balance = await client.getVaultTokenBalance(USDC_MINT);
console.log("USDC balance:", balance.uiAmount);

getMintTokenBalance

async getMintTokenBalance(owner?: PublicKey): Promise<{
  amount: BN;
  uiAmount: number;
}>
Returns owner’s vault share token balance.

ATA helpers

getAta

getAta(
  mint: PublicKey,
  owner: PublicKey,
  tokenProgram?: PublicKey
): PublicKey
Returns the associated token account address for a mint and owner.

getVaultAta

getVaultAta(mint: PublicKey, tokenProgramId?: PublicKey): PublicKey
Returns vault’s associated token account for a mint.

getMintAta

getMintAta(user?: PublicKey): PublicKey
Returns user’s vault share token account.

Utility methods

isLockupEnabled

async isLockupEnabled(): Promise<boolean>
Checks if the vault has lockup enabled for share tokens.

Types

TxOptions

type TxOptions = {
  signer?: PublicKey;
  computeUnitLimit?: number;
  getPriorityFeeMicroLamports?: (tx: VersionedTransaction) => Promise<number>;
  maxFeeLamports?: number;
  useMaxFee?: boolean;
  preInstructions?: TransactionInstruction[];
  postInstructions?: TransactionInstruction[];
  lookupTables?: PublicKey[] | AddressLookupTableAccount[];
  simulate?: boolean;
}

TokenAccount

type TokenAccount = {
  owner: PublicKey;
  pubkey: PublicKey;
  mint: PublicKey;
  programId: PublicKey;
  decimals: number;
  amount: string;
  uiAmount: number;
  frozen: boolean;
}

Build docs developers (and LLMs) love