Overview
BaseClient provides core functionality used by all GLAM SDK clients. It manages connections, programs, transactions, and common utilities.
Constructor
new BaseClient(config?: GlamClientConfig)
Configuration options for the client
Anchor provider instance. If not provided, uses anchor.AnchorProvider.env()
Wallet instance for signing transactions
Solana cluster network. Auto-detected from provider URL if not specified
State account public key to connect to a vault
Jupiter API key for swap operations
Custom Jupiter API client instance
Use staging programs instead of production
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
Public key of the transaction signer from the provider.
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.
Legacy transaction to convert
Transaction signer. Defaults to client.signer
Compute unit limit. Auto-calculated via simulation if not provided
getPriorityFeeMicroLamports
(tx: VersionedTransaction) => Promise<number>
Function to calculate priority fee
lookupTables
PublicKey[] | AddressLookupTableAccount[]
Address lookup tables
Throw error if simulation fails
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
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.
Filter by account type (e.g., “tokenizedVault”)
// 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;
}