UNPKG

@cryptoalgebra/alm-sdk

Version:

Algebra ALM SDK

172 lines (143 loc) β€’ 5 kB
# Algebra ALM SDK This SDK provides utilities for interacting with Algebra ALM vaults, designed to simplify integration into your project. ## πŸ“¦ Installation Using npm: ```bash npm install @cryptoalgebra/alm-sdk ``` or yarn: ```bash yarn add @cryptoalgebra/alm-sdk ``` ## 🧾 Project Structure - Contract addresses: https://github.com/cryptoalgebra/alm-sdk/blob/main/src/config/addresses.ts - Subgraph endpoints: https://github.com/cryptoalgebra/alm-sdk/blob/main/src/graphql/constants.ts - Checklist for updating addresses (frontend integration): https://github.com/cryptoalgebra/alm-sdk/blob/main/redeploy-checklist.md ## βš™οΈ 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](https://github.com/cryptoalgebra/integral-ui/blob/integral-1.2-beta/src/hooks/common/useEthersProvider.ts) ## πŸ“š Vault GET Methods - `getVaultsByPool` Get a list of vault addresses associated with a specific pool ```ts 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 ```ts const vaultData: ExtendedAlgebraVault = await getExtendedAlgebraVault( vaultAddress, chainId, provider, token0.decimals, token1.decimals ); ``` - `getTotalAmounts` Returns the total number of both tokens stored in the vault ```ts const [totalAmount0, totalAmount1] = await getTotalAmounts( vaultAddress, provider, true, token0.decimals, token1.decimals ); ``` - `getTotalSupply` Returns the total number of vault shares ```ts 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 ```ts 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 ```ts 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. ```ts 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. ```ts 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. ```ts 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: - [Viem/Wagmi Provider conversion](https://github.com/cryptoalgebra/integral-ui/blob/integral-1.2-beta/src/hooks/common/useEthersProvider.ts) - [ALM Vaults data](https://github.com/cryptoalgebra/integral-ui/blob/integral-1.2-beta/src/hooks/alm/useALMVaults.ts) - [User Data in Vaults](https://github.com/cryptoalgebra/integral-ui/blob/integral-1.2-beta/src/hooks/alm/useUserALMVaults.ts) - [Approve](https://github.com/cryptoalgebra/integral-ui/blob/abc096509f2f32be2cda2b6b30fd3151580a8e97/src/components/create-position/AddAutomatedLiquidityButton/index.tsx#L38) - [Deposit](https://github.com/cryptoalgebra/integral-ui/blob/abc096509f2f32be2cda2b6b30fd3151580a8e97/src/components/create-position/AddAutomatedLiquidityButton/index.tsx#L54) - [Withdraw](https://github.com/cryptoalgebra/integral-ui/blob/abc096509f2f32be2cda2b6b30fd3151580a8e97/src/components/modals/RemoveALMLiquidityModal/index.tsx#L42)