@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/AGENTS.md +9 -9
- package/CHANGELOG.md +17 -0
- package/dist/contracts.d.ts +11 -3
- package/dist/contracts.d.ts.map +1 -1
- package/dist/contracts.js +19 -3
- package/dist/contracts.js.map +1 -1
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/views/admin.d.ts +25 -0
- package/dist/views/admin.d.ts.map +1 -1
- package/dist/views/admin.js +62 -1
- package/dist/views/admin.js.map +1 -1
- package/dist/views/core.d.ts +64 -0
- package/dist/views/core.d.ts.map +1 -1
- package/dist/views/core.js +59 -0
- package/dist/views/core.js.map +1 -1
- package/package.json +1 -1
- package/src/contracts.ts +30 -4
- package/src/types.ts +8 -0
- package/src/views/admin.ts +84 -1
- package/src/views/core.ts +97 -0
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
|
// ---------------------------------------------------------------------------
|