@switchxfi/alm-sdk
v2.0.0
Published
SwitchX ALM SDK
Readme
SwitchX ALM SDK
This SDK provides utilities for interacting with SwitchX ALM vaults, designed to simplify integration into your project.
📦 Installation
Using npm:
npm install @switchxfi/alm-sdkor yarn:
yarn add @switchxfi/alm-sdk📚 Vault GET Methods
getVaultsByPool
Get a list of vault addresses associated with a specific pool
const vaultAddresses: string[] = await getVaultsByPool(poolAddress, chainId);getTotalAmounts
Returns the total number of both tokens stored in the vault
const [totalAmount0, totalAmount1] = await getTotalAmounts(
vaultAddress,
provider,
true,
token0.decimals,
token1.decimals
);getTotalSupply
Returns the total number of vault shares
const totalSupply = await getTotalSupply(vaultAddress, provider)👤 User Data in Vaults
getUserAmounts
Returns the user's token balances and share count in the vault. If the raw flag is set, values are returned as BigNumbers
const [userAmount0, userAmount1, shares] = await getUserAmounts(
account,
vaultAddress,
provider,
token0.decimals,
token1.decimals,
true
);calculateUserDepositTokenPNL
Calculates the user’s PNL and ROI in terms of the deposit token
const { pnl, roi } = await calculateUserDepositTokenPNL(
account,
vaultAddress,
userAmount0.toString(),
userAmount1.toString(),
token0.decimals,
token1.decimals,
provider
);🚀 Transactions
approveDepositToken
Approves a token for deposit. Must be called before using the deposit() method. The amount can be a string or number in major units.
const tx = await approveDepositToken(
accountAddress,
0, // token idx can be 0 or 1
vaultAddress,
provider,
amount // (optional)
);deposit/depositNativeToken
Performs a deposit into the vault. The amount0 and amount1 parameters represent the amounts of each token in major units. Pass exactly one positive amount; if both vault tokens are allowed, use the token side selected by the user.
const tokenIndex = selectedTokenIndex; // 0 or 1
const amount0 = tokenIndex === 0 ? amount : "0";
const amount1 = tokenIndex === 1 ? amount : "0";
if (useNativeToken) {
const tx = await depositNativeToken(
account,
amount0,
amount1,
vaultAddress,
provider
);
} else {
const tx = await deposit(
account,
amount0,
amount1,
vaultAddress,
provider
);
}withdraw/withdrawNativeToken
Withdraws a specified number of shares from the vault, returning both underlying tokens to the user. The share amount should be a string or number in major units.
const percentMultiplier = 1; // 100%
const shareToWithdraw = Number(userShare) * percentMultiplier;
const slippage = 1 // 1%
if (useNativeToken) {
const tx = await withdrawNativeToken(
account,
shareToWithdraw,
vaultAddress,
provider,
slippage
);
} else {
const tx = await withdrawWithSlippage(
account,
shareToWithdraw,
vaultAddress,
provider,
slippage
);
}stake/unstake/harvest
Stakes ALM shares into the vault farming distributor and claims farming rewards. unstake and harvest require an explicit lockImmediately choice: pass true to create the veSWITCH lock during the claim, or false to reserve auto-lock rewards as credits for the user to lock later.
await stake(account, vaultAddress, provider, shareAmount);
const lockImmediately = true;
await harvest(account, vaultAddress, provider, lockImmediately);
await unstake(account, vaultAddress, provider, shareAmount, lockImmediately);