@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.
- package/LICENSE +1 -1
- package/README.md +124 -6
- package/dist/MockEthereumWallet-CKQlH2AM.cjs +2 -0
- package/dist/MockEthereumWallet-CKQlH2AM.cjs.map +1 -0
- package/dist/MockEthereumWallet-ibdry7pZ.js +127 -0
- package/dist/MockEthereumWallet-ibdry7pZ.js.map +1 -0
- package/dist/PayoutManager-Dg_i_S7w.cjs +2 -0
- package/dist/PayoutManager-Dg_i_S7w.cjs.map +1 -0
- package/dist/PayoutManager-rMj54HDh.js +1112 -0
- package/dist/PayoutManager-rMj54HDh.js.map +1 -0
- package/dist/challengeAssert-34HqeVFH.cjs +2 -0
- package/dist/challengeAssert-34HqeVFH.cjs.map +1 -0
- package/dist/challengeAssert-DVErOd8l.js +423 -0
- package/dist/challengeAssert-DVErOd8l.js.map +1 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +62 -1
- package/dist/index.js.map +1 -1
- package/dist/shared/index.cjs +1 -1
- package/dist/shared/index.d.ts +3 -1
- package/dist/shared/index.d.ts.map +1 -1
- package/dist/shared/index.js +5 -1
- package/dist/shared/index.js.map +1 -1
- package/dist/shared/wallets/__tests__/BitcoinWallet.test.d.ts +2 -0
- package/dist/shared/wallets/__tests__/BitcoinWallet.test.d.ts.map +1 -0
- package/dist/shared/wallets/__tests__/EthereumWallet.test.d.ts +2 -0
- package/dist/shared/wallets/__tests__/EthereumWallet.test.d.ts.map +1 -0
- package/dist/shared/wallets/index.d.ts +4 -0
- package/dist/shared/wallets/index.d.ts.map +1 -0
- package/dist/shared/wallets/interfaces/BitcoinWallet.d.ts +106 -0
- package/dist/shared/wallets/interfaces/BitcoinWallet.d.ts.map +1 -0
- package/dist/shared/wallets/interfaces/EthereumWallet.d.ts +6 -0
- package/dist/shared/wallets/interfaces/EthereumWallet.d.ts.map +1 -0
- package/dist/shared/wallets/interfaces/index.d.ts +4 -0
- package/dist/shared/wallets/interfaces/index.d.ts.map +1 -0
- package/dist/shared/wallets/mocks/MockBitcoinWallet.d.ts +29 -0
- package/dist/shared/wallets/mocks/MockBitcoinWallet.d.ts.map +1 -0
- package/dist/shared/wallets/mocks/MockEthereumWallet.d.ts +51 -0
- package/dist/shared/wallets/mocks/MockEthereumWallet.d.ts.map +1 -0
- package/dist/shared/wallets/mocks/index.d.ts +5 -0
- package/dist/shared/wallets/mocks/index.d.ts.map +1 -0
- package/dist/tbv/core/clients/index.d.ts +9 -0
- package/dist/tbv/core/clients/index.d.ts.map +1 -0
- package/dist/tbv/core/clients/mempool/index.d.ts +11 -0
- package/dist/tbv/core/clients/mempool/index.d.ts.map +1 -0
- package/dist/tbv/core/clients/mempool/mempoolApi.d.ts +94 -0
- package/dist/tbv/core/clients/mempool/mempoolApi.d.ts.map +1 -0
- package/dist/tbv/core/clients/mempool/types.d.ts +98 -0
- package/dist/tbv/core/clients/mempool/types.d.ts.map +1 -0
- package/dist/tbv/core/contracts/abis/BTCVaultsManager.abi.d.ts +187 -0
- package/dist/tbv/core/contracts/abis/BTCVaultsManager.abi.d.ts.map +1 -0
- package/dist/tbv/core/contracts/errors.d.ts +50 -0
- package/dist/tbv/core/contracts/errors.d.ts.map +1 -0
- package/dist/tbv/core/contracts/index.d.ts +11 -0
- package/dist/tbv/core/contracts/index.d.ts.map +1 -0
- package/dist/tbv/core/index.cjs +1 -1
- package/dist/tbv/core/index.d.ts +17 -1
- package/dist/tbv/core/index.d.ts.map +1 -1
- package/dist/tbv/core/index.js +59 -1
- package/dist/tbv/core/index.js.map +1 -1
- package/dist/tbv/core/managers/PayoutManager.d.ts +158 -0
- package/dist/tbv/core/managers/PayoutManager.d.ts.map +1 -0
- package/dist/tbv/core/managers/PeginManager.d.ts +327 -0
- package/dist/tbv/core/managers/PeginManager.d.ts.map +1 -0
- package/dist/tbv/core/managers/__tests__/PayoutManager.test.d.ts +8 -0
- package/dist/tbv/core/managers/__tests__/PayoutManager.test.d.ts.map +1 -0
- package/dist/tbv/core/managers/__tests__/PeginManager.test.d.ts +8 -0
- package/dist/tbv/core/managers/__tests__/PeginManager.test.d.ts.map +1 -0
- package/dist/tbv/core/managers/index.d.ts +75 -0
- package/dist/tbv/core/managers/index.d.ts.map +1 -0
- package/dist/tbv/core/primitives/index.cjs +2 -0
- package/dist/tbv/core/primitives/index.d.ts +77 -0
- package/dist/tbv/core/primitives/index.d.ts.map +1 -0
- package/dist/tbv/core/primitives/index.js +21 -0
- package/dist/tbv/{integrations/morpho → core/primitives}/index.js.map +1 -1
- package/dist/tbv/core/primitives/psbt/__tests__/constants.d.ts +137 -0
- package/dist/tbv/core/primitives/psbt/__tests__/constants.d.ts.map +1 -0
- package/dist/tbv/core/primitives/psbt/__tests__/helpers.d.ts +71 -0
- package/dist/tbv/core/primitives/psbt/__tests__/helpers.d.ts.map +1 -0
- package/dist/tbv/core/primitives/psbt/__tests__/payout.test.d.ts +8 -0
- package/dist/tbv/core/primitives/psbt/__tests__/payout.test.d.ts.map +1 -0
- package/dist/tbv/core/primitives/psbt/__tests__/pegin.test.d.ts +5 -0
- package/dist/tbv/core/primitives/psbt/__tests__/pegin.test.d.ts.map +1 -0
- package/dist/tbv/core/primitives/psbt/challengeAssert.d.ts +27 -0
- package/dist/tbv/core/primitives/psbt/challengeAssert.d.ts.map +1 -0
- package/dist/tbv/core/primitives/psbt/depositorPayout.d.ts +27 -0
- package/dist/tbv/core/primitives/psbt/depositorPayout.d.ts.map +1 -0
- package/dist/tbv/core/primitives/psbt/index.d.ts +27 -0
- package/dist/tbv/core/primitives/psbt/index.d.ts.map +1 -0
- package/dist/tbv/core/primitives/psbt/noPayout.d.ts +28 -0
- package/dist/tbv/core/primitives/psbt/noPayout.d.ts.map +1 -0
- package/dist/tbv/core/primitives/psbt/payout.d.ts +99 -0
- package/dist/tbv/core/primitives/psbt/payout.d.ts.map +1 -0
- package/dist/tbv/core/primitives/psbt/pegin.d.ts +88 -0
- package/dist/tbv/core/primitives/psbt/pegin.d.ts.map +1 -0
- package/dist/tbv/core/primitives/scripts/__tests__/payout.test.d.ts +5 -0
- package/dist/tbv/core/primitives/scripts/__tests__/payout.test.d.ts.map +1 -0
- package/dist/tbv/core/primitives/scripts/index.d.ts +10 -0
- package/dist/tbv/core/primitives/scripts/index.d.ts.map +1 -0
- package/dist/tbv/core/primitives/scripts/payout.d.ts +102 -0
- package/dist/tbv/core/primitives/scripts/payout.d.ts.map +1 -0
- package/dist/tbv/core/primitives/utils/__tests__/bitcoin.test.d.ts +5 -0
- package/dist/tbv/core/primitives/utils/__tests__/bitcoin.test.d.ts.map +1 -0
- package/dist/tbv/core/primitives/utils/bitcoin.d.ts +132 -0
- package/dist/tbv/core/primitives/utils/bitcoin.d.ts.map +1 -0
- package/dist/tbv/core/primitives/utils/index.d.ts +9 -0
- package/dist/tbv/core/primitives/utils/index.d.ts.map +1 -0
- package/dist/tbv/core/utils/btc/index.d.ts +10 -0
- package/dist/tbv/core/utils/btc/index.d.ts.map +1 -0
- package/dist/tbv/core/utils/btc/psbtInputFields.d.ts +41 -0
- package/dist/tbv/core/utils/btc/psbtInputFields.d.ts.map +1 -0
- package/dist/tbv/core/utils/btc/scriptType.d.ts +34 -0
- package/dist/tbv/core/utils/btc/scriptType.d.ts.map +1 -0
- package/dist/tbv/core/utils/fee/constants.d.ts +25 -0
- package/dist/tbv/core/utils/fee/constants.d.ts.map +1 -0
- package/dist/tbv/core/utils/fee/index.d.ts +7 -0
- package/dist/tbv/core/utils/fee/index.d.ts.map +1 -0
- package/dist/tbv/core/utils/index.d.ts +16 -0
- package/dist/tbv/core/utils/index.d.ts.map +1 -0
- package/dist/tbv/core/utils/transaction/__tests__/btcTxHash.test.d.ts +5 -0
- package/dist/tbv/core/utils/transaction/__tests__/btcTxHash.test.d.ts.map +1 -0
- package/dist/tbv/core/utils/transaction/__tests__/createSplitTransaction.test.d.ts +5 -0
- package/dist/tbv/core/utils/transaction/__tests__/createSplitTransaction.test.d.ts.map +1 -0
- package/dist/tbv/core/utils/transaction/__tests__/fundPeginTransaction.test.d.ts +5 -0
- package/dist/tbv/core/utils/transaction/__tests__/fundPeginTransaction.test.d.ts.map +1 -0
- package/dist/tbv/core/utils/transaction/btcTxHash.d.ts +15 -0
- package/dist/tbv/core/utils/transaction/btcTxHash.d.ts.map +1 -0
- package/dist/tbv/core/utils/transaction/createSplitTransaction.d.ts +106 -0
- package/dist/tbv/core/utils/transaction/createSplitTransaction.d.ts.map +1 -0
- package/dist/tbv/core/utils/transaction/fundPeginTransaction.d.ts +70 -0
- package/dist/tbv/core/utils/transaction/fundPeginTransaction.d.ts.map +1 -0
- package/dist/tbv/core/utils/transaction/index.d.ts +9 -0
- package/dist/tbv/core/utils/transaction/index.d.ts.map +1 -0
- package/dist/tbv/core/utils/utxo/__tests__/selectUtxos.test.d.ts +5 -0
- package/dist/tbv/core/utils/utxo/__tests__/selectUtxos.test.d.ts.map +1 -0
- package/dist/tbv/core/utils/utxo/index.d.ts +7 -0
- package/dist/tbv/core/utils/utxo/index.d.ts.map +1 -0
- package/dist/tbv/core/utils/utxo/selectUtxos.d.ts +65 -0
- package/dist/tbv/core/utils/utxo/selectUtxos.d.ts.map +1 -0
- package/dist/tbv/index.cjs +1 -1
- package/dist/tbv/index.js +59 -1
- package/dist/tbv/index.js.map +1 -1
- package/dist/tbv/integrations/aave/clients/__tests__/spoke.test.d.ts +2 -0
- package/dist/tbv/integrations/aave/clients/__tests__/spoke.test.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/clients/__tests__/transaction.test.d.ts +2 -0
- package/dist/tbv/integrations/aave/clients/__tests__/transaction.test.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/clients/abis/AaveIntegrationController.abi.json.d.ts +1879 -0
- package/dist/tbv/integrations/aave/clients/abis/AaveSpoke.abi.json.d.ts +1262 -0
- package/dist/tbv/integrations/aave/clients/index.d.ts +4 -0
- package/dist/tbv/integrations/aave/clients/index.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/clients/query.d.ts +27 -0
- package/dist/tbv/integrations/aave/clients/query.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/clients/spoke.d.ts +161 -0
- package/dist/tbv/integrations/aave/clients/spoke.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/clients/transaction.d.ts +110 -0
- package/dist/tbv/integrations/aave/clients/transaction.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/config.d.ts +7 -0
- package/dist/tbv/integrations/aave/config.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/constants.d.ts +113 -0
- package/dist/tbv/integrations/aave/constants.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/index.cjs +2 -0
- package/dist/tbv/integrations/aave/index.cjs.map +1 -0
- package/dist/tbv/integrations/aave/index.d.ts +53 -0
- package/dist/tbv/integrations/aave/index.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/index.js +307 -0
- package/dist/tbv/integrations/aave/index.js.map +1 -0
- package/dist/tbv/integrations/aave/types.d.ts +66 -0
- package/dist/tbv/integrations/aave/types.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/utils/__tests__/aaveConversions.test.d.ts +5 -0
- package/dist/tbv/integrations/aave/utils/__tests__/aaveConversions.test.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/utils/__tests__/borrowRatio.test.d.ts +5 -0
- package/dist/tbv/integrations/aave/utils/__tests__/borrowRatio.test.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/utils/__tests__/debtUtils.test.d.ts +5 -0
- package/dist/tbv/integrations/aave/utils/__tests__/debtUtils.test.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/utils/__tests__/healthFactor.test.d.ts +5 -0
- package/dist/tbv/integrations/aave/utils/__tests__/healthFactor.test.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/utils/__tests__/vaultSelection.test.d.ts +2 -0
- package/dist/tbv/integrations/aave/utils/__tests__/vaultSelection.test.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/utils/__tests__/vaultSplit.test.d.ts +5 -0
- package/dist/tbv/integrations/aave/utils/__tests__/vaultSplit.test.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/utils/aaveConversions.d.ts +24 -0
- package/dist/tbv/integrations/aave/utils/aaveConversions.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/utils/borrowRatio.d.ts +15 -0
- package/dist/tbv/integrations/aave/utils/borrowRatio.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/utils/debtUtils.d.ts +14 -0
- package/dist/tbv/integrations/aave/utils/debtUtils.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/utils/healthFactor.d.ts +108 -0
- package/dist/tbv/integrations/aave/utils/healthFactor.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/utils/index.d.ts +10 -0
- package/dist/tbv/integrations/aave/utils/index.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/utils/vaultSelection.d.ts +33 -0
- package/dist/tbv/integrations/aave/utils/vaultSelection.d.ts.map +1 -0
- package/dist/tbv/integrations/aave/utils/vaultSplit.d.ts +191 -0
- package/dist/tbv/integrations/aave/utils/vaultSplit.d.ts.map +1 -0
- package/package.json +37 -7
- package/dist/shared/__tests__/example.test.d.ts +0 -6
- package/dist/shared/__tests__/example.test.d.ts.map +0 -1
- package/dist/tbv/core/__tests__/example.test.d.ts +0 -6
- package/dist/tbv/core/__tests__/example.test.d.ts.map +0 -1
- package/dist/tbv/integrations/morpho/index.cjs +0 -2
- package/dist/tbv/integrations/morpho/index.d.ts +0 -2
- package/dist/tbv/integrations/morpho/index.d.ts.map +0 -1
- package/dist/tbv/integrations/morpho/index.js +0 -2
- /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 @@
|
|
|
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
|