Loading...
Loading...
Solana vault management via GLAM Protocol. Triggers: glam, glam-cli, glam-sdk, vault create/manage, tokenized vault, share class, DeFi vault, treasury, asset management, access control, delegate permissions, Jupiter swap, Drift perpetuals/spot/vaults, Kamino lending/borrow/vaults/farms, staking (Marinade/native/SPL/Sanctum/LST), cross-chain USDC (CCTP), timelock, subscription/redemption, NAV pricing, token transfer. Supports CLI and TypeScript SDK.
npx skill4agent add sendaifun/skills glam# Install CLI
npm install -g @glamsystems/glam-cli
# Configure (~/.config/glam/config.json)
cat > ~/.config/glam/config.json << 'EOF'
{
"keypair_path": "~/.config/solana/id.json",
"json_rpc_url": "https://api.mainnet-beta.solana.com"
}
EOF
# Create vault, set active, enable integrations, verify
glam-cli vault create ./vault-template.json
glam-cli vault set <VAULT_STATE_PUBKEY>
glam-cli integration enable JupiterSwap KaminoLend
glam-cli vault viewJupiterSwapDriftProtocolKaminoLendKaminoVaultsKaminoFarmsDriftVaultsSplTokenCCTPGlamMintMarinadeStakePoolSanctumSingleSanctumMultiStakeProgram--bypass-warningglam-cli vault create ./tokenized-vault-template.json
glam-cli vault set <VAULT_STATE_PUBKEY>
glam-cli integration enable JupiterSwap DriftProtocol KaminoLend
glam-cli manage price # Set initial NAV price
glam-cli jupiter set-max-slippage 100 # Configure swap policy
# Optional: delegate trading permissions (protocol-scoped)
glam-cli delegate grant <TRADER_PUBKEY> SwapAny --protocol JupiterSwap
glam-cli delegate grant <TRADER_PUBKEY> Deposit Withdraw CreateModifyOrders CancelOrders --protocol DriftProtocol
# Optional: set timelock (24 hours)
glam-cli timelock set 86400glam-cli integration enable DriftProtocol
glam-cli drift-protocol init-user # Required once
glam-cli drift-protocol deposit 0 1000 # Deposit USDC collateral
glam-cli drift-protocol perp long 0 1 0 # Open positionglam-cli integration enable KaminoLend
glam-cli kamino-lend init # Required once
glam-cli kamino-lend deposit \
7u3HeHxYDLhnCoErrtycNokbQYbWGzLs6JSDqGAv5PfF \
EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v \
1000| Goal | Integration | Command |
|---|---|---|
| Swap tokens | | |
| Lend for yield | | |
| Stake SOL (liquid) | | |
| Stake SOL (LST) | | |
| Stake SOL (native) | | |
| Kamino vaults | | |
| Drift vaults | | |
| Trade perps | | |
| Trade spot | | |
| Tokenized vault | — | |
| Manage share tokens | — | SDK only: |
| Bridge USDC | | |
| Timelock | — | |
| Error | Solution |
|---|---|
| "Signer is not authorized" | Check |
| "Integration not enabled" | |
| "Asset not in allowlist" | |
| "User not initialized" | |
| "No route found" | Try smaller amount; check token liquidity |
| "Slippage exceeded" | Increase |
| "Insufficient collateral" | |
| "Account is frozen" | SDK: |
| "Missing jupiter_api_key" | Add |
See troubleshooting for detailed solutions.
| Token | Address |
|---|---|
| SOL | |
| USDC | |
| USDT | |
| mSOL | |
| jitoSOL | |
import {
GlamClient,
WSOL,
USDC,
getProgramAndBitflagByProtocolName,
} from "@glamsystems/glam-sdk";
import { BN } from "@coral-xyz/anchor";
const client = new GlamClient({ wallet });
// Create vault
const { vaultPda } = await client.vault.create({
name: "My Vault",
assets: [WSOL, USDC],
});
// Enable Jupiter integration
const perms = getProgramAndBitflagByProtocolName();
const [program, bitflag] = perms["JupiterSwap"];
await client.access.enableProtocols(vaultPda, program, parseInt(bitflag, 2));
// Swap
await client.jupiterSwap.swap(vaultPda, {
inputMint: USDC,
outputMint: WSOL,
amount: new BN(100_000_000),
slippageBps: 50,
});