Skip to Content
TypeScript SDKState Decoders

State Decoders

All decoders are in lib/veil/state.ts.

LendingPool

import { decodeLendingPool, LendingPoolData } from './lib/veil/state'; const accountInfo = await connection.getAccountInfo(poolAddress); const pool: LendingPoolData = decodeLendingPool(accountInfo.data); console.log(pool.totalDeposits); // bigint console.log(pool.totalBorrows); // bigint console.log(pool.supplyIndex); // bigint (WAD-scaled) console.log(pool.borrowIndex); // bigint (WAD-scaled) console.log(pool.paused); // boolean console.log(pool.flashFeeRateBps); // number console.log(pool.oraclePrice); // bigint (raw Pyth price) console.log(pool.oracleExpo); // number (negative exponent)

Compute the current USD price from cache:

const priceUsd = Number(pool.oraclePrice) * Math.pow(10, pool.oracleExpo);

UserPosition

import { decodeUserPosition, UserPositionData } from './lib/veil/state'; import { findUserPositionPda } from './lib/veil/pda'; const [positionPda] = await findUserPositionPda(userPubkey, poolPubkey); const info = await connection.getAccountInfo(positionPda); const pos: UserPositionData = decodeUserPosition(info.data); console.log(pos.depositShares); // bigint console.log(pos.borrowPrincipal); // bigint console.log(pos.borrowIndexSnapshot); // bigint (WAD-scaled)

Compute current balances:

const WAD = 1_000_000_000_000_000_000n; const depositBalance = (pos.depositShares * pool.supplyIndex) / WAD; const currentDebt = (pos.borrowPrincipal * pool.borrowIndex) / pos.borrowIndexSnapshot; const healthFactor = currentDebt === 0n ? BigInt('0xFFFFFFFFFFFFFFFF') : (depositBalance * pool.liquidationThreshold) / currentDebt;

IkaDwalletPosition

import { decodeIkaPosition } from './lib/veil/state'; import { findIkaPosition } from './lib/ika/pda'; import { PROGRAM_ID } from './lib/veil/constants'; const [ikaPda] = await findIkaPosition(poolPubkey, userPubkey, PROGRAM_ID); const info = await connection.getAccountInfo(ikaPda); const ikaPos = decodeIkaPosition(info.data); console.log(ikaPos.owner); // PublicKey console.log(ikaPos.dwallet); // PublicKey (Ika dWallet address) console.log(ikaPos.usdValue); // bigint (USD cents) console.log(ikaPos.curve); // number console.log(ikaPos.signatureScheme); // number console.log(ikaPos.status); // 0=Active 1=Released 2=Liquidated

EncryptedPosition

import { decodeEncryptedPosition } from './lib/veil/state'; const encPos = decodeEncryptedPosition(info.data); console.log(encPos.encDeposit); // Uint8Array(32) — ciphertext account pubkey console.log(encPos.encDebt); // Uint8Array(32) — ciphertext account pubkey // Amounts are hidden — only the position owner can decrypt via FHE key
Last updated on