@cryptoalgebra/alm-sdk
Version:
Algebra ALM SDK
178 lines (149 loc) β’ 5.04 kB
Markdown
# 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, dex);
```
- `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,
dex,
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,
dex,
true,
token0.decimals,
token1.decimals
);
```
- `getTotalSupply`
Returns the total number of vault shares
```ts
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
```ts
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
```ts
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.
```ts
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.
```ts
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.
```ts
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:
- [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)