@permissionless-technologies/upd-sdk 0.1.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 (68) hide show
  1. package/README.md +172 -0
  2. package/dist/chunk-4RBWWS2X.js +6616 -0
  3. package/dist/chunk-4RBWWS2X.js.map +1 -0
  4. package/dist/chunk-4VXNJTNQ.cjs +58 -0
  5. package/dist/chunk-4VXNJTNQ.cjs.map +1 -0
  6. package/dist/chunk-5NNXIJE4.js +16 -0
  7. package/dist/chunk-5NNXIJE4.js.map +1 -0
  8. package/dist/chunk-63FIKV36.js +49 -0
  9. package/dist/chunk-63FIKV36.js.map +1 -0
  10. package/dist/chunk-CZEDT3MS.cjs +62 -0
  11. package/dist/chunk-CZEDT3MS.cjs.map +1 -0
  12. package/dist/chunk-DF34ON56.cjs +18 -0
  13. package/dist/chunk-DF34ON56.cjs.map +1 -0
  14. package/dist/chunk-DJBU2OEB.js +57 -0
  15. package/dist/chunk-DJBU2OEB.js.map +1 -0
  16. package/dist/chunk-LNGWRYGY.js +3 -0
  17. package/dist/chunk-LNGWRYGY.js.map +1 -0
  18. package/dist/chunk-POBNO37G.cjs +4 -0
  19. package/dist/chunk-POBNO37G.cjs.map +1 -0
  20. package/dist/chunk-R64I3LAO.js +701 -0
  21. package/dist/chunk-R64I3LAO.js.map +1 -0
  22. package/dist/chunk-RIRT4JX6.js +1808 -0
  23. package/dist/chunk-RIRT4JX6.js.map +1 -0
  24. package/dist/chunk-WRPVPA7E.cjs +713 -0
  25. package/dist/chunk-WRPVPA7E.cjs.map +1 -0
  26. package/dist/chunk-ZDAHLZWC.cjs +1812 -0
  27. package/dist/chunk-ZDAHLZWC.cjs.map +1 -0
  28. package/dist/chunk-ZSWETUGH.cjs +6623 -0
  29. package/dist/chunk-ZSWETUGH.cjs.map +1 -0
  30. package/dist/constants-Bk2bGYfX.d.ts +64 -0
  31. package/dist/constants-BlOP_9dy.d.cts +64 -0
  32. package/dist/contracts/index.cjs +45 -0
  33. package/dist/contracts/index.cjs.map +1 -0
  34. package/dist/contracts/index.d.cts +6559 -0
  35. package/dist/contracts/index.d.ts +6559 -0
  36. package/dist/contracts/index.js +4 -0
  37. package/dist/contracts/index.js.map +1 -0
  38. package/dist/core/index.cjs +76 -0
  39. package/dist/core/index.cjs.map +1 -0
  40. package/dist/core/index.d.cts +5 -0
  41. package/dist/core/index.d.ts +5 -0
  42. package/dist/core/index.js +7 -0
  43. package/dist/core/index.js.map +1 -0
  44. package/dist/health-BUb4ItNt.d.ts +46 -0
  45. package/dist/health-DPxBqH7b.d.cts +46 -0
  46. package/dist/index-XNClksom.d.ts +415 -0
  47. package/dist/index-yRBqVOHV.d.cts +415 -0
  48. package/dist/index.cjs +138 -0
  49. package/dist/index.cjs.map +1 -0
  50. package/dist/index.d.cts +7 -0
  51. package/dist/index.d.ts +7 -0
  52. package/dist/index.js +9 -0
  53. package/dist/index.js.map +1 -0
  54. package/dist/oracle/index.cjs +30 -0
  55. package/dist/oracle/index.cjs.map +1 -0
  56. package/dist/oracle/index.d.cts +41 -0
  57. package/dist/oracle/index.d.ts +41 -0
  58. package/dist/oracle/index.js +5 -0
  59. package/dist/oracle/index.js.map +1 -0
  60. package/dist/react/index.cjs +383 -0
  61. package/dist/react/index.cjs.map +1 -0
  62. package/dist/react/index.d.cts +339 -0
  63. package/dist/react/index.d.ts +339 -0
  64. package/dist/react/index.js +370 -0
  65. package/dist/react/index.js.map +1 -0
  66. package/dist/types-DySv82My.d.cts +70 -0
  67. package/dist/types-DySv82My.d.ts +70 -0
  68. package/package.json +93 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/deployments/31337.json","../src/deployments/11155111.json","../src/deployments/index.ts","../src/core/client.ts","../src/core/eip3009.ts","../src/core/verify.ts"],"names":["__default","collateralizationRatio"],"mappings":"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","file":"chunk-R64I3LAO.js","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\": \"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\": 11155111,\n \"deployBlock\": 0,\n \"deployTimestamp\": 0,\n \"deployer\": \"0x0000000000000000000000000000000000000000\"\n }\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 }\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 },\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 * UPDClient — Main client for interacting with the UPD protocol.\n *\n * Read operations use publicClient only (no wallet needed).\n * Write operations require a walletClient.\n *\n * @example\n * ```ts\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createUPDClient } from '@permissionless-technologies/upd-sdk'\n *\n * const publicClient = createPublicClient({ chain: mainnet, transport: http() })\n * const client = createUPDClient({ publicClient, chainId: 1 })\n *\n * const balance = await client.getUPDBalance('0x...')\n * const supply = await client.getTotalSupply()\n * ```\n */\n\nimport type { Address, Hash } from 'viem'\nimport type {\n UPDClientConfig,\n StabilizerPosition,\n MintParams,\n BurnParams,\n CollateralInfo,\n PriceAttestationQuery,\n SUPDInfo,\n StakeParams,\n UnstakeParams,\n} from './types.js'\nimport { getDeploymentOrThrow, type UPDDeploymentConfig } from '../deployments/index.js'\nimport { createOracleClient } from '../oracle/client.js'\nimport type { OracleClient } from '../oracle/types.js'\nimport { computeSystemHealth, type SystemHealth } from './health.js'\nimport { UPD_TOKEN_ABI } from '../contracts/abi/UPDToken.js'\nimport { STABILIZER_NFT_ABI } from '../contracts/abi/StabilizerNFT.js'\nimport { OVERCOLLATERALIZATION_REPORTER_ABI } from '../contracts/abi/OvercollateralizationReporter.js'\nimport { POSITION_ESCROW_ABI } from '../contracts/abi/PositionEscrow.js'\nimport { STABILIZER_ESCROW_ABI } from '../contracts/abi/StabilizerEscrow.js'\nimport { SUPD_ABI } from '../contracts/abi/sUPD.js'\n\nexport class UPDClient {\n readonly config: UPDClientConfig\n readonly deployment: UPDDeploymentConfig\n readonly oracle: OracleClient\n\n constructor(config: UPDClientConfig) {\n this.config = config\n this.deployment = getDeploymentOrThrow(config.chainId)\n this.oracle = createOracleClient({ oracleUrl: config.oracleUrl })\n }\n\n // ============================================================\n // READ OPERATIONS\n // ============================================================\n\n /** Get UPD token balance for an address. */\n async getUPDBalance(address: Address): Promise<bigint> {\n return this.config.publicClient.readContract({\n address: this.deployment.contracts.UPDToken,\n abi: UPD_TOKEN_ABI,\n functionName: 'balanceOf',\n args: [address],\n }) as Promise<bigint>\n }\n\n /** Get total UPD supply. */\n async getTotalSupply(): Promise<bigint> {\n return this.config.publicClient.readContract({\n address: this.deployment.contracts.UPDToken,\n abi: UPD_TOKEN_ABI,\n functionName: 'totalSupply',\n }) as Promise<bigint>\n }\n\n /** Get system collateral info: total stETH collateral and total UPD supply. */\n async getCollateralInfo(): Promise<CollateralInfo> {\n const [totalStEthCollateral, totalUPDSupply] = await Promise.all([\n this.config.publicClient.readContract({\n address: this.deployment.contracts.OvercollateralizationReporter,\n abi: OVERCOLLATERALIZATION_REPORTER_ABI,\n functionName: 'totalStEthCollateral',\n }) as Promise<bigint>,\n this.getTotalSupply(),\n ])\n\n return { totalStEthCollateral, totalUPDSupply }\n }\n\n /** Get details for a specific stabilizer position. */\n async getStabilizerPosition(tokenId: bigint): Promise<StabilizerPosition> {\n const stabNFT = this.deployment.contracts.StabilizerNFT\n\n const [posEscrowAddr, stabEscrowAddr, minRatio] = await Promise.all([\n this.config.publicClient.readContract({\n address: stabNFT,\n abi: STABILIZER_NFT_ABI,\n functionName: 'positionEscrows',\n args: [tokenId],\n }) as Promise<Address>,\n this.config.publicClient.readContract({\n address: stabNFT,\n abi: STABILIZER_NFT_ABI,\n functionName: 'stabilizerEscrows',\n args: [tokenId],\n }) as Promise<Address>,\n this.config.publicClient.readContract({\n address: stabNFT,\n abi: STABILIZER_NFT_ABI,\n functionName: 'minCollateralRatios',\n args: [tokenId],\n }) as Promise<bigint>,\n ])\n\n const [backedUPDAmount, stETHBalance, unallocatedStETH] = await Promise.all([\n this.config.publicClient.readContract({\n address: posEscrowAddr,\n abi: POSITION_ESCROW_ABI,\n functionName: 'backedUPDAmount',\n }) as Promise<bigint>,\n this.config.publicClient.readContract({\n address: posEscrowAddr,\n abi: POSITION_ESCROW_ABI,\n functionName: 'getCurrentStEthBalance',\n }) as Promise<bigint>,\n this.config.publicClient.readContract({\n address: stabEscrowAddr,\n abi: STABILIZER_ESCROW_ABI,\n functionName: 'unallocatedStETH',\n }) as Promise<bigint>,\n ])\n\n // Calculate collateralization ratio locally if there's a liability\n let collateralizationRatio = 0n\n if (backedUPDAmount > 0n && stETHBalance > 0n) {\n // Note: this is approximate — actual ratio requires a price feed\n // For exact ratio, use the on-chain getCollateralizationRatio with a price response\n collateralizationRatio = 0n // Requires price — caller should compute\n }\n\n return {\n tokenId,\n positionEscrowAddress: posEscrowAddr,\n stabilizerEscrowAddress: stabEscrowAddr,\n collateralizationRatio,\n backedUPDAmount,\n stETHBalance,\n unallocatedStETH,\n minCollateralRatio: minRatio,\n }\n }\n\n // ============================================================\n // WRITE OPERATIONS\n // ============================================================\n\n /**\n * Mint UPD by sending ETH. Requires walletClient.\n *\n * @example\n * ```ts\n * const attestation = createMockAttestation(2000n * 10n**18n)\n * const hash = await client.mint({\n * to: '0x...',\n * ethAmount: parseEther('1'),\n * priceAttestation: attestation,\n * })\n * ```\n */\n async mint(params: MintParams): Promise<Hash> {\n const walletClient = this._requireWallet()\n const { to, ethAmount, priceAttestation } = params\n\n return walletClient.writeContract({\n address: this.deployment.contracts.StabilizerNFT,\n abi: STABILIZER_NFT_ABI,\n functionName: 'mintUPD',\n args: [to, this._toSolidityAttestation(priceAttestation)],\n value: ethAmount,\n chain: walletClient.chain ?? null,\n account: walletClient.account!,\n })\n }\n\n /**\n * Burn UPD to receive stETH. Requires walletClient.\n *\n * @example\n * ```ts\n * const attestation = createMockAttestation(2000n * 10n**18n)\n * const hash = await client.burn({\n * updAmount: parseUnits('2000', 18),\n * priceAttestation: attestation,\n * })\n * ```\n */\n async burn(params: BurnParams): Promise<Hash> {\n const walletClient = this._requireWallet()\n const { updAmount, priceAttestation } = params\n\n return walletClient.writeContract({\n address: this.deployment.contracts.StabilizerNFT,\n abi: STABILIZER_NFT_ABI,\n functionName: 'burnUPD',\n args: [updAmount, this._toSolidityAttestation(priceAttestation)],\n chain: walletClient.chain ?? null,\n account: walletClient.account!,\n })\n }\n\n // ============================================================\n // sUPD OPERATIONS\n // ============================================================\n\n /** Get sUPD contract info: share value, APY, supply, liability. */\n async getSUPDInfo(): Promise<SUPDInfo> {\n const supdAddr = this.deployment.contracts.sUPD\n if (!supdAddr) throw new Error('sUPD not deployed on this chain')\n\n const [shareValue, annualYieldBps, totalSupply, totalLiabilityUSD] = await Promise.all([\n this.config.publicClient.readContract({\n address: supdAddr,\n abi: SUPD_ABI,\n functionName: 'currentShareValue',\n }) as Promise<bigint>,\n this.config.publicClient.readContract({\n address: supdAddr,\n abi: SUPD_ABI,\n functionName: 'annualYieldBps',\n }) as Promise<bigint>,\n this.config.publicClient.readContract({\n address: supdAddr,\n abi: SUPD_ABI,\n functionName: 'totalSupply',\n }) as Promise<bigint>,\n this.config.publicClient.readContract({\n address: supdAddr,\n abi: SUPD_ABI,\n functionName: 'totalLiabilityUSD',\n }) as Promise<bigint>,\n ])\n\n return { shareValue, annualYieldBps, totalSupply, totalLiabilityUSD }\n }\n\n /** Stake UPD to receive sUPD shares. Requires walletClient. */\n async stakeUPD(params: StakeParams): Promise<Hash> {\n const walletClient = this._requireWallet()\n const supdAddr = this.deployment.contracts.sUPD\n if (!supdAddr) throw new Error('sUPD not deployed on this chain')\n\n return walletClient.writeContract({\n address: supdAddr,\n abi: SUPD_ABI,\n functionName: 'stakeUPD',\n args: [params.updAmount, this._toSolidityAttestation(params.priceAttestation)],\n chain: walletClient.chain ?? null,\n account: walletClient.account!,\n })\n }\n\n /** Unstake sUPD shares to receive UPD. Requires walletClient. */\n async unstakeUPD(params: UnstakeParams): Promise<Hash> {\n const walletClient = this._requireWallet()\n const supdAddr = this.deployment.contracts.sUPD\n if (!supdAddr) throw new Error('sUPD not deployed on this chain')\n\n return walletClient.writeContract({\n address: supdAddr,\n abi: SUPD_ABI,\n functionName: 'unstakeToUPD',\n args: [params.shares, this._toSolidityAttestation(params.priceAttestation)],\n chain: walletClient.chain ?? null,\n account: walletClient.account!,\n })\n }\n\n // ============================================================\n // CONVENIENCE METHODS\n // ============================================================\n\n /**\n * Mint UPD by sending ETH, automatically fetching a price attestation from the oracle.\n *\n * @example\n * ```ts\n * const hash = await client.mintWithOracle({\n * to: '0x...',\n * ethAmount: parseEther('1'),\n * })\n * ```\n */\n async mintWithOracle(params: { to: Address; ethAmount: bigint }): Promise<Hash> {\n const attestation = await this.oracle.getEthUsdAttestation()\n return this.mint({ ...params, priceAttestation: attestation })\n }\n\n /**\n * Burn UPD to receive stETH, automatically fetching a price attestation from the oracle.\n *\n * @example\n * ```ts\n * const hash = await client.burnWithOracle({\n * updAmount: parseUnits('2000', 18),\n * })\n * ```\n */\n async burnWithOracle(params: { updAmount: bigint }): Promise<Hash> {\n const attestation = await this.oracle.getEthUsdAttestation()\n return this.burn({ ...params, priceAttestation: attestation })\n }\n\n /**\n * Get system health metrics by combining on-chain collateral data with oracle price.\n *\n * @example\n * ```ts\n * const health = await client.getSystemHealth()\n * console.log(`System ratio: ${health.systemCollateralRatioBps} bps`)\n * console.log(`Healthy: ${health.isHealthy}`)\n * ```\n */\n async getSystemHealth(): Promise<SystemHealth> {\n const [collateral, { price }] = await Promise.all([\n this.getCollateralInfo(),\n this.oracle.getEthUsdPrice(),\n ])\n return computeSystemHealth(collateral, price)\n }\n\n /** Stake UPD, fetching oracle attestation automatically. */\n async stakeUPDWithOracle(params: { updAmount: bigint }): Promise<Hash> {\n const attestation = await this.oracle.getEthUsdAttestation()\n return this.stakeUPD({ ...params, priceAttestation: attestation })\n }\n\n /** Unstake sUPD, fetching oracle attestation automatically. */\n async unstakeUPDWithOracle(params: { shares: bigint }): Promise<Hash> {\n const attestation = await this.oracle.getEthUsdAttestation()\n return this.unstakeUPD({ ...params, priceAttestation: attestation })\n }\n\n // ============================================================\n // HELPERS\n // ============================================================\n\n private _requireWallet() {\n if (!this.config.walletClient) {\n throw new Error(\n 'UPDClient: walletClient is required for write operations. ' +\n 'Pass a walletClient in the config to use mint/burn.',\n )\n }\n return this.config.walletClient\n }\n\n private _toSolidityAttestation(a: PriceAttestationQuery) {\n return {\n price: a.price,\n decimals: a.decimals,\n dataTimestamp: a.dataTimestamp,\n assetPair: a.assetPair,\n signature: a.signature,\n } as const\n }\n}\n\n/**\n * Create a UPD client instance.\n *\n * @example\n * ```ts\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { createUPDClient } from '@permissionless-technologies/upd-sdk'\n *\n * const client = createUPDClient({\n * publicClient: createPublicClient({ chain: mainnet, transport: http() }),\n * chainId: 1,\n * })\n * ```\n */\nexport function createUPDClient(config: UPDClientConfig): UPDClient {\n return new UPDClient(config)\n}\n","/**\n * EIP-3009 Transfer Authorization helpers for UPD.\n *\n * Pure signing functions — no blockchain calls. Generate off-chain EIP-712\n * signatures that can be submitted by any relayer or facilitator (e.g., x402).\n *\n * @example\n * ```ts\n * import { signTransferAuthorization } from '@permissionless-technologies/upd-sdk'\n *\n * const auth = await signTransferAuthorization({\n * walletClient,\n * tokenAddress: '0x...',\n * from: '0xAlice...',\n * to: '0xBob...',\n * value: parseUnits('100', 18),\n * validAfter: 0n,\n * validBefore: BigInt(Math.floor(Date.now() / 1000) + 3600),\n * })\n *\n * // Submit via relayer, x402 facilitator, or directly\n * await publicClient.writeContract({\n * address: tokenAddress,\n * abi: UPD_TOKEN_ABI,\n * functionName: 'transferWithAuthorization',\n * args: [auth.from, auth.to, auth.value, auth.validAfter, auth.validBefore, auth.nonce, auth.v, auth.r, auth.s],\n * })\n * ```\n */\n\nimport { type Address, type Hex, type WalletClient, hexToBytes, bytesToHex } from 'viem'\n\nexport interface TransferAuthorizationParams {\n walletClient: WalletClient\n tokenAddress: Address\n from: Address\n to: Address\n value: bigint\n validAfter?: bigint\n validBefore?: bigint\n nonce?: Hex\n}\n\nexport interface TransferAuthorization {\n from: Address\n to: Address\n value: bigint\n validAfter: bigint\n validBefore: bigint\n nonce: Hex\n v: number\n r: Hex\n s: Hex\n}\n\nexport interface CancelAuthorizationParams {\n walletClient: WalletClient\n tokenAddress: Address\n authorizer: Address\n nonce: Hex\n}\n\nexport interface CancelAuthorization {\n authorizer: Address\n nonce: Hex\n v: number\n r: Hex\n s: Hex\n}\n\nconst EIP3009_DOMAIN_VERSION = '1'\n\nfunction randomNonce(): Hex {\n const bytes = new Uint8Array(32)\n crypto.getRandomValues(bytes)\n return bytesToHex(bytes)\n}\n\nfunction eip3009Domain(tokenAddress: Address, chainId: number, tokenName: string) {\n return {\n name: tokenName,\n version: EIP3009_DOMAIN_VERSION,\n chainId,\n verifyingContract: tokenAddress,\n } as const\n}\n\n/**\n * Sign a TransferWithAuthorization (EIP-3009).\n *\n * Generates a random nonce if none is provided. Default time window: now → +1 hour.\n * The returned object contains all arguments needed for `transferWithAuthorization()`.\n */\nexport async function signTransferAuthorization(\n params: TransferAuthorizationParams,\n tokenName = 'Universal Private Dollar',\n): Promise<TransferAuthorization> {\n const {\n walletClient,\n tokenAddress,\n from,\n to,\n value,\n validAfter = 0n,\n validBefore = BigInt(Math.floor(Date.now() / 1000) + 3600),\n nonce = randomNonce(),\n } = params\n\n const chainId = walletClient.chain?.id\n if (!chainId) throw new Error('walletClient must have a chain configured')\n\n const signature = await walletClient.signTypedData({\n account: from,\n domain: eip3009Domain(tokenAddress, chainId, tokenName),\n types: {\n TransferWithAuthorization: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'validAfter', type: 'uint256' },\n { name: 'validBefore', type: 'uint256' },\n { name: 'nonce', type: 'bytes32' },\n ],\n },\n primaryType: 'TransferWithAuthorization',\n message: { from, to, value, validAfter, validBefore, nonce },\n })\n\n const sigBytes = hexToBytes(signature)\n const r = bytesToHex(sigBytes.slice(0, 32))\n const s = bytesToHex(sigBytes.slice(32, 64))\n const v = sigBytes[64]!\n\n return { from, to, value, validAfter, validBefore, nonce, v, r, s }\n}\n\n/**\n * Sign a ReceiveWithAuthorization (EIP-3009).\n *\n * Same as transferWithAuthorization but the resulting signature can only be\n * submitted by the `to` address (prevents front-running).\n */\nexport async function signReceiveAuthorization(\n params: TransferAuthorizationParams,\n tokenName = 'Universal Private Dollar',\n): Promise<TransferAuthorization> {\n const {\n walletClient,\n tokenAddress,\n from,\n to,\n value,\n validAfter = 0n,\n validBefore = BigInt(Math.floor(Date.now() / 1000) + 3600),\n nonce = randomNonce(),\n } = params\n\n const chainId = walletClient.chain?.id\n if (!chainId) throw new Error('walletClient must have a chain configured')\n\n const signature = await walletClient.signTypedData({\n account: from,\n domain: eip3009Domain(tokenAddress, chainId, tokenName),\n types: {\n ReceiveWithAuthorization: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'validAfter', type: 'uint256' },\n { name: 'validBefore', type: 'uint256' },\n { name: 'nonce', type: 'bytes32' },\n ],\n },\n primaryType: 'ReceiveWithAuthorization',\n message: { from, to, value, validAfter, validBefore, nonce },\n })\n\n const sigBytes = hexToBytes(signature)\n const r = bytesToHex(sigBytes.slice(0, 32))\n const s = bytesToHex(sigBytes.slice(32, 64))\n const v = sigBytes[64]!\n\n return { from, to, value, validAfter, validBefore, nonce, v, r, s }\n}\n\n/**\n * Sign a CancelAuthorization (EIP-3009).\n *\n * Cancels a previously signed authorization before it's been used.\n */\nexport async function signCancelAuthorization(\n params: CancelAuthorizationParams,\n tokenName = 'Universal Private Dollar',\n): Promise<CancelAuthorization> {\n const { walletClient, tokenAddress, authorizer, nonce } = params\n\n const chainId = walletClient.chain?.id\n if (!chainId) throw new Error('walletClient must have a chain configured')\n\n const signature = await walletClient.signTypedData({\n account: authorizer,\n domain: eip3009Domain(tokenAddress, chainId, tokenName),\n types: {\n CancelAuthorization: [\n { name: 'authorizer', type: 'address' },\n { name: 'nonce', type: 'bytes32' },\n ],\n },\n primaryType: 'CancelAuthorization',\n message: { authorizer, nonce },\n })\n\n const sigBytes = hexToBytes(signature)\n const r = bytesToHex(sigBytes.slice(0, 32))\n const s = bytesToHex(sigBytes.slice(32, 64))\n const v = sigBytes[64]!\n\n return { authorizer, nonce, v, r, s }\n}\n","/**\n * UPD Deployment Verification — Check on-chain state matches deployment config.\n *\n * Verifies:\n * 1. Bytecode exists at all deployed addresses\n * 2. UUPS proxy implementation slots point to correct implementations\n * 3. Critical storage values are initialized correctly\n * 4. Access control roles are granted properly\n */\n\nimport type { Address, PublicClient } from 'viem'\nimport type { UPDDeploymentConfig } from '../deployments/index.js'\nimport { UPD_TOKEN_ABI } from '../contracts/abi/UPDToken.js'\nimport { STABILIZER_NFT_ABI } from '../contracts/abi/StabilizerNFT.js'\nimport { OVERCOLLATERALIZATION_REPORTER_ABI } from '../contracts/abi/OvercollateralizationReporter.js'\n// PriceOracle ABI available if needed for deeper storage verification\n// import { PRICE_ORACLE_ABI } from '../contracts/abi/PriceOracle.js'\n\n/** ERC-1967 implementation storage slot */\nconst ERC1967_IMPL_SLOT =\n '0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc' as const\n\nexport interface VerificationCheck {\n name: string\n passed: boolean\n expected?: string\n actual?: string\n}\n\nexport interface VerificationResult {\n chainId: number\n checks: VerificationCheck[]\n passed: number\n failed: number\n allPassed: boolean\n}\n\n/**\n * Verify that a UPD deployment matches its on-chain state.\n *\n * @example\n * ```ts\n * const result = await verifyDeployment(publicClient, deployment)\n * if (!result.allPassed) {\n * console.error('Deployment verification failed:', result.checks.filter(c => !c.passed))\n * }\n * ```\n */\nexport async function verifyDeployment(\n publicClient: PublicClient,\n deployment: UPDDeploymentConfig,\n): Promise<VerificationResult> {\n const checks: VerificationCheck[] = []\n\n // 1. Bytecode existence\n await _verifyBytecode(publicClient, checks, 'UPDToken', deployment.contracts.UPDToken)\n await _verifyBytecode(publicClient, checks, 'PriceOracle', deployment.contracts.PriceOracle)\n await _verifyBytecode(publicClient, checks, 'StabilizerNFT', deployment.contracts.StabilizerNFT)\n await _verifyBytecode(publicClient, checks, 'Reporter', deployment.contracts.OvercollateralizationReporter)\n await _verifyBytecode(publicClient, checks, 'InsuranceEscrow', deployment.contracts.InsuranceEscrow)\n\n // 2. Proxy implementation slots (ERC-1967)\n await _verifyProxyImpl(publicClient, checks, 'PriceOracle', deployment.contracts.PriceOracle, deployment.implementations.PriceOracle)\n await _verifyProxyImpl(publicClient, checks, 'StabilizerNFT', deployment.contracts.StabilizerNFT, deployment.implementations.StabilizerNFT)\n await _verifyProxyImpl(publicClient, checks, 'Reporter', deployment.contracts.OvercollateralizationReporter, deployment.implementations.OvercollateralizationReporter)\n\n // 3. Storage initialization\n await _verifyStabilizerNFTStorage(publicClient, checks, deployment)\n await _verifyReporterStorage(publicClient, checks, deployment)\n\n // 4. Access control — StabilizerNFT has MINTER/BURNER on UPDToken\n await _verifyRole(publicClient, checks, 'UPDToken MINTER_ROLE -> StabilizerNFT',\n deployment.contracts.UPDToken, UPD_TOKEN_ABI,\n '0x9f2df0fed2c77648de5860a4cc508cd0818c85b8b8a1ab4ceeef8d981c8956a6', // keccak256(\"MINTER_ROLE\")\n deployment.contracts.StabilizerNFT)\n await _verifyRole(publicClient, checks, 'UPDToken BURNER_ROLE -> StabilizerNFT',\n deployment.contracts.UPDToken, UPD_TOKEN_ABI,\n '0x3c11d16cbaffd01df69ce1c404f6340ee057498f5f00246190ea54220576a848', // keccak256(\"BURNER_ROLE\")\n deployment.contracts.StabilizerNFT)\n\n const passed = checks.filter((c) => c.passed).length\n const failed = checks.filter((c) => !c.passed).length\n\n return {\n chainId: deployment.chainId,\n checks,\n passed,\n failed,\n allPassed: failed === 0,\n }\n}\n\n// ---- Internal helpers ----\n\nasync function _verifyBytecode(\n client: PublicClient,\n checks: VerificationCheck[],\n name: string,\n address: Address,\n): Promise<void> {\n try {\n const code = await client.getCode({ address })\n const exists = code !== undefined && code !== '0x' && code.length > 2\n checks.push({ name: `${name} bytecode exists`, passed: exists })\n } catch {\n checks.push({ name: `${name} bytecode exists`, passed: false })\n }\n}\n\nasync function _verifyProxyImpl(\n client: PublicClient,\n checks: VerificationCheck[],\n name: string,\n proxyAddress: Address,\n expectedImpl: Address,\n): Promise<void> {\n try {\n const implSlot = await client.getStorageAt({\n address: proxyAddress,\n slot: ERC1967_IMPL_SLOT,\n })\n const actualImpl = ('0x' + (implSlot ?? '0x').slice(26)).toLowerCase() as Address\n const expected = expectedImpl.toLowerCase()\n checks.push({\n name: `${name} proxy -> impl`,\n passed: actualImpl === expected,\n expected: expectedImpl,\n actual: actualImpl as string,\n })\n } catch {\n checks.push({ name: `${name} proxy -> impl`, passed: false, expected: expectedImpl })\n }\n}\n\nasync function _verifyStabilizerNFTStorage(\n client: PublicClient,\n checks: VerificationCheck[],\n d: UPDDeploymentConfig,\n): Promise<void> {\n try {\n const nft = d.contracts.StabilizerNFT\n const updToken = await client.readContract({\n address: nft, abi: STABILIZER_NFT_ABI, functionName: 'updToken',\n }) as Address\n checks.push({\n name: 'StabilizerNFT.updToken',\n passed: updToken.toLowerCase() === d.contracts.UPDToken.toLowerCase(),\n expected: d.contracts.UPDToken,\n actual: updToken,\n })\n\n const oracle = await client.readContract({\n address: nft, abi: STABILIZER_NFT_ABI, functionName: 'oracle',\n }) as Address\n checks.push({\n name: 'StabilizerNFT.oracle',\n passed: oracle.toLowerCase() === d.contracts.PriceOracle.toLowerCase(),\n expected: d.contracts.PriceOracle,\n actual: oracle,\n })\n\n const stETH = await client.readContract({\n address: nft, abi: STABILIZER_NFT_ABI, functionName: 'stETH',\n }) as Address\n checks.push({\n name: 'StabilizerNFT.stETH',\n passed: stETH.toLowerCase() === d.external.stETH.toLowerCase(),\n expected: d.external.stETH,\n actual: stETH,\n })\n } catch {\n checks.push({ name: 'StabilizerNFT storage', passed: false })\n }\n}\n\nasync function _verifyReporterStorage(\n client: PublicClient,\n checks: VerificationCheck[],\n d: UPDDeploymentConfig,\n): Promise<void> {\n try {\n const reporter = d.contracts.OvercollateralizationReporter\n const stabNFT = await client.readContract({\n address: reporter, abi: OVERCOLLATERALIZATION_REPORTER_ABI, functionName: 'stabilizerNFTContract',\n }) as Address\n checks.push({\n name: 'Reporter.stabilizerNFT',\n passed: stabNFT.toLowerCase() === d.contracts.StabilizerNFT.toLowerCase(),\n expected: d.contracts.StabilizerNFT,\n actual: stabNFT,\n })\n\n const updToken = await client.readContract({\n address: reporter, abi: OVERCOLLATERALIZATION_REPORTER_ABI, functionName: 'updToken',\n }) as Address\n checks.push({\n name: 'Reporter.updToken',\n passed: updToken.toLowerCase() === d.contracts.UPDToken.toLowerCase(),\n expected: d.contracts.UPDToken,\n actual: updToken,\n })\n } catch {\n checks.push({ name: 'Reporter storage', passed: false })\n }\n}\n\nasync function _verifyRole(\n client: PublicClient,\n checks: VerificationCheck[],\n name: string,\n contractAddress: Address,\n abi: readonly unknown[],\n roleHash: `0x${string}`,\n account: Address,\n): Promise<void> {\n try {\n const hasRole = await client.readContract({\n address: contractAddress,\n abi: abi as never,\n functionName: 'hasRole',\n args: [roleHash, account],\n }) as boolean\n checks.push({ name, passed: hasRole })\n } catch {\n checks.push({ name, passed: false })\n }\n}\n"]}