npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@jup-ag/lend-read

v0.0.11

Published

utils for jup lend

Readme

Jupiter Lend Read SDK

Read-only TypeScript SDK for Jupiter Lend on-chain programs. Provides typed access to Liquidity pools, Lending (jlToken) markets, and Vaults on Solana.

Installation

pnpm add @jup-ag/lend-read
# or
npm install @jup-ag/lend-read

Quick Start

Using the Unified Client (Recommended)

import { Client } from "@jup-ag/lend-read";
import { PublicKey } from "@solana/web3.js";

// Initialize with default mainnet RPC
const client = new Client();

// Or use a custom RPC endpoint
const client = new Client("https://your-rpc-url.com");

// Or pass an existing Connection
import { Connection } from "@solana/web3.js";
const connection = new Connection("https://your-rpc-url.com");
const client = new Client(connection);

Using Individual Modules

import { Liquidity, Lending, Vault } from "@jup-ag/lend-read";

const liquidity = new Liquidity("https://your-rpc-url.com");
const lending = new Lending("https://your-rpc-url.com");
const vault = new Vault("https://your-rpc-url.com");

Liquidity Module

Access liquidity pool data, interest rates, and user supply/borrow positions.

Usage Examples

const USDC = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const SOL = new PublicKey("So11111111111111111111111111111111111111112");
const user = new PublicKey("YOUR_ADDRESS");

// List all supported tokens
const tokens = await client.liquidity.listedTokens();

// Get market data for a token
const data = await client.liquidity.getOverallTokenData(USDC);

// Batch fetch multiple tokens
const allData = await client.liquidity.getOverallTokensData([USDC, SOL]);

// Get user supply position
const { userSupplyData } = await client.liquidity.getUserSupplyData(user, USDC);

// Get user borrow position
const { userBorrowData } = await client.liquidity.getUserBorrowData(user, USDC);

// Get combined supply + borrow across multiple tokens
const combined = await client.liquidity.getUserMultipleBorrowSupplyData(
  user,
  [USDC, SOL], // supply tokens
  [USDC], // borrow tokens
);

Methods

| Method | Parameters | Returns | Description | | ------------------------------------------------------------------- | -------------------------------------- | ------------------------------------------- | ----------------------------------------------------------- | | listedTokens() | - | PublicKey[] | All token mints with reserves in the liquidity program | | getLiquidityAccount() | - | LiquidityAccount | Main liquidity account with authority, auths, and guardians | | getRevenueCollector() | - | PublicKey | Revenue collector address | | getRevenue(token) | token: PublicKey | BN | Calculated revenue for a token | | getOverallTokenData(token) | token: PublicKey | OverallTokenData | Complete market data for a single token | | getOverallTokensData(tokens) | tokens: PublicKey[] | OverallTokenData[] | Batch market data for multiple tokens | | getAllOverallTokensData() | - | OverallTokenData[] | Market data for all listed tokens | | getExchangePricesAndConfig(token) | token: PublicKey | ExchangePricesAndConfig | Exchange prices and rate configuration | | getRateConfig(token) | token: PublicKey | RateModelAccount \| null | Interest rate model parameters | | getTotalAmounts(token) | token: PublicKey | TotalAmounts \| null | Total supply/borrow amounts | | getUserSupply(user, token) | user: PublicKey, token: PublicKey | UserSupplyPositionAccount \| BN | Raw user supply position (BN(0) if none) | | getUserBorrow(user, token) | user: PublicKey, token: PublicKey | UserBorrowPositionAccount \| BN | Raw user borrow position (BN(0) if none) | | getUserSupplyData(user, token) | user: PublicKey, token: PublicKey | { userSupplyData, overallTokenData } | Processed user supply with market context | | getUserBorrowData(user, token) | user: PublicKey, token: PublicKey | { userBorrowData, overallTokenData } | Processed user borrow with market context | | getUserMultipleSupplyData(user, tokens) | user: PublicKey, tokens: PublicKey[] | { userSuppliesData, overallTokensData } | Batch supply data across tokens | | getUserMultipleBorrowData(user, tokens) | user: PublicKey, tokens: PublicKey[] | { userBorrowingsData, overallTokensData } | Batch borrow data across tokens | | getUserMultipleBorrowSupplyData(user, supplyTokens, borrowTokens) | user, supplyTokens[], borrowTokens[] | Combined supply + borrow data | Efficient batch fetch for both | | getAllUserPositions() | - | Array<{ user, supply, borrow }> | All user positions across the protocol | | calculateExchangePrice(config) | config: ExchangePricesAndConfig | ExchangePriceResult | Calculate current exchange prices |

Return Types

OverallTokenData

| Field | Type | Description | | ----------------------- | ---------- | ---------------------------------------------------------------- | | rateData | RateData | Interest rate model configuration | | supplyExchangePrice | BN | Current supply exchange price (scales raw amounts to actual) | | borrowExchangePrice | BN | Current borrow exchange price | | borrowRate | BN | Current borrow interest rate | | supplyRate | BN | Current supply interest rate | | fee | BN | Protocol fee on interest (basis points) | | lastStoredUtilization | BN | Last stored utilization percentage | | lastUpdateTimestamp | BN | Unix timestamp of last on-chain update | | maxUtilization | BN | Maximum allowed utilization (basis points, e.g. 9500 = 95%) | | supplyRawInterest | BN | Total raw supply with interest | | supplyInterestFree | BN | Total supply without interest | | borrowRawInterest | BN | Total raw borrow with interest | | borrowInterestFree | BN | Total borrow without interest | | totalSupply | BN | Total supply (interest + interest-free, exchange-price adjusted) | | totalBorrow | BN | Total borrow (interest + interest-free, exchange-price adjusted) | | revenue | BN | Protocol revenue (balance + borrow - claims - supply) |

UserSupplyData

| Field | Type | Description | | ------------------------ | --------- | ---------------------------------------------------------- | | modeWithInterest | boolean | Whether position accrues interest | | supply | BN | Current supply amount (exchange-price adjusted) | | withdrawalLimit | BN | Current withdrawal limit | | lastUpdateTimestamp | BN | Last position update timestamp | | expandPercent | BN | Rate at which withdrawal limit expands | | expandDuration | BN | Duration over which limit fully expands | | baseWithdrawalLimit | BN | Base withdrawal limit before expansion | | withdrawableUntilLimit | BN | Amount withdrawable up to the current limit | | withdrawable | BN | Actual withdrawable amount (capped by available liquidity) |

UserBorrowData

| Field | Type | Description | | ------------------------ | --------- | -------------------------------------------------------- | | modeWithInterest | boolean | Whether position accrues interest | | borrow | BN | Current borrow amount (exchange-price adjusted) | | borrowLimit | BN | Current borrow/debt ceiling | | lastUpdateTimestamp | BN | Last position update timestamp | | expandPercent | BN | Rate at which borrow limit expands | | expandDuration | BN | Duration over which limit fully expands | | baseBorrowLimit | BN | Base borrow limit before expansion | | maxBorrowLimit | BN | Hard cap on borrow limit | | borrowLimitUtilization | BN | Borrow limit based on pool utilization | | borrowableUntilLimit | BN | Amount borrowable up to the limit | | borrowable | BN | Actual borrowable amount (capped by available liquidity) |

ExchangePricesAndConfig

| Field | Type | Description | | ----------------------- | ----- | ------------------------------------------- | | supplyExchangePrice | BN | Exchange price for supply (raw -> actual) | | borrowExchangePrice | BN | Exchange price for borrow (raw -> actual) | | borrowRate | BN | Current borrow rate | | fee | BN | Fee on interest | | lastStoredUtilization | BN | Last stored utilization | | lastUpdateTimestamp | BN | Last update timestamp | | maxUtilization | BN | Max utilization cap | | supplyRatio | BN? | Supply ratio between interest/interest-free | | borrowRatio | BN? | Borrow ratio between interest/interest-free |


Lending Module

Access jlToken (Jupiter Lend token) markets, exchange prices, rewards, and user positions.

Usage Examples

const USDC = new PublicKey("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v");
const user = new PublicKey("YOUR_ADDRESS");

// Get all jlToken mints
const jlTokens = await client.lending.getAllJlTokens();

// Get jlToken details (rates, supply, conversion)
const details = await client.lending.getJlTokenDetails(USDC);

// Get all jlToken details at once
const allDetails = await client.lending.getAllJlTokenDetails();

// Get user position
const position = await client.lending.getUserPosition(USDC, user);

// Get all user positions
const allPositions = await client.lending.getUserPositions(user);

// Preview deposit/withdraw
import BN from "bn.js";
const previews = await client.lending.getPreviews(
  USDC,
  new BN(1_000_000), // 1 USDC
  new BN(0),
);

// Get rewards config
const rewardsConfig = await client.lending.getJlTokenRewardsRateModelConfig(
  USDC,
);

// Get latest exchange price (via on-chain simulation)
const price = await client.lending.getExchangePrice(USDC);

Methods

| Method | Parameters | Returns | Description | | ---------------------------------------- | ---------------------------------- | -------------------------------------------------------- | -------------------------------------------------- | | getAllJlTokens() | - | PublicKey[] | All jlToken mint addresses | | getJlTokenDetails(mint) | mint: PublicKey | JlTokenDetails | Complete jlToken market data | | getAllJlTokenDetails() | - | JlTokenDetails[] | All jlToken details in one call | | getJlTokenInternalData(mint) | mint: PublicKey | JlTokenInternalData | Internal jlToken data (programs, balances, prices) | | getExchangePrice(mint) | mint: PublicKey | BN | Latest exchange price (simulation with fallback) | | getLatestExchangePriceView(mint) | mint: PublicKey | { tokenExchangePrice, liquidityExchangePrice } \| null | Exchange price via on-chain simulation | | getUserPosition(mint, user) | mint: PublicKey, user: PublicKey | UserPosition | User's jlToken position | | getUserPositions(user) | user: PublicKey | JlTokenDetailsUserPosition[] | All user positions across jlTokens | | getJlTokenRewards(mint) | mint: PublicKey | [PublicKey, BN] | Rewards rate model address and current rate | | getJlTokenRewardsRateModelConfig(mint) | mint: PublicKey | RewardsRateModelConfig | Rewards configuration | | getPreviews(mint, assets, shares) | mint, assets: BN, shares: BN | PreviewData | Preview deposit/mint/withdraw/redeem | | getLendingAdminData() | - | DecodedLendingAdminAccount | Admin account data | | getLendingAdminAuthority() | - | PublicKey | Admin authority | | getLendingAdminRebalancer() | - | PublicKey | Rebalancer address | | getLendingAdminAuths() | - | PublicKey[] | Authorized addresses | | isLendingAuth(auth) | auth: PublicKey | boolean | Check if address is authorized |

Return Types

JlTokenDetails

| Field | Type | Description | | ------------------------ | ---------------- | ------------------------------------------------- | | tokenAddress | PublicKey | jlToken mint address | | name | string | Token name (e.g. "JupLend USDC") | | symbol | string | Token symbol | | decimals | number | Token decimal places | | underlyingAddress | PublicKey | Underlying token mint | | totalAssets | BN | Total underlying assets backing jlTokens | | totalSupply | BN | Total jlToken supply (shares) | | conversionRateToShares | BN | Assets -> jlToken shares conversion rate | | conversionRateToAssets | BN | jlToken shares -> assets conversion rate | | rewardsRate | BN | Current rewards APR | | supplyRate | BN | Base supply rate from liquidity pool | | rebalanceDifference | BN | Difference between liquidity balance and total assets | | userSupplyData | UserSupplyData | Lending protocol's supply position on liquidity |

UserPosition (Lending)

| Field | Type | Description | | ------------------- | ---- | --------------------------------------- | | jlTokenShares | BN | User's jlToken balance (shares) | | underlyingAssets | BN | Value in underlying tokens | | underlyingBalance | BN | User's underlying token wallet balance | | allowance | BN | Token allowance |

PreviewData

| Field | Type | Description | | ----------------- | ---- | --------------------------------------- | | previewDeposit | BN | Shares received for depositing assets | | previewMint | BN | Assets needed to mint shares | | previewWithdraw | BN | Shares burned to withdraw assets | | previewRedeem | BN | Assets received for redeeming shares |

RewardsRateModelConfig

| Field | Type | Description | | -------------- | ---- | ----------------------------------- | | duration | BN | Rewards program duration (seconds) | | startTime | BN | Rewards start timestamp | | endTime | BN | Rewards end timestamp | | startTvl | BN | Minimum TVL for rewards to activate | | maxRate | BN | Maximum rewards rate cap | | rewardAmount | BN | Total reward amount for the period |

JlTokenInternalData

| Field | Type | Description | | ------------------------- | ----------- | ------------------------------- | | liquidity | PublicKey | Liquidity program PDA | | lendingFactory | PublicKey | Lending admin PDA | | lendingRewardsRateModel | PublicKey | Rewards rate model address | | rebalancer | PublicKey | Rebalancer address | | liquidityBalance | BN | Current liquidity pool balance | | liquidityExchangePrice | BN | Liquidity exchange price | | tokenExchangePrice | BN | jlToken exchange price |


Vault Module

Access vault configurations, positions, exchange prices, liquidation data, and risk metrics.

Usage Examples

const vaultId = 1;

// Get total vaults
const total = await client.vault.getTotalVaults();

// Get vault config and state
const config = await client.vault.getVaultConfig(vaultId);
const state = await client.vault.getVaultState(vaultId);

// Get comprehensive vault data (config + state + rates + limits)
const data = await client.vault.getVaultByVaultId(vaultId);

// Get all vaults
const allVaults = await client.vault.getAllVaults();

// Get a user position
const position = await client.vault.getUserPosition({ vaultId, positionId: 1 });

// Get position by NFT ID with vault context
const { userPosition, vaultData } = await client.vault.getPositionByVaultId(
  vaultId,
  1,
);

// Get all positions with risk ratios
const positions = await client.vault.getAllPositionsWithRiskRatio(vaultId);

// Simulate position changes
import BN from "bn.js";
const final = await client.vault.getFinalPosition({
  vaultId,
  positionId: 1,
  newColAmount: new BN(1_000_000),
  newDebtAmount: new BN(500_000),
});

// Get oracle price
const oracle = config.oracle;
const prices = await client.vault.getOraclePrice(oracle);

Methods

| Method | Parameters | Returns | Description | | ----------------------------------------------------------------------------------- | -------------------------------- | -------------------------------------------------------- | ----------------------------------------------- | | getTotalVaults() | - | number | Total number of vaults | | getVaultConfig(vaultId) | vaultId: number | VaultConfig | Vault configuration (tokens, rates, thresholds) | | getVaultState(vaultId) | vaultId: number | VaultState | Current vault state (supply, borrow, branches) | | getVaultByVaultId(vaultId) | vaultId: number | VaultEntireData | Complete vault data in one call | | getAllVaults() | - | VaultEntireData[] | All vaults data with bounded concurrency | | getVaultAdmin() | - | VaultAdmin \| null | Vault admin account | | getUserPosition({ vaultId, positionId }) | { vaultId, positionId } | UserPosition \| null | Single user position | | batchGetUserPositions(positions) | Array<{ vaultId, positionId }> | Array<UserPosition \| null> | Batch fetch positions | | getCurrentPositionState({ vaultId, position }) | { vaultId, position } | UserPositionWithDebt | Current position with debt/liquidation | | getFinalPosition({ vaultId, positionId, newColAmount, newDebtAmount }) | See params | UserPositionWithDebt | Simulate position after changes | | calculateFinalPosition({ vaultId, currentPosition, newColAmount, newDebtAmount }) | See params | UserPositionWithDebt | Calculate final position from current state | | getAllPositionsWithRiskRatio(vaultId) | vaultId: number | Array<NftPosition & { riskRatio }> | All positions with borrow/supply risk ratio | | getAllPositionIdsForVault(vaultId) | vaultId: number | number[] | All position IDs for a vault | | getPositionByVaultId(vaultId, nftId) | vaultId: number, nftId: number | { userPosition, vaultData } | Position + vault data by NFT ID | | getNftOwner(mint) | mint: PublicKey | PublicKey | Owner of a position NFT | | getOraclePrice(oracle) | oracle: PublicKey | { operatePrice, liquidatePrice } | Oracle prices | | getVaultMetadata({ vaultId }) | { vaultId } | VaultMetadata \| null | Vault metadata (cached) | | getTick({ vaultId, tick }) | { vaultId, tick } | TickData \| null | Tick data for a vault | | batchGetTicks(ticks) | Array<{ vaultId, tick }> | Array<TickData \| null> | Batch fetch ticks | | getBranch({ vaultId, branchId }) | { vaultId, branchId } | BranchData \| null | Branch data | | batchGetBranches(branches) | Array<{ vaultId, branchId }> | Array<BranchData \| null> | Batch fetch branches | | getAllBranches({ vaultId }) | { vaultId } | BranchData[] | All branches for a vault | | updateExchangePrices(...) | Supply/borrow mints + prices | { vaultSupplyExchangePrice, vaultBorrowExchangePrice } | Calculate updated vault exchange prices |

Return Types

VaultEntireData

| Field | Type | Description | | ------------------------- | ------------------------ | ----------------------------------------- | | vault | PublicKey | Vault config PDA | | isSmartCol | boolean | Smart collateral enabled | | isSmartDebt | boolean | Smart debt enabled | | constantViews | ConstantViews | Static vault addresses and IDs | | configs | Configs | Rate magnifiers, thresholds, oracle | | exchangePricesAndRates | ExchangePricesAndRates | All exchange prices and interest rates | | limitsAndAvailability | LimitsAndAvailability | Withdrawal/borrow limits and availability | | liquidityUserSupplyData | UserSupplyData | Vault's supply position on liquidity | | liquidityUserBorrowData | UserBorrowData | Vault's borrow position on liquidity | | vaultState | VaultState | Current vault state | | totalSupplyAndBorrow | TotalSupplyAndBorrow | Aggregated supply/borrow amounts |

VaultConfig

| Field | Type | Description | | ---------------------- | ----------- | --------------------------------- | | vaultId | number | Vault identifier | | supplyToken | PublicKey | Collateral token mint | | borrowToken | PublicKey | Debt token mint | | supplyRateMagnifier | number | Supply rate multiplier | | borrowRateMagnifier | number | Borrow rate multiplier | | collateralFactor | number | Max LTV ratio | | liquidationThreshold | number | Liquidation trigger threshold | | liquidationMaxLimit | number | Maximum liquidation amount | | liquidationPenalty | number | Penalty on liquidation | | withdrawGap | number | Withdrawal gap buffer | | borrowFee | number | Fee on new borrows (basis points) | | oracle | PublicKey | Price oracle address | | rebalancer | PublicKey | Rebalancer address |

VaultState

| Field | Type | Description | | ------------------------------ | --------------------- | ------------------------------------- | | topTick | number | Highest active tick | | currentBranch | number | Active branch ID | | totalBranch | number | Total branches created | | totalSupply | BN | Total raw supply | | totalBorrow | BN | Total raw borrow | | totalPositions | number | Number of positions | | nextPositionId | number | Next available position ID | | branchLiquidated | boolean | Whether current branch is liquidated | | currentBranchState | CurrentBranchState? | Current branch details | | vaultSupplyExchangePrice | BN | Vault supply exchange price | | vaultBorrowExchangePrice | BN | Vault borrow exchange price | | liquiditySupplyExchangePrice | BN | Liquidity supply exchange price | | liquidityBorrowExchangePrice | BN | Liquidity borrow exchange price | | absorbedDebtAmount | BN | Debt absorbed from liquidations | | absorbedColAmount | BN | Collateral absorbed from liquidations |

ExchangePricesAndRates

| Field | Type | Description | | ---------------------------------------- | ---- | ---------------------------------- | | lastStoredLiquiditySupplyExchangePrice | BN | Last stored liquidity supply price | | lastStoredLiquidityBorrowExchangePrice | BN | Last stored liquidity borrow price | | lastStoredVaultSupplyExchangePrice | BN | Last stored vault supply price | | lastStoredVaultBorrowExchangePrice | BN | Last stored vault borrow price | | liquiditySupplyExchangePrice | BN | Current liquidity supply price | | liquidityBorrowExchangePrice | BN | Current liquidity borrow price | | vaultSupplyExchangePrice | BN | Current vault supply price | | vaultBorrowExchangePrice | BN | Current vault borrow price | | supplyRateLiquidity | BN | Liquidity supply APR | | borrowRateLiquidity | BN | Liquidity borrow APR | | supplyRateVault | BN | Vault supply APR | | borrowRateVault | BN | Vault borrow APR | | rewardsOrFeeRateSupply | BN | Supply-side rewards or fee rate | | rewardsOrFeeRateBorrow | BN | Borrow-side rewards or fee rate |

LimitsAndAvailability

| Field | Type | Description | | ------------------------ | ---- | ----------------------------------------- | | withdrawLimit | BN | Maximum withdrawal limit | | withdrawableUntilLimit | BN | Amount withdrawable before hitting limit | | withdrawable | BN | Actual withdrawable (capped by liquidity) | | borrowLimit | BN | Maximum borrow limit | | borrowLimitUtilization | BN | Borrow limit from pool utilization | | borrowableUntilLimit | BN | Amount borrowable before hitting limit | | borrowable | BN | Actual borrowable (capped by liquidity) | | minimumBorrowing | BN | Minimum borrow amount |

UserPosition (Vault)

| Field | Type | Description | | ---------------------- | ------------------- | ------------------------------------------ | | vaultId | number | Vault ID | | nftId | number | Position NFT ID | | positionMint | PublicKey | Position NFT mint | | isSupplyOnlyPosition | number \| boolean | Whether supply-only (no debt) | | tick | number | Tick representing collateral-to-debt ratio | | tickId | number | ID within the tick | | supplyAmount | BN | Raw collateral amount | | dustDebtAmount | BN | Small residual debt |

NftPosition

| Field | Type | Description | | ------------------ | ----------- | ------------------------------------ | | nftId | number | Position NFT ID | | owner | PublicKey | Position owner | | isSupplyPosition | boolean | Whether supply-only | | supply | BN | Collateral (exchange-price adjusted) | | beforeSupply | BN | Raw collateral before adjustment | | borrow | BN | Debt (exchange-price adjusted) | | beforeBorrow | BN | Raw debt before adjustment | | dustBorrow | BN | Dust debt (exchange-price adjusted) | | beforeDustBorrow | BN | Raw dust debt | | tick | number | Current tick | | tickId | number | Tick ID | | isLiquidated | boolean | Whether position was liquidated |

UserPositionWithDebt

| Field | Type | Description | | ------------------------- | ---------- | ------------------------------- | | tick | number | Position tick | | tickId | number | Tick ID | | colRaw | BN | Raw collateral | | debtRaw | BN | Raw debt | | dustDebtRaw | BN | Raw dust debt | | finalAmount | BN | Net collateral after debt | | isSupplyOnlyPosition | boolean | Whether supply-only | | userLiquidationStatus | boolean? | Whether position was liquidated | | postLiquidationBranchId | number? | Branch ID after liquidation |


Program IDs (Mainnet)

| Program | Address | | ------------------------- | --------------------------------------------- | | Liquidity | jupeiUmn818Jg1ekPURTpr4mFo29p46vygyykFJ3wZC | | Lending | jup3YeL8QhtSx1e253b2FDvsMNC87fDrgQZivbrndc9 | | Lending Reward Rate Model | jup7TthsMgcR9Y3L277b8Eo9uboVSmu1utkuXHNUKar | | Vaults | jupr81YtYssSyPt8jbnGuiWon5f6x9TcDEFxYe3Bdzi | | Oracle | jupnw4B6Eqs7ft6rxpzYLJZYSnrpRgPcr589n5Kv4oc | | Flashloan | jupgfSgfuAXv4B6R2Uxu85Z1qdzgju79s6MfZekN6XS |

All modules are read-only -- they fetch and decode on-chain accounts via RPC but never submit transactions.