1.0.0 β€’ Published 7 months ago

@cryptoalgebra/alm-sdk v1.0.0

Weekly downloads
-
License
MIT
Repository
-
Last release
7 months ago

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, dex);
  • getExtendedAlgebraVault

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

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

Returns the total number of vault shares

const totalSupply = await getTotalSupply(vaultAddress, provider, dex)

πŸ‘€ 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,
    dex,
    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,
    dex
);

πŸš€ 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,
    dex,
    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,
        dex
    );
} else {
    const tx = await deposit(
        account,
        vault.allowTokenA ? amount : "0",
        vault.allowTokenB ? amount : "0",
        vaultAddress,
        provider,
        dex
    );
}
  • 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;

if (useNativeToken) {
   const tx = await withdrawNativeToken(
        account,
        shareToWithdraw,
        vaultAddress,
        provider,
        dex
    );
} else {
   const tx = await withdraw(
        account,
        shareToWithdraw,
        vaultAddress,
        provider,
        dex
    );
}

πŸ”— Examples & Integration: