@varla/sdk 2.11.0 → 2.13.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/views/core.ts CHANGED
@@ -1664,6 +1664,103 @@ export async function readHypotheticalBorrowCapacity(params: {
1664
1664
  };
1665
1665
  }
1666
1666
 
1667
+ // ---------------------------------------------------------------------------
1668
+ // Current leverage helpers
1669
+ // ---------------------------------------------------------------------------
1670
+
1671
+ export type ComputeCurrentLeverageResult = {
1672
+ /**
1673
+ * Current leverage as a WAD value (1e18 = 1.0×, 2e18 = 2.0×, etc.).
1674
+ *
1675
+ * - `WAD` (1e18) when the account has no debt (unleveraged).
1676
+ * - `0n` when the account is underwater (debt ≥ portfolioValue).
1677
+ */
1678
+ leverageWad: bigint;
1679
+ /**
1680
+ * Whether the account is currently leveraged.
1681
+ *
1682
+ * `true` when both `debt > 0` and `portfolioValue > 0`.
1683
+ */
1684
+ isLeveraged: boolean;
1685
+ };
1686
+
1687
+ /**
1688
+ * Pure-math current leverage computation (zero RPC, zero side-effects).
1689
+ *
1690
+ * Formula:
1691
+ * ```
1692
+ * leverage = portfolioValue / (portfolioValue − debt)
1693
+ * ```
1694
+ *
1695
+ * Edge cases:
1696
+ * - No debt → 1.0× (`WAD`), `isLeveraged: false`.
1697
+ * - No portfolio → 1.0× (`WAD`), `isLeveraged: false`.
1698
+ * - Underwater (debt ≥ portfolioValue) → `0n`, `isLeveraged: true`.
1699
+ */
1700
+ export function computeCurrentLeverage(params: {
1701
+ portfolioValue: bigint;
1702
+ debt: bigint;
1703
+ }): ComputeCurrentLeverageResult {
1704
+ const { portfolioValue, debt } = params;
1705
+
1706
+ // No debt → unleveraged (1.0×).
1707
+ if (debt <= 0n) return { leverageWad: _WAD, isLeveraged: false };
1708
+ // No portfolio → unleveraged (1.0×).
1709
+ if (portfolioValue <= 0n) return { leverageWad: _WAD, isLeveraged: false };
1710
+ // Underwater or exactly at zero equity → degenerate.
1711
+ if (portfolioValue <= debt) return { leverageWad: 0n, isLeveraged: true };
1712
+
1713
+ const equity = portfolioValue - debt;
1714
+ const leverageWad = (portfolioValue * _WAD) / equity;
1715
+ return { leverageWad, isLeveraged: true };
1716
+ }
1717
+
1718
+ export type ReadCurrentLeverage = ComputeCurrentLeverageResult & {
1719
+ /** Raw portfolio value from Core (collateral base units). */
1720
+ portfolioValue: bigint;
1721
+ /** Raw debt from Core (collateral base units). */
1722
+ debt: bigint;
1723
+ };
1724
+
1725
+ /**
1726
+ * Reads on-chain state and computes the current leverage for a borrower.
1727
+ *
1728
+ * Intended for frontend portfolio cards showing "Current Leverage: 2.5×".
1729
+ *
1730
+ * Delegates to {@link readAccountSnapshot} for on-chain data, then applies
1731
+ * the pure-math {@link computeCurrentLeverage}.
1732
+ *
1733
+ * @example
1734
+ * ```ts
1735
+ * import { readCurrentLeverage } from "@varla/sdk/views";
1736
+ *
1737
+ * const lev = await readCurrentLeverage({ core: c.core, user: "0x..." });
1738
+ * if (lev.isLeveraged) {
1739
+ * console.log(`Leverage: ${Number(lev.leverageWad) / 1e18}×`);
1740
+ * }
1741
+ * ```
1742
+ */
1743
+ // wraps: VarlaCore.getAccountSummary
1744
+ export async function readCurrentLeverage(params: {
1745
+ core: {
1746
+ read: {
1747
+ getAccountSummary: (args: readonly [Address]) => Promise<unknown>;
1748
+ };
1749
+ };
1750
+ user: Address;
1751
+ }): Promise<ReadCurrentLeverage> {
1752
+ const snap = await readAccountSnapshot({ core: params.core as any, user: params.user });
1753
+ const result = computeCurrentLeverage({
1754
+ portfolioValue: snap.portfolioValue,
1755
+ debt: snap.debt,
1756
+ });
1757
+ return {
1758
+ ...result,
1759
+ portfolioValue: snap.portfolioValue,
1760
+ debt: snap.debt,
1761
+ };
1762
+ }
1763
+
1667
1764
  // ---------------------------------------------------------------------------
1668
1765
  // Liquidation price helpers
1669
1766
  // ---------------------------------------------------------------------------