@babylonlabs-io/ts-sdk 0.0.0-semantic-release.2 → 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 (203) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +124 -6
  3. package/dist/MockEthereumWallet-CKQlH2AM.cjs +2 -0
  4. package/dist/MockEthereumWallet-CKQlH2AM.cjs.map +1 -0
  5. package/dist/MockEthereumWallet-ibdry7pZ.js +127 -0
  6. package/dist/MockEthereumWallet-ibdry7pZ.js.map +1 -0
  7. package/dist/PayoutManager-Dg_i_S7w.cjs +2 -0
  8. package/dist/PayoutManager-Dg_i_S7w.cjs.map +1 -0
  9. package/dist/PayoutManager-rMj54HDh.js +1112 -0
  10. package/dist/PayoutManager-rMj54HDh.js.map +1 -0
  11. package/dist/challengeAssert-34HqeVFH.cjs +2 -0
  12. package/dist/challengeAssert-34HqeVFH.cjs.map +1 -0
  13. package/dist/challengeAssert-DVErOd8l.js +423 -0
  14. package/dist/challengeAssert-DVErOd8l.js.map +1 -0
  15. package/dist/index.cjs +1 -1
  16. package/dist/index.js +62 -1
  17. package/dist/index.js.map +1 -1
  18. package/dist/shared/index.cjs +1 -1
  19. package/dist/shared/index.d.ts +3 -1
  20. package/dist/shared/index.d.ts.map +1 -1
  21. package/dist/shared/index.js +5 -1
  22. package/dist/shared/index.js.map +1 -1
  23. package/dist/shared/wallets/__tests__/BitcoinWallet.test.d.ts +2 -0
  24. package/dist/shared/wallets/__tests__/BitcoinWallet.test.d.ts.map +1 -0
  25. package/dist/shared/wallets/__tests__/EthereumWallet.test.d.ts +2 -0
  26. package/dist/shared/wallets/__tests__/EthereumWallet.test.d.ts.map +1 -0
  27. package/dist/shared/wallets/index.d.ts +4 -0
  28. package/dist/shared/wallets/index.d.ts.map +1 -0
  29. package/dist/shared/wallets/interfaces/BitcoinWallet.d.ts +106 -0
  30. package/dist/shared/wallets/interfaces/BitcoinWallet.d.ts.map +1 -0
  31. package/dist/shared/wallets/interfaces/EthereumWallet.d.ts +6 -0
  32. package/dist/shared/wallets/interfaces/EthereumWallet.d.ts.map +1 -0
  33. package/dist/shared/wallets/interfaces/index.d.ts +4 -0
  34. package/dist/shared/wallets/interfaces/index.d.ts.map +1 -0
  35. package/dist/shared/wallets/mocks/MockBitcoinWallet.d.ts +29 -0
  36. package/dist/shared/wallets/mocks/MockBitcoinWallet.d.ts.map +1 -0
  37. package/dist/shared/wallets/mocks/MockEthereumWallet.d.ts +51 -0
  38. package/dist/shared/wallets/mocks/MockEthereumWallet.d.ts.map +1 -0
  39. package/dist/shared/wallets/mocks/index.d.ts +5 -0
  40. package/dist/shared/wallets/mocks/index.d.ts.map +1 -0
  41. package/dist/tbv/core/clients/index.d.ts +9 -0
  42. package/dist/tbv/core/clients/index.d.ts.map +1 -0
  43. package/dist/tbv/core/clients/mempool/index.d.ts +11 -0
  44. package/dist/tbv/core/clients/mempool/index.d.ts.map +1 -0
  45. package/dist/tbv/core/clients/mempool/mempoolApi.d.ts +94 -0
  46. package/dist/tbv/core/clients/mempool/mempoolApi.d.ts.map +1 -0
  47. package/dist/tbv/core/clients/mempool/types.d.ts +98 -0
  48. package/dist/tbv/core/clients/mempool/types.d.ts.map +1 -0
  49. package/dist/tbv/core/contracts/abis/BTCVaultsManager.abi.d.ts +187 -0
  50. package/dist/tbv/core/contracts/abis/BTCVaultsManager.abi.d.ts.map +1 -0
  51. package/dist/tbv/core/contracts/errors.d.ts +50 -0
  52. package/dist/tbv/core/contracts/errors.d.ts.map +1 -0
  53. package/dist/tbv/core/contracts/index.d.ts +11 -0
  54. package/dist/tbv/core/contracts/index.d.ts.map +1 -0
  55. package/dist/tbv/core/index.cjs +1 -1
  56. package/dist/tbv/core/index.d.ts +17 -1
  57. package/dist/tbv/core/index.d.ts.map +1 -1
  58. package/dist/tbv/core/index.js +59 -1
  59. package/dist/tbv/core/index.js.map +1 -1
  60. package/dist/tbv/core/managers/PayoutManager.d.ts +158 -0
  61. package/dist/tbv/core/managers/PayoutManager.d.ts.map +1 -0
  62. package/dist/tbv/core/managers/PeginManager.d.ts +327 -0
  63. package/dist/tbv/core/managers/PeginManager.d.ts.map +1 -0
  64. package/dist/tbv/core/managers/__tests__/PayoutManager.test.d.ts +8 -0
  65. package/dist/tbv/core/managers/__tests__/PayoutManager.test.d.ts.map +1 -0
  66. package/dist/tbv/core/managers/__tests__/PeginManager.test.d.ts +8 -0
  67. package/dist/tbv/core/managers/__tests__/PeginManager.test.d.ts.map +1 -0
  68. package/dist/tbv/core/managers/index.d.ts +75 -0
  69. package/dist/tbv/core/managers/index.d.ts.map +1 -0
  70. package/dist/tbv/core/primitives/index.cjs +2 -0
  71. package/dist/tbv/core/primitives/index.d.ts +77 -0
  72. package/dist/tbv/core/primitives/index.d.ts.map +1 -0
  73. package/dist/tbv/core/primitives/index.js +21 -0
  74. package/dist/tbv/{integrations/morpho → core/primitives}/index.js.map +1 -1
  75. package/dist/tbv/core/primitives/psbt/__tests__/constants.d.ts +137 -0
  76. package/dist/tbv/core/primitives/psbt/__tests__/constants.d.ts.map +1 -0
  77. package/dist/tbv/core/primitives/psbt/__tests__/helpers.d.ts +71 -0
  78. package/dist/tbv/core/primitives/psbt/__tests__/helpers.d.ts.map +1 -0
  79. package/dist/tbv/core/primitives/psbt/__tests__/payout.test.d.ts +8 -0
  80. package/dist/tbv/core/primitives/psbt/__tests__/payout.test.d.ts.map +1 -0
  81. package/dist/tbv/core/primitives/psbt/__tests__/pegin.test.d.ts +5 -0
  82. package/dist/tbv/core/primitives/psbt/__tests__/pegin.test.d.ts.map +1 -0
  83. package/dist/tbv/core/primitives/psbt/challengeAssert.d.ts +27 -0
  84. package/dist/tbv/core/primitives/psbt/challengeAssert.d.ts.map +1 -0
  85. package/dist/tbv/core/primitives/psbt/depositorPayout.d.ts +27 -0
  86. package/dist/tbv/core/primitives/psbt/depositorPayout.d.ts.map +1 -0
  87. package/dist/tbv/core/primitives/psbt/index.d.ts +27 -0
  88. package/dist/tbv/core/primitives/psbt/index.d.ts.map +1 -0
  89. package/dist/tbv/core/primitives/psbt/noPayout.d.ts +28 -0
  90. package/dist/tbv/core/primitives/psbt/noPayout.d.ts.map +1 -0
  91. package/dist/tbv/core/primitives/psbt/payout.d.ts +99 -0
  92. package/dist/tbv/core/primitives/psbt/payout.d.ts.map +1 -0
  93. package/dist/tbv/core/primitives/psbt/pegin.d.ts +88 -0
  94. package/dist/tbv/core/primitives/psbt/pegin.d.ts.map +1 -0
  95. package/dist/tbv/core/primitives/scripts/__tests__/payout.test.d.ts +5 -0
  96. package/dist/tbv/core/primitives/scripts/__tests__/payout.test.d.ts.map +1 -0
  97. package/dist/tbv/core/primitives/scripts/index.d.ts +10 -0
  98. package/dist/tbv/core/primitives/scripts/index.d.ts.map +1 -0
  99. package/dist/tbv/core/primitives/scripts/payout.d.ts +102 -0
  100. package/dist/tbv/core/primitives/scripts/payout.d.ts.map +1 -0
  101. package/dist/tbv/core/primitives/utils/__tests__/bitcoin.test.d.ts +5 -0
  102. package/dist/tbv/core/primitives/utils/__tests__/bitcoin.test.d.ts.map +1 -0
  103. package/dist/tbv/core/primitives/utils/bitcoin.d.ts +132 -0
  104. package/dist/tbv/core/primitives/utils/bitcoin.d.ts.map +1 -0
  105. package/dist/tbv/core/primitives/utils/index.d.ts +9 -0
  106. package/dist/tbv/core/primitives/utils/index.d.ts.map +1 -0
  107. package/dist/tbv/core/utils/btc/index.d.ts +10 -0
  108. package/dist/tbv/core/utils/btc/index.d.ts.map +1 -0
  109. package/dist/tbv/core/utils/btc/psbtInputFields.d.ts +41 -0
  110. package/dist/tbv/core/utils/btc/psbtInputFields.d.ts.map +1 -0
  111. package/dist/tbv/core/utils/btc/scriptType.d.ts +34 -0
  112. package/dist/tbv/core/utils/btc/scriptType.d.ts.map +1 -0
  113. package/dist/tbv/core/utils/fee/constants.d.ts +25 -0
  114. package/dist/tbv/core/utils/fee/constants.d.ts.map +1 -0
  115. package/dist/tbv/core/utils/fee/index.d.ts +7 -0
  116. package/dist/tbv/core/utils/fee/index.d.ts.map +1 -0
  117. package/dist/tbv/core/utils/index.d.ts +16 -0
  118. package/dist/tbv/core/utils/index.d.ts.map +1 -0
  119. package/dist/tbv/core/utils/transaction/__tests__/btcTxHash.test.d.ts +5 -0
  120. package/dist/tbv/core/utils/transaction/__tests__/btcTxHash.test.d.ts.map +1 -0
  121. package/dist/tbv/core/utils/transaction/__tests__/createSplitTransaction.test.d.ts +5 -0
  122. package/dist/tbv/core/utils/transaction/__tests__/createSplitTransaction.test.d.ts.map +1 -0
  123. package/dist/tbv/core/utils/transaction/__tests__/fundPeginTransaction.test.d.ts +5 -0
  124. package/dist/tbv/core/utils/transaction/__tests__/fundPeginTransaction.test.d.ts.map +1 -0
  125. package/dist/tbv/core/utils/transaction/btcTxHash.d.ts +15 -0
  126. package/dist/tbv/core/utils/transaction/btcTxHash.d.ts.map +1 -0
  127. package/dist/tbv/core/utils/transaction/createSplitTransaction.d.ts +106 -0
  128. package/dist/tbv/core/utils/transaction/createSplitTransaction.d.ts.map +1 -0
  129. package/dist/tbv/core/utils/transaction/fundPeginTransaction.d.ts +70 -0
  130. package/dist/tbv/core/utils/transaction/fundPeginTransaction.d.ts.map +1 -0
  131. package/dist/tbv/core/utils/transaction/index.d.ts +9 -0
  132. package/dist/tbv/core/utils/transaction/index.d.ts.map +1 -0
  133. package/dist/tbv/core/utils/utxo/__tests__/selectUtxos.test.d.ts +5 -0
  134. package/dist/tbv/core/utils/utxo/__tests__/selectUtxos.test.d.ts.map +1 -0
  135. package/dist/tbv/core/utils/utxo/index.d.ts +7 -0
  136. package/dist/tbv/core/utils/utxo/index.d.ts.map +1 -0
  137. package/dist/tbv/core/utils/utxo/selectUtxos.d.ts +65 -0
  138. package/dist/tbv/core/utils/utxo/selectUtxos.d.ts.map +1 -0
  139. package/dist/tbv/index.cjs +1 -1
  140. package/dist/tbv/index.js +59 -1
  141. package/dist/tbv/index.js.map +1 -1
  142. package/dist/tbv/integrations/aave/clients/__tests__/spoke.test.d.ts +2 -0
  143. package/dist/tbv/integrations/aave/clients/__tests__/spoke.test.d.ts.map +1 -0
  144. package/dist/tbv/integrations/aave/clients/__tests__/transaction.test.d.ts +2 -0
  145. package/dist/tbv/integrations/aave/clients/__tests__/transaction.test.d.ts.map +1 -0
  146. package/dist/tbv/integrations/aave/clients/abis/AaveIntegrationController.abi.json.d.ts +1879 -0
  147. package/dist/tbv/integrations/aave/clients/abis/AaveSpoke.abi.json.d.ts +1262 -0
  148. package/dist/tbv/integrations/aave/clients/index.d.ts +4 -0
  149. package/dist/tbv/integrations/aave/clients/index.d.ts.map +1 -0
  150. package/dist/tbv/integrations/aave/clients/query.d.ts +27 -0
  151. package/dist/tbv/integrations/aave/clients/query.d.ts.map +1 -0
  152. package/dist/tbv/integrations/aave/clients/spoke.d.ts +161 -0
  153. package/dist/tbv/integrations/aave/clients/spoke.d.ts.map +1 -0
  154. package/dist/tbv/integrations/aave/clients/transaction.d.ts +110 -0
  155. package/dist/tbv/integrations/aave/clients/transaction.d.ts.map +1 -0
  156. package/dist/tbv/integrations/aave/config.d.ts +7 -0
  157. package/dist/tbv/integrations/aave/config.d.ts.map +1 -0
  158. package/dist/tbv/integrations/aave/constants.d.ts +113 -0
  159. package/dist/tbv/integrations/aave/constants.d.ts.map +1 -0
  160. package/dist/tbv/integrations/aave/index.cjs +2 -0
  161. package/dist/tbv/integrations/aave/index.cjs.map +1 -0
  162. package/dist/tbv/integrations/aave/index.d.ts +53 -0
  163. package/dist/tbv/integrations/aave/index.d.ts.map +1 -0
  164. package/dist/tbv/integrations/aave/index.js +307 -0
  165. package/dist/tbv/integrations/aave/index.js.map +1 -0
  166. package/dist/tbv/integrations/aave/types.d.ts +66 -0
  167. package/dist/tbv/integrations/aave/types.d.ts.map +1 -0
  168. package/dist/tbv/integrations/aave/utils/__tests__/aaveConversions.test.d.ts +5 -0
  169. package/dist/tbv/integrations/aave/utils/__tests__/aaveConversions.test.d.ts.map +1 -0
  170. package/dist/tbv/integrations/aave/utils/__tests__/borrowRatio.test.d.ts +5 -0
  171. package/dist/tbv/integrations/aave/utils/__tests__/borrowRatio.test.d.ts.map +1 -0
  172. package/dist/tbv/integrations/aave/utils/__tests__/debtUtils.test.d.ts +5 -0
  173. package/dist/tbv/integrations/aave/utils/__tests__/debtUtils.test.d.ts.map +1 -0
  174. package/dist/tbv/integrations/aave/utils/__tests__/healthFactor.test.d.ts +5 -0
  175. package/dist/tbv/integrations/aave/utils/__tests__/healthFactor.test.d.ts.map +1 -0
  176. package/dist/tbv/integrations/aave/utils/__tests__/vaultSelection.test.d.ts +2 -0
  177. package/dist/tbv/integrations/aave/utils/__tests__/vaultSelection.test.d.ts.map +1 -0
  178. package/dist/tbv/integrations/aave/utils/__tests__/vaultSplit.test.d.ts +5 -0
  179. package/dist/tbv/integrations/aave/utils/__tests__/vaultSplit.test.d.ts.map +1 -0
  180. package/dist/tbv/integrations/aave/utils/aaveConversions.d.ts +24 -0
  181. package/dist/tbv/integrations/aave/utils/aaveConversions.d.ts.map +1 -0
  182. package/dist/tbv/integrations/aave/utils/borrowRatio.d.ts +15 -0
  183. package/dist/tbv/integrations/aave/utils/borrowRatio.d.ts.map +1 -0
  184. package/dist/tbv/integrations/aave/utils/debtUtils.d.ts +14 -0
  185. package/dist/tbv/integrations/aave/utils/debtUtils.d.ts.map +1 -0
  186. package/dist/tbv/integrations/aave/utils/healthFactor.d.ts +108 -0
  187. package/dist/tbv/integrations/aave/utils/healthFactor.d.ts.map +1 -0
  188. package/dist/tbv/integrations/aave/utils/index.d.ts +10 -0
  189. package/dist/tbv/integrations/aave/utils/index.d.ts.map +1 -0
  190. package/dist/tbv/integrations/aave/utils/vaultSelection.d.ts +33 -0
  191. package/dist/tbv/integrations/aave/utils/vaultSelection.d.ts.map +1 -0
  192. package/dist/tbv/integrations/aave/utils/vaultSplit.d.ts +191 -0
  193. package/dist/tbv/integrations/aave/utils/vaultSplit.d.ts.map +1 -0
  194. package/package.json +37 -7
  195. package/dist/shared/__tests__/example.test.d.ts +0 -6
  196. package/dist/shared/__tests__/example.test.d.ts.map +0 -1
  197. package/dist/tbv/core/__tests__/example.test.d.ts +0 -6
  198. package/dist/tbv/core/__tests__/example.test.d.ts.map +0 -1
  199. package/dist/tbv/integrations/morpho/index.cjs +0 -2
  200. package/dist/tbv/integrations/morpho/index.d.ts +0 -2
  201. package/dist/tbv/integrations/morpho/index.d.ts.map +0 -1
  202. package/dist/tbv/integrations/morpho/index.js +0 -2
  203. /package/dist/tbv/{integrations/morpho → core/primitives}/index.cjs.map +0 -0
@@ -0,0 +1,4 @@
1
+ export { getPosition, getPositionCollateral } from './query.js';
2
+ export { getCollateralFactor, getLiquidationBonus, getTargetHealthFactor, getUserAccountData, getUserPosition, getUserTotalDebt, hasCollateral, hasDebt, } from './spoke.js';
3
+ export { buildBorrowTx, buildRepayTx, buildWithdrawCollateralsTx, } from './transaction.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/tbv/integrations/aave/clients/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAGhE,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,EAChB,aAAa,EACb,OAAO,GACR,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,aAAa,EACb,YAAY,EACZ,0BAA0B,GAC3B,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { Address, PublicClient } from 'viem';
2
+ import { AaveMarketPosition } from '../types.js';
3
+ /**
4
+ * Get a position by user address.
5
+ *
6
+ * The controller resolves the user's proxy contract and collateralized vault IDs.
7
+ *
8
+ * NOTE: Prefer using the indexer (fetchAavePositionWithCollaterals) for position data.
9
+ * This function is only needed when you need data not available in the indexer,
10
+ * or when you need to verify on-chain state.
11
+ *
12
+ * @param publicClient - Viem public client for reading contracts
13
+ * @param contractAddress - AaveIntegrationController contract address
14
+ * @param user - User's Ethereum address
15
+ * @returns Market position data or null if position doesn't exist
16
+ */
17
+ export declare function getPosition(publicClient: PublicClient, contractAddress: Address, user: Address): Promise<AaveMarketPosition | null>;
18
+ /**
19
+ * Get total collateral for a user's position.
20
+ *
21
+ * @param publicClient - Viem public client for reading contracts
22
+ * @param contractAddress - AaveIntegrationController contract address
23
+ * @param user - User's Ethereum address
24
+ * @returns Total collateral amount in satoshis
25
+ */
26
+ export declare function getPositionCollateral(publicClient: PublicClient, contractAddress: Address, user: Address): Promise<bigint>;
27
+ //# sourceMappingURL=query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../../../../src/tbv/integrations/aave/clients/query.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAY,KAAK,YAAY,EAAe,MAAM,MAAM,CAAC;AAE9E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGtD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,WAAW,CAC/B,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,OAAO,EACxB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAwBpC;AAED;;;;;;;GAOG;AACH,wBAAsB,qBAAqB,CACzC,YAAY,EAAE,YAAY,EAC1B,eAAe,EAAE,OAAO,EACxB,IAAI,EAAE,OAAO,GACZ,OAAO,CAAC,MAAM,CAAC,CASjB"}
@@ -0,0 +1,161 @@
1
+ import { Address, PublicClient } from 'viem';
2
+ import { AaveSpokeUserAccountData, AaveSpokeUserPosition } from '../types.js';
3
+ /**
4
+ * Get aggregated user account health data from AAVE spoke.
5
+ *
6
+ * **Live data** - Fetches real-time account health including health factor, total collateral,
7
+ * and total debt across all reserves. Values are calculated on-chain using AAVE oracles
8
+ * and are the authoritative source for liquidation decisions.
9
+ *
10
+ * @param publicClient - Viem public client for reading contracts (from `createPublicClient()`)
11
+ * @param spokeAddress - AAVE Spoke contract address (BTC Vault Core Spoke for vBTC collateral)
12
+ * @param userAddress - User's proxy contract address (NOT user's wallet address)
13
+ * @returns User account data with health metrics, collateral, and debt values
14
+ *
15
+ * @example
16
+ * ```typescript
17
+ * import { getUserAccountData } from "@babylonlabs-io/ts-sdk/tbv/integrations/aave";
18
+ * import { createPublicClient, http } from "viem";
19
+ * import { sepolia } from "viem/chains";
20
+ *
21
+ * const publicClient = createPublicClient({
22
+ * chain: sepolia,
23
+ * transport: http()
24
+ * });
25
+ *
26
+ * const accountData = await getUserAccountData(
27
+ * publicClient,
28
+ * "0x123...", // AAVE Spoke address
29
+ * "0x456..." // User's AAVE proxy address (from getPosition)
30
+ * );
31
+ *
32
+ * console.log("Health Factor:", accountData.healthFactor);
33
+ * console.log("Collateral (USD):", accountData.totalCollateralValue);
34
+ * console.log("Debt (USD):", accountData.totalDebtValue);
35
+ * ```
36
+ *
37
+ * @remarks
38
+ * **Return values:**
39
+ * - `healthFactor` - WAD format (1e18 = 1.0). Below 1.0 = liquidatable
40
+ * - `totalCollateralValue` - USD value in base currency (1e26 = $1)
41
+ * - `totalDebtValue` - USD value in base currency (1e26 = $1)
42
+ * - `avgCollateralFactor` - Weighted average collateral factor in WAD (1e18 = 100%)
43
+ * - `riskPremium` - Additional risk premium
44
+ *
45
+ * **Use cases:**
46
+ * - Check liquidation risk before borrowing
47
+ * - Calculate safe borrow amount
48
+ * - Monitor position health
49
+ * - Display UI health indicators
50
+ */
51
+ export declare function getUserAccountData(publicClient: PublicClient, spokeAddress: Address, userAddress: Address): Promise<AaveSpokeUserAccountData>;
52
+ /**
53
+ * Get user position from the Spoke
54
+ *
55
+ * This fetches live data from the contract because debt accrues interest
56
+ * and needs to be current for accurate health factor calculations.
57
+ *
58
+ * @param publicClient - Viem public client for reading contracts
59
+ * @param spokeAddress - Aave Spoke contract address
60
+ * @param reserveId - Reserve ID
61
+ * @param userAddress - User's proxy contract address
62
+ * @returns User position data
63
+ */
64
+ export declare function getUserPosition(publicClient: PublicClient, spokeAddress: Address, reserveId: bigint, userAddress: Address): Promise<AaveSpokeUserPosition>;
65
+ /**
66
+ * Check if a user has any debt in a reserve
67
+ *
68
+ * @param publicClient - Viem public client for reading contracts
69
+ * @param spokeAddress - Aave Spoke contract address
70
+ * @param reserveId - Reserve ID
71
+ * @param userAddress - User's proxy contract address
72
+ * @returns true if user has debt
73
+ */
74
+ export declare function hasDebt(publicClient: PublicClient, spokeAddress: Address, reserveId: bigint, userAddress: Address): Promise<boolean>;
75
+ /**
76
+ * Check if a user has supplied collateral in a reserve
77
+ *
78
+ * @param publicClient - Viem public client for reading contracts
79
+ * @param spokeAddress - Aave Spoke contract address
80
+ * @param reserveId - Reserve ID
81
+ * @param userAddress - User's proxy contract address
82
+ * @returns true if user has supplied collateral
83
+ */
84
+ export declare function hasCollateral(publicClient: PublicClient, spokeAddress: Address, reserveId: bigint, userAddress: Address): Promise<boolean>;
85
+ /**
86
+ * Get user's exact total debt in a reserve (token units, not shares).
87
+ *
88
+ * Returns the precise amount owed including accrued interest. Essential for full repayment.
89
+ * Debt accrues interest every block, so this must be fetched live from the contract.
90
+ *
91
+ * @param publicClient - Viem public client for reading contracts
92
+ * @param spokeAddress - AAVE Spoke contract address
93
+ * @param reserveId - Reserve ID for the debt asset (e.g., `2n` for USDC)
94
+ * @param userAddress - User's proxy contract address
95
+ * @returns Total debt amount in token units (e.g., for USDC: `100000000n` = 100 USDC)
96
+ *
97
+ * @example
98
+ * ```typescript
99
+ * import { getUserTotalDebt, FULL_REPAY_BUFFER_DIVISOR } from "@babylonlabs-io/ts-sdk/tbv/integrations/aave";
100
+ * import { formatUnits } from "viem";
101
+ *
102
+ * const totalDebt = await getUserTotalDebt(
103
+ * publicClient,
104
+ * AAVE_SPOKE_ADDRESS,
105
+ * 2n, // USDC reserve
106
+ * proxyAddress
107
+ * );
108
+ *
109
+ * // For full repayment, add buffer to account for interest accrual
110
+ * const repayAmount = totalDebt + (totalDebt / FULL_REPAY_BUFFER_DIVISOR);
111
+ *
112
+ * console.log("Debt:", formatUnits(totalDebt, 6), "USDC");
113
+ * ```
114
+ *
115
+ * @remarks
116
+ * **Important for full repayment:**
117
+ * - Add `FULL_REPAY_BUFFER_DIVISOR` buffer to account for interest between fetch and tx execution
118
+ * - Contract only takes what's owed; excess stays in wallet
119
+ * - For partial repayment, use any amount less than total debt
120
+ */
121
+ export declare function getUserTotalDebt(publicClient: PublicClient, spokeAddress: Address, reserveId: bigint, userAddress: Address): Promise<bigint>;
122
+ /**
123
+ * Get the target health factor (THF) from the Core Spoke contract.
124
+ *
125
+ * Per-spoke governance parameter. After a liquidation, the protocol targets
126
+ * restoring the position to this health factor.
127
+ *
128
+ * @param _publicClient - Viem public client (unused in mock, required for API stability)
129
+ * @param _spokeAddress - Core Spoke contract address (unused in mock, required for API stability)
130
+ * @returns Target health factor in WAD (1e18 = 1.0). Example: 1.10 = 1_100_000_000_000_000_000n
131
+ *
132
+ * TODO: Replace mock with real contract read when Core Spoke ABI is available
133
+ */
134
+ export declare function getTargetHealthFactor(_publicClient: PublicClient, _spokeAddress: Address): Promise<bigint>;
135
+ /**
136
+ * Get the collateral factor (CF) from the Core Spoke contract.
137
+ *
138
+ * Determines what fraction of collateral value counts toward borrowing power.
139
+ * Default is 75% (7500 BPS), configurable per spoke.
140
+ *
141
+ * @param _publicClient - Viem public client (unused in mock, required for API stability)
142
+ * @param _spokeAddress - Core Spoke contract address (unused in mock, required for API stability)
143
+ * @returns Collateral factor in BPS (10000 = 100%). Example: 0.75 = 7500n
144
+ *
145
+ * TODO: Replace mock with real contract read when Core Spoke ABI is available
146
+ */
147
+ export declare function getCollateralFactor(_publicClient: PublicClient, _spokeAddress: Address): Promise<bigint>;
148
+ /**
149
+ * Get the liquidation bonus (LB) from the Core Spoke contract.
150
+ *
151
+ * The bonus multiplier awarded to liquidators. Fixed at 1.05 (5% bonus)
152
+ * with min = max (no Dutch auction).
153
+ *
154
+ * @param _publicClient - Viem public client (unused in mock, required for API stability)
155
+ * @param _spokeAddress - Core Spoke contract address (unused in mock, required for API stability)
156
+ * @returns Liquidation bonus in WAD (1e18 = 1.0). Example: 1.05 = 1_050_000_000_000_000_000n
157
+ *
158
+ * TODO: Replace mock with real contract read when Core Spoke ABI is available
159
+ */
160
+ export declare function getLiquidationBonus(_publicClient: PublicClient, _spokeAddress: Address): Promise<bigint>;
161
+ //# sourceMappingURL=spoke.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spoke.d.ts","sourceRoot":"","sources":["../../../../../src/tbv/integrations/aave/clients/spoke.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAOlD,OAAO,KAAK,EACV,wBAAwB,EACxB,qBAAqB,EACtB,MAAM,aAAa,CAAC;AAuCrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,wBAAsB,kBAAkB,CACtC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,EACrB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,wBAAwB,CAAC,CAkBnC;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,eAAe,CACnC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,EACrB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,qBAAqB,CAAC,CAShC;AAED;;;;;;;;GAQG;AACH,wBAAsB,OAAO,CAC3B,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,EACrB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED;;;;;;;;GAQG;AACH,wBAAsB,aAAa,CACjC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,EACrB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,OAAO,CAAC,CAQlB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,YAAY,EAC1B,YAAY,EAAE,OAAO,EACrB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,OAAO,GACnB,OAAO,CAAC,MAAM,CAAC,CASjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CACzC,aAAa,EAAE,YAAY,EAC3B,aAAa,EAAE,OAAO,GACrB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,aAAa,EAAE,YAAY,EAC3B,aAAa,EAAE,OAAO,GACrB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,mBAAmB,CACvC,aAAa,EAAE,YAAY,EAC3B,aAAa,EAAE,OAAO,GACrB,OAAO,CAAC,MAAM,CAAC,CAEjB"}
@@ -0,0 +1,110 @@
1
+ import { Address, Hex } from 'viem';
2
+ import { TransactionParams } from '../types.js';
3
+ /**
4
+ * Build transaction to withdraw selected vaults from AAVE position.
5
+ *
6
+ * Withdraws specific vaults (partial withdrawal) and redeems them back to the depositor.
7
+ * **Requires zero debt** - position must have no outstanding borrows.
8
+ *
9
+ * @param contractAddress - AaveIntegrationController contract address
10
+ * @param vaultIds - Array of vault IDs (bytes32) to withdraw
11
+ * @returns Unsigned transaction parameters for execution with viem wallet
12
+ */
13
+ export declare function buildWithdrawCollateralsTx(contractAddress: Address, vaultIds: Hex[]): TransactionParams;
14
+ /**
15
+ * Build transaction to borrow assets against vBTC collateral.
16
+ *
17
+ * Borrows stablecoins (e.g., USDC) against your BTC collateral position.
18
+ * Health factor must remain above 1.0 after borrowing, otherwise transaction will revert.
19
+ *
20
+ * @param contractAddress - AaveIntegrationController contract address
21
+ * @param debtReserveId - AAVE reserve ID for the debt asset (e.g., `2n` for USDC reserve)
22
+ * @param amount - Amount to borrow in token units with decimals (e.g., for USDC with 6 decimals: `100000000n` = 100 USDC). Use `parseUnits()` from viem.
23
+ * @param receiver - Address to receive borrowed tokens (usually user's address)
24
+ * @returns Unsigned transaction parameters for execution with viem wallet
25
+ *
26
+ * @example
27
+ * ```typescript
28
+ * import { buildBorrowTx } from "@babylonlabs-io/ts-sdk/tbv/integrations/aave";
29
+ * import { parseUnits } from "viem";
30
+ *
31
+ * // Borrow 100 USDC (6 decimals)
32
+ * const borrowAmount = parseUnits("100", 6);
33
+ *
34
+ * const txParams = buildBorrowTx(
35
+ * "0x123...", // Controller address
36
+ * 2n, // USDC reserve ID
37
+ * borrowAmount,
38
+ * "0x456..." // Receiver address
39
+ * );
40
+ *
41
+ * const hash = await walletClient.sendTransaction({
42
+ * to: txParams.to,
43
+ * data: txParams.data,
44
+ * chain: sepolia,
45
+ * });
46
+ * ```
47
+ *
48
+ * @remarks
49
+ * **What happens on-chain:**
50
+ * 1. Checks health factor won't drop below liquidation threshold (1.0)
51
+ * 2. Mints debt tokens to user's proxy contract
52
+ * 3. Transfers borrowed asset to receiver address
53
+ * 4. Updates position debt
54
+ * 5. Emits `Borrowed` event
55
+ *
56
+ * **Possible errors:**
57
+ * - Borrow would make health factor < 1.0
58
+ * - Insufficient collateral
59
+ * - Reserve doesn't exist
60
+ * - Position doesn't exist
61
+ *
62
+ * **Important:** Calculate safe borrow amount using `calculateHealthFactor()` to avoid liquidation.
63
+ */
64
+ export declare function buildBorrowTx(contractAddress: Address, debtReserveId: bigint, amount: bigint, receiver: Address): TransactionParams;
65
+ /**
66
+ * Build transaction to repay debt on AAVE position.
67
+ *
68
+ * **Requires token approval** - user must approve controller to spend debt token first.
69
+ * Repays borrowed assets (partial or full repayment supported).
70
+ *
71
+ * @param contractAddress - AaveIntegrationController contract address
72
+ * @param borrower - Borrower's address (for self-repay, use connected wallet address)
73
+ * @param debtReserveId - AAVE reserve ID for the debt asset
74
+ * @param amount - Amount to repay in token units. Can repay partial or full debt. For full repay, use `getUserTotalDebt()` to get exact amount.
75
+ * @returns Unsigned transaction parameters for execution with viem wallet
76
+ *
77
+ * @example
78
+ * ```typescript
79
+ * import { buildRepayTx } from "@babylonlabs-io/ts-sdk/tbv/integrations/aave";
80
+ *
81
+ * // Build repay transaction (self-repay)
82
+ * const txParams = buildRepayTx(
83
+ * AAVE_CONTROLLER,
84
+ * borrowerAddress, // Connected wallet address for self-repay
85
+ * USDC_RESERVE_ID,
86
+ * repayAmount
87
+ * );
88
+ *
89
+ * const hash = await walletClient.sendTransaction({
90
+ * to: txParams.to,
91
+ * data: txParams.data,
92
+ * chain: sepolia,
93
+ * });
94
+ * ```
95
+ *
96
+ * @remarks
97
+ * **What happens on-chain:**
98
+ * 1. Transfers tokens from user to controller (requires approval)
99
+ * 2. Burns debt tokens from user's proxy
100
+ * 3. Updates position debt
101
+ * 4. Emits `Repaid` event
102
+ *
103
+ * **Possible errors:**
104
+ * - Insufficient token approval
105
+ * - User doesn't have enough tokens
106
+ * - Repay amount exceeds debt
107
+ * - Position doesn't exist
108
+ */
109
+ export declare function buildRepayTx(contractAddress: Address, borrower: Address, debtReserveId: bigint, amount: bigint): TransactionParams;
110
+ //# sourceMappingURL=transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../../../../src/tbv/integrations/aave/clients/transaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,KAAK,OAAO,EAAE,KAAK,GAAG,EAAsB,MAAM,MAAM,CAAC;AAGlE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAGrD;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,eAAe,EAAE,OAAO,EACxB,QAAQ,EAAE,GAAG,EAAE,GACd,iBAAiB,CAWnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,wBAAgB,aAAa,CAC3B,eAAe,EAAE,OAAO,EACxB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,OAAO,GAChB,iBAAiB,CAWnB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAgB,YAAY,CAC1B,eAAe,EAAE,OAAO,EACxB,QAAQ,EAAE,OAAO,EACjB,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,GACb,iBAAiB,CAWnB"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Aave Configuration
3
+ *
4
+ * Re-exports function names and constants for easy access.
5
+ */
6
+ export { AAVE_FUNCTION_NAMES } from './constants.js';
7
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/tbv/integrations/aave/config.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,113 @@
1
+ /**
2
+ * Aave Protocol Constants
3
+ *
4
+ * Constants for interacting with Aave v4 protocol.
5
+ * Reference: https://github.com/aave/aave-v4 ISpoke.sol
6
+ */
7
+ /**
8
+ * Aave contract function names
9
+ * Centralized constants for contract interactions
10
+ */
11
+ export declare const AAVE_FUNCTION_NAMES: {
12
+ /** Withdraw selected vaults from position (partial withdrawal) */
13
+ readonly WITHDRAW_COLLATERALS: "withdrawCollaterals";
14
+ /** Borrow from Core Spoke position */
15
+ readonly BORROW: "borrowFromCorePosition";
16
+ /** Repay debt to Core Spoke position */
17
+ readonly REPAY: "repayToCorePosition";
18
+ };
19
+ /**
20
+ * BTC token decimals (satoshis)
21
+ * 1 BTC = 100,000,000 satoshis
22
+ */
23
+ export declare const BTC_DECIMALS = 8;
24
+ /**
25
+ * USDC token decimals
26
+ * Used for debt calculations
27
+ */
28
+ export declare const USDC_DECIMALS = 6;
29
+ /**
30
+ * Divisor to convert basis points (BPS) to percentage
31
+ *
32
+ * In Aave v4, risk parameters like collateralRisk are stored in BPS
33
+ * where 10000 BPS = 100%.
34
+ *
35
+ * Example: 8000 BPS / 100 = 80%
36
+ *
37
+ * Reference: ISpoke.sol - "collateralRisk The risk associated with a
38
+ * collateral asset, expressed in BPS"
39
+ */
40
+ export declare const BPS_TO_PERCENT_DIVISOR = 100;
41
+ /**
42
+ * Full basis points scale (10000 BPS = 100%)
43
+ *
44
+ * Use this when converting BPS directly to decimal:
45
+ * Example: 8000 BPS / 10000 = 0.80
46
+ */
47
+ export declare const BPS_SCALE = 10000;
48
+ /**
49
+ * Aave base currency decimals
50
+ * Account data values (collateral, debt) use 1e26 = $1 USD
51
+ *
52
+ * Reference: ISpoke.sol UserAccountData
53
+ */
54
+ export declare const AAVE_BASE_CURRENCY_DECIMALS = 26;
55
+ /**
56
+ * WAD decimals (1e18 = 1.0)
57
+ * Used for health factor and collateral factor values
58
+ *
59
+ * Reference: ISpoke.sol - "healthFactor expressed in WAD. 1e18 represents a health factor of 1.00"
60
+ */
61
+ export declare const WAD_DECIMALS = 18;
62
+ /**
63
+ * Health factor warning threshold
64
+ * Positions below this are considered at risk of liquidation
65
+ */
66
+ export declare const HEALTH_FACTOR_WARNING_THRESHOLD = 1.5;
67
+ /**
68
+ * Minimum health factor allowed for borrowing
69
+ * Prevents users from borrowing if resulting health factor would be below this.
70
+ */
71
+ export declare const MIN_HEALTH_FACTOR_FOR_BORROW = 1.2;
72
+ /**
73
+ * Buffer for full repayment to account for interest accrual
74
+ * between fetching debt and transaction execution.
75
+ * 0.01% buffer (1 basis point) - the contract only takes what's owed.
76
+ */
77
+ export declare const FULL_REPAY_BUFFER_DIVISOR = 10000n;
78
+ /**
79
+ * Mock Core Spoke parameter: Target Health Factor (THF)
80
+ * Per-spoke governance parameter. After liquidation, the protocol targets
81
+ * restoring the position to this health factor.
82
+ *
83
+ * Stored in WAD format — Aave's fixed-point encoding where 1e18 = 1.0.
84
+ * To convert to a plain number: `Number(value) / 1e18`.
85
+ * 1.10 * 1e18 = 1_100_000_000_000_000_000n
86
+ *
87
+ * TODO: Replace with real contract read when Core Spoke ABI is available
88
+ */
89
+ export declare const MOCK_TARGET_HEALTH_FACTOR_WAD = 1100000000000000000n;
90
+ /**
91
+ * Mock Core Spoke parameter: Collateral Factor (CF)
92
+ * Determines what fraction of collateral value counts toward borrowing power.
93
+ *
94
+ * Stored in BPS (basis points) — 1 BPS = 0.01%, so 10000 BPS = 100%.
95
+ * To convert to a decimal: `Number(value) / 10000`.
96
+ * 0.75 (75%) * 10000 = 7500n
97
+ *
98
+ * TODO: Replace with real contract read when Core Spoke ABI is available
99
+ */
100
+ export declare const MOCK_COLLATERAL_FACTOR_BPS = 7500n;
101
+ /**
102
+ * Mock Core Spoke parameter: Liquidation Bonus (LB)
103
+ * Bonus multiplier awarded to liquidators. Fixed at 1.05 (5% bonus),
104
+ * min = max (no Dutch auction).
105
+ *
106
+ * Stored in WAD format — Aave's fixed-point encoding where 1e18 = 1.0.
107
+ * To convert to a plain number: `Number(value) / 1e18`.
108
+ * 1.05 * 1e18 = 1_050_000_000_000_000_000n
109
+ *
110
+ * TODO: Replace with real contract read when Core Spoke ABI is available
111
+ */
112
+ export declare const MOCK_LIQUIDATION_BONUS_WAD = 1050000000000000000n;
113
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../../src/tbv/integrations/aave/constants.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH;;;GAGG;AACH,eAAO,MAAM,mBAAmB;IAC9B,kEAAkE;;IAElE,sCAAsC;;IAEtC,wCAAwC;;CAEhC,CAAC;AAEX;;;GAGG;AACH,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B;;;GAGG;AACH,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB,MAAM,CAAC;AAE1C;;;;;GAKG;AACH,eAAO,MAAM,SAAS,QAAQ,CAAC;AAE/B;;;;;GAKG;AACH,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAE9C;;;;;GAKG;AACH,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B;;;GAGG;AACH,eAAO,MAAM,+BAA+B,MAAM,CAAC;AAEnD;;;GAGG;AACH,eAAO,MAAM,4BAA4B,MAAM,CAAC;AAEhD;;;;GAIG;AACH,eAAO,MAAM,yBAAyB,SAAS,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,6BAA6B,uBAA6B,CAAC;AAExE;;;;;;;;;GASG;AACH,eAAO,MAAM,0BAA0B,QAAQ,CAAC;AAEhD;;;;;;;;;;GAUG;AACH,eAAO,MAAM,0BAA0B,uBAA6B,CAAC"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("viem"),c={WITHDRAW_COLLATERALS:"withdrawCollaterals",BORROW:"borrowFromCorePosition",REPAY:"repayToCorePosition"},x=8,E=6,h=100,M=1e4,R=26,g=18,I=1.5,V=1.2,O=10000n,P=1100000000000000000n,S=7500n,w=1050000000000000000n,o=JSON.parse('[{"type":"constructor","inputs":[{"name":"vaultBTC_","type":"address","internalType":"address"},{"name":"coreSpoke_","type":"address","internalType":"address"},{"name":"btcVaultManager_","type":"address","internalType":"address"},{"name":"applicationRegistry_","type":"address","internalType":"address"},{"name":"coreSpokeProxyImpl_","type":"address","internalType":"address"},{"name":"coreVaultBtcReserveId_","type":"uint256","internalType":"uint256"},{"name":"protocolParams_","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"APPLICATION_ADMIN","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"APPLICATION_PAUSING_GUARDIAN","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"pure"},{"type":"function","name":"APP_REGISTRY","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IApplicationRegistry"}],"stateMutability":"view"},{"type":"function","name":"BTC_VAULT_CORE_SPOKE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ITBVAaveSpoke"}],"stateMutability":"view"},{"type":"function","name":"BTC_VAULT_CORE_SPOKE_PROXY_IMPLEMENTATION","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"BTC_VAULT_CORE_VAULT_BTC_RESERVE_ID","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"BTC_VAULT_MANAGER","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IBTCVaultsManager"}],"stateMutability":"view"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"PROTOCOL_PARAMS","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IProtocolParams"}],"stateMutability":"view"},{"type":"function","name":"TIMELOCK_UPGRADER","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"VAULT_BTC","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IVaultBTC"}],"stateMutability":"view"},{"type":"function","name":"activateVault","inputs":[{"name":"vaultId","type":"bytes32","internalType":"bytes32"},{"name":"vault","type":"tuple","internalType":"struct IBTCVaultsManager.BTCVault","components":[{"name":"depositor","type":"address","internalType":"address"},{"name":"depositorBtcPubKey","type":"bytes32","internalType":"bytes32"},{"name":"unsignedPegInTx","type":"bytes","internalType":"bytes"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"vaultProvider","type":"address","internalType":"address"},{"name":"status","type":"uint8","internalType":"enum IBTCVaultsManager.BTCVaultStatus"},{"name":"applicationController","type":"address","internalType":"address"},{"name":"universalChallengersVersion","type":"uint16","internalType":"uint16"},{"name":"appVaultKeepersVersion","type":"uint16","internalType":"uint16"},{"name":"offchainParamsVersion","type":"uint16","internalType":"uint16"},{"name":"createdAt","type":"uint256","internalType":"uint256"},{"name":"verifiedAt","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"applicationFeeRecipient","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"borrowFromCorePosition","inputs":[{"name":"debtReserveId","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"receiver","type":"address","internalType":"address"}],"outputs":[{"name":"borrowedShares","type":"uint256","internalType":"uint256"},{"name":"borrowedAmount","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"calculateLiquidationFees","inputs":[{"name":"borrower","type":"address","internalType":"address"}],"outputs":[{"name":"fairnessPayment","type":"tuple","internalType":"struct TokenAmountLib.TokenAmount","components":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]},{"name":"protocolFee","type":"tuple","internalType":"struct TokenAmountLib.TokenAmount","components":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"calculateLiquidationPayment","inputs":[{"name":"borrower","type":"address","internalType":"address"}],"outputs":[{"name":"payments","type":"tuple[]","internalType":"struct TokenAmountLib.TokenAmount[]","components":[{"name":"token","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"coreSpokeLiquidationFeeBps","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"fairnessPaymentReserveId","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"fairnessPaymentToken","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"function","name":"fullPause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getPosition","inputs":[{"name":"user","type":"address","internalType":"address"}],"outputs":[{"name":"position","type":"tuple","internalType":"struct AaveApplicationBase.MarketPosition","components":[{"name":"vaultIds","type":"bytes32[]","internalType":"bytes32[]"},{"name":"proxyContract","type":"address","internalType":"address"}]}],"stateMutability":"view"},{"type":"function","name":"getPositionCollateral","inputs":[{"name":"user","type":"address","internalType":"address"}],"outputs":[{"name":"totalCollateral","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPositionSizeParams","inputs":[],"outputs":[{"name":"minPositionBTC","type":"uint256","internalType":"uint256"},{"name":"maxPositionBTC","type":"uint256","internalType":"uint256"},{"name":"maxVaultsPerPosition","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getUserOfProxy","inputs":[{"name":"proxy","type":"address","internalType":"address"}],"outputs":[{"name":"user","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getVaultOwner","inputs":[{"name":"vaultId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"owner","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getVaultUsageStatus","inputs":[{"name":"vaultId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"status","type":"uint8","internalType":"enum AaveVaultHandler.VaultUsageStatus"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"initialTBVAdmin","type":"address","internalType":"address"},{"name":"coreSpokeLiquidationFeeBps_","type":"uint256","internalType":"uint256"},{"name":"applicationFeeRecipient_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isVaultCollateralized","inputs":[{"name":"vaultId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isVaultEscrowed","inputs":[{"name":"vaultId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"liquidateCorePosition","inputs":[{"name":"borrower","type":"address","internalType":"address"},{"name":"btcRedeemKey","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"seizedAmount","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"pauseState","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"enum ITBVPausable.PauseState"}],"stateMutability":"view"},{"type":"function","name":"positionSizeParams","inputs":[],"outputs":[{"name":"minPositionBTC","type":"uint256","internalType":"uint256"},{"name":"maxPositionBTC","type":"uint256","internalType":"uint256"},{"name":"maxVaultsPerPosition","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"redeemVaultFromSwap","inputs":[{"name":"vaultId","type":"bytes32","internalType":"bytes32"},{"name":"btcRedeemKey","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"repayToCorePosition","inputs":[{"name":"borrower","type":"address","internalType":"address"},{"name":"debtReserveId","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"repaidShares","type":"uint256","internalType":"uint256"},{"name":"repaidAmount","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setApplicationFeeRecipient","inputs":[{"name":"applicationFeeRecipient_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setCoreSpokeLiquidationFeeBps","inputs":[{"name":"coreSpokeLiquidationFeeBps_","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setFairnessPaymentToken","inputs":[{"name":"token","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPositionSizeParams","inputs":[{"name":"params","type":"tuple","internalType":"struct AaveApplicationBase.PositionSizeParams","components":[{"name":"minPositionBTC","type":"uint256","internalType":"uint256"},{"name":"maxPositionBTC","type":"uint256","internalType":"uint256"},{"name":"maxVaultsPerPosition","type":"uint256","internalType":"uint256"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setVaultSwap","inputs":[{"name":"vaultSwap_","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"softPause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"unpause","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"vaultOwner","inputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"vaultSwap","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"withdrawAllCollateralFromCorePosition","inputs":[],"outputs":[{"name":"withdrawnAmount","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"withdrawCollaterals","inputs":[{"name":"vaultsToWithdraw","type":"bytes32[]","internalType":"bytes32[]"}],"outputs":[{"name":"amountWithdrawn","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"event","name":"BTCVaultCoreSpokeLiquidated","inputs":[{"name":"depositor","type":"address","indexed":true,"internalType":"address"},{"name":"liquidator","type":"address","indexed":true,"internalType":"address"},{"name":"valueDebtRepaid","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"valueCollateralSeized","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"fairnessPayment","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"protocolFee","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"BorrowedFromPosition","inputs":[{"name":"borrower","type":"address","indexed":true,"internalType":"address"},{"name":"debtReserveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"receiver","type":"address","indexed":true,"internalType":"address"},{"name":"borrowAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"CollateralAdded","inputs":[{"name":"depositor","type":"address","indexed":true,"internalType":"address"},{"name":"vaultId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"CollateralWithdrawn","inputs":[{"name":"depositor","type":"address","indexed":true,"internalType":"address"},{"name":"vaultId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"ControllerApplicationFeeRecipientUpdated","inputs":[{"name":"applicationFeeRecipient","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"CoreSpokeLiquidationFeeBpsUpdated","inputs":[{"name":"coreSpokeLiquidationFeeBps","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"FairnessPaymentFailed","inputs":[{"name":"depositor","type":"address","indexed":true,"internalType":"address"},{"name":"liquidator","type":"address","indexed":true,"internalType":"address"},{"name":"protocolRecipient","type":"address","indexed":false,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"FairnessPaymentPaid","inputs":[{"name":"depositor","type":"address","indexed":true,"internalType":"address"},{"name":"liquidator","type":"address","indexed":true,"internalType":"address"},{"name":"amount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"FairnessPaymentTokenSet","inputs":[{"name":"token","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint8","indexed":false,"internalType":"uint8"}],"anonymous":false},{"type":"event","name":"PausedWith","inputs":[{"name":"state","type":"uint8","indexed":true,"internalType":"enum ITBVPausable.PauseState"},{"name":"pauser","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"PositionSizeParamsUpdated","inputs":[{"name":"oldMinPositionBTC","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"oldMaxPositionBTC","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"oldMaxVaultsPerPosition","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newMinPositionBTC","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newMaxPositionBTC","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"newMaxVaultsPerPosition","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RepaidFromPosition","inputs":[{"name":"borrower","type":"address","indexed":true,"internalType":"address"},{"name":"debtReserveId","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"repayAmount","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Unpaused","inputs":[{"name":"pauser","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"UserProxyCreated","inputs":[{"name":"user","type":"address","indexed":true,"internalType":"address"},{"name":"proxy","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"VaultLiquidated","inputs":[{"name":"vaultId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"liquidator","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"VaultMarkedCollateralized","inputs":[{"name":"vaultId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"VaultMarkedEscrowed","inputs":[{"name":"vaultId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"VaultMarkedRedeemed","inputs":[{"name":"vaultId","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"VaultOwnershipChanged","inputs":[{"name":"vaultId","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"VaultSwapUpdated","inputs":[{"name":"vaultSwap","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"DebtMustBeRepaidFirst","inputs":[]},{"type":"error","name":"EmptyArray","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"FailedDeployment","inputs":[]},{"type":"error","name":"IncompleteLiquidation","inputs":[{"name":"expected","type":"uint256","internalType":"uint256"},{"name":"actual","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"IncompleteWithdrawal","inputs":[{"name":"expected","type":"uint256","internalType":"uint256"},{"name":"actual","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InsufficientBalance","inputs":[{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"InvalidAmount","inputs":[]},{"type":"error","name":"InvalidFairnessPaymentTokenDecimals","inputs":[]},{"type":"error","name":"InvalidProxyContract","inputs":[]},{"type":"error","name":"InvalidVaultStatus","inputs":[]},{"type":"error","name":"MaxPositionBelowMin","inputs":[{"name":"maxPositionBTC","type":"uint256","internalType":"uint256"},{"name":"minPositionBTC","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlyApplicationController","inputs":[]},{"type":"error","name":"PositionAboveMaximum","inputs":[{"name":"actual","type":"uint256","internalType":"uint256"},{"name":"maximum","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"PositionBelowMinimum","inputs":[{"name":"actual","type":"uint256","internalType":"uint256"},{"name":"minimum","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"PositionMaxBelowVaultMax","inputs":[{"name":"maxPositionBTC","type":"uint256","internalType":"uint256"},{"name":"vaultMaximum","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"PositionMinBelowVaultMin","inputs":[{"name":"minPositionBTC","type":"uint256","internalType":"uint256"},{"name":"vaultMinimum","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"PositionNotLiquidatable","inputs":[]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"TBV_AlreadyPaused","inputs":[]},{"type":"error","name":"TBV_NotPaused","inputs":[]},{"type":"error","name":"TBV_Paused","inputs":[]},{"type":"error","name":"TBV_Unauthorized","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"Unauthorized","inputs":[]},{"type":"error","name":"VaultCountExceedsMaximum","inputs":[{"name":"actual","type":"uint256","internalType":"uint256"},{"name":"maximum","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"VaultNotEscrowed","inputs":[]},{"type":"error","name":"VaultSwapNotSet","inputs":[]},{"type":"error","name":"ZeroAddress","inputs":[]},{"type":"error","name":"ZeroAmount","inputs":[]},{"type":"error","name":"ZeroBorrowAmount","inputs":[]}]');async function L(e,t,n){const a=await e.readContract({address:t,abi:o,functionName:"getPosition",args:[n]});return a.proxyContract===T.zeroAddress?null:{proxyContract:a.proxyContract,vaultIds:a.vaultIds}}async function D(e,t,n){return await e.readContract({address:t,abi:o,functionName:"getPositionCollateral",args:[n]})}function _(e){return e.drawnShares>0n||e.premiumShares>0n||e.realizedPremiumRay>0n}const b=JSON.parse('[{"type":"function","name":"DOMAIN_SEPARATOR","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"ORACLE","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"SET_USER_POSITION_MANAGER_TYPEHASH","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"addDynamicReserveConfig","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"dynamicConfig","type":"tuple","internalType":"struct ITBVAaveSpoke.DynamicReserveConfig","components":[{"name":"collateralFactor","type":"uint16","internalType":"uint16"},{"name":"maxLiquidationBonus","type":"uint32","internalType":"uint32"},{"name":"liquidationFee","type":"uint16","internalType":"uint16"}]}],"outputs":[{"name":"dynamicConfigKey","type":"uint24","internalType":"uint24"}],"stateMutability":"nonpayable"},{"type":"function","name":"addReserve","inputs":[{"name":"hub","type":"address","internalType":"address"},{"name":"assetId","type":"uint256","internalType":"uint256"},{"name":"priceSource","type":"address","internalType":"address"},{"name":"config","type":"tuple","internalType":"struct ITBVAaveSpoke.ReserveConfig","components":[{"name":"paused","type":"bool","internalType":"bool"},{"name":"frozen","type":"bool","internalType":"bool"},{"name":"borrowable","type":"bool","internalType":"bool"},{"name":"collateralRisk","type":"uint24","internalType":"uint24"}]},{"name":"dynamicConfig","type":"tuple","internalType":"struct ITBVAaveSpoke.DynamicReserveConfig","components":[{"name":"collateralFactor","type":"uint16","internalType":"uint16"},{"name":"maxLiquidationBonus","type":"uint32","internalType":"uint32"},{"name":"liquidationFee","type":"uint16","internalType":"uint16"}]}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"borrow","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"onBehalfOf","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"getDynamicReserveConfig","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"dynamicConfigKey","type":"uint24","internalType":"uint24"}],"outputs":[{"name":"","type":"tuple","internalType":"struct ITBVAaveSpoke.DynamicReserveConfig","components":[{"name":"collateralFactor","type":"uint16","internalType":"uint16"},{"name":"maxLiquidationBonus","type":"uint32","internalType":"uint32"},{"name":"liquidationFee","type":"uint16","internalType":"uint16"}]}],"stateMutability":"view"},{"type":"function","name":"getLiquidationBonus","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"user","type":"address","internalType":"address"},{"name":"healthFactor","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getLiquidationConfig","inputs":[],"outputs":[{"name":"","type":"tuple","internalType":"struct ITBVAaveSpoke.LiquidationConfig","components":[{"name":"targetHealthFactor","type":"uint128","internalType":"uint128"},{"name":"healthFactorForMaxBonus","type":"uint64","internalType":"uint64"},{"name":"liquidationBonusFactor","type":"uint16","internalType":"uint16"}]}],"stateMutability":"view"},{"type":"function","name":"getLiquidationLogic","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"pure"},{"type":"function","name":"getReserve","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct ITBVAaveSpoke.Reserve","components":[{"name":"underlying","type":"address","internalType":"address"},{"name":"hub","type":"address","internalType":"address"},{"name":"assetId","type":"uint16","internalType":"uint16"},{"name":"decimals","type":"uint8","internalType":"uint8"},{"name":"dynamicConfigKey","type":"uint24","internalType":"uint24"},{"name":"paused","type":"bool","internalType":"bool"},{"name":"frozen","type":"bool","internalType":"bool"},{"name":"borrowable","type":"bool","internalType":"bool"},{"name":"collateralRisk","type":"uint24","internalType":"uint24"}]}],"stateMutability":"view"},{"type":"function","name":"getReserveConfig","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct ITBVAaveSpoke.ReserveConfig","components":[{"name":"paused","type":"bool","internalType":"bool"},{"name":"frozen","type":"bool","internalType":"bool"},{"name":"borrowable","type":"bool","internalType":"bool"},{"name":"collateralRisk","type":"uint24","internalType":"uint24"}]}],"stateMutability":"view"},{"type":"function","name":"getReserveCount","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getReserveDebt","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getReserveSuppliedAssets","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getReserveSuppliedShares","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getReserveTotalDebt","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getUserAccountData","inputs":[{"name":"user","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct ITBVAaveSpoke.UserAccountData","components":[{"name":"riskPremium","type":"uint256","internalType":"uint256"},{"name":"avgCollateralFactor","type":"uint256","internalType":"uint256"},{"name":"healthFactor","type":"uint256","internalType":"uint256"},{"name":"totalCollateralValue","type":"uint256","internalType":"uint256"},{"name":"totalDebtValue","type":"uint256","internalType":"uint256"},{"name":"activeCollateralCount","type":"uint256","internalType":"uint256"},{"name":"borrowedCount","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"getUserDebt","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"user","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getUserPosition","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"user","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct ITBVAaveSpoke.UserPosition","components":[{"name":"drawnShares","type":"uint120","internalType":"uint120"},{"name":"premiumShares","type":"uint120","internalType":"uint120"},{"name":"realizedPremiumRay","type":"uint200","internalType":"uint200"},{"name":"premiumOffsetRay","type":"uint200","internalType":"uint200"},{"name":"suppliedShares","type":"uint120","internalType":"uint120"},{"name":"dynamicConfigKey","type":"uint24","internalType":"uint24"}]}],"stateMutability":"view"},{"type":"function","name":"getUserPremiumDebtRay","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"user","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getUserReserveStatus","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"user","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"},{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"getUserSuppliedAssets","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"user","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getUserSuppliedShares","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"user","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getUserTotalDebt","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"user","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"isPositionManager","inputs":[{"name":"user","type":"address","internalType":"address"},{"name":"positionManager","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isPositionManagerActive","inputs":[{"name":"positionManager","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"liquidationCall","inputs":[{"name":"collateralReserveId","type":"uint256","internalType":"uint256"},{"name":"debtReserveId","type":"uint256","internalType":"uint256"},{"name":"user","type":"address","internalType":"address"},{"name":"debtToCover","type":"uint256","internalType":"uint256"},{"name":"receiveShares","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"permitReserve","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"onBehalfOf","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"permitV","type":"uint8","internalType":"uint8"},{"name":"permitR","type":"bytes32","internalType":"bytes32"},{"name":"permitS","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renouncePositionManagerRole","inputs":[{"name":"user","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"repay","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"onBehalfOf","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"setUserPositionManager","inputs":[{"name":"positionManager","type":"address","internalType":"address"},{"name":"approve","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setUserPositionManagerWithSig","inputs":[{"name":"positionManager","type":"address","internalType":"address"},{"name":"user","type":"address","internalType":"address"},{"name":"approve","type":"bool","internalType":"bool"},{"name":"nonce","type":"uint256","internalType":"uint256"},{"name":"deadline","type":"uint256","internalType":"uint256"},{"name":"signature","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setUsingAsCollateral","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"usingAsCollateral","type":"bool","internalType":"bool"},{"name":"onBehalfOf","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supply","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"onBehalfOf","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"updateDynamicReserveConfig","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"dynamicConfigKey","type":"uint24","internalType":"uint24"},{"name":"dynamicConfig","type":"tuple","internalType":"struct ITBVAaveSpoke.DynamicReserveConfig","components":[{"name":"collateralFactor","type":"uint16","internalType":"uint16"},{"name":"maxLiquidationBonus","type":"uint32","internalType":"uint32"},{"name":"liquidationFee","type":"uint16","internalType":"uint16"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateLiquidationConfig","inputs":[{"name":"config","type":"tuple","internalType":"struct ITBVAaveSpoke.LiquidationConfig","components":[{"name":"targetHealthFactor","type":"uint128","internalType":"uint128"},{"name":"healthFactorForMaxBonus","type":"uint64","internalType":"uint64"},{"name":"liquidationBonusFactor","type":"uint16","internalType":"uint16"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updatePositionManager","inputs":[{"name":"positionManager","type":"address","internalType":"address"},{"name":"active","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateReserveConfig","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"params","type":"tuple","internalType":"struct ITBVAaveSpoke.ReserveConfig","components":[{"name":"paused","type":"bool","internalType":"bool"},{"name":"frozen","type":"bool","internalType":"bool"},{"name":"borrowable","type":"bool","internalType":"bool"},{"name":"collateralRisk","type":"uint24","internalType":"uint24"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateReservePriceSource","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"priceSource","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateUserDynamicConfig","inputs":[{"name":"onBehalfOf","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"updateUserRiskPremium","inputs":[{"name":"onBehalfOf","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"withdraw","inputs":[{"name":"reserveId","type":"uint256","internalType":"uint256"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"onBehalfOf","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"}]');function U(e){return{drawnShares:e.drawnShares,premiumShares:e.premiumShares,realizedPremiumRay:e.realizedPremiumRay,premiumOffsetRay:e.premiumOffsetRay,suppliedShares:e.suppliedShares,dynamicConfigKey:e.dynamicConfigKey}}async function N(e,t,n){const a=await e.readContract({address:t,abi:b,functionName:"getUserAccountData",args:[n]});return{riskPremium:a.riskPremium,avgCollateralFactor:a.avgCollateralFactor,healthFactor:a.healthFactor,totalCollateralValue:a.totalCollateralValue,totalDebtValue:a.totalDebtValue,activeCollateralCount:a.activeCollateralCount,borrowedCount:a.borrowedCount}}async function v(e,t,n,i){const a=await e.readContract({address:t,abi:b,functionName:"getUserPosition",args:[n,i]});return U(a)}async function k(e,t,n,i){const a=await v(e,t,n,i);return _(a)}async function H(e,t,n,i){return(await v(e,t,n,i)).suppliedShares>0n}async function q(e,t,n,i){return await e.readContract({address:t,abi:b,functionName:"getUserTotalDebt",args:[n,i]})}async function z(e,t){return P}async function W(e,t){return S}async function K(e,t){return w}function G(e,t){const n=T.encodeFunctionData({abi:o,functionName:c.WITHDRAW_COLLATERALS,args:[t]});return{to:e,data:n}}function Y(e,t,n,i){const a=T.encodeFunctionData({abi:o,functionName:c.BORROW,args:[t,n,i]});return{to:e,data:a}}function X(e,t,n,i){const a=T.encodeFunctionData({abi:o,functionName:c.REPAY,args:[t,n,i]});return{to:e,data:a}}function Z(e){return Number(e)/10**R}function $(e){return Number(e)/10**g}function J(e,t){return t<=0?"0%":`${(e/t*100).toFixed(1)}%`}const d={GREEN:"#00E676",AMBER:"#FFC400",RED:"#FF1744",GRAY:"#5A5A5A"};function B(e,t){return t?e===null?"safe":e<1?"danger":e<I?"warning":"safe":"no_debt"}function Q(e){switch(e){case"safe":return d.GREEN;case"warning":return d.AMBER;case"danger":return d.RED;case"no_debt":return d.GRAY}}function j(e){return e===null?"-":e.toFixed(2)}function ee(e){return e===null?!0:e>=1}function te(e){const t=isFinite(e),n=isFinite(e)?e:null;return B(n,t)}function ne(e,t,n){return t<=0?1/0:e*(n/M)/t}function ae(e,t){if(t<=0)return{vaultIds:[],actualAmount:0};const n=[...e].sort((s,u)=>u.amount-s.amount),i=[];let a=0;for(const s of n){if(a>=t)break;i.push(s.id),a+=s.amount}return{vaultIds:i,actualAmount:a}}function ie(e){return e.reduce((t,n)=>t+n.amount,0)}const se=BigInt(Number.MAX_SAFE_INTEGER);function C(e,t){if(e>se)throw new RangeError(`${t} (${e}) exceeds Number.MAX_SAFE_INTEGER; precision would be lost`)}function A(e,t,n,i){if(i<=0)return 1;const a=t*e;if(n<=a)return 1;const s=e*(n-i)/(n-a)*(t/i);return Math.max(0,Math.min(1,s))}function re(e){const{totalBtc:t,CF:n,LB:i,THF:a,expectedHF:s,safetyMargin:u}=e;if(t<=0n)return{sacrificialVault:0n,protectedVault:0n,seizedFraction:0,targetSeizureBtc:0n};C(t,"totalBtc");const r=A(n,i,a,s),m=Number(t),y=BigInt(Math.ceil(m*r)),p=BigInt(Math.ceil(m*r*u)),l=p>t?t:p,f=t-l;return{sacrificialVault:l,protectedVault:f,seizedFraction:r,targetSeizureBtc:y}}function ue(e){const{minPegin:t,seizedFraction:n,safetyMargin:i}=e;C(t,"minPegin");const a=n*i;if(a>=1||a<=0)return 0n;const s=1-a,u=Math.ceil(Number(t)/s),r=Math.ceil(Number(t)/a);return BigInt(Math.max(u,r))}function pe(e){const{vaultAmounts:t,CF:n,LB:i,THF:a,expectedHF:s,safetyMargin:u}=e;if(t.length===0)return{needsRebalance:!1,deficit:0n,currentCoverage:0n,targetCoverage:0n};const r=t.reduce((f,F)=>f+F,0n);C(r,"totalBtc");const m=A(n,i,a,s),y=BigInt(Math.ceil(Number(r)*m*u)),p=t[0],l=y>p?y-p:0n;return{needsRebalance:l>0n,deficit:l,currentCoverage:p,targetCoverage:y}}exports.AAVE_BASE_CURRENCY_DECIMALS=R;exports.AAVE_FUNCTION_NAMES=c;exports.AaveIntegrationControllerABI=o;exports.AaveSpokeABI=b;exports.BPS_SCALE=M;exports.BPS_TO_PERCENT_DIVISOR=h;exports.BTC_DECIMALS=x;exports.FULL_REPAY_BUFFER_DIVISOR=O;exports.HEALTH_FACTOR_COLORS=d;exports.HEALTH_FACTOR_WARNING_THRESHOLD=I;exports.MIN_HEALTH_FACTOR_FOR_BORROW=V;exports.MOCK_COLLATERAL_FACTOR_BPS=S;exports.MOCK_LIQUIDATION_BONUS_WAD=w;exports.MOCK_TARGET_HEALTH_FACTOR_WAD=P;exports.USDC_DECIMALS=E;exports.WAD_DECIMALS=g;exports.aaveValueToUsd=Z;exports.buildBorrowTx=Y;exports.buildRepayTx=X;exports.buildWithdrawCollateralsTx=G;exports.calculateBorrowRatio=J;exports.calculateHealthFactor=ne;exports.calculateTotalVaultAmount=ie;exports.checkRebalanceNeeded=pe;exports.computeMinDepositForSplit=ue;exports.computeOptimalSplit=re;exports.computeSeizedFraction=A;exports.formatHealthFactor=j;exports.getCollateralFactor=W;exports.getHealthFactorColor=Q;exports.getHealthFactorStatus=B;exports.getHealthFactorStatusFromValue=te;exports.getLiquidationBonus=K;exports.getPosition=L;exports.getPositionCollateral=D;exports.getTargetHealthFactor=z;exports.getUserAccountData=N;exports.getUserPosition=v;exports.getUserTotalDebt=q;exports.hasCollateral=H;exports.hasDebt=k;exports.hasDebtFromPosition=_;exports.isHealthFactorHealthy=ee;exports.selectVaultsForAmount=ae;exports.wadToNumber=$;
2
+ //# sourceMappingURL=index.cjs.map