@cryptoalgebra/alm-sdk v1.0.0
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-sdkor yarn:
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
π 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:
7 months ago