@permissionless-technologies/upd-sdk 0.1.0 → 0.2.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.
Files changed (47) hide show
  1. package/dist/chunk-3V62JGJY.js +192 -0
  2. package/dist/chunk-3V62JGJY.js.map +1 -0
  3. package/dist/{chunk-ZSWETUGH.cjs → chunk-7BP37BGO.cjs} +359 -31
  4. package/dist/chunk-7BP37BGO.cjs.map +1 -0
  5. package/dist/{chunk-R64I3LAO.js → chunk-AGPBQ56J.js} +81 -155
  6. package/dist/chunk-AGPBQ56J.js.map +1 -0
  7. package/dist/chunk-KSGUFTW3.cjs +206 -0
  8. package/dist/chunk-KSGUFTW3.cjs.map +1 -0
  9. package/dist/{chunk-WRPVPA7E.cjs → chunk-LECDXCSW.cjs} +105 -184
  10. package/dist/chunk-LECDXCSW.cjs.map +1 -0
  11. package/dist/{chunk-4RBWWS2X.js → chunk-PS6EIE5E.js} +359 -32
  12. package/dist/chunk-PS6EIE5E.js.map +1 -0
  13. package/dist/{chunk-RIRT4JX6.js → chunk-TYRBIJVF.js} +3 -228
  14. package/dist/chunk-TYRBIJVF.js.map +1 -0
  15. package/dist/{chunk-ZDAHLZWC.cjs → chunk-VZZN3BR3.cjs} +2 -228
  16. package/dist/chunk-VZZN3BR3.cjs.map +1 -0
  17. package/dist/contracts/index.cjs +13 -13
  18. package/dist/contracts/index.d.cts +104 -24
  19. package/dist/contracts/index.d.ts +104 -24
  20. package/dist/contracts/index.js +2 -2
  21. package/dist/core/index.cjs +17 -17
  22. package/dist/core/index.d.cts +1 -1
  23. package/dist/core/index.d.ts +1 -1
  24. package/dist/core/index.js +3 -3
  25. package/dist/{index-XNClksom.d.ts → index-BMgIlGvW.d.ts} +11 -3
  26. package/dist/{index-yRBqVOHV.d.cts → index-D6VgT_bZ.d.cts} +11 -3
  27. package/dist/index.cjs +50 -50
  28. package/dist/index.d.cts +1 -1
  29. package/dist/index.d.ts +1 -1
  30. package/dist/index.js +4 -4
  31. package/dist/react/index.cjs +145 -22
  32. package/dist/react/index.cjs.map +1 -1
  33. package/dist/react/index.d.cts +112 -1
  34. package/dist/react/index.d.ts +112 -1
  35. package/dist/react/index.js +126 -5
  36. package/dist/react/index.js.map +1 -1
  37. package/package.json +3 -1
  38. package/dist/chunk-4RBWWS2X.js.map +0 -1
  39. package/dist/chunk-4VXNJTNQ.cjs +0 -58
  40. package/dist/chunk-4VXNJTNQ.cjs.map +0 -1
  41. package/dist/chunk-63FIKV36.js +0 -49
  42. package/dist/chunk-63FIKV36.js.map +0 -1
  43. package/dist/chunk-R64I3LAO.js.map +0 -1
  44. package/dist/chunk-RIRT4JX6.js.map +0 -1
  45. package/dist/chunk-WRPVPA7E.cjs.map +0 -1
  46. package/dist/chunk-ZDAHLZWC.cjs.map +0 -1
  47. package/dist/chunk-ZSWETUGH.cjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/deployments/31337.json","../src/deployments/11155111.json","../src/deployments/index.ts","../src/core/quote.ts","../src/core/health.ts"],"names":["__default","PRICE_PRECISION"],"mappings":"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","file":"chunk-KSGUFTW3.cjs","sourcesContent":["{\n \"contracts\": {\n \"UPDToken\": \"0x0000000000000000000000000000000000000000\",\n \"PriceOracle\": \"0x0000000000000000000000000000000000000000\",\n \"StabilizerNFT\": \"0x0000000000000000000000000000000000000000\",\n \"OvercollateralizationReporter\": \"0x0000000000000000000000000000000000000000\",\n \"InsuranceEscrow\": \"0x0000000000000000000000000000000000000000\",\n \"BridgeEscrow\": \"0x0000000000000000000000000000000000000000\",\n \"sUPD\": \"0x0000000000000000000000000000000000000000\"\n },\n \"implementations\": {\n \"PriceOracle\": \"0x0000000000000000000000000000000000000000\",\n \"StabilizerNFT\": \"0x0000000000000000000000000000000000000000\",\n \"OvercollateralizationReporter\": \"0x0000000000000000000000000000000000000000\"\n },\n \"libraries\": {\n \"LinkedListLib\": \"0x0000000000000000000000000000000000000000\",\n \"CollateralMathLib\": \"0x0000000000000000000000000000000000000000\"\n },\n \"templates\": {\n \"StabilizerEscrow\": \"0x0000000000000000000000000000000000000000\",\n \"PositionEscrow\": \"0x0000000000000000000000000000000000000000\"\n },\n \"external\": {\n \"stETH\": \"0x0000000000000000000000000000000000000000\",\n \"lido\": \"0x0000000000000000000000000000000000000000\",\n \"oracleSigner\": \"0x0000000000000000000000000000000000000000\"\n },\n \"metadata\": {\n \"chainId\": 31337,\n \"deployBlock\": 0,\n \"deployTimestamp\": 0,\n \"deployer\": \"0x0000000000000000000000000000000000000000\"\n }\n}\n","{\n \"contracts\": {\n \"UPDToken\": \"0xcF6Ace4Ff3B6f2e56E2Bd89a68cf5CA148Bd69a8\",\n \"PriceOracle\": \"0x415eb7A422291231a27EC86673B5d5ae0e1aD849\",\n \"StabilizerNFT\": \"0x4B705a4773f110F1716337a6C34eeaA4f575ee9f\",\n \"OvercollateralizationReporter\": \"0xA4dF955BB8eF2047deC4Ff889152479D5D62e287\",\n \"InsuranceEscrow\": \"0xc2Ae7a917c77B459951f56E73854Faa51b8c6103\",\n \"BridgeEscrow\": \"0x7BfDE5064ED50b4778B0983cc345a76DAFAC00Aa\"\n },\n \"implementations\": {\n \"PriceOracle\": \"0x7205C15a8266Fc203045b8B5b7CD2f4B41082c89\",\n \"StabilizerNFT\": \"0x82Ac19eC8bc8a660112333A250274b18ba05e8da\",\n \"OvercollateralizationReporter\": \"0x84499938994b7555A0C2759001B8293a0f23FF49\"\n },\n \"libraries\": {\n \"LinkedListLib\": \"0x28C62c4D84014c0714001483a7FB9C1902cB3E7D\",\n \"CollateralMathLib\": \"0xb7FC9e16380afce7Bcbb1a4B903fe3A3564CebCE\"\n },\n \"templates\": {\n \"StabilizerEscrow\": \"0x37302F82605EA0121Dc28b8950E41A8CEa817e50\",\n \"PositionEscrow\": \"0x3B0F4a18d41bf3Aa7179578c193c579f9043c948\",\n \"StabilizerEscrowBeacon\": \"0x82868B7FB57b14AdA6954f34acc1085d6fC189f9\",\n \"PositionEscrowBeacon\": \"0xa0233E45Fd5f14fe10c66ff1A1815ce54Cda1a33\",\n \"BeaconProxyFactory\": \"0xb44181b1671760B814cB5a96eD345160b9faaB61\"\n },\n \"external\": {\n \"stETH\": \"0x3e3FE7dBc6B4C189E7128855dD526361c49b40Af\",\n \"lido\": \"0x3e3FE7dBc6B4C189E7128855dD526361c49b40Af\",\n \"oracleSigner\": \"0xDEAD59BD1E61a3B6AB81806A30f4102831b70001\"\n },\n \"metadata\": {\n \"chainId\": 11155111,\n \"deployBlock\": 0,\n \"deployTimestamp\": 1775502732,\n \"deployer\": \"0xdEadDEADb916b00D02f4f2db062Fb2C47fe0689b\"\n }\n}","/**\n * Deployment Configuration Loader\n *\n * Loads UPD contract addresses based on chain ID.\n * JSON structure matches Forge deployment output exactly — no transformation needed.\n */\n\nimport type { Address } from 'viem'\n\nexport interface UPDDeploymentConfig {\n chainId: number\n /** Proxy/final contract addresses — what integrators use */\n contracts: {\n UPDToken: Address\n PriceOracle: Address\n StabilizerNFT: Address\n OvercollateralizationReporter: Address\n InsuranceEscrow: Address\n BridgeEscrow?: Address\n sUPD?: Address\n }\n /** UUPS implementation addresses — for upgrades only */\n implementations: {\n PriceOracle: Address\n StabilizerNFT: Address\n OvercollateralizationReporter: Address\n sUPD?: Address\n }\n /** Externally deployed Solidity libraries */\n libraries: {\n LinkedListLib: Address\n CollateralMathLib: Address\n }\n /** Clone template implementations (used by StabilizerNFT for escrow deployment) */\n templates: {\n StabilizerEscrow: Address\n PositionEscrow: Address\n }\n /** Third-party / external addresses */\n external: {\n stETH: Address\n lido: Address\n oracleSigner: Address\n }\n metadata: {\n deployBlock: number\n deployTimestamp: number\n deployer: Address\n }\n}\n\ninterface DeploymentJSON {\n contracts: Record<string, string>\n implementations: Record<string, string>\n libraries: Record<string, string>\n templates: Record<string, string>\n external: Record<string, string>\n metadata: {\n chainId: number\n deployBlock: number\n deployTimestamp: number\n deployer: string\n }\n}\n\nfunction parseDeployment(json: DeploymentJSON, chainId: number): UPDDeploymentConfig {\n return {\n chainId,\n contracts: {\n UPDToken: json.contracts.UPDToken as Address,\n PriceOracle: json.contracts.PriceOracle as Address,\n StabilizerNFT: json.contracts.StabilizerNFT as Address,\n OvercollateralizationReporter: json.contracts.OvercollateralizationReporter as Address,\n InsuranceEscrow: json.contracts.InsuranceEscrow as Address,\n BridgeEscrow: json.contracts.BridgeEscrow as Address | undefined,\n sUPD: json.contracts.sUPD as Address | undefined,\n },\n implementations: {\n PriceOracle: json.implementations.PriceOracle as Address,\n StabilizerNFT: json.implementations.StabilizerNFT as Address,\n OvercollateralizationReporter: json.implementations.OvercollateralizationReporter as Address,\n sUPD: json.implementations.sUPD as Address | undefined,\n },\n libraries: {\n LinkedListLib: json.libraries.LinkedListLib as Address,\n CollateralMathLib: json.libraries.CollateralMathLib as Address,\n },\n templates: {\n StabilizerEscrow: json.templates.StabilizerEscrow as Address,\n PositionEscrow: json.templates.PositionEscrow as Address,\n },\n external: {\n stETH: json.external.stETH as Address,\n lido: json.external.lido as Address,\n oracleSigner: json.external.oracleSigner as Address,\n },\n metadata: {\n deployBlock: json.metadata.deployBlock,\n deployTimestamp: json.metadata.deployTimestamp,\n deployer: json.metadata.deployer as Address,\n },\n }\n}\n\n// Import deployment configs — add new chains here\nimport anvil from './31337.json' with { type: 'json' }\nimport sepolia from './11155111.json' with { type: 'json' }\n\nconst deployments: Record<number, UPDDeploymentConfig> = {\n 31337: parseDeployment(anvil as unknown as DeploymentJSON, 31337),\n 11155111: parseDeployment(sepolia as unknown as DeploymentJSON, 11155111),\n}\n\n/** Get deployment config for a chain. Returns null if not found. */\nexport function getDeployment(chainId: number): UPDDeploymentConfig | null {\n return deployments[chainId] ?? null\n}\n\n/** Get deployment config or throw if not found. */\nexport function getDeploymentOrThrow(chainId: number): UPDDeploymentConfig {\n const deployment = getDeployment(chainId)\n if (!deployment) {\n throw new Error(\n `No UPD deployment found for chain ${chainId}. ` +\n `Supported chains: ${getSupportedChainIds().join(', ')}`,\n )\n }\n return deployment\n}\n\n/** Check if a chain has a deployment. */\nexport function hasDeployment(chainId: number): boolean {\n return chainId in deployments\n}\n\n/** Get all supported chain IDs. */\nexport function getSupportedChainIds(): number[] {\n return Object.keys(deployments).map(Number)\n}\n\n/** Get a specific contract address for a chain. */\nexport function getContractAddress(\n chainId: number,\n contractName: keyof UPDDeploymentConfig['contracts'],\n): Address | null {\n const deployment = getDeployment(chainId)\n if (!deployment) return null\n return deployment.contracts[contractName] ?? null\n}\n\n/**\n * Register a deployment for a custom chain at runtime.\n *\n * Use this when deploying your own UPD system on a chain not built into the SDK.\n * Overrides any existing deployment for the same chainId.\n *\n * @example\n * ```ts\n * registerDeployment(8453, {\n * chainId: 8453,\n * contracts: { UPDToken: '0x...', PriceOracle: '0x...', ... },\n * implementations: { ... },\n * libraries: { ... },\n * templates: { ... },\n * external: { stETH: '0x...', lido: '0x...', oracleSigner: '0x...' },\n * metadata: { deployBlock: 12345678, deployTimestamp: 0, deployer: '0x...' },\n * })\n * ```\n */\nexport function registerDeployment(chainId: number, config: UPDDeploymentConfig): void {\n deployments[chainId] = { ...config, chainId }\n}\n","/**\n * UPD Quote Functions — Pure math for estimating mint/burn amounts.\n *\n * These functions require no blockchain calls. They mirror the Solidity\n * CollateralMathLib logic so integrators can show users expected amounts\n * before submitting a transaction.\n */\n\nconst PRICE_PRECISION = 10n ** 18n\nconst SHARE_PRECISION = 10n ** 18n\n\n/**\n * Estimate how much UPD a user will receive for a given ETH amount.\n *\n * @param ethAmount - ETH to deposit (in wei)\n * @param ethUsdPrice - ETH/USD price (18 decimals, e.g. 2000e18 = $2000)\n * @returns Expected UPD amount (18 decimals)\n *\n * @example\n * ```ts\n * const upd = quoteMintUPD(parseEther('1'), 2000n * 10n**18n)\n * // → 2000000000000000000000n (2000 UPD)\n * ```\n */\nexport function quoteMintUPD(ethAmount: bigint, ethUsdPrice: bigint): bigint {\n return (ethAmount * ethUsdPrice) / PRICE_PRECISION\n}\n\n/**\n * Estimate how much stETH a user will receive for burning UPD.\n *\n * @param updAmount - UPD to burn (18 decimals)\n * @param ethUsdPrice - ETH/USD price (18 decimals)\n * @returns Expected stETH amount (in wei)\n *\n * @example\n * ```ts\n * const stEth = quoteBurnUPD(parseUnits('2000', 18), 2000n * 10n**18n)\n * // → 1000000000000000000n (1 stETH)\n * ```\n */\nexport function quoteBurnUPD(updAmount: bigint, ethUsdPrice: bigint): bigint {\n if (ethUsdPrice === 0n) throw new Error('Price cannot be zero')\n return (updAmount * PRICE_PRECISION) / ethUsdPrice\n}\n\n/**\n * Calculate the stabilizer stETH needed for a given user ETH deposit.\n *\n * @param userEth - User's ETH amount (in wei)\n * @param minCollateralRatioBps - Minimum collateral ratio in basis points (e.g. 12500 = 125%)\n * @returns Stabilizer stETH required (in wei)\n *\n * @example\n * ```ts\n * const needed = stabilizerStEthNeeded(parseEther('10'), 12500n)\n * // → 2500000000000000000n (2.5 ETH worth of stETH at 125% ratio)\n * ```\n */\nexport function stabilizerStEthNeeded(\n userEth: bigint,\n minCollateralRatioBps: bigint,\n): bigint {\n return (userEth * (minCollateralRatioBps - 10000n)) / 10000n\n}\n\n/**\n * Calculate the collateralization ratio from stETH balance, price, and UPD liability.\n *\n * @param stEthBalance - stETH held in escrow (in wei)\n * @param ethUsdPrice - ETH/USD price (18 decimals)\n * @param backedUPDAmount - UPD liability (18 decimals)\n * @returns Collateralization ratio in basis points (e.g. 12500 = 125%)\n *\n * @example\n * ```ts\n * const ratio = collateralizationRatio(parseEther('1.25'), 2000n * 10n**18n, parseUnits('2000', 18))\n * // → 12500n (125%)\n * ```\n */\n/**\n * Estimate sUPD shares received for staking UPD.\n *\n * Mirrors sUPD.sol line 136: shares = updAmount * SHARE_PRECISION / shareValue\n *\n * @param updAmount - UPD to stake (18 decimals)\n * @param shareValue - Current sUPD share value (18 decimals, e.g. 1.05e18 = $1.05/share)\n * @returns Expected sUPD shares (18 decimals)\n *\n * @example\n * ```ts\n * const shares = quoteStakeUPD(parseUnits('1000', 18), 1050000000000000000n)\n * // → ~952.38e18 shares (1000 UPD at $1.05/share)\n * ```\n */\nexport function quoteStakeUPD(updAmount: bigint, shareValue: bigint): bigint {\n if (shareValue === 0n) throw new Error('Share value cannot be zero')\n return (updAmount * SHARE_PRECISION) / shareValue\n}\n\n/**\n * Estimate UPD received for unstaking sUPD shares.\n *\n * Mirrors sUPD.sol line 173: updOwed = shares * shareValue / SHARE_PRECISION\n *\n * @param shares - sUPD shares to unstake (18 decimals)\n * @param shareValue - Current sUPD share value (18 decimals)\n * @returns Expected UPD amount (18 decimals)\n *\n * @example\n * ```ts\n * const upd = quoteUnstakeUPD(parseUnits('952.38', 18), 1050000000000000000n)\n * // → ~1000e18 UPD\n * ```\n */\nexport function quoteUnstakeUPD(shares: bigint, shareValue: bigint): bigint {\n return (shares * shareValue) / SHARE_PRECISION\n}\n\nexport function collateralizationRatio(\n stEthBalance: bigint,\n ethUsdPrice: bigint,\n backedUPDAmount: bigint,\n): bigint {\n if (backedUPDAmount === 0n) return BigInt(2) ** BigInt(256) - 1n // type(uint256).max\n const collateralValueUSD = (stEthBalance * ethUsdPrice) / PRICE_PRECISION\n return (collateralValueUSD * 10000n) / backedUPDAmount\n}\n","/**\n * System Health — Pure functions for computing UPD system health metrics.\n *\n * These functions take pre-fetched data (from UPDClient or React hooks) and\n * compute derived health metrics. No blockchain calls — composable with\n * any data source.\n */\n\nimport type { CollateralInfo } from './types.js'\nimport { collateralizationRatio } from './quote.js'\n\n/** Default minimum system collateral ratio: 125% (12500 bps). */\nexport const DEFAULT_MIN_RATIO_BPS = 12500n\n\nexport interface SystemHealth {\n /** System-wide collateralization ratio in basis points (e.g. 12500 = 125%). */\n systemCollateralRatioBps: bigint\n /** Whether the system is at or above the minimum collateral threshold. */\n isHealthy: boolean\n /** USD value of total stETH collateral (18 decimals). */\n collateralValueUsd: bigint\n /** Total UPD supply (18 decimals). */\n totalUPDSupply: bigint\n /** Overcollateralization buffer in USD (collateral - supply). Can be negative. */\n bufferUsd: bigint\n}\n\n/**\n * Compute system health from collateral info and current ETH/USD price.\n *\n * @param collateral - Total stETH collateral and UPD supply (from getCollateralInfo)\n * @param ethUsdPrice - Current ETH/USD price in 18 decimals\n * @param minRatioBps - Minimum healthy ratio in basis points (default: 12500 = 125%)\n * @returns Computed system health metrics\n *\n * @example\n * ```ts\n * const info = await client.getCollateralInfo()\n * const { price } = await oracle.getEthUsdPrice()\n * const health = computeSystemHealth(info, price)\n *\n * if (!health.isHealthy) {\n * console.warn(`System undercollateralized: ${health.systemCollateralRatioBps} bps`)\n * }\n * ```\n */\nexport function computeSystemHealth(\n collateral: CollateralInfo,\n ethUsdPrice: bigint,\n minRatioBps: bigint = DEFAULT_MIN_RATIO_BPS,\n): SystemHealth {\n const PRICE_PRECISION = 10n ** 18n\n\n const collateralValueUsd =\n (collateral.totalStEthCollateral * ethUsdPrice) / PRICE_PRECISION\n\n const systemCollateralRatioBps = collateralizationRatio(\n collateral.totalStEthCollateral,\n ethUsdPrice,\n collateral.totalUPDSupply,\n )\n\n const bufferUsd = collateralValueUsd - collateral.totalUPDSupply\n\n return {\n systemCollateralRatioBps,\n isHealthy: systemCollateralRatioBps >= minRatioBps,\n collateralValueUsd,\n totalUPDSupply: collateral.totalUPDSupply,\n bufferUsd,\n }\n}\n"]}
@@ -1,150 +1,10 @@
1
1
  'use strict';
2
2
 
3
- var chunk4VXNJTNQ_cjs = require('./chunk-4VXNJTNQ.cjs');
4
- var chunkZSWETUGH_cjs = require('./chunk-ZSWETUGH.cjs');
3
+ var chunkKSGUFTW3_cjs = require('./chunk-KSGUFTW3.cjs');
4
+ var chunk7BP37BGO_cjs = require('./chunk-7BP37BGO.cjs');
5
5
  var chunkCZEDT3MS_cjs = require('./chunk-CZEDT3MS.cjs');
6
6
  var viem = require('viem');
7
7
 
8
- // src/deployments/31337.json
9
- var __default = {
10
- contracts: {
11
- UPDToken: "0x0000000000000000000000000000000000000000",
12
- PriceOracle: "0x0000000000000000000000000000000000000000",
13
- StabilizerNFT: "0x0000000000000000000000000000000000000000",
14
- OvercollateralizationReporter: "0x0000000000000000000000000000000000000000",
15
- InsuranceEscrow: "0x0000000000000000000000000000000000000000",
16
- BridgeEscrow: "0x0000000000000000000000000000000000000000",
17
- sUPD: "0x0000000000000000000000000000000000000000"
18
- },
19
- implementations: {
20
- PriceOracle: "0x0000000000000000000000000000000000000000",
21
- StabilizerNFT: "0x0000000000000000000000000000000000000000",
22
- OvercollateralizationReporter: "0x0000000000000000000000000000000000000000"
23
- },
24
- libraries: {
25
- LinkedListLib: "0x0000000000000000000000000000000000000000",
26
- CollateralMathLib: "0x0000000000000000000000000000000000000000"
27
- },
28
- templates: {
29
- StabilizerEscrow: "0x0000000000000000000000000000000000000000",
30
- PositionEscrow: "0x0000000000000000000000000000000000000000"
31
- },
32
- external: {
33
- stETH: "0x0000000000000000000000000000000000000000",
34
- lido: "0x0000000000000000000000000000000000000000",
35
- oracleSigner: "0x0000000000000000000000000000000000000000"
36
- },
37
- metadata: {
38
- chainId: 31337,
39
- deployBlock: 0,
40
- deployTimestamp: 0,
41
- deployer: "0x0000000000000000000000000000000000000000"
42
- }
43
- };
44
-
45
- // src/deployments/11155111.json
46
- var __default2 = {
47
- contracts: {
48
- UPDToken: "0x0000000000000000000000000000000000000000",
49
- PriceOracle: "0x0000000000000000000000000000000000000000",
50
- StabilizerNFT: "0x0000000000000000000000000000000000000000",
51
- OvercollateralizationReporter: "0x0000000000000000000000000000000000000000",
52
- InsuranceEscrow: "0x0000000000000000000000000000000000000000",
53
- BridgeEscrow: "0x0000000000000000000000000000000000000000",
54
- sUPD: "0x0000000000000000000000000000000000000000"
55
- },
56
- implementations: {
57
- PriceOracle: "0x0000000000000000000000000000000000000000",
58
- StabilizerNFT: "0x0000000000000000000000000000000000000000",
59
- OvercollateralizationReporter: "0x0000000000000000000000000000000000000000"
60
- },
61
- libraries: {
62
- LinkedListLib: "0x0000000000000000000000000000000000000000",
63
- CollateralMathLib: "0x0000000000000000000000000000000000000000"
64
- },
65
- templates: {
66
- StabilizerEscrow: "0x0000000000000000000000000000000000000000",
67
- PositionEscrow: "0x0000000000000000000000000000000000000000"
68
- },
69
- external: {
70
- stETH: "0x0000000000000000000000000000000000000000",
71
- lido: "0x0000000000000000000000000000000000000000",
72
- oracleSigner: "0x0000000000000000000000000000000000000000"
73
- },
74
- metadata: {
75
- chainId: 11155111,
76
- deployBlock: 0,
77
- deployTimestamp: 0,
78
- deployer: "0x0000000000000000000000000000000000000000"
79
- }
80
- };
81
-
82
- // src/deployments/index.ts
83
- function parseDeployment(json, chainId) {
84
- return {
85
- chainId,
86
- contracts: {
87
- UPDToken: json.contracts.UPDToken,
88
- PriceOracle: json.contracts.PriceOracle,
89
- StabilizerNFT: json.contracts.StabilizerNFT,
90
- OvercollateralizationReporter: json.contracts.OvercollateralizationReporter,
91
- InsuranceEscrow: json.contracts.InsuranceEscrow,
92
- BridgeEscrow: json.contracts.BridgeEscrow,
93
- sUPD: json.contracts.sUPD
94
- },
95
- implementations: {
96
- PriceOracle: json.implementations.PriceOracle,
97
- StabilizerNFT: json.implementations.StabilizerNFT,
98
- OvercollateralizationReporter: json.implementations.OvercollateralizationReporter
99
- },
100
- libraries: {
101
- LinkedListLib: json.libraries.LinkedListLib,
102
- CollateralMathLib: json.libraries.CollateralMathLib
103
- },
104
- templates: {
105
- StabilizerEscrow: json.templates.StabilizerEscrow,
106
- PositionEscrow: json.templates.PositionEscrow
107
- },
108
- external: {
109
- stETH: json.external.stETH,
110
- lido: json.external.lido,
111
- oracleSigner: json.external.oracleSigner
112
- },
113
- metadata: {
114
- deployBlock: json.metadata.deployBlock,
115
- deployTimestamp: json.metadata.deployTimestamp,
116
- deployer: json.metadata.deployer
117
- }
118
- };
119
- }
120
- var deployments = {
121
- 31337: parseDeployment(__default, 31337),
122
- 11155111: parseDeployment(__default2, 11155111)
123
- };
124
- function getDeployment(chainId) {
125
- return deployments[chainId] ?? null;
126
- }
127
- function getDeploymentOrThrow(chainId) {
128
- const deployment = getDeployment(chainId);
129
- if (!deployment) {
130
- throw new Error(
131
- `No UPD deployment found for chain ${chainId}. Supported chains: ${getSupportedChainIds().join(", ")}`
132
- );
133
- }
134
- return deployment;
135
- }
136
- function hasDeployment(chainId) {
137
- return chainId in deployments;
138
- }
139
- function getSupportedChainIds() {
140
- return Object.keys(deployments).map(Number);
141
- }
142
- function getContractAddress(chainId, contractName) {
143
- const deployment = getDeployment(chainId);
144
- if (!deployment) return null;
145
- return deployment.contracts[contractName] ?? null;
146
- }
147
-
148
8
  // src/core/client.ts
149
9
  var UPDClient = class {
150
10
  config;
@@ -152,7 +12,7 @@ var UPDClient = class {
152
12
  oracle;
153
13
  constructor(config) {
154
14
  this.config = config;
155
- this.deployment = getDeploymentOrThrow(config.chainId);
15
+ this.deployment = chunkKSGUFTW3_cjs.getDeploymentOrThrow(config.chainId);
156
16
  this.oracle = chunkCZEDT3MS_cjs.createOracleClient({ oracleUrl: config.oracleUrl });
157
17
  }
158
18
  // ============================================================
@@ -162,7 +22,7 @@ var UPDClient = class {
162
22
  async getUPDBalance(address) {
163
23
  return this.config.publicClient.readContract({
164
24
  address: this.deployment.contracts.UPDToken,
165
- abi: chunkZSWETUGH_cjs.UPD_TOKEN_ABI,
25
+ abi: chunk7BP37BGO_cjs.UPD_TOKEN_ABI,
166
26
  functionName: "balanceOf",
167
27
  args: [address]
168
28
  });
@@ -171,17 +31,17 @@ var UPDClient = class {
171
31
  async getTotalSupply() {
172
32
  return this.config.publicClient.readContract({
173
33
  address: this.deployment.contracts.UPDToken,
174
- abi: chunkZSWETUGH_cjs.UPD_TOKEN_ABI,
34
+ abi: chunk7BP37BGO_cjs.UPD_TOKEN_ABI,
175
35
  functionName: "totalSupply"
176
36
  });
177
37
  }
178
- /** Get system collateral info: total stETH collateral and total UPD supply. */
38
+ /** Get system collateral info: total stETH collateral (yield-inclusive) and total UPD supply. */
179
39
  async getCollateralInfo() {
180
40
  const [totalStEthCollateral, totalUPDSupply] = await Promise.all([
181
41
  this.config.publicClient.readContract({
182
42
  address: this.deployment.contracts.OvercollateralizationReporter,
183
- abi: chunkZSWETUGH_cjs.OVERCOLLATERALIZATION_REPORTER_ABI,
184
- functionName: "totalStEthCollateral"
43
+ abi: chunk7BP37BGO_cjs.OVERCOLLATERALIZATION_REPORTER_ABI,
44
+ functionName: "getTotalStEthCollateral"
185
45
  }),
186
46
  this.getTotalSupply()
187
47
  ]);
@@ -193,19 +53,19 @@ var UPDClient = class {
193
53
  const [posEscrowAddr, stabEscrowAddr, minRatio] = await Promise.all([
194
54
  this.config.publicClient.readContract({
195
55
  address: stabNFT,
196
- abi: chunkZSWETUGH_cjs.STABILIZER_NFT_ABI,
56
+ abi: chunk7BP37BGO_cjs.STABILIZER_NFT_ABI,
197
57
  functionName: "positionEscrows",
198
58
  args: [tokenId]
199
59
  }),
200
60
  this.config.publicClient.readContract({
201
61
  address: stabNFT,
202
- abi: chunkZSWETUGH_cjs.STABILIZER_NFT_ABI,
62
+ abi: chunk7BP37BGO_cjs.STABILIZER_NFT_ABI,
203
63
  functionName: "stabilizerEscrows",
204
64
  args: [tokenId]
205
65
  }),
206
66
  this.config.publicClient.readContract({
207
67
  address: stabNFT,
208
- abi: chunkZSWETUGH_cjs.STABILIZER_NFT_ABI,
68
+ abi: chunk7BP37BGO_cjs.STABILIZER_NFT_ABI,
209
69
  functionName: "minCollateralRatios",
210
70
  args: [tokenId]
211
71
  })
@@ -213,17 +73,17 @@ var UPDClient = class {
213
73
  const [backedUPDAmount, stETHBalance, unallocatedStETH] = await Promise.all([
214
74
  this.config.publicClient.readContract({
215
75
  address: posEscrowAddr,
216
- abi: chunkZSWETUGH_cjs.POSITION_ESCROW_ABI,
76
+ abi: chunk7BP37BGO_cjs.POSITION_ESCROW_ABI,
217
77
  functionName: "backedUPDAmount"
218
78
  }),
219
79
  this.config.publicClient.readContract({
220
80
  address: posEscrowAddr,
221
- abi: chunkZSWETUGH_cjs.POSITION_ESCROW_ABI,
81
+ abi: chunk7BP37BGO_cjs.POSITION_ESCROW_ABI,
222
82
  functionName: "getCurrentStEthBalance"
223
83
  }),
224
84
  this.config.publicClient.readContract({
225
85
  address: stabEscrowAddr,
226
- abi: chunkZSWETUGH_cjs.STABILIZER_ESCROW_ABI,
86
+ abi: chunk7BP37BGO_cjs.STABILIZER_ESCROW_ABI,
227
87
  functionName: "unallocatedStETH"
228
88
  })
229
89
  ]);
@@ -263,7 +123,7 @@ var UPDClient = class {
263
123
  const { to, ethAmount, priceAttestation } = params;
264
124
  return walletClient.writeContract({
265
125
  address: this.deployment.contracts.StabilizerNFT,
266
- abi: chunkZSWETUGH_cjs.STABILIZER_NFT_ABI,
126
+ abi: chunk7BP37BGO_cjs.STABILIZER_NFT_ABI,
267
127
  functionName: "mintUPD",
268
128
  args: [to, this._toSolidityAttestation(priceAttestation)],
269
129
  value: ethAmount,
@@ -288,7 +148,7 @@ var UPDClient = class {
288
148
  const { updAmount, priceAttestation } = params;
289
149
  return walletClient.writeContract({
290
150
  address: this.deployment.contracts.StabilizerNFT,
291
- abi: chunkZSWETUGH_cjs.STABILIZER_NFT_ABI,
151
+ abi: chunk7BP37BGO_cjs.STABILIZER_NFT_ABI,
292
152
  functionName: "burnUPD",
293
153
  args: [updAmount, this._toSolidityAttestation(priceAttestation)],
294
154
  chain: walletClient.chain ?? null,
@@ -305,22 +165,22 @@ var UPDClient = class {
305
165
  const [shareValue, annualYieldBps, totalSupply, totalLiabilityUSD] = await Promise.all([
306
166
  this.config.publicClient.readContract({
307
167
  address: supdAddr,
308
- abi: chunkZSWETUGH_cjs.SUPD_ABI,
168
+ abi: chunk7BP37BGO_cjs.SUPD_ABI,
309
169
  functionName: "currentShareValue"
310
170
  }),
311
171
  this.config.publicClient.readContract({
312
172
  address: supdAddr,
313
- abi: chunkZSWETUGH_cjs.SUPD_ABI,
173
+ abi: chunk7BP37BGO_cjs.SUPD_ABI,
314
174
  functionName: "annualYieldBps"
315
175
  }),
316
176
  this.config.publicClient.readContract({
317
177
  address: supdAddr,
318
- abi: chunkZSWETUGH_cjs.SUPD_ABI,
178
+ abi: chunk7BP37BGO_cjs.SUPD_ABI,
319
179
  functionName: "totalSupply"
320
180
  }),
321
181
  this.config.publicClient.readContract({
322
182
  address: supdAddr,
323
- abi: chunkZSWETUGH_cjs.SUPD_ABI,
183
+ abi: chunk7BP37BGO_cjs.SUPD_ABI,
324
184
  functionName: "totalLiabilityUSD"
325
185
  })
326
186
  ]);
@@ -333,7 +193,7 @@ var UPDClient = class {
333
193
  if (!supdAddr) throw new Error("sUPD not deployed on this chain");
334
194
  return walletClient.writeContract({
335
195
  address: supdAddr,
336
- abi: chunkZSWETUGH_cjs.SUPD_ABI,
196
+ abi: chunk7BP37BGO_cjs.SUPD_ABI,
337
197
  functionName: "stakeUPD",
338
198
  args: [params.updAmount, this._toSolidityAttestation(params.priceAttestation)],
339
199
  chain: walletClient.chain ?? null,
@@ -347,7 +207,7 @@ var UPDClient = class {
347
207
  if (!supdAddr) throw new Error("sUPD not deployed on this chain");
348
208
  return walletClient.writeContract({
349
209
  address: supdAddr,
350
- abi: chunkZSWETUGH_cjs.SUPD_ABI,
210
+ abi: chunk7BP37BGO_cjs.SUPD_ABI,
351
211
  functionName: "unstakeToUPD",
352
212
  args: [params.shares, this._toSolidityAttestation(params.priceAttestation)],
353
213
  chain: walletClient.chain ?? null,
@@ -401,7 +261,7 @@ var UPDClient = class {
401
261
  this.getCollateralInfo(),
402
262
  this.oracle.getEthUsdPrice()
403
263
  ]);
404
- return chunk4VXNJTNQ_cjs.computeSystemHealth(collateral, price);
264
+ return chunkKSGUFTW3_cjs.computeSystemHealth(collateral, price);
405
265
  }
406
266
  /** Stake UPD, fetching oracle attestation automatically. */
407
267
  async stakeUPDWithOracle(params) {
@@ -413,6 +273,21 @@ var UPDClient = class {
413
273
  const attestation = await this.oracle.getEthUsdAttestation();
414
274
  return this.unstakeUPD({ ...params, priceAttestation: attestation });
415
275
  }
276
+ /**
277
+ * Permissionless sync: recalculates the reporter's collateral snapshot from on-chain truth.
278
+ * Iterates all PositionEscrows, sums their stETH shares, and resets the reporter.
279
+ * Anyone can call this — gas cost is proportional to the number of stabilizers.
280
+ */
281
+ async syncReporter() {
282
+ const walletClient = this._requireWallet();
283
+ return walletClient.writeContract({
284
+ address: this.deployment.contracts.OvercollateralizationReporter,
285
+ abi: chunk7BP37BGO_cjs.OVERCOLLATERALIZATION_REPORTER_ABI,
286
+ functionName: "syncFromChain",
287
+ chain: walletClient.chain ?? null,
288
+ account: walletClient.account
289
+ });
290
+ }
416
291
  // ============================================================
417
292
  // HELPERS
418
293
  // ============================================================
@@ -553,6 +428,10 @@ async function verifyDeployment(publicClient, deployment) {
553
428
  await _verifyBytecode(publicClient, checks, "StabilizerNFT", deployment.contracts.StabilizerNFT);
554
429
  await _verifyBytecode(publicClient, checks, "Reporter", deployment.contracts.OvercollateralizationReporter);
555
430
  await _verifyBytecode(publicClient, checks, "InsuranceEscrow", deployment.contracts.InsuranceEscrow);
431
+ await _verifyBytecode(publicClient, checks, "LinkedListLib", deployment.libraries.LinkedListLib);
432
+ await _verifyBytecode(publicClient, checks, "CollateralMathLib", deployment.libraries.CollateralMathLib);
433
+ await _verifyBytecode(publicClient, checks, "StabilizerEscrow template", deployment.templates.StabilizerEscrow);
434
+ await _verifyBytecode(publicClient, checks, "PositionEscrow template", deployment.templates.PositionEscrow);
556
435
  await _verifyProxyImpl(publicClient, checks, "PriceOracle", deployment.contracts.PriceOracle, deployment.implementations.PriceOracle);
557
436
  await _verifyProxyImpl(publicClient, checks, "StabilizerNFT", deployment.contracts.StabilizerNFT, deployment.implementations.StabilizerNFT);
558
437
  await _verifyProxyImpl(publicClient, checks, "Reporter", deployment.contracts.OvercollateralizationReporter, deployment.implementations.OvercollateralizationReporter);
@@ -561,23 +440,24 @@ async function verifyDeployment(publicClient, deployment) {
561
440
  await _verifyRole(
562
441
  publicClient,
563
442
  checks,
564
- "UPDToken MINTER_ROLE -> StabilizerNFT",
443
+ "UPDToken CONTROLLER_ROLE -> StabilizerNFT",
565
444
  deployment.contracts.UPDToken,
566
- chunkZSWETUGH_cjs.UPD_TOKEN_ABI,
567
- "0x9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6",
568
- // keccak256("MINTER_ROLE")
445
+ chunk7BP37BGO_cjs.UPD_TOKEN_ABI,
446
+ "0x7b765e0e932d348852a6f810bfa1ab891e259123f02db8cdcde614c570223357",
447
+ // keccak256("CONTROLLER_ROLE")
569
448
  deployment.contracts.StabilizerNFT
570
449
  );
571
450
  await _verifyRole(
572
451
  publicClient,
573
452
  checks,
574
- "UPDToken BURNER_ROLE -> StabilizerNFT",
575
- deployment.contracts.UPDToken,
576
- chunkZSWETUGH_cjs.UPD_TOKEN_ABI,
577
- "0x3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848",
578
- // keccak256("BURNER_ROLE")
453
+ "Reporter UPDATER_ROLE -> StabilizerNFT",
454
+ deployment.contracts.OvercollateralizationReporter,
455
+ chunk7BP37BGO_cjs.OVERCOLLATERALIZATION_REPORTER_ABI,
456
+ "0x73e573f9566d61418a34d5de3ff49360f9c51fec37f7486551670290f6285dab",
457
+ // keccak256("UPDATER_ROLE")
579
458
  deployment.contracts.StabilizerNFT
580
459
  );
460
+ await _verifyOwnership(publicClient, checks, deployment);
581
461
  const passed = checks.filter((c) => c.passed).length;
582
462
  const failed = checks.filter((c) => !c.passed).length;
583
463
  return {
@@ -620,7 +500,7 @@ async function _verifyStabilizerNFTStorage(client, checks, d) {
620
500
  const nft = d.contracts.StabilizerNFT;
621
501
  const updToken = await client.readContract({
622
502
  address: nft,
623
- abi: chunkZSWETUGH_cjs.STABILIZER_NFT_ABI,
503
+ abi: chunk7BP37BGO_cjs.STABILIZER_NFT_ABI,
624
504
  functionName: "updToken"
625
505
  });
626
506
  checks.push({
@@ -631,7 +511,7 @@ async function _verifyStabilizerNFTStorage(client, checks, d) {
631
511
  });
632
512
  const oracle = await client.readContract({
633
513
  address: nft,
634
- abi: chunkZSWETUGH_cjs.STABILIZER_NFT_ABI,
514
+ abi: chunk7BP37BGO_cjs.STABILIZER_NFT_ABI,
635
515
  functionName: "oracle"
636
516
  });
637
517
  checks.push({
@@ -642,7 +522,7 @@ async function _verifyStabilizerNFTStorage(client, checks, d) {
642
522
  });
643
523
  const stETH = await client.readContract({
644
524
  address: nft,
645
- abi: chunkZSWETUGH_cjs.STABILIZER_NFT_ABI,
525
+ abi: chunk7BP37BGO_cjs.STABILIZER_NFT_ABI,
646
526
  functionName: "stETH"
647
527
  });
648
528
  checks.push({
@@ -651,6 +531,35 @@ async function _verifyStabilizerNFTStorage(client, checks, d) {
651
531
  expected: d.external.stETH,
652
532
  actual: stETH
653
533
  });
534
+ const reporter = await client.readContract({
535
+ address: nft,
536
+ abi: chunk7BP37BGO_cjs.STABILIZER_NFT_ABI,
537
+ functionName: "reporter"
538
+ });
539
+ const ZERO = "0x0000000000000000000000000000000000000000";
540
+ checks.push({
541
+ name: "StabilizerNFT.reporter != address(0)",
542
+ passed: reporter.toLowerCase() !== ZERO,
543
+ expected: `!= ${ZERO}`,
544
+ actual: reporter
545
+ });
546
+ checks.push({
547
+ name: "StabilizerNFT.reporter == Reporter proxy",
548
+ passed: reporter.toLowerCase() === d.contracts.OvercollateralizationReporter.toLowerCase(),
549
+ expected: d.contracts.OvercollateralizationReporter,
550
+ actual: reporter
551
+ });
552
+ const insuranceEscrow = await client.readContract({
553
+ address: nft,
554
+ abi: chunk7BP37BGO_cjs.STABILIZER_NFT_ABI,
555
+ functionName: "insuranceEscrow"
556
+ });
557
+ checks.push({
558
+ name: "StabilizerNFT.insuranceEscrow",
559
+ passed: insuranceEscrow.toLowerCase() === d.contracts.InsuranceEscrow.toLowerCase(),
560
+ expected: d.contracts.InsuranceEscrow,
561
+ actual: insuranceEscrow
562
+ });
654
563
  } catch {
655
564
  checks.push({ name: "StabilizerNFT storage", passed: false });
656
565
  }
@@ -660,7 +569,7 @@ async function _verifyReporterStorage(client, checks, d) {
660
569
  const reporter = d.contracts.OvercollateralizationReporter;
661
570
  const stabNFT = await client.readContract({
662
571
  address: reporter,
663
- abi: chunkZSWETUGH_cjs.OVERCOLLATERALIZATION_REPORTER_ABI,
572
+ abi: chunk7BP37BGO_cjs.OVERCOLLATERALIZATION_REPORTER_ABI,
664
573
  functionName: "stabilizerNFTContract"
665
574
  });
666
575
  checks.push({
@@ -671,7 +580,7 @@ async function _verifyReporterStorage(client, checks, d) {
671
580
  });
672
581
  const updToken = await client.readContract({
673
582
  address: reporter,
674
- abi: chunkZSWETUGH_cjs.OVERCOLLATERALIZATION_REPORTER_ABI,
583
+ abi: chunk7BP37BGO_cjs.OVERCOLLATERALIZATION_REPORTER_ABI,
675
584
  functionName: "updToken"
676
585
  });
677
586
  checks.push({
@@ -697,17 +606,29 @@ async function _verifyRole(client, checks, name, contractAddress, abi, roleHash,
697
606
  checks.push({ name, passed: false });
698
607
  }
699
608
  }
609
+ async function _verifyOwnership(client, checks, d) {
610
+ try {
611
+ const owner = await client.readContract({
612
+ address: d.contracts.InsuranceEscrow,
613
+ abi: chunk7BP37BGO_cjs.INSURANCE_ESCROW_ABI,
614
+ functionName: "owner"
615
+ });
616
+ checks.push({
617
+ name: "InsuranceEscrow.owner == StabilizerNFT",
618
+ passed: owner.toLowerCase() === d.contracts.StabilizerNFT.toLowerCase(),
619
+ expected: d.contracts.StabilizerNFT,
620
+ actual: owner
621
+ });
622
+ } catch {
623
+ checks.push({ name: "InsuranceEscrow.owner", passed: false });
624
+ }
625
+ }
700
626
 
701
627
  exports.UPDClient = UPDClient;
702
628
  exports.createUPDClient = createUPDClient;
703
- exports.getContractAddress = getContractAddress;
704
- exports.getDeployment = getDeployment;
705
- exports.getDeploymentOrThrow = getDeploymentOrThrow;
706
- exports.getSupportedChainIds = getSupportedChainIds;
707
- exports.hasDeployment = hasDeployment;
708
629
  exports.signCancelAuthorization = signCancelAuthorization;
709
630
  exports.signReceiveAuthorization = signReceiveAuthorization;
710
631
  exports.signTransferAuthorization = signTransferAuthorization;
711
632
  exports.verifyDeployment = verifyDeployment;
712
- //# sourceMappingURL=chunk-WRPVPA7E.cjs.map
713
- //# sourceMappingURL=chunk-WRPVPA7E.cjs.map
633
+ //# sourceMappingURL=chunk-LECDXCSW.cjs.map
634
+ //# sourceMappingURL=chunk-LECDXCSW.cjs.map