@augustdigital/sdk 4.1.0-alpha → 4.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/README.md +189 -11
- package/lib/abis/Multicall3.js.map +1 -1
- package/lib/abis/PoolAdapter.d.ts +36 -76
- package/lib/abis/PoolAdapter.js +18 -379
- package/lib/abis/PoolAdapter.js.map +1 -1
- package/lib/abis/WrapperAdapter.d.ts +71 -60
- package/lib/abis/WrapperAdapter.js +41 -114
- package/lib/abis/WrapperAdapter.js.map +1 -1
- package/lib/abis/index.d.ts +3 -0
- package/lib/abis/index.js +3 -0
- package/lib/abis/index.js.map +1 -1
- package/lib/adapters/evm/getters.d.ts +1 -1
- package/lib/adapters/evm/getters.js +26 -37
- package/lib/adapters/evm/getters.js.map +1 -1
- package/lib/adapters/evm/index.d.ts +8 -6
- package/lib/adapters/evm/index.js +27 -21
- package/lib/adapters/evm/index.js.map +1 -1
- package/lib/adapters/evm/utils.d.ts +2 -28
- package/lib/adapters/evm/utils.js +29 -322
- package/lib/adapters/evm/utils.js.map +1 -1
- package/lib/adapters/solana/getters.js +35 -28
- package/lib/adapters/solana/getters.js.map +1 -1
- package/lib/adapters/solana/index.d.ts +27 -2
- package/lib/adapters/solana/utils.d.ts +15 -2
- package/lib/adapters/solana/utils.js +96 -21
- package/lib/adapters/solana/utils.js.map +1 -1
- package/lib/adapters/solana/vault.actions.js +11 -2
- package/lib/adapters/solana/vault.actions.js.map +1 -1
- package/lib/adapters/sui/constants.d.ts +13 -0
- package/lib/adapters/sui/constants.js +17 -0
- package/lib/adapters/sui/constants.js.map +1 -0
- package/lib/adapters/sui/getters.d.ts +3 -0
- package/lib/adapters/sui/getters.js +53 -0
- package/lib/adapters/sui/getters.js.map +1 -0
- package/lib/adapters/sui/index.d.ts +30 -0
- package/lib/adapters/sui/index.js +83 -0
- package/lib/adapters/sui/index.js.map +1 -1
- package/lib/adapters/sui/transformer.d.ts +4 -0
- package/lib/adapters/sui/transformer.js +87 -0
- package/lib/adapters/sui/transformer.js.map +1 -0
- package/lib/adapters/sui/types.d.ts +62 -0
- package/lib/{services/solana → adapters/sui}/types.js.map +1 -1
- package/lib/adapters/sui/utils.d.ts +4 -0
- package/lib/adapters/sui/utils.js +27 -0
- package/lib/adapters/sui/utils.js.map +1 -0
- package/lib/core/auth/verify.js +2 -2
- package/lib/core/auth/verify.js.map +1 -1
- package/lib/core/base.class.d.ts +1 -2
- package/lib/core/base.class.js +11 -6
- package/lib/core/base.class.js.map +1 -1
- package/lib/core/constants.adapters.d.ts +89 -0
- package/lib/core/constants.adapters.js +160 -0
- package/lib/core/constants.adapters.js.map +1 -0
- package/lib/{utils/constants/august.d.ts → core/constants.core.d.ts} +10 -1
- package/lib/{utils/constants/august.js → core/constants.core.js} +11 -2
- package/lib/core/constants.core.js.map +1 -0
- package/lib/core/constants.vaults.d.ts +19 -0
- package/lib/{utils/vaults.js → core/constants.vaults.js} +56 -75
- package/lib/core/constants.vaults.js.map +1 -0
- package/lib/{utils/constants/web3.d.ts → core/constants.web3.d.ts} +4 -6
- package/lib/{utils/constants/web3.js → core/constants.web3.js} +21 -27
- package/lib/core/constants.web3.js.map +1 -0
- package/lib/core/fetcher.d.ts +1 -1
- package/lib/core/fetcher.js +177 -64
- package/lib/core/fetcher.js.map +1 -1
- package/lib/core/helpers.adapters.d.ts +4 -0
- package/lib/core/helpers.adapters.js +28 -0
- package/lib/core/helpers.adapters.js.map +1 -0
- package/lib/core/helpers.core.d.ts +1 -1
- package/lib/core/helpers.core.js +6 -6
- package/lib/core/helpers.core.js.map +1 -1
- package/lib/core/helpers.signer.d.ts +5 -0
- package/lib/core/helpers.signer.js +54 -0
- package/lib/core/helpers.signer.js.map +1 -0
- package/lib/core/helpers.vaults.d.ts +15 -0
- package/lib/core/helpers.vaults.js +123 -0
- package/lib/core/helpers.vaults.js.map +1 -0
- package/lib/core/helpers.web3.d.ts +5 -2
- package/lib/core/helpers.web3.js +84 -26
- package/lib/core/helpers.web3.js.map +1 -1
- package/lib/core/index.d.ts +9 -5
- package/lib/core/index.js +9 -5
- package/lib/core/index.js.map +1 -1
- package/lib/core/logger/index.d.ts +9 -0
- package/lib/core/logger/index.js +29 -0
- package/lib/core/logger/index.js.map +1 -1
- package/lib/core/logger/slack.js +3 -3
- package/lib/index.d.ts +6 -6
- package/lib/index.js +14 -7
- package/lib/index.js.map +1 -1
- package/lib/main.d.ts +90 -14
- package/lib/main.js +56 -17
- package/lib/main.js.map +1 -1
- package/lib/modules/vaults/adapter.helpers.d.ts +46 -0
- package/lib/modules/vaults/adapter.helpers.js +149 -0
- package/lib/modules/vaults/adapter.helpers.js.map +1 -0
- package/lib/{vaults/utils.d.ts → modules/vaults/fetcher.d.ts} +0 -20
- package/lib/{vaults/utils.js → modules/vaults/fetcher.js} +19 -176
- package/lib/modules/vaults/fetcher.js.map +1 -0
- package/lib/modules/vaults/getters.d.ts +32 -3
- package/lib/modules/vaults/getters.js +367 -71
- package/lib/modules/vaults/getters.js.map +1 -1
- package/lib/modules/vaults/index.d.ts +2 -83
- package/lib/modules/vaults/index.js +2 -480
- package/lib/modules/vaults/index.js.map +1 -1
- package/lib/modules/vaults/main.d.ts +29 -47
- package/lib/modules/vaults/main.js +142 -201
- package/lib/modules/vaults/main.js.map +1 -1
- package/lib/modules/vaults/read.actions.d.ts +3 -0
- package/lib/{adapters/evm → modules/vaults}/read.actions.js +12 -12
- package/lib/modules/vaults/read.actions.js.map +1 -0
- package/lib/modules/vaults/utils.d.ts +2 -106
- package/lib/modules/vaults/utils.js +139 -337
- package/lib/modules/vaults/utils.js.map +1 -1
- package/lib/modules/vaults/{vault.actions.d.ts → write.actions.d.ts} +11 -1
- package/lib/modules/vaults/write.actions.js +301 -0
- package/lib/modules/vaults/write.actions.js.map +1 -0
- package/lib/services/debank/utils.js +4 -4
- package/lib/services/subgraph/fetcher.js +3 -2
- package/lib/services/subgraph/fetcher.js.map +1 -1
- package/lib/services/subgraph/vaults.js +25 -27
- package/lib/services/subgraph/vaults.js.map +1 -1
- package/lib/types/pools.d.ts +1 -1
- package/lib/types/vaults.d.ts +21 -1
- package/lib/types/webserver.d.ts +15 -1
- package/package.json +24 -10
- package/lib/adapters/evm/core.actions.d.ts +0 -9
- package/lib/adapters/evm/core.actions.js +0 -51
- package/lib/adapters/evm/core.actions.js.map +0 -1
- package/lib/adapters/evm/read.actions.d.ts +0 -3
- package/lib/adapters/evm/read.actions.js.map +0 -1
- package/lib/adapters/evm/vaults.actions.d.ts +0 -10
- package/lib/adapters/evm/vaults.actions.js +0 -97
- package/lib/adapters/evm/vaults.actions.js.map +0 -1
- package/lib/adapters/solana/actions.d.ts +0 -20
- package/lib/adapters/solana/actions.js +0 -225
- package/lib/adapters/solana/actions.js.map +0 -1
- package/lib/adapters/solana/class.d.ts +0 -45
- package/lib/adapters/solana/class.js +0 -135
- package/lib/adapters/solana/class.js.map +0 -1
- package/lib/adapters/solana/vault-idl.d.ts +0 -338
- package/lib/adapters/solana/vault-idl.js +0 -1075
- package/lib/adapters/solana/vault-idl.js.map +0 -1
- package/lib/core/base-class.d.ts +0 -34
- package/lib/core/base-class.js +0 -55
- package/lib/core/base-class.js.map +0 -1
- package/lib/core/constants.d.ts +0 -86
- package/lib/core/constants.js +0 -146
- package/lib/core/constants.js.map +0 -1
- package/lib/core/core.helpers.d.ts +0 -23
- package/lib/core/core.helpers.js +0 -210
- package/lib/core/core.helpers.js.map +0 -1
- package/lib/core/helpers.d.ts +0 -23
- package/lib/core/helpers.js +0 -210
- package/lib/core/helpers.js.map +0 -1
- package/lib/core/read.actions.d.ts +0 -3
- package/lib/core/read.actions.js +0 -39
- package/lib/core/read.actions.js.map +0 -1
- package/lib/core/web3.helpers.d.ts +0 -28
- package/lib/core/web3.helpers.js +0 -336
- package/lib/core/web3.helpers.js.map +0 -1
- package/lib/core/write.actions.d.ts +0 -9
- package/lib/core/write.actions.js +0 -51
- package/lib/core/write.actions.js.map +0 -1
- package/lib/modules/vaults/admin-actions.d.ts +0 -0
- package/lib/modules/vaults/admin-actions.js +0 -1
- package/lib/modules/vaults/admin-actions.js.map +0 -1
- package/lib/modules/vaults/constants.d.ts +0 -63
- package/lib/modules/vaults/constants.js +0 -190
- package/lib/modules/vaults/constants.js.map +0 -1
- package/lib/modules/vaults/user-actions.d.ts +0 -19
- package/lib/modules/vaults/user-actions.js +0 -172
- package/lib/modules/vaults/user-actions.js.map +0 -1
- package/lib/modules/vaults/user.actions.d.ts +0 -10
- package/lib/modules/vaults/user.actions.js +0 -95
- package/lib/modules/vaults/user.actions.js.map +0 -1
- package/lib/modules/vaults/vault.actions.js +0 -95
- package/lib/modules/vaults/vault.actions.js.map +0 -1
- package/lib/services/auth/index.d.ts +0 -1
- package/lib/services/auth/index.js +0 -18
- package/lib/services/auth/index.js.map +0 -1
- package/lib/services/auth/verify.d.ts +0 -2
- package/lib/services/auth/verify.js +0 -20
- package/lib/services/auth/verify.js.map +0 -1
- package/lib/services/index.d.ts +0 -4
- package/lib/services/index.js +0 -21
- package/lib/services/index.js.map +0 -1
- package/lib/services/logger/index.d.ts +0 -12
- package/lib/services/logger/index.js +0 -51
- package/lib/services/logger/index.js.map +0 -1
- package/lib/services/logger/slack.d.ts +0 -12
- package/lib/services/logger/slack.js +0 -48
- package/lib/services/logger/slack.js.map +0 -1
- package/lib/services/solana/actions.d.ts +0 -20
- package/lib/services/solana/actions.js +0 -225
- package/lib/services/solana/actions.js.map +0 -1
- package/lib/services/solana/class.d.ts +0 -45
- package/lib/services/solana/class.js +0 -135
- package/lib/services/solana/class.js.map +0 -1
- package/lib/services/solana/constants.d.ts +0 -25
- package/lib/services/solana/constants.js +0 -32
- package/lib/services/solana/constants.js.map +0 -1
- package/lib/services/solana/index.d.ts +0 -84
- package/lib/services/solana/index.js +0 -50
- package/lib/services/solana/index.js.map +0 -1
- package/lib/services/solana/types.d.ts +0 -58
- package/lib/services/solana/utils.d.ts +0 -96
- package/lib/services/solana/utils.js +0 -355
- package/lib/services/solana/utils.js.map +0 -1
- package/lib/services/solana/vault-idl.d.ts +0 -338
- package/lib/services/solana/vault-idl.js +0 -1075
- package/lib/services/solana/vault-idl.js.map +0 -1
- package/lib/utils/base-class.d.ts +0 -34
- package/lib/utils/base-class.js +0 -55
- package/lib/utils/base-class.js.map +0 -1
- package/lib/utils/constants/august.js.map +0 -1
- package/lib/utils/constants/fallbacks.d.ts +0 -3
- package/lib/utils/constants/fallbacks.js +0 -26
- package/lib/utils/constants/fallbacks.js.map +0 -1
- package/lib/utils/constants/index.d.ts +0 -3
- package/lib/utils/constants/index.js +0 -20
- package/lib/utils/constants/index.js.map +0 -1
- package/lib/utils/constants/web3.js.map +0 -1
- package/lib/utils/fetcher.d.ts +0 -25
- package/lib/utils/fetcher.js +0 -334
- package/lib/utils/fetcher.js.map +0 -1
- package/lib/utils/helpers/array.d.ts +0 -6
- package/lib/utils/helpers/array.js +0 -40
- package/lib/utils/helpers/array.js.map +0 -1
- package/lib/utils/helpers/datetime.d.ts +0 -5
- package/lib/utils/helpers/datetime.js +0 -32
- package/lib/utils/helpers/datetime.js.map +0 -1
- package/lib/utils/helpers/formatters.d.ts +0 -8
- package/lib/utils/helpers/formatters.js +0 -113
- package/lib/utils/helpers/formatters.js.map +0 -1
- package/lib/utils/helpers/index.d.ts +0 -6
- package/lib/utils/helpers/index.js +0 -23
- package/lib/utils/helpers/index.js.map +0 -1
- package/lib/utils/helpers/responses.d.ts +0 -32
- package/lib/utils/helpers/responses.js +0 -229
- package/lib/utils/helpers/responses.js.map +0 -1
- package/lib/utils/helpers/verify-keys.d.ts +0 -2
- package/lib/utils/helpers/verify-keys.js +0 -21
- package/lib/utils/helpers/verify-keys.js.map +0 -1
- package/lib/utils/helpers/web3.d.ts +0 -27
- package/lib/utils/helpers/web3.js +0 -339
- package/lib/utils/helpers/web3.js.map +0 -1
- package/lib/utils/index.d.ts +0 -5
- package/lib/utils/index.js +0 -22
- package/lib/utils/index.js.map +0 -1
- package/lib/utils/vaults.d.ts +0 -53
- package/lib/utils/vaults.js.map +0 -1
- package/lib/vaults/admin-actions.d.ts +0 -0
- package/lib/vaults/admin-actions.js +0 -1
- package/lib/vaults/admin-actions.js.map +0 -1
- package/lib/vaults/getters.d.ts +0 -38
- package/lib/vaults/getters.js +0 -760
- package/lib/vaults/getters.js.map +0 -1
- package/lib/vaults/index.d.ts +0 -4
- package/lib/vaults/index.js +0 -21
- package/lib/vaults/index.js.map +0 -1
- package/lib/vaults/main.d.ts +0 -118
- package/lib/vaults/main.js +0 -591
- package/lib/vaults/main.js.map +0 -1
- package/lib/vaults/rpc-config.d.ts +0 -4
- package/lib/vaults/rpc-config.js +0 -27
- package/lib/vaults/rpc-config.js.map +0 -1
- package/lib/vaults/subgraph.d.ts +0 -10
- package/lib/vaults/subgraph.js +0 -470
- package/lib/vaults/subgraph.js.map +0 -1
- package/lib/vaults/user-actions.d.ts +0 -19
- package/lib/vaults/user-actions.js +0 -172
- package/lib/vaults/user-actions.js.map +0 -1
- package/lib/vaults/utils.js.map +0 -1
- package/lib/verify.d.ts +0 -2
- package/lib/verify.js +0 -20
- package/lib/verify.js.map +0 -1
- /package/lib/{services/solana → adapters/sui}/types.js +0 -0
|
@@ -32,6 +32,9 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
32
32
|
return result;
|
|
33
33
|
};
|
|
34
34
|
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
35
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
39
|
exports.getVault = getVault;
|
|
37
40
|
exports.getVaultLoans = getVaultLoans;
|
|
@@ -41,18 +44,22 @@ exports.getVaultRedemptionHistory = getVaultRedemptionHistory;
|
|
|
41
44
|
exports.getVaultPositions = getVaultPositions;
|
|
42
45
|
exports.getVaultApy = getVaultApy;
|
|
43
46
|
exports.getRewardsStakingPositions = getRewardsStakingPositions;
|
|
47
|
+
exports.getVaultTvl = getVaultTvl;
|
|
48
|
+
exports.getVaultBorrowerHealthFactor = getVaultBorrowerHealthFactor;
|
|
49
|
+
exports.getHealthFactorOfBorrowersByVault = getHealthFactorOfBorrowersByVault;
|
|
44
50
|
const abis_1 = require("../../abis");
|
|
45
51
|
const core_1 = require("../../core");
|
|
46
52
|
const ethers_1 = require("ethers");
|
|
47
|
-
const utils_1 = require("./utils");
|
|
48
53
|
const subgraph_1 = require("../../services/subgraph");
|
|
49
|
-
const constants_1 = require("./constants");
|
|
50
54
|
const debank_1 = require("../../services/debank");
|
|
51
55
|
const solana_1 = require("../../adapters/solana");
|
|
52
56
|
const EVM = __importStar(require("../../adapters/evm"));
|
|
57
|
+
const TokenizedVaultV2_1 = require("../../abis/TokenizedVaultV2");
|
|
58
|
+
const TokenizedVaultV2Receipt_1 = require("../../abis/TokenizedVaultV2Receipt");
|
|
59
|
+
const ethereum_block_by_date_1 = __importDefault(require("ethereum-block-by-date"));
|
|
53
60
|
async function getVault({ vault, loans = false, allocations = false, options, }) {
|
|
54
61
|
let returnedVault;
|
|
55
|
-
const vaultVersion = (0,
|
|
62
|
+
const vaultVersion = (0, core_1.getVaultVersion)(vault);
|
|
56
63
|
try {
|
|
57
64
|
const tokenizedVault = (await (0, core_1.fetchTokenizedVaults)(vault))?.[0];
|
|
58
65
|
switch (vaultVersion) {
|
|
@@ -73,10 +80,10 @@ async function getVault({ vault, loans = false, allocations = false, options, })
|
|
|
73
80
|
}
|
|
74
81
|
}
|
|
75
82
|
catch (err) {
|
|
76
|
-
|
|
77
|
-
throw new Error(`#getVault::${vault}::${err?.message}`);
|
|
83
|
+
core_1.Logger.log.error('getVault', err, { vault, vaultVersion });
|
|
84
|
+
throw new Error(`#getVault::${vault}::${vaultVersion}: ${err?.message}`);
|
|
78
85
|
}
|
|
79
|
-
if (!(0,
|
|
86
|
+
if (!(0, core_1.isBadVault)(vault)) {
|
|
80
87
|
if (loans) {
|
|
81
88
|
try {
|
|
82
89
|
returnedVault = {
|
|
@@ -85,7 +92,9 @@ async function getVault({ vault, loans = false, allocations = false, options, })
|
|
|
85
92
|
};
|
|
86
93
|
}
|
|
87
94
|
catch (e) {
|
|
88
|
-
|
|
95
|
+
core_1.Logger.log.error('getVault:loans', e, {
|
|
96
|
+
symbol: returnedVault.receipt.symbol,
|
|
97
|
+
});
|
|
89
98
|
}
|
|
90
99
|
}
|
|
91
100
|
if (allocations) {
|
|
@@ -97,7 +106,9 @@ async function getVault({ vault, loans = false, allocations = false, options, })
|
|
|
97
106
|
};
|
|
98
107
|
}
|
|
99
108
|
catch (e) {
|
|
100
|
-
|
|
109
|
+
core_1.Logger.log.error('getVault:allocations', e, {
|
|
110
|
+
symbol: returnedVault.receipt.symbol,
|
|
111
|
+
});
|
|
101
112
|
throw new Error('Failure fetching debank res');
|
|
102
113
|
}
|
|
103
114
|
}
|
|
@@ -106,7 +117,7 @@ async function getVault({ vault, loans = false, allocations = false, options, })
|
|
|
106
117
|
}
|
|
107
118
|
async function getVaultLoans(vault, options) {
|
|
108
119
|
const vaultAddress = typeof vault === 'string' ? vault : vault.address;
|
|
109
|
-
const vaultVersion = (0,
|
|
120
|
+
const vaultVersion = (0, core_1.getVaultVersion)(vaultAddress);
|
|
110
121
|
if (vaultVersion !== 'evm-0')
|
|
111
122
|
return [];
|
|
112
123
|
try {
|
|
@@ -140,7 +151,7 @@ async function getVaultLoans(vault, options) {
|
|
|
140
151
|
const loanFeeRate = await (0, core_1.getLoanOracleFeeRate)(provider, 'LOAN.REPAY.INTERESTS', l.address, chainId);
|
|
141
152
|
const loanApr = Number(l.apr || 0) / 100;
|
|
142
153
|
const loanAprAfterFees = loanApr * (1 - loanFeeRate / 100);
|
|
143
|
-
const isIdleCapital =
|
|
154
|
+
const isIdleCapital = core_1.IDLE_CAPITAL_BORROWER_ADDRESS.includes(borrower);
|
|
144
155
|
const newLoanObj = {
|
|
145
156
|
vault: vaultAddress,
|
|
146
157
|
address: l.address,
|
|
@@ -167,7 +178,7 @@ async function getVaultLoans(vault, options) {
|
|
|
167
178
|
return newLoans;
|
|
168
179
|
}
|
|
169
180
|
catch (e) {
|
|
170
|
-
|
|
181
|
+
core_1.Logger.log.error('getVaultLoans', e, { vault });
|
|
171
182
|
throw new Error(`#getVaultLoans::${vault}:${e?.message}`);
|
|
172
183
|
}
|
|
173
184
|
}
|
|
@@ -194,7 +205,7 @@ async function getVaultAllocations(vault, options) {
|
|
|
194
205
|
let uniqueBorrowers;
|
|
195
206
|
const tokenizedVault = (await (0, core_1.fetchTokenizedVaults)(vault, options?.headers))?.[0];
|
|
196
207
|
try {
|
|
197
|
-
const vaultVersion = (0,
|
|
208
|
+
const vaultVersion = (0, core_1.getVaultVersion)(vault);
|
|
198
209
|
if (vaultVersion === 'evm-0') {
|
|
199
210
|
const loans = await getVaultLoans(vault, options);
|
|
200
211
|
uniqueBorrowers = [...new Set(loans.map((l) => l.borrower))];
|
|
@@ -204,17 +215,17 @@ async function getVaultAllocations(vault, options) {
|
|
|
204
215
|
}
|
|
205
216
|
}
|
|
206
217
|
catch (e) {
|
|
207
|
-
|
|
218
|
+
core_1.Logger.log.error('getVaultAllocations:borrowers', e);
|
|
208
219
|
}
|
|
209
|
-
if (vault.toLowerCase() ===
|
|
210
|
-
const debankRes = await (0, debank_1.fetchDebankResponse)(
|
|
220
|
+
if (vault.toLowerCase() === core_1.VAULT_AgoraAUSD.toLowerCase()) {
|
|
221
|
+
const debankRes = await (0, debank_1.fetchDebankResponse)(core_1.SUBACCOUNT_CALEB);
|
|
211
222
|
if (debankRes === false) {
|
|
212
223
|
debankErr = true;
|
|
213
224
|
}
|
|
214
|
-
(0, debank_1.parseVaultLevelDebank)(debankRes, protocolExposure, tokenExposure,
|
|
225
|
+
(0, debank_1.parseVaultLevelDebank)(debankRes, protocolExposure, tokenExposure, core_1.SUBACCOUNT_CALEB, exposurePerCategory, netValue);
|
|
215
226
|
unfilteredTokens = debankRes?.subaccount?.tokens;
|
|
216
227
|
const debankPerLoan = (0, debank_1.parseLoanLevelDebank)(debankRes);
|
|
217
|
-
defiPerBorrower[
|
|
228
|
+
defiPerBorrower[core_1.SUBACCOUNT_CALEB] = debankPerLoan;
|
|
218
229
|
}
|
|
219
230
|
else {
|
|
220
231
|
for (const borrower of uniqueBorrowers) {
|
|
@@ -229,7 +240,7 @@ async function getVaultAllocations(vault, options) {
|
|
|
229
240
|
defiPerBorrower[borrower] = debankPerLoan;
|
|
230
241
|
}
|
|
231
242
|
catch (e) {
|
|
232
|
-
|
|
243
|
+
core_1.Logger.log.error('getVaultAllocations:debank', e, { borrower });
|
|
233
244
|
}
|
|
234
245
|
try {
|
|
235
246
|
const cefiResponse = await (0, core_1.fetchAugustWithKey)(options.augustKey, core_1.WEBSERVER_ENDPOINTS.subaccount.cefi(borrower), { headers: options?.headers });
|
|
@@ -288,64 +299,110 @@ async function getVaultAvailableRedemptions({ vault, wallet, options, }) {
|
|
|
288
299
|
if (!tokenizedVault) {
|
|
289
300
|
return { availableRedemptions: [], pendingRedemptions: [] };
|
|
290
301
|
}
|
|
291
|
-
const
|
|
302
|
+
const version = (0, core_1.getVaultVersion)(vault);
|
|
303
|
+
let abi;
|
|
304
|
+
let decimals;
|
|
305
|
+
switch (version) {
|
|
306
|
+
case 'evm-2': {
|
|
307
|
+
abi = TokenizedVaultV2_1.ABI_TOKENIZED_VAULT_V2;
|
|
308
|
+
decimals = await (0, core_1.getDecimals)(provider, await (0, core_1.getReceiptTokenAddress)(provider, vault));
|
|
309
|
+
break;
|
|
310
|
+
}
|
|
311
|
+
default: {
|
|
312
|
+
abi = abis_1.ABI_LENDING_POOL_V2;
|
|
313
|
+
decimals = await (0, core_1.getDecimals)(provider, vault);
|
|
314
|
+
break;
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
const vaultContract = (0, core_1.createContract)({
|
|
292
318
|
address: vault,
|
|
293
|
-
abi:
|
|
319
|
+
abi: abi,
|
|
294
320
|
provider,
|
|
295
321
|
});
|
|
296
322
|
const { withdrawalRequesteds, withdrawalProcesseds } = await (0, subgraph_1.getSubgraphAllWithdrawals)(vault, provider);
|
|
297
|
-
const decimals = await (0, core_1.getDecimals)(provider, vault);
|
|
298
323
|
const availableRedemptions = [];
|
|
299
324
|
const pendingRedemptions = [];
|
|
300
325
|
for (const ev of withdrawalRequesteds) {
|
|
301
326
|
if (!ev || typeof ev !== 'object') {
|
|
302
|
-
|
|
327
|
+
core_1.Logger.log.warn('getVaultAvailableRedemptions', `Skipping invalid event: ${ev}`);
|
|
303
328
|
continue;
|
|
304
329
|
}
|
|
305
330
|
if (!ev.year || !ev.month || !ev.day || !ev.receiverAddr) {
|
|
306
|
-
|
|
331
|
+
core_1.Logger.log.warn('getVaultAvailableRedemptions', `Skipping event with missing required properties: ${ev}`);
|
|
307
332
|
continue;
|
|
308
333
|
}
|
|
309
334
|
const fullDate = new Date(Number(ev.year), Number(ev.month) - 1, Number(ev.day));
|
|
310
335
|
const foundRedemptionAgainstClaim = withdrawalProcesseds.find((h) => new Date(h.processedOn).toDateString() === fullDate.toDateString() &&
|
|
311
336
|
h.receiverAddr === ev.receiverAddr);
|
|
312
|
-
if (wallet) {
|
|
337
|
+
if (wallet && (0, ethers_1.isAddress)(wallet)) {
|
|
313
338
|
if (ev?.receiverAddr?.toLowerCase() === wallet.toLowerCase()) {
|
|
314
339
|
const alreadyRedeemed = availableRedemptions.find((red) => BigInt(red.day.raw) === BigInt(ev.day) &&
|
|
315
340
|
BigInt(red.month.raw) === BigInt(ev.month) &&
|
|
316
341
|
BigInt(red.year.raw) === BigInt(ev.year));
|
|
317
342
|
if (!(foundRedemptionAgainstClaim && alreadyRedeemed)) {
|
|
318
343
|
try {
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
344
|
+
switch (version) {
|
|
345
|
+
case 'evm-2': {
|
|
346
|
+
availableRedemptions.push({
|
|
347
|
+
id: ev.transactionHash_ || ev.id,
|
|
348
|
+
hash: ev.transactionHash_ || ev.id,
|
|
349
|
+
timestamp: Number(ev.timestamp_),
|
|
350
|
+
receiver: ev.receiverAddr,
|
|
351
|
+
day: (0, core_1.toNormalizedBn)(ev.day, 0),
|
|
352
|
+
month: (0, core_1.toNormalizedBn)(ev.month, 0),
|
|
353
|
+
year: (0, core_1.toNormalizedBn)(ev.year, 0),
|
|
354
|
+
amount: (0, core_1.toNormalizedBn)(ev.shares, decimals),
|
|
355
|
+
date: fullDate,
|
|
356
|
+
vault,
|
|
357
|
+
});
|
|
358
|
+
pendingRedemptions.push({
|
|
359
|
+
id: ev.transactionHash_ || ev.id,
|
|
360
|
+
hash: ev.transactionHash_ || ev.id,
|
|
361
|
+
timestamp: Number(ev.timestamp_),
|
|
362
|
+
receiver: ev.receiverAddr,
|
|
363
|
+
day: (0, core_1.toNormalizedBn)(ev.day, 0),
|
|
364
|
+
month: (0, core_1.toNormalizedBn)(ev.month, 0),
|
|
365
|
+
year: (0, core_1.toNormalizedBn)(ev.year, 0),
|
|
366
|
+
amount: (0, core_1.toNormalizedBn)(ev.shares || BigInt(0), decimals),
|
|
367
|
+
date: fullDate,
|
|
368
|
+
vault,
|
|
369
|
+
});
|
|
370
|
+
break;
|
|
371
|
+
}
|
|
372
|
+
default: {
|
|
373
|
+
const trueClaimableAmount = await vaultContract?.getClaimableAmountByReceiver?.(BigInt(ev.year), BigInt(ev.month), BigInt(ev.day), (0, ethers_1.getAddress)(wallet));
|
|
374
|
+
if (trueClaimableAmount > BigInt(0)) {
|
|
375
|
+
availableRedemptions.push({
|
|
376
|
+
id: ev.transactionHash_ || ev.id,
|
|
377
|
+
hash: ev.transactionHash_ || ev.id,
|
|
378
|
+
timestamp: Number(ev.timestamp_),
|
|
379
|
+
receiver: ev.receiverAddr,
|
|
380
|
+
day: (0, core_1.toNormalizedBn)(ev.day, 0),
|
|
381
|
+
month: (0, core_1.toNormalizedBn)(ev.month, 0),
|
|
382
|
+
year: (0, core_1.toNormalizedBn)(ev.year, 0),
|
|
383
|
+
amount: (0, core_1.toNormalizedBn)(trueClaimableAmount, decimals),
|
|
384
|
+
date: fullDate,
|
|
385
|
+
vault,
|
|
386
|
+
});
|
|
387
|
+
}
|
|
388
|
+
pendingRedemptions.push({
|
|
389
|
+
id: ev.transactionHash_ || ev.id,
|
|
390
|
+
hash: ev.transactionHash_ || ev.id,
|
|
391
|
+
timestamp: Number(ev.timestamp_),
|
|
392
|
+
receiver: ev.receiverAddr,
|
|
393
|
+
day: (0, core_1.toNormalizedBn)(ev.day, 0),
|
|
394
|
+
month: (0, core_1.toNormalizedBn)(ev.month, 0),
|
|
395
|
+
year: (0, core_1.toNormalizedBn)(ev.year, 0),
|
|
396
|
+
amount: (0, core_1.toNormalizedBn)(trueClaimableAmount || BigInt(0), decimals),
|
|
397
|
+
date: fullDate,
|
|
398
|
+
vault,
|
|
399
|
+
});
|
|
400
|
+
break;
|
|
401
|
+
}
|
|
333
402
|
}
|
|
334
|
-
pendingRedemptions.push({
|
|
335
|
-
id: ev.transactionHash_ || ev.id,
|
|
336
|
-
hash: ev.transactionHash_ || ev.id,
|
|
337
|
-
timestamp: Number(ev.timestamp_),
|
|
338
|
-
receiver: ev.receiverAddr,
|
|
339
|
-
day: (0, core_1.toNormalizedBn)(ev.day, 0),
|
|
340
|
-
month: (0, core_1.toNormalizedBn)(ev.month, 0),
|
|
341
|
-
year: (0, core_1.toNormalizedBn)(ev.year, 0),
|
|
342
|
-
amount: (0, core_1.toNormalizedBn)(trueClaimableAmount || BigInt(0), decimals),
|
|
343
|
-
date: fullDate,
|
|
344
|
-
vault,
|
|
345
|
-
});
|
|
346
403
|
}
|
|
347
404
|
catch (contractError) {
|
|
348
|
-
|
|
405
|
+
core_1.Logger.log.error('getVaultAvailableRedemptions', `Contract call failed: ${contractError}`);
|
|
349
406
|
pendingRedemptions.push({
|
|
350
407
|
id: ev.transactionHash_ || ev.id,
|
|
351
408
|
hash: ev.transactionHash_ || ev.id,
|
|
@@ -382,7 +439,7 @@ async function getVaultAvailableRedemptions({ vault, wallet, options, }) {
|
|
|
382
439
|
return { availableRedemptions, pendingRedemptions };
|
|
383
440
|
}
|
|
384
441
|
catch (e) {
|
|
385
|
-
|
|
442
|
+
core_1.Logger.log.error('getVaultAvailableRedemptions', e, { vault, wallet });
|
|
386
443
|
return { availableRedemptions: [], pendingRedemptions: [] };
|
|
387
444
|
}
|
|
388
445
|
}
|
|
@@ -442,12 +499,11 @@ async function getVaultRedemptionHistory({ vault, wallet, options, }) {
|
|
|
442
499
|
});
|
|
443
500
|
}
|
|
444
501
|
});
|
|
445
|
-
|
|
446
|
-
console.log('#getVaultRedemptionHistory:', redemptions.slice(0, 1));
|
|
502
|
+
core_1.Logger.log.info('getVaultRedemptionHistory', redemptions.slice(0, 1));
|
|
447
503
|
return redemptions;
|
|
448
504
|
}
|
|
449
505
|
catch (e) {
|
|
450
|
-
|
|
506
|
+
core_1.Logger.log.error('getVaultRedemptionHistory', e, { vault, wallet });
|
|
451
507
|
return [];
|
|
452
508
|
}
|
|
453
509
|
}
|
|
@@ -485,14 +541,45 @@ async function getVaultPositions({ vault, wallet, solanaWallet, options, }) {
|
|
|
485
541
|
};
|
|
486
542
|
}
|
|
487
543
|
const provider = (0, core_1.createProvider)(options.rpcUrl);
|
|
488
|
-
|
|
489
|
-
|
|
544
|
+
let decimals;
|
|
545
|
+
let abi;
|
|
546
|
+
const version = (0, core_1.getVaultVersion)(vault);
|
|
547
|
+
switch (version) {
|
|
548
|
+
case 'evm-2': {
|
|
549
|
+
decimals = await (0, core_1.getDecimals)(provider, await (0, core_1.getReceiptTokenAddress)(provider, vault));
|
|
550
|
+
abi = TokenizedVaultV2_1.ABI_TOKENIZED_VAULT_V2;
|
|
551
|
+
break;
|
|
552
|
+
}
|
|
553
|
+
default: {
|
|
554
|
+
decimals = await (0, core_1.getDecimals)(provider, vault);
|
|
555
|
+
abi = abis_1.ABI_LENDING_POOL_V2;
|
|
556
|
+
break;
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
const vaultContract = (0, core_1.createContract)({
|
|
490
560
|
provider,
|
|
491
|
-
abi:
|
|
561
|
+
abi: abi,
|
|
492
562
|
address: v.address,
|
|
493
563
|
});
|
|
494
|
-
|
|
495
|
-
|
|
564
|
+
let bal = BigInt(0);
|
|
565
|
+
if (wallet && (0, ethers_1.isAddress)(wallet)) {
|
|
566
|
+
switch (version) {
|
|
567
|
+
case 'evm-2': {
|
|
568
|
+
const receiptContract = (0, core_1.createContract)({
|
|
569
|
+
provider,
|
|
570
|
+
abi: TokenizedVaultV2Receipt_1.ABI_TOKENIZED_VAULT_V2_RECEIPT,
|
|
571
|
+
address: await (0, core_1.getReceiptTokenAddress)(provider, vault),
|
|
572
|
+
});
|
|
573
|
+
bal = await receiptContract.balanceOf(wallet);
|
|
574
|
+
break;
|
|
575
|
+
}
|
|
576
|
+
default: {
|
|
577
|
+
bal = await vaultContract.balanceOf(wallet);
|
|
578
|
+
break;
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
}
|
|
582
|
+
const balance = (0, core_1.toNormalizedBn)(bal, decimals);
|
|
496
583
|
const { availableRedemptions, pendingRedemptions } = await getVaultAvailableRedemptions({
|
|
497
584
|
vault: v.address,
|
|
498
585
|
wallet,
|
|
@@ -509,7 +596,7 @@ async function getVaultPositions({ vault, wallet, solanaWallet, options, }) {
|
|
|
509
596
|
};
|
|
510
597
|
}
|
|
511
598
|
catch (vaultError) {
|
|
512
|
-
|
|
599
|
+
core_1.Logger.log.error(`getVaultPositions`, `Error processing vault ${v.address}: ${vaultError}`);
|
|
513
600
|
return {
|
|
514
601
|
vault,
|
|
515
602
|
status: 'PENDING',
|
|
@@ -523,17 +610,51 @@ async function getVaultPositions({ vault, wallet, solanaWallet, options, }) {
|
|
|
523
610
|
return promises.flat();
|
|
524
611
|
}
|
|
525
612
|
catch (e) {
|
|
526
|
-
|
|
613
|
+
core_1.Logger.log.error('getVaultPositions', e, { vault, wallet, solanaWallet });
|
|
527
614
|
throw new Error(`#getVaultPositions::${vault}:${e?.message}`);
|
|
528
615
|
}
|
|
529
616
|
}
|
|
530
|
-
async function getVaultApy({ vault, options, }) {
|
|
617
|
+
async function getVaultApy({ vault, options, historical, }) {
|
|
531
618
|
try {
|
|
532
|
-
|
|
533
|
-
|
|
619
|
+
if (!vault)
|
|
620
|
+
throw new Error('Vault input parameter is undefined.');
|
|
621
|
+
if (!historical) {
|
|
622
|
+
const tokenizedVault = (await (0, core_1.fetchTokenizedVaults)(vault, options?.headers))?.[0];
|
|
623
|
+
return [
|
|
624
|
+
{
|
|
625
|
+
value: tokenizedVault?.reported_apy?.apy || 0,
|
|
626
|
+
timestamp: new Date().toISOString(),
|
|
627
|
+
},
|
|
628
|
+
];
|
|
629
|
+
}
|
|
630
|
+
else {
|
|
631
|
+
function paramBuilder(params) {
|
|
632
|
+
const urlParams = new URLSearchParams();
|
|
633
|
+
if (!params)
|
|
634
|
+
return '';
|
|
635
|
+
if (params.daysAgo)
|
|
636
|
+
urlParams.append('days_ago', params.daysAgo.toString());
|
|
637
|
+
return urlParams.toString();
|
|
638
|
+
}
|
|
639
|
+
const historicalApy = await (0, core_1.fetchAugustPublic)(`${core_1.WEBSERVER_ENDPOINTS.public.tokenizedVault.historicalApy(vault)}${paramBuilder(historical)}`, {
|
|
640
|
+
headers: !!options?.headers
|
|
641
|
+
? options?.headers
|
|
642
|
+
: undefined,
|
|
643
|
+
});
|
|
644
|
+
if (!historicalApy.ok)
|
|
645
|
+
throw new Error('Failed to fetch historical apy.');
|
|
646
|
+
const historicalApyData = (await historicalApy.json());
|
|
647
|
+
return historicalApyData.data.values.map((val, index) => {
|
|
648
|
+
const respectiveDate = historicalApyData.data.labels[index];
|
|
649
|
+
return {
|
|
650
|
+
timestamp: new Date(respectiveDate).toISOString(),
|
|
651
|
+
value: val,
|
|
652
|
+
};
|
|
653
|
+
});
|
|
654
|
+
}
|
|
534
655
|
}
|
|
535
656
|
catch (e) {
|
|
536
|
-
|
|
657
|
+
core_1.Logger.log.error('getVaultApy', e, { vault });
|
|
537
658
|
throw new Error(`#getVaultApy::${vault}:${e?.message}`);
|
|
538
659
|
}
|
|
539
660
|
}
|
|
@@ -548,14 +669,14 @@ async function getRewardsStakingPositions({ rpcUrl, wallet, coinGeckoKey, }) {
|
|
|
548
669
|
const provider = (0, core_1.createProvider)(rpcUrl);
|
|
549
670
|
const chainId = await (0, core_1.getChainId)(provider);
|
|
550
671
|
if (chainId !== REWARDS_CHAIN) {
|
|
551
|
-
|
|
672
|
+
core_1.Logger.log.warn('getStakingPositions:unsupported_chain', chainId);
|
|
552
673
|
return [];
|
|
553
674
|
}
|
|
554
675
|
if (wallet && !(0, ethers_1.isAddress)(wallet)) {
|
|
555
|
-
|
|
676
|
+
core_1.Logger.log.warn('getStakingPositions:invalid_wallet', wallet);
|
|
556
677
|
return [];
|
|
557
678
|
}
|
|
558
|
-
const rewardDistributorAddresses = (0,
|
|
679
|
+
const rewardDistributorAddresses = (0, core_1.REWARD_DISTRIBUTOR_ADDRESS)(chainId);
|
|
559
680
|
const positions = await Promise.all(rewardDistributorAddresses.map(async (contract, i) => {
|
|
560
681
|
const rewardContract = (0, core_1.createContract)({
|
|
561
682
|
address: contract,
|
|
@@ -571,7 +692,7 @@ async function getRewardsStakingPositions({ rpcUrl, wallet, coinGeckoKey, }) {
|
|
|
571
692
|
provider: provider,
|
|
572
693
|
abi: abis_1.ABI_ERC20,
|
|
573
694
|
});
|
|
574
|
-
const [decimals, symbol, name
|
|
695
|
+
const [decimals, symbol, name] = await Promise.all(stakingTokenCalls.map((staking) => stakingTokenContract[staking]()));
|
|
575
696
|
let balance;
|
|
576
697
|
let earned;
|
|
577
698
|
if (wallet) {
|
|
@@ -630,7 +751,182 @@ async function getRewardsStakingPositions({ rpcUrl, wallet, coinGeckoKey, }) {
|
|
|
630
751
|
return positions;
|
|
631
752
|
}
|
|
632
753
|
catch (e) {
|
|
633
|
-
|
|
754
|
+
core_1.Logger.log.error('getStakingPositions', e, { wallet });
|
|
755
|
+
return [];
|
|
634
756
|
}
|
|
635
757
|
}
|
|
758
|
+
async function getVaultTvl({ vault, options, historical, }) {
|
|
759
|
+
try {
|
|
760
|
+
if (!vault)
|
|
761
|
+
throw new Error('Vault input parameter is undefined.');
|
|
762
|
+
const _vaultExists = (await (0, core_1.fetchTokenizedVaults)(vault))?.[0];
|
|
763
|
+
if (!_vaultExists) {
|
|
764
|
+
throw new Error(`Vault ${vault} not found in backend`);
|
|
765
|
+
}
|
|
766
|
+
if (!historical) {
|
|
767
|
+
const version = (0, core_1.getVaultVersion)(vault);
|
|
768
|
+
const provider = (0, core_1.createProvider)(options.rpcUrl);
|
|
769
|
+
switch (version) {
|
|
770
|
+
case 'evm-2': {
|
|
771
|
+
const receiptTokenAddress = await (0, core_1.getReceiptTokenAddress)(provider, vault);
|
|
772
|
+
const receiptTokenDecimals = await (0, core_1.getDecimals)(provider, receiptTokenAddress);
|
|
773
|
+
const receiptTokenContract = (0, core_1.createContract)({
|
|
774
|
+
address: receiptTokenAddress,
|
|
775
|
+
abi: TokenizedVaultV2Receipt_1.ABI_TOKENIZED_VAULT_V2_RECEIPT,
|
|
776
|
+
provider,
|
|
777
|
+
});
|
|
778
|
+
const totalSupply = await receiptTokenContract.getTotalSupply();
|
|
779
|
+
return [
|
|
780
|
+
{
|
|
781
|
+
value: (0, core_1.toNormalizedBn)(totalSupply, receiptTokenDecimals),
|
|
782
|
+
timestamp: new Date().toISOString(),
|
|
783
|
+
},
|
|
784
|
+
];
|
|
785
|
+
}
|
|
786
|
+
case 'sol-0': {
|
|
787
|
+
return [
|
|
788
|
+
{
|
|
789
|
+
value: (0, core_1.toNormalizedBn)(0),
|
|
790
|
+
timestamp: new Date().toISOString(),
|
|
791
|
+
},
|
|
792
|
+
];
|
|
793
|
+
}
|
|
794
|
+
default: {
|
|
795
|
+
const vaultContract = (0, core_1.createContract)({
|
|
796
|
+
address: vault,
|
|
797
|
+
abi: TokenizedVaultV2_1.ABI_TOKENIZED_VAULT_V2,
|
|
798
|
+
provider,
|
|
799
|
+
});
|
|
800
|
+
const decimals = await (0, core_1.getDecimals)(provider, vault);
|
|
801
|
+
const totalSupply = await vaultContract.totalSupply();
|
|
802
|
+
return [
|
|
803
|
+
{
|
|
804
|
+
value: (0, core_1.toNormalizedBn)(totalSupply, decimals),
|
|
805
|
+
timestamp: new Date().toISOString(),
|
|
806
|
+
},
|
|
807
|
+
];
|
|
808
|
+
}
|
|
809
|
+
}
|
|
810
|
+
}
|
|
811
|
+
else {
|
|
812
|
+
if (typeof historical !== 'undefined' && !historical.order)
|
|
813
|
+
historical.order = 'desc';
|
|
814
|
+
if (typeof historical !== 'undefined' && !historical.interval)
|
|
815
|
+
historical.interval = 'days';
|
|
816
|
+
const provider = (0, core_1.createProvider)(options.rpcUrl);
|
|
817
|
+
const version = (0, core_1.getVaultVersion)(vault);
|
|
818
|
+
const vaultContract = (0, core_1.createContract)({
|
|
819
|
+
address: vault,
|
|
820
|
+
abi: version === 'evm-2' ? TokenizedVaultV2_1.ABI_TOKENIZED_VAULT_V2 : abis_1.ABI_LENDING_POOL_V2,
|
|
821
|
+
provider,
|
|
822
|
+
});
|
|
823
|
+
let minAbi = [];
|
|
824
|
+
let functionName = '';
|
|
825
|
+
let vaultDecimals = 0;
|
|
826
|
+
switch (version) {
|
|
827
|
+
case 'evm-2': {
|
|
828
|
+
minAbi = ['function getTotalAssets() view returns (uint256)'];
|
|
829
|
+
functionName = 'getTotalAssets';
|
|
830
|
+
const receiptTokenAddress = await (0, core_1.getReceiptTokenAddress)(provider, vault);
|
|
831
|
+
vaultDecimals = await (0, core_1.getDecimals)(provider, receiptTokenAddress);
|
|
832
|
+
break;
|
|
833
|
+
}
|
|
834
|
+
default: {
|
|
835
|
+
minAbi = ['function totalAssets() view returns (uint256)'];
|
|
836
|
+
functionName = 'totalAssets';
|
|
837
|
+
vaultDecimals = await (0, core_1.getDecimals)(provider, vault);
|
|
838
|
+
break;
|
|
839
|
+
}
|
|
840
|
+
}
|
|
841
|
+
const finalizedBlock = await provider.getBlock('finalized');
|
|
842
|
+
const finalizedTimestamp = finalizedBlock
|
|
843
|
+
? finalizedBlock.timestamp * 1000
|
|
844
|
+
: Date.now() * 60 * 1000;
|
|
845
|
+
const daysAgo = historical.daysAgo * 24 * 60 * 60 * 1000;
|
|
846
|
+
const dater = new ethereum_block_by_date_1.default(provider);
|
|
847
|
+
const startDate = historical.daysAgo
|
|
848
|
+
? new Date(finalizedTimestamp - daysAgo)
|
|
849
|
+
: new Date(finalizedTimestamp);
|
|
850
|
+
const blocks = await dater.getEvery(historical.interval, startDate.toUTCString(), new Date(finalizedTimestamp).toUTCString());
|
|
851
|
+
const orderedBlocks = historical.order === 'desc' ? (0, core_1.orderObjArrByDate)(blocks) : blocks;
|
|
852
|
+
const totalAssetsHistorical = await (0, core_1.promiseSettle)(orderedBlocks?.map(async ({ block, date }) => {
|
|
853
|
+
const totalAssetsAtBlock = await provider.call({
|
|
854
|
+
to: vaultContract,
|
|
855
|
+
data: new ethers_1.Interface(minAbi).encodeFunctionData(functionName, []),
|
|
856
|
+
blockTag: block,
|
|
857
|
+
});
|
|
858
|
+
if (totalAssetsAtBlock === '0x')
|
|
859
|
+
return {
|
|
860
|
+
timestamp: (0, core_1.dateToUnix)(new Date(date)),
|
|
861
|
+
value: (0, core_1.toNormalizedBn)(0, 0),
|
|
862
|
+
};
|
|
863
|
+
const readableTotalAssetsAtBlock = new ethers_1.Interface(minAbi).decodeFunctionResult(functionName, totalAssetsAtBlock);
|
|
864
|
+
return {
|
|
865
|
+
timestamp: (0, core_1.dateToUnix)(new Date(date)),
|
|
866
|
+
value: (0, core_1.toNormalizedBn)(readableTotalAssetsAtBlock?.[0], vaultDecimals),
|
|
867
|
+
};
|
|
868
|
+
}));
|
|
869
|
+
core_1.Logger.log.info('getVaultTvl:historical', totalAssetsHistorical.length);
|
|
870
|
+
return totalAssetsHistorical;
|
|
871
|
+
}
|
|
872
|
+
}
|
|
873
|
+
catch (e) {
|
|
874
|
+
core_1.Logger.log.error('getVaultTvl', e, { vault });
|
|
875
|
+
throw new Error(`Failed to fetch TVL for ${vault}: ${e instanceof Error ? e.message : 'Unknown error'}`);
|
|
876
|
+
}
|
|
877
|
+
}
|
|
878
|
+
async function getVaultBorrowerHealthFactor({ vault, options, }) {
|
|
879
|
+
const provider = (0, core_1.createProvider)(options.rpcUrl);
|
|
880
|
+
const loans = await getVaultLoans(vault, options);
|
|
881
|
+
const activeLoans = (await Promise.all(loans.map(async (l) => {
|
|
882
|
+
const loanContract = (0, core_1.createContract)({
|
|
883
|
+
provider,
|
|
884
|
+
address: l.address,
|
|
885
|
+
abi: abis_1.ABI_LOAN,
|
|
886
|
+
});
|
|
887
|
+
const loanState = await loanContract.loanState();
|
|
888
|
+
if ((0, core_1.loanStateToReadable)(loanState) !== 'ACTIVE')
|
|
889
|
+
return;
|
|
890
|
+
return l.address;
|
|
891
|
+
}))).filter((l) => l !== undefined);
|
|
892
|
+
const formattedLoansArray = await Promise.all(activeLoans.map(async (l) => {
|
|
893
|
+
const loanContract = (0, core_1.createContract)({
|
|
894
|
+
provider,
|
|
895
|
+
address: l,
|
|
896
|
+
abi: abis_1.ABI_LOAN,
|
|
897
|
+
});
|
|
898
|
+
return {
|
|
899
|
+
borrower: await loanContract.borrower(),
|
|
900
|
+
loan: l,
|
|
901
|
+
};
|
|
902
|
+
}));
|
|
903
|
+
const uniqueBorrowers = [
|
|
904
|
+
...new Set(formattedLoansArray.map((l) => l.borrower)),
|
|
905
|
+
];
|
|
906
|
+
let borrowerResponses = {};
|
|
907
|
+
for (const b of uniqueBorrowers) {
|
|
908
|
+
const response = await (0, core_1.fetchAugustWithKey)(options.augustKey, core_1.WEBSERVER_ENDPOINTS.subaccount.health_factor(b));
|
|
909
|
+
if (response.status === 200) {
|
|
910
|
+
borrowerResponses[b] = await response.json();
|
|
911
|
+
}
|
|
912
|
+
}
|
|
913
|
+
formattedLoansArray?.map((loan) => {
|
|
914
|
+
loan.health_factor = borrowerResponses[loan.borrower];
|
|
915
|
+
});
|
|
916
|
+
return formattedLoansArray;
|
|
917
|
+
}
|
|
918
|
+
async function getHealthFactorOfBorrowersByVault({ options, }) {
|
|
919
|
+
const vaults = await (0, core_1.fetchTokenizedVaults)();
|
|
920
|
+
const healthFactors = await Promise.all(vaults.map(async (v) => {
|
|
921
|
+
return getVaultBorrowerHealthFactor({
|
|
922
|
+
vault: v.address,
|
|
923
|
+
options,
|
|
924
|
+
});
|
|
925
|
+
}));
|
|
926
|
+
const healthFactorsByPool = {};
|
|
927
|
+
vaults.map((pool, index) => {
|
|
928
|
+
healthFactorsByPool[pool.address] = healthFactors[index];
|
|
929
|
+
});
|
|
930
|
+
return healthFactorsByPool;
|
|
931
|
+
}
|
|
636
932
|
//# sourceMappingURL=getters.js.map
|