Skip to content

cryptoalgebra/alm-sdk

Repository files navigation

Algebra ALM SDK

This SDK provides utilities for interacting with Algebra ALM vaults, designed to simplify integration into your project.

📦 Installation

Using npm:

npm install @cryptoalgebra/alm-sdk

or yarn:

yarn add @cryptoalgebra/alm-sdk

🧾 Project Structure

⚙️ Blockchain Interaction

This SDK uses ethers.js for blockchain interactions (calls, sending transactions). It is also compatible with viem/wagmi via Viem/Wagmi Provider conversion

📚 Vault GET Methods

  • getVaultsByPool

Get a list of vault addresses associated with a specific pool

const vaultAddresses: string[] = await getVaultsByPool(poolAddress, chainId);
  • getExtendedAlgebraVault

Retrieve extended vault information, including token addresses, deposit token, vault TVL in each token, and 24h APR

const vaultData: ExtendedAlgebraVault = await getExtendedAlgebraVault(
    vaultAddress,
    chainId,
    provider,
    token0.decimals,
    token1.decimals
);
  • 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.

if (useNativeToken) {
    const tx = await depositNativeToken(
        account,
        vault.allowTokenA ? amount : "0",
        vault.allowTokenB ? amount : "0",
        vaultAddress,
        provider
    );
} else {
    const tx = await deposit(
        account,
        vault.allowTokenA ? amount : "0",
        vault.allowTokenB ? amount : "0",
        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
    );
}

🔗 Examples & Integration:

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published