@eulerxyz/euler-v2-sdk 0.1.2-beta → 0.1.3-beta

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/README.md +1 -1
  2. package/dist/src/entities/Account.d.ts.map +1 -1
  3. package/dist/src/entities/Account.js +11 -4
  4. package/dist/src/entities/Account.js.map +1 -1
  5. package/dist/src/entities/Portfolio.d.ts +21 -1
  6. package/dist/src/entities/Portfolio.d.ts.map +1 -1
  7. package/dist/src/entities/Portfolio.js +48 -17
  8. package/dist/src/entities/Portfolio.js.map +1 -1
  9. package/dist/src/index.d.ts +1 -1
  10. package/dist/src/index.d.ts.map +1 -1
  11. package/dist/src/index.js +1 -1
  12. package/dist/src/index.js.map +1 -1
  13. package/dist/src/plugins/keyring/keyringPlugin.d.ts +1 -1
  14. package/dist/src/plugins/keyring/keyringPlugin.d.ts.map +1 -1
  15. package/dist/src/plugins/keyring/keyringPlugin.js +12 -3
  16. package/dist/src/plugins/keyring/keyringPlugin.js.map +1 -1
  17. package/dist/src/sdk/buildSDK.d.ts +1 -3
  18. package/dist/src/sdk/buildSDK.d.ts.map +1 -1
  19. package/dist/src/sdk/buildSDK.js +10 -6
  20. package/dist/src/sdk/buildSDK.js.map +1 -1
  21. package/dist/src/sdk/defaultConfig.js +7 -7
  22. package/dist/src/sdk/defaultConfig.js.map +1 -1
  23. package/dist/src/sdk/sdk.d.ts +2 -5
  24. package/dist/src/sdk/sdk.d.ts.map +1 -1
  25. package/dist/src/sdk/sdk.js +0 -2
  26. package/dist/src/sdk/sdk.js.map +1 -1
  27. package/dist/src/services/accountService/adapters/accountV3Adapter/accountV3Adapter.d.ts +7 -1
  28. package/dist/src/services/accountService/adapters/accountV3Adapter/accountV3Adapter.d.ts.map +1 -1
  29. package/dist/src/services/accountService/adapters/accountV3Adapter/accountV3Adapter.js +100 -18
  30. package/dist/src/services/accountService/adapters/accountV3Adapter/accountV3Adapter.js.map +1 -1
  31. package/dist/src/services/executionService/encode.d.ts +30 -0
  32. package/dist/src/services/executionService/encode.d.ts.map +1 -0
  33. package/dist/src/services/executionService/encode.js +841 -0
  34. package/dist/src/services/executionService/encode.js.map +1 -0
  35. package/dist/src/services/executionService/execute.d.ts +64 -0
  36. package/dist/src/services/executionService/execute.d.ts.map +1 -0
  37. package/dist/src/services/executionService/execute.js +181 -0
  38. package/dist/src/services/executionService/execute.js.map +1 -0
  39. package/dist/src/services/executionService/executionService.d.ts +163 -37
  40. package/dist/src/services/executionService/executionService.d.ts.map +1 -1
  41. package/dist/src/services/executionService/executionService.js +493 -893
  42. package/dist/src/services/executionService/executionService.js.map +1 -1
  43. package/dist/src/services/executionService/executionServiceTypes.d.ts +93 -9
  44. package/dist/src/services/executionService/executionServiceTypes.d.ts.map +1 -1
  45. package/dist/src/services/executionService/executionServiceTypes.js +6 -0
  46. package/dist/src/services/executionService/executionServiceTypes.js.map +1 -1
  47. package/dist/src/services/executionService/index.d.ts +5 -2
  48. package/dist/src/services/executionService/index.d.ts.map +1 -1
  49. package/dist/src/services/executionService/index.js +3 -1
  50. package/dist/src/services/executionService/index.js.map +1 -1
  51. package/dist/src/services/{simulationService/simulationService.d.ts → executionService/simulate.d.ts} +26 -40
  52. package/dist/src/services/executionService/simulate.d.ts.map +1 -0
  53. package/dist/src/services/executionService/simulate.js +531 -0
  54. package/dist/src/services/executionService/simulate.js.map +1 -0
  55. package/dist/src/services/intrinsicApyService/adapters/intrinsicApyV3Adapter/intrinsicApyV3AdapterTypes.d.ts +1 -1
  56. package/dist/src/services/intrinsicApyService/adapters/intrinsicApyV3Adapter/intrinsicApyV3AdapterTypes.d.ts.map +1 -1
  57. package/dist/src/services/priceService/backendClient.d.ts +0 -2
  58. package/dist/src/services/priceService/backendClient.d.ts.map +1 -1
  59. package/dist/src/services/priceService/backendClient.js.map +1 -1
  60. package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3Adapter.d.ts.map +1 -1
  61. package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3Adapter.js +26 -13
  62. package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3Adapter.js.map +1 -1
  63. package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3AdapterTypes.d.ts +10 -10
  64. package/dist/src/services/rewardsService/adapters/rewardsV3Adapter/rewardsV3AdapterTypes.d.ts.map +1 -1
  65. package/dist/src/services/rewardsService/rewardsServiceTypes.d.ts +1 -1
  66. package/dist/src/services/rewardsService/rewardsServiceTypes.d.ts.map +1 -1
  67. package/dist/src/services/vaults/eVaultService/adapters/eVaultV3Adapter/eVaultV3Adapter.d.ts +1 -0
  68. package/dist/src/services/vaults/eVaultService/adapters/eVaultV3Adapter/eVaultV3Adapter.d.ts.map +1 -1
  69. package/dist/src/services/vaults/eVaultService/adapters/eVaultV3Adapter/eVaultV3Adapter.js +20 -3
  70. package/dist/src/services/vaults/eVaultService/adapters/eVaultV3Adapter/eVaultV3Adapter.js.map +1 -1
  71. package/dist/src/services/vaults/eVaultService/eVaultServiceConfig.d.ts +1 -1
  72. package/dist/src/services/vaults/eVaultService/eVaultServiceConfig.d.ts.map +1 -1
  73. package/dist/src/services/vaults/eulerEarnService/eulerEarnServiceConfig.d.ts +1 -1
  74. package/dist/src/services/vaults/eulerEarnService/eulerEarnServiceConfig.d.ts.map +1 -1
  75. package/dist/src/services/vaults/vaultMetaService/adapters/VaultTypeV3Adapter.d.ts +1 -1
  76. package/dist/src/services/vaults/vaultMetaService/adapters/VaultTypeV3Adapter.d.ts.map +1 -1
  77. package/dist/src/utils/accountComputations.d.ts +29 -0
  78. package/dist/src/utils/accountComputations.d.ts.map +1 -1
  79. package/dist/src/utils/accountComputations.js +84 -4
  80. package/dist/src/utils/accountComputations.js.map +1 -1
  81. package/dist/src/utils/accountPositionClassification.d.ts +15 -0
  82. package/dist/src/utils/accountPositionClassification.d.ts.map +1 -0
  83. package/dist/src/utils/accountPositionClassification.js +27 -0
  84. package/dist/src/utils/accountPositionClassification.js.map +1 -0
  85. package/package.json +2 -2
  86. package/dist/src/services/simulationService/index.d.ts +0 -3
  87. package/dist/src/services/simulationService/index.d.ts.map +0 -1
  88. package/dist/src/services/simulationService/index.js +0 -2
  89. package/dist/src/services/simulationService/index.js.map +0 -1
  90. package/dist/src/services/simulationService/simulationService.d.ts.map +0 -1
  91. package/dist/src/services/simulationService/simulationService.js +0 -533
  92. package/dist/src/services/simulationService/simulationService.js.map +0 -1
@@ -1,533 +0,0 @@
1
- import { decodeFunctionResult, getAddress, parseEther, } from "viem";
2
- import { estimateContractGas } from "viem/actions";
3
- import { VaultType } from "../../utils/types.js";
4
- import { isSubAccount } from "../../utils/subAccounts.js";
5
- import { decodeSmartContractErrors, } from "../../utils/decodeSmartContractErrors.js";
6
- import { getApprovalOverrides } from "../../utils/stateOverrides/approvalOverrides.js";
7
- import { getBalanceOverrides } from "../../utils/stateOverrides/balanceOverrides.js";
8
- import { mergeStateOverrides } from "../../utils/stateOverrides/mergeStateOverrides.js";
9
- import { ethereumVaultConnectorAbi } from "../executionService/abis/ethereumVaultConnectorAbi.js";
10
- import { Account, } from "../../entities/Account.js";
11
- import { EVault } from "../../entities/EVault.js";
12
- import { EulerEarn } from "../../entities/EulerEarn.js";
13
- import { AccountOnchainAdapter, getEVCAccountInfoLensBatchItem, getVaultAccountInfoLensBatchItem, } from "../accountService/adapters/accountOnchainAdapter/accountOnchainAdapter.js";
14
- import { getVaultInfoFullLensBatchItem } from "../vaults/eVaultService/adapters/eVaultOnchainAdapter/eVaultOnchainAdapter.js";
15
- import { getEulerEarnVaultInfoFullLensBatchItem } from "../vaults/eulerEarnService/adapters/eulerEarnOnchainAdapter.js";
16
- import { accountLensAbi } from "../accountService/adapters/accountOnchainAdapter/abis/accountLensAbi.js";
17
- import { vaultLensAbi } from "../vaults/eVaultService/adapters/eVaultOnchainAdapter/abis/vaultLensAbi.js";
18
- import { eulerEarnVaultLensAbi } from "../vaults/eulerEarnService/adapters/abis/eulerEarnVaultLensAbi.js";
19
- import { convertVaultInfoFullToIEVault } from "../vaults/eVaultService/adapters/eVaultOnchainAdapter/vaultInfoConverter.js";
20
- import { convertEulerEarnVaultInfoFullToIEulerEarn } from "../vaults/eulerEarnService/adapters/eulerEarnInfoConverter.js";
21
- export class SimulationService {
22
- providerService;
23
- deploymentService;
24
- vaultMetaService;
25
- executionService;
26
- priceService;
27
- rewardsService;
28
- intrinsicApyService;
29
- eulerLabelsService;
30
- walletService;
31
- accountAdapter;
32
- constructor(providerService, deploymentService, vaultMetaService, executionService, priceService, rewardsService, intrinsicApyService, eulerLabelsService, walletService) {
33
- this.providerService = providerService;
34
- this.deploymentService = deploymentService;
35
- this.vaultMetaService = vaultMetaService;
36
- this.executionService = executionService;
37
- this.priceService = priceService;
38
- this.rewardsService = rewardsService;
39
- this.intrinsicApyService = intrinsicApyService;
40
- this.eulerLabelsService = eulerLabelsService;
41
- this.walletService = walletService;
42
- const emptyPositionsAdapter = { fetchAccountVaults: async () => ({}) };
43
- this.accountAdapter = new AccountOnchainAdapter(providerService, deploymentService, emptyPositionsAdapter);
44
- }
45
- async deriveStateOverrides(chainId, account, transactionPlan, options) {
46
- const owner = getAddress(account);
47
- const nativeBalance = options?.nativeBalance ?? parseEther("1000");
48
- const permit2Address = this.deploymentService.getDeployment(chainId).addresses.coreAddrs.permit2;
49
- const provider = this.providerService.getProvider(chainId);
50
- const balanceRequirements = this.extractBalanceRequirements(transactionPlan, owner);
51
- const approvalRequirements = this.extractApprovalRequirements(transactionPlan, owner);
52
- const [balanceOverrides, approvalOverrides] = await Promise.all([
53
- getBalanceOverrides(provider, owner, balanceRequirements),
54
- getApprovalOverrides(provider, owner, approvalRequirements, permit2Address),
55
- ]);
56
- const allOverrides = [];
57
- if (nativeBalance > 0n) {
58
- allOverrides.push({ address: owner, balance: nativeBalance });
59
- }
60
- allOverrides.push(...balanceOverrides);
61
- allOverrides.push(...approvalOverrides);
62
- return mergeStateOverrides(allOverrides);
63
- }
64
- async simulateTransactionPlan(chainId, account, transactionPlan, options) {
65
- const owner = getAddress(account);
66
- const useStateOverrides = options?.stateOverrides ?? true;
67
- let effectiveStateOverrides;
68
- if (useStateOverrides) {
69
- effectiveStateOverrides = await this.deriveStateOverrides(chainId, owner, transactionPlan);
70
- }
71
- const batch = transactionPlan.flatMap((item) => item.type === "evcBatch" ? item.items : []);
72
- if (batch.length === 0) {
73
- return {
74
- simulatedAccounts: [],
75
- simulatedVaults: [],
76
- canExecute: false,
77
- };
78
- }
79
- const diagnostics = await this.fetchSimulationDiagnostics(chainId, owner, transactionPlan);
80
- const { fullBatch, lensMeta, evcAddress, totalValue } = await this.buildSimulationBatch(chainId, owner, batch);
81
- const simulationResult = await this.runSimulation(chainId, account, evcAddress, fullBatch, totalValue, effectiveStateOverrides);
82
- if ("simulationError" in simulationResult) {
83
- return {
84
- ...simulationResult,
85
- canExecute: false,
86
- ...diagnostics,
87
- };
88
- }
89
- const { batchResults, accountStatusErrors, vaultStatusErrors } = simulationResult;
90
- const rawBatchResults = batchResults.slice(0, batch.length);
91
- let describedBatch;
92
- try {
93
- describedBatch = this.executionService.describeBatch(batch);
94
- }
95
- catch {
96
- describedBatch = undefined;
97
- }
98
- const fallbackDescription = (item) => ({
99
- targetContract: item.targetContract,
100
- onBehalfOfAccount: item.onBehalfOfAccount,
101
- functionName: "Unknown",
102
- args: {},
103
- });
104
- const failedBatchItems = (await Promise.all(rawBatchResults.map(async (itemResult, index) => {
105
- if (itemResult.success)
106
- return null;
107
- const decodedError = await decodeSmartContractErrors(itemResult.result);
108
- const decodedItem = describedBatch && describedBatch.length === batch.length
109
- ? describedBatch[index]
110
- : fallbackDescription(batch[index]);
111
- return {
112
- index,
113
- item: decodedItem,
114
- error: itemResult.result,
115
- decodedError,
116
- };
117
- }))).filter((item) => item !== null);
118
- const vaultsByAddress = new Map();
119
- const evcInfos = new Map();
120
- const vaultInfosBySub = new Map();
121
- for (let i = 0; i < lensMeta.length; i++) {
122
- const meta = lensMeta[i];
123
- const resultItem = batchResults[batch.length + i];
124
- if (!resultItem?.success)
125
- continue;
126
- if (meta.kind === "eVault") {
127
- const decodedVault = decodeFunctionResult({
128
- abi: vaultLensAbi,
129
- functionName: "getVaultInfoFull",
130
- data: resultItem.result,
131
- });
132
- const entity = new EVault(convertVaultInfoFullToIEVault(decodedVault, chainId, []));
133
- vaultsByAddress.set(getAddress(meta.vault), entity);
134
- }
135
- if (meta.kind === "eulerEarn") {
136
- const decodedVault = decodeFunctionResult({
137
- abi: eulerEarnVaultLensAbi,
138
- functionName: "getVaultInfoFull",
139
- data: resultItem.result,
140
- });
141
- const entity = new EulerEarn(convertEulerEarnVaultInfoFullToIEulerEarn(decodedVault, chainId, []));
142
- vaultsByAddress.set(getAddress(meta.vault), entity);
143
- }
144
- if (meta.kind === "evcAccount") {
145
- const decodedAccount = decodeFunctionResult({
146
- abi: accountLensAbi,
147
- functionName: "getEVCAccountInfo",
148
- data: resultItem.result,
149
- });
150
- evcInfos.set(getAddress(meta.subAccount), decodedAccount);
151
- }
152
- if (meta.kind === "vaultAccount") {
153
- const decodedVaultInfo = decodeFunctionResult({
154
- abi: accountLensAbi,
155
- functionName: "getVaultAccountInfo",
156
- data: resultItem.result,
157
- });
158
- const key = getAddress(meta.subAccount);
159
- const list = vaultInfosBySub.get(key) ?? [];
160
- list.push(decodedVaultInfo);
161
- vaultInfosBySub.set(key, list);
162
- }
163
- }
164
- const simulatedVaults = Array.from(vaultsByAddress.values());
165
- const vaultFetchOptions = options?.vaultFetchOptions ??
166
- options?.accountFetchOptions?.vaultFetchOptions;
167
- const shouldPopulateVaultMarketPrices = vaultFetchOptions?.populateMarketPrices ?? true;
168
- if (vaultFetchOptions?.populateCollaterals) {
169
- await Promise.all(simulatedVaults.map(async (vault) => {
170
- if (vault instanceof EVault) {
171
- await vault.populateCollaterals(this.vaultMetaService);
172
- }
173
- }));
174
- }
175
- if (shouldPopulateVaultMarketPrices && this.priceService) {
176
- await Promise.all(simulatedVaults.map(async (vault) => {
177
- if (typeof vault.populateMarketPrices === "function") {
178
- await vault.populateMarketPrices(this.priceService);
179
- }
180
- }));
181
- }
182
- if (vaultFetchOptions?.populateRewards && this.rewardsService) {
183
- await this.rewardsService.populateRewards(simulatedVaults);
184
- }
185
- if (vaultFetchOptions?.populateIntrinsicApy && this.intrinsicApyService) {
186
- await this.intrinsicApyService.populateIntrinsicApy(simulatedVaults);
187
- }
188
- if (vaultFetchOptions?.populateLabels && this.eulerLabelsService) {
189
- await this.eulerLabelsService.populateLabels(simulatedVaults);
190
- }
191
- const builtSubAccounts = [];
192
- for (const [subAccount, evcInfo] of evcInfos.entries()) {
193
- const vaultInfos = vaultInfosBySub.get(subAccount) ?? [];
194
- const built = this.accountAdapter.buildSubAccount(evcInfo, vaultInfos, []);
195
- const { isLockdownMode: _lm, isPermitDisabledMode: _pm, ...subAccountData } = built;
196
- builtSubAccounts.push(subAccountData);
197
- }
198
- const mainEvc = evcInfos.get(owner);
199
- const accountData = this.accountAdapter.buildAccount(chainId, owner, builtSubAccounts, mainEvc?.enabledCollaterals ?? [], mainEvc?.enabledControllers ?? [], mainEvc?.isLockdownMode ?? false, mainEvc?.isPermitDisabledMode ?? false);
200
- const simulatedAccount = new Account(accountData);
201
- const populatedAccount = simulatedAccount.mapVaultsToPositions(simulatedVaults);
202
- const accountFetchOptions = options?.accountFetchOptions;
203
- const shouldPopulateAccountMarketPrices = accountFetchOptions?.populateMarketPrices ?? true;
204
- if (shouldPopulateAccountMarketPrices && this.priceService) {
205
- await populatedAccount.populateMarketPrices(this.priceService);
206
- }
207
- if (accountFetchOptions?.populateUserRewards && this.rewardsService) {
208
- await populatedAccount.populateUserRewards(this.rewardsService);
209
- }
210
- const result = {
211
- simulatedAccounts: [populatedAccount],
212
- simulatedVaults,
213
- canExecute: failedBatchItems.length === 0 &&
214
- accountStatusErrors.length === 0 &&
215
- vaultStatusErrors.length === 0 &&
216
- !diagnostics.insufficientWalletAssets?.length &&
217
- !diagnostics.insufficientPermit2Allowances?.length &&
218
- !diagnostics.insufficientDirectAllowances?.length,
219
- rawBatchResults,
220
- failedBatchItems: failedBatchItems.length > 0 ? failedBatchItems : undefined,
221
- accountStatusErrors: accountStatusErrors.length > 0 ? accountStatusErrors : undefined,
222
- vaultStatusErrors: vaultStatusErrors.length > 0 ? vaultStatusErrors : undefined,
223
- ...diagnostics,
224
- };
225
- return result;
226
- }
227
- async estimateGasForTransactionPlan(chainId, account, transactionPlan, options) {
228
- const owner = getAddress(account);
229
- const useStateOverrides = options?.stateOverrides ?? true;
230
- const stateOverride = useStateOverrides
231
- ? await this.deriveStateOverrides(chainId, owner, transactionPlan, options?.stateOverrideOptions)
232
- : undefined;
233
- const provider = this.providerService.getProvider(chainId);
234
- const evcAddress = this.deploymentService.getDeployment(chainId).addresses.coreAddrs.evc;
235
- let totalGas = 0n;
236
- for (const item of transactionPlan) {
237
- if (item.type === "requiredApproval")
238
- continue;
239
- if (item.type === "evcBatch") {
240
- const value = item.items.reduce((sum, batchItem) => sum + batchItem.value, 0n);
241
- totalGas += await estimateContractGas(provider, {
242
- account: owner,
243
- address: evcAddress,
244
- abi: ethereumVaultConnectorAbi,
245
- functionName: "batch",
246
- args: [item.items],
247
- value,
248
- stateOverride,
249
- });
250
- continue;
251
- }
252
- if (item.chainId !== chainId) {
253
- throw new Error(`Cannot estimate transaction plan item for chain ${item.chainId} with provider for chain ${chainId}`);
254
- }
255
- totalGas += await estimateContractGas(provider, {
256
- account: owner,
257
- address: item.to,
258
- abi: item.abi,
259
- functionName: item.functionName,
260
- args: item.args,
261
- value: item.value,
262
- stateOverride,
263
- });
264
- }
265
- return totalGas;
266
- }
267
- async buildSimulationBatch(chainId, owner, batch) {
268
- const { candidateVaults, subAccountVaults } = this.collectCandidateVaults(owner, batch);
269
- const vaultCandidatesList = Array.from(candidateVaults);
270
- const vaultTypes = await this.vaultMetaService.fetchVaultTypes(chainId, vaultCandidatesList);
271
- const validVaults = new Set();
272
- const eVaults = [];
273
- const eulerEarnVaults = [];
274
- for (const vault of vaultCandidatesList) {
275
- const key = getAddress(vault);
276
- const type = vaultTypes[key];
277
- if (!type)
278
- continue;
279
- if (type === VaultType.SecuritizeCollateral)
280
- continue;
281
- validVaults.add(key);
282
- if (type === VaultType.EVault)
283
- eVaults.push(key);
284
- if (type === VaultType.EulerEarn)
285
- eulerEarnVaults.push(key);
286
- }
287
- const deployment = this.deploymentService.getDeployment(chainId);
288
- const accountLensAddress = deployment.addresses.lensAddrs.accountLens;
289
- const vaultLensAddress = deployment.addresses.lensAddrs.vaultLens;
290
- const eulerEarnLensAddress = deployment.addresses.lensAddrs.eulerEarnVaultLens;
291
- const evcAddress = deployment.addresses.coreAddrs.evc;
292
- const lensItems = [];
293
- const lensMeta = [];
294
- const pushLensItem = (item, meta) => {
295
- lensItems.push(item);
296
- lensMeta.push(meta);
297
- };
298
- for (const vault of eVaults) {
299
- pushLensItem(getVaultInfoFullLensBatchItem(vaultLensAddress, vault, owner), {
300
- kind: "eVault",
301
- vault,
302
- });
303
- }
304
- for (const vault of eulerEarnVaults) {
305
- pushLensItem(getEulerEarnVaultInfoFullLensBatchItem(eulerEarnLensAddress, vault, owner), {
306
- kind: "eulerEarn",
307
- vault,
308
- });
309
- }
310
- for (const [subAccount, vaults] of subAccountVaults.entries()) {
311
- pushLensItem(getEVCAccountInfoLensBatchItem(accountLensAddress, evcAddress, subAccount, owner), {
312
- kind: "evcAccount",
313
- subAccount,
314
- });
315
- for (const vault of vaults) {
316
- if (!validVaults.has(getAddress(vault)))
317
- continue;
318
- pushLensItem(getVaultAccountInfoLensBatchItem(accountLensAddress, subAccount, vault, owner), {
319
- kind: "vaultAccount",
320
- subAccount,
321
- vault,
322
- });
323
- }
324
- }
325
- const fullBatch = [...batch, ...lensItems];
326
- const totalValue = fullBatch.reduce((sum, item) => sum + item.value, 0n);
327
- return { fullBatch, lensMeta, evcAddress, totalValue };
328
- }
329
- collectCandidateVaults(owner, batch) {
330
- const candidateVaults = new Set();
331
- const subAccountVaults = new Map();
332
- const addCandidateVault = (vault) => {
333
- candidateVaults.add(getAddress(vault));
334
- };
335
- const addSubAccountVault = (subAccount, vault) => {
336
- const key = getAddress(subAccount);
337
- if (!isSubAccount(owner, key))
338
- return;
339
- const set = subAccountVaults.get(key) ?? new Set();
340
- set.add(getAddress(vault));
341
- subAccountVaults.set(key, set);
342
- };
343
- for (const item of batch) {
344
- addCandidateVault(item.targetContract);
345
- addSubAccountVault(item.onBehalfOfAccount, item.targetContract);
346
- }
347
- const described = this.executionService.describeBatch(batch);
348
- for (const item of described) {
349
- const fn = item.functionName.toLowerCase();
350
- const target = getAddress(item.targetContract);
351
- if (fn === "transfer" || fn === "transferfrom") {
352
- const to = item.args.to;
353
- const from = fn === "transferfrom"
354
- ? item.args.from
355
- : (item.args.from ??
356
- item.onBehalfOfAccount);
357
- if (from)
358
- addSubAccountVault(from, target);
359
- if (to)
360
- addSubAccountVault(to, target);
361
- addCandidateVault(target);
362
- continue;
363
- }
364
- if (fn === "deposit" || fn === "skim" || fn === "mint") {
365
- const receiver = item.args.receiver;
366
- if (receiver)
367
- addSubAccountVault(receiver, target);
368
- addCandidateVault(target);
369
- }
370
- }
371
- if (!subAccountVaults.has(owner)) {
372
- subAccountVaults.set(owner, new Set());
373
- }
374
- return { candidateVaults, subAccountVaults };
375
- }
376
- async runSimulation(chainId, account, evcAddress, fullBatch, totalValue, stateOverrides) {
377
- const provider = this.providerService.getProvider(chainId);
378
- let decodedResult;
379
- try {
380
- const { result } = await provider.simulateContract({
381
- address: evcAddress,
382
- abi: ethereumVaultConnectorAbi,
383
- functionName: "batchSimulation",
384
- args: [fullBatch],
385
- value: totalValue,
386
- account,
387
- stateOverride: stateOverrides,
388
- });
389
- decodedResult = result;
390
- }
391
- catch (error) {
392
- const decoded = await decodeSmartContractErrors(error);
393
- return {
394
- simulatedAccounts: [],
395
- simulatedVaults: [],
396
- simulationError: { error, decoded },
397
- };
398
- }
399
- if (!decodedResult) {
400
- return {
401
- batchResults: [],
402
- accountStatusErrors: [],
403
- vaultStatusErrors: [],
404
- };
405
- }
406
- const decoded = decodedResult;
407
- const batchResults = decoded[0];
408
- const accountChecks = decoded[1] ?? [];
409
- const vaultChecks = decoded[2] ?? [];
410
- const accountStatusErrors = await Promise.all(accountChecks
411
- .filter((check) => !check.isValid)
412
- .map(async (check) => ({
413
- account: getAddress(check.checkedAddress),
414
- error: check.result,
415
- decoded: await decodeSmartContractErrors(check.result),
416
- })));
417
- const vaultStatusErrors = await Promise.all(vaultChecks
418
- .filter((check) => !check.isValid)
419
- .map(async (check) => ({
420
- vault: getAddress(check.checkedAddress),
421
- error: check.result,
422
- decoded: await decodeSmartContractErrors(check.result),
423
- })));
424
- return { batchResults, accountStatusErrors, vaultStatusErrors };
425
- }
426
- async fetchSimulationDiagnostics(chainId, account, transactionPlan) {
427
- if (!this.walletService || !transactionPlan)
428
- return {};
429
- const requiredApprovals = transactionPlan.filter((item) => item.type === "requiredApproval" &&
430
- getAddress(item.owner) === getAddress(account));
431
- if (requiredApprovals.length === 0)
432
- return {};
433
- const assetSpendersMap = new Map();
434
- for (const approval of requiredApprovals) {
435
- const token = getAddress(approval.token);
436
- const spender = getAddress(approval.spender);
437
- if (!assetSpendersMap.has(token))
438
- assetSpendersMap.set(token, new Set());
439
- assetSpendersMap.get(token).add(spender);
440
- }
441
- const assetsWithSpenders = Array.from(assetSpendersMap.entries()).map(([asset, spenders]) => ({
442
- asset,
443
- spenders: Array.from(spenders),
444
- }));
445
- let wallet;
446
- try {
447
- wallet = (await this.walletService.fetchWallet(chainId, account, assetsWithSpenders)).result;
448
- }
449
- catch {
450
- return {};
451
- }
452
- const walletByToken = new Map();
453
- const directByToken = new Map();
454
- const permit2ByToken = new Map();
455
- const now = Math.floor(Date.now() / 1000);
456
- for (const approval of requiredApprovals) {
457
- const token = getAddress(approval.token);
458
- const spender = getAddress(approval.spender);
459
- const amount = approval.amount;
460
- const walletAsset = wallet.getAsset(token);
461
- const allowances = walletAsset?.allowances[spender];
462
- const balance = walletAsset?.balance ?? 0n;
463
- if (balance < amount) {
464
- const deficit = amount - balance;
465
- const prev = walletByToken.get(token) ?? 0n;
466
- if (deficit > prev)
467
- walletByToken.set(token, deficit);
468
- }
469
- const directAllowance = allowances?.assetForPermit2 ?? 0n;
470
- if (directAllowance < amount) {
471
- const deficit = amount - directAllowance;
472
- const prev = directByToken.get(token) ?? 0n;
473
- if (deficit > prev)
474
- directByToken.set(token, deficit);
475
- }
476
- const permit2Allowance = allowances?.assetForVaultInPermit2 ?? 0n;
477
- const permit2ExpirationTime = allowances?.permit2ExpirationTime ?? 0;
478
- const permit2Expired = permit2ExpirationTime > 0 && now >= permit2ExpirationTime;
479
- if (permit2Allowance < amount || permit2Expired) {
480
- const deficit = permit2Expired ? amount : amount - permit2Allowance;
481
- const prev = permit2ByToken.get(token) ?? 0n;
482
- if (deficit > prev)
483
- permit2ByToken.set(token, deficit);
484
- }
485
- }
486
- const mapToArray = (map) => Array.from(map.entries()).map(([token, amount]) => ({ token, amount }));
487
- return {
488
- ...(walletByToken.size > 0
489
- ? { insufficientWalletAssets: mapToArray(walletByToken) }
490
- : {}),
491
- ...(directByToken.size > 0
492
- ? { insufficientDirectAllowances: mapToArray(directByToken) }
493
- : {}),
494
- ...(permit2ByToken.size > 0
495
- ? { insufficientPermit2Allowances: mapToArray(permit2ByToken) }
496
- : {}),
497
- };
498
- }
499
- extractBalanceRequirements(transactionPlan, account) {
500
- const maxPerToken = new Map();
501
- for (const item of transactionPlan) {
502
- if (item.type !== "requiredApproval")
503
- continue;
504
- if (getAddress(item.owner) !== getAddress(account))
505
- continue;
506
- const token = getAddress(item.token);
507
- const current = maxPerToken.get(token) ?? 0n;
508
- if (item.amount > current) {
509
- maxPerToken.set(token, item.amount);
510
- }
511
- }
512
- return Array.from(maxPerToken.entries());
513
- }
514
- extractApprovalRequirements(transactionPlan, account) {
515
- const seen = new Set();
516
- const approvals = [];
517
- for (const item of transactionPlan) {
518
- if (item.type !== "requiredApproval")
519
- continue;
520
- if (getAddress(item.owner) !== getAddress(account))
521
- continue;
522
- const asset = getAddress(item.token);
523
- const spender = getAddress(item.spender);
524
- const key = `${asset}:${spender}`;
525
- if (seen.has(key))
526
- continue;
527
- seen.add(key);
528
- approvals.push([asset, spender]);
529
- }
530
- return approvals;
531
- }
532
- }
533
- //# sourceMappingURL=simulationService.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"simulationService.js","sourceRoot":"","sources":["../../../../src/services/simulationService/simulationService.ts"],"names":[],"mappings":"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"}