meng-vaults-sdk
v0.1.15
Published
TypeScript SDK for MetEngine Vaults
Downloads
1,720
Readme
meng-vaults-sdk
TypeScript SDK for MetEngine Vaults — multi-protocol DeFi vaults on Solana.
Install
npm install meng-vaults-sdk @solana/kitUsage
- Fetch a vault
import { fetchVault, encodeVaultName, getVaultPda } from "meng-vaults-sdk";
const [vaultAddress] = await getVaultPda(encodeVaultName("sol-vault"));
const vault = await fetchVault(rpc, vaultAddress);- Initialize depositor account (required once before first deposit)
import { getInitializeDepositorInstruction, getVaultDepositorPda } from "meng-vaults-sdk";
const [depositorAddress] = await getVaultDepositorPda(vaultAddress, signer.address);
const ix = getInitializeDepositorInstruction({
vault: vaultAddress,
vaultDepositor: depositorAddress,
authority: signer,
payer: signer,
});- Deposit
import { getDepositInstruction } from "meng-vaults-sdk";
const ix = getDepositInstruction({
globalConfig: globalConfigAddress,
vault: vaultAddress,
vaultDepositor: depositorAddress,
vaultTokenAccount: vault.data.tokenAccount,
shareMint: vault.data.shareMint,
userTokenAccount,
userShareAccount,
authority: signer,
amount: 1_000_000n,
minSharesOut: 0n,
});- Request withdraw (locks shares, starts redeem period)
import { getRequestWithdrawInstruction } from "meng-vaults-sdk";
const ix = getRequestWithdrawInstruction({
vault: vaultAddress,
vaultDepositor: depositorAddress,
vaultTokenAccount: vault.data.tokenAccount,
userShareAccount,
authority: signer,
shares: 500_000n,
});- Withdraw (after redeem period has passed)
import { getWithdrawInstruction } from "meng-vaults-sdk";
const ix = getWithdrawInstruction({
vault: vaultAddress,
vaultDepositor: depositorAddress,
vaultTokenAccount: vault.data.tokenAccount,
shareMint: vault.data.shareMint,
userTokenAccount,
userShareAccount,
authority: signer,
});- Cancel withdraw request
import { getCancelWithdrawRequestInstruction } from "meng-vaults-sdk";
const ix = getCancelWithdrawRequestInstruction({
vault: vaultAddress,
vaultDepositor: depositorAddress,
authority: signer,
});- Emergency withdraw (skips redeem period, pays emergency fee)
import { getEmergencyWithdrawInstruction } from "meng-vaults-sdk";
const ix = getEmergencyWithdrawInstruction({
vault: vaultAddress,
vaultDepositor: depositorAddress,
vaultTokenAccount: vault.data.tokenAccount,
shareMint: vault.data.shareMint,
userTokenAccount,
userShareAccount,
authority: signer,
shares: 500_000n,
});- Close depositor account (reclaim rent, must have 0 shares)
import { getCloseDepositorInstruction } from "meng-vaults-sdk";
const ix = getCloseDepositorInstruction({
vault: vaultAddress,
vaultDepositor: depositorAddress,
userShareAccount,
authority: signer,
});Accounts
import {
fetchVault,
fetchMaybeVault,
fetchAllVault,
fetchVaultDepositor,
fetchMaybeVaultDepositor,
fetchGlobalConfig,
} from "meng-vaults-sdk";
const vault = await fetchVault(rpc, vaultAddress);
const depositor = await fetchMaybeVaultDepositor(rpc, depositorAddress);
const vaults = await fetchAllVault(rpc, [vault1, vault2, vault3]);
const config = await fetchGlobalConfig(rpc, globalConfigAddress);PDA Helpers
import {
getVaultPda,
getVaultDepositorPda,
getVaultTokenAccountPda,
getShareMintPda,
getWhitelistEntryPda,
getShareMintMetadataPda,
encodeVaultName,
} from "meng-vaults-sdk";
const [vault] = await getVaultPda(encodeVaultName("sol-vault"));
const [depositor] = await getVaultDepositorPda(vault, userAddress);
const [tokenAccount] = await getVaultTokenAccountPda(vault);
const [shareMint] = await getShareMintPda(vault);
const [whitelist] = await getWhitelistEntryPda(vault, userAddress);
const [metadata] = await getShareMintMetadataPda(shareMint);Math
import { calcSharePrice, calcSharesForDeposit, calcTokensForShares } from "meng-vaults-sdk";
const price = calcSharePrice(vault.data, idleBalance);
const sharesOut = calcSharesForDeposit(vault.data, idleBalance, depositAmount);
const tokensOut = calcTokensForShares(vault.data, idleBalance, sharesToRedeem);Program
import {
MENG_VAULTS_PROGRAM_ADDRESS,
identifyMengVaultsInstruction,
identifyMengVaultsAccount,
} from "meng-vaults-sdk";