@eulerxyz/euler-v2-sdk 1.1.1 → 1.1.2

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 (94) hide show
  1. package/dist/src/index.d.ts +1 -0
  2. package/dist/src/index.d.ts.map +1 -1
  3. package/dist/src/index.js +1 -0
  4. package/dist/src/index.js.map +1 -1
  5. package/dist/src/sdk/buildSDK.d.ts +8 -0
  6. package/dist/src/sdk/buildSDK.d.ts.map +1 -1
  7. package/dist/src/sdk/buildSDK.js +20 -1
  8. package/dist/src/sdk/buildSDK.js.map +1 -1
  9. package/dist/src/sdk/sdk.d.ts +3 -0
  10. package/dist/src/sdk/sdk.d.ts.map +1 -1
  11. package/dist/src/sdk/sdk.js +2 -0
  12. package/dist/src/sdk/sdk.js.map +1 -1
  13. package/dist/src/services/executionService/abis/swapVerifierAbi.d.ts +130 -0
  14. package/dist/src/services/executionService/abis/swapVerifierAbi.d.ts.map +1 -1
  15. package/dist/src/services/executionService/abis/swapVerifierAbi.js +69 -0
  16. package/dist/src/services/executionService/abis/swapVerifierAbi.js.map +1 -1
  17. package/dist/src/services/executionService/executionService.d.ts +2 -1
  18. package/dist/src/services/executionService/executionService.d.ts.map +1 -1
  19. package/dist/src/services/executionService/executionService.js.map +1 -1
  20. package/dist/src/services/executionService/simulate.d.ts +2 -0
  21. package/dist/src/services/executionService/simulate.d.ts.map +1 -1
  22. package/dist/src/services/executionService/simulate.js +9 -1
  23. package/dist/src/services/executionService/simulate.js.map +1 -1
  24. package/dist/src/services/positionMigrationService/connectors/aave/aaveConnector.d.ts +81 -0
  25. package/dist/src/services/positionMigrationService/connectors/aave/aaveConnector.d.ts.map +1 -0
  26. package/dist/src/services/positionMigrationService/connectors/aave/aaveConnector.js +1291 -0
  27. package/dist/src/services/positionMigrationService/connectors/aave/aaveConnector.js.map +1 -0
  28. package/dist/src/services/positionMigrationService/connectors/aave/aaveConnectorTypes.d.ts +84 -0
  29. package/dist/src/services/positionMigrationService/connectors/aave/aaveConnectorTypes.d.ts.map +1 -0
  30. package/dist/src/services/positionMigrationService/connectors/aave/aaveConnectorTypes.js +2 -0
  31. package/dist/src/services/positionMigrationService/connectors/aave/aaveConnectorTypes.js.map +1 -0
  32. package/dist/src/services/positionMigrationService/connectors/aave/abis/aaveV3Abi.d.ts +370 -0
  33. package/dist/src/services/positionMigrationService/connectors/aave/abis/aaveV3Abi.d.ts.map +1 -0
  34. package/dist/src/services/positionMigrationService/connectors/aave/abis/aaveV3Abi.js +243 -0
  35. package/dist/src/services/positionMigrationService/connectors/aave/abis/aaveV3Abi.js.map +1 -0
  36. package/dist/src/services/positionMigrationService/connectors/aave/index.d.ts +4 -0
  37. package/dist/src/services/positionMigrationService/connectors/aave/index.d.ts.map +1 -0
  38. package/dist/src/services/positionMigrationService/connectors/aave/index.js +3 -0
  39. package/dist/src/services/positionMigrationService/connectors/aave/index.js.map +1 -0
  40. package/dist/src/services/positionMigrationService/connectors/index.d.ts +4 -0
  41. package/dist/src/services/positionMigrationService/connectors/index.d.ts.map +1 -0
  42. package/dist/src/services/positionMigrationService/connectors/index.js +4 -0
  43. package/dist/src/services/positionMigrationService/connectors/index.js.map +1 -0
  44. package/dist/src/services/positionMigrationService/connectors/metamorpho/abis/metamorphoAbi.d.ts +166 -0
  45. package/dist/src/services/positionMigrationService/connectors/metamorpho/abis/metamorphoAbi.d.ts.map +1 -0
  46. package/dist/src/services/positionMigrationService/connectors/metamorpho/abis/metamorphoAbi.js +108 -0
  47. package/dist/src/services/positionMigrationService/connectors/metamorpho/abis/metamorphoAbi.js.map +1 -0
  48. package/dist/src/services/positionMigrationService/connectors/metamorpho/index.d.ts +4 -0
  49. package/dist/src/services/positionMigrationService/connectors/metamorpho/index.d.ts.map +1 -0
  50. package/dist/src/services/positionMigrationService/connectors/metamorpho/index.js +3 -0
  51. package/dist/src/services/positionMigrationService/connectors/metamorpho/index.js.map +1 -0
  52. package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnector.d.ts +56 -0
  53. package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnector.d.ts.map +1 -0
  54. package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnector.js +426 -0
  55. package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnector.js.map +1 -0
  56. package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnectorTypes.d.ts +46 -0
  57. package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnectorTypes.d.ts.map +1 -0
  58. package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnectorTypes.js +2 -0
  59. package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnectorTypes.js.map +1 -0
  60. package/dist/src/services/positionMigrationService/connectors/morpho/abis/morphoBlueAbi.d.ts +269 -0
  61. package/dist/src/services/positionMigrationService/connectors/morpho/abis/morphoBlueAbi.d.ts.map +1 -0
  62. package/dist/src/services/positionMigrationService/connectors/morpho/abis/morphoBlueAbi.js +172 -0
  63. package/dist/src/services/positionMigrationService/connectors/morpho/abis/morphoBlueAbi.js.map +1 -0
  64. package/dist/src/services/positionMigrationService/connectors/morpho/index.d.ts +4 -0
  65. package/dist/src/services/positionMigrationService/connectors/morpho/index.d.ts.map +1 -0
  66. package/dist/src/services/positionMigrationService/connectors/morpho/index.js +3 -0
  67. package/dist/src/services/positionMigrationService/connectors/morpho/index.js.map +1 -0
  68. package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnector.d.ts +57 -0
  69. package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnector.d.ts.map +1 -0
  70. package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnector.js +856 -0
  71. package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnector.js.map +1 -0
  72. package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnectorTypes.d.ts +61 -0
  73. package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnectorTypes.d.ts.map +1 -0
  74. package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnectorTypes.js +2 -0
  75. package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnectorTypes.js.map +1 -0
  76. package/dist/src/services/positionMigrationService/connectors/shared.d.ts +83 -0
  77. package/dist/src/services/positionMigrationService/connectors/shared.d.ts.map +1 -0
  78. package/dist/src/services/positionMigrationService/connectors/shared.js +214 -0
  79. package/dist/src/services/positionMigrationService/connectors/shared.js.map +1 -0
  80. package/dist/src/services/positionMigrationService/index.d.ts +4 -0
  81. package/dist/src/services/positionMigrationService/index.d.ts.map +1 -0
  82. package/dist/src/services/positionMigrationService/index.js +3 -0
  83. package/dist/src/services/positionMigrationService/index.js.map +1 -0
  84. package/dist/src/services/positionMigrationService/positionMigrationService.d.ts +30 -0
  85. package/dist/src/services/positionMigrationService/positionMigrationService.d.ts.map +1 -0
  86. package/dist/src/services/positionMigrationService/positionMigrationService.js +420 -0
  87. package/dist/src/services/positionMigrationService/positionMigrationService.js.map +1 -0
  88. package/dist/src/services/positionMigrationService/positionMigrationServiceTypes.d.ts +235 -0
  89. package/dist/src/services/positionMigrationService/positionMigrationServiceTypes.d.ts.map +1 -0
  90. package/dist/src/services/positionMigrationService/positionMigrationServiceTypes.js +2 -0
  91. package/dist/src/services/positionMigrationService/positionMigrationServiceTypes.js.map +1 -0
  92. package/dist/src/services/swapService/swapVerification.d.ts +1 -1
  93. package/dist/src/services/swapService/swapVerification.d.ts.map +1 -1
  94. package/package.json +1 -1
@@ -0,0 +1,420 @@
1
+ import { getAddress, maxUint256, toHex, } from "viem";
2
+ import { eVaultAbi, } from "../executionService/index.js";
3
+ import { isEVault } from "../vaults/vaultMetaService/index.js";
4
+ import { applyBuildQuery } from "../../utils/buildQuery.js";
5
+ import { computeAllowanceSlot } from "../../utils/stateOverrides/index.js";
6
+ import { assertSameAddress } from "./connectors/shared.js";
7
+ const DEFAULT_OPERATION_NAME = "positionMigration";
8
+ const ENABLED_MIGRATIONS = new Set([
9
+ "aave:external-to-euler",
10
+ "aave:euler-to-external",
11
+ "morpho:external-to-euler",
12
+ "morpho:euler-to-external",
13
+ "metamorpho:external-to-euler",
14
+ ]);
15
+ const AAVE_CONNECTOR_ID = "aave";
16
+ const MORPHO_CONNECTOR_ID = "morpho";
17
+ const METAMORPHO_CONNECTOR_ID = "metamorpho";
18
+ const AAVE_ATOKEN_ALLOWANCE_SLOT_INDEX = 53n;
19
+ const AAVE_VARIABLE_DEBT_ALLOWANCE_SLOT_INDEX = 54n;
20
+ const MORPHO_AUTHORIZATION_SLOT_INDEX = 6n;
21
+ const METAMORPHO_DEFAULT_ALLOWANCE_SLOT_INDEX = 1n;
22
+ const AAVE_PERMIT_SELECTOR = "0xd505accf";
23
+ const AAVE_DELEGATION_SELECTOR = "0x0b52d558";
24
+ const MORPHO_SET_AUTHORIZATION_SELECTOR = "0x8069218f";
25
+ const ERC2612_PERMIT_SELECTOR = "0xd505accf";
26
+ const STUB_SIGNATURE = `0x${"00".repeat(65)}`;
27
+ function assertPositionMigrationEnabled(args) {
28
+ if (ENABLED_MIGRATIONS.has(`${args.connectorId}:${args.direction}`))
29
+ return;
30
+ throw new Error(`External position migration is temporarily disabled for connector ${args.connectorId} in ${args.direction} direction`);
31
+ }
32
+ export class PositionMigrationService {
33
+ providerService;
34
+ executionService;
35
+ connectors = new Map();
36
+ constructor(providerService, executionService, config, buildQuery) {
37
+ this.providerService = providerService;
38
+ this.executionService = executionService;
39
+ for (const connector of config?.connectors ?? []) {
40
+ this.registerConnector(connector);
41
+ }
42
+ if (buildQuery)
43
+ applyBuildQuery(this, buildQuery);
44
+ }
45
+ getConnectors() {
46
+ return Array.from(this.connectors.values()).map(({ id, protocol, name }) => ({
47
+ id,
48
+ protocol,
49
+ name,
50
+ }));
51
+ }
52
+ registerConnector(connector) {
53
+ this.connectors.set(connector.id, connector);
54
+ }
55
+ getConnector(connectorId) {
56
+ const connector = this.connectors.get(connectorId);
57
+ if (!connector) {
58
+ throw new Error(`Position migration connector not registered: ${connectorId}`);
59
+ }
60
+ return connector;
61
+ }
62
+ getConnectorProtocolAddress(connectorId, chainId) {
63
+ return this.getConnector(connectorId).getProtocolAddress?.(chainId);
64
+ }
65
+ async listPositions(args) {
66
+ const connectors = args.connectorId
67
+ ? [this.getConnector(args.connectorId)]
68
+ : Array.from(this.connectors.values());
69
+ const results = await Promise.all(connectors.map((connector) => connector.listPositions
70
+ ? connector.listPositions(args)
71
+ : Promise.resolve([])));
72
+ return results.flat();
73
+ }
74
+ async listTargets(args) {
75
+ const direction = args.direction ?? "euler-to-external";
76
+ if (args.connectorId) {
77
+ assertPositionMigrationEnabled({
78
+ connectorId: args.connectorId,
79
+ direction,
80
+ });
81
+ const connector = this.getConnector(args.connectorId);
82
+ return connector.listTargets
83
+ ? connector.listTargets({ ...args, direction })
84
+ : [];
85
+ }
86
+ const connectors = Array.from(this.connectors.values()).filter((connector) => ENABLED_MIGRATIONS.has(`${connector.id}:${direction}`));
87
+ const results = await Promise.allSettled(connectors.map((connector) => connector.listTargets
88
+ ? connector.listTargets({ ...args, direction })
89
+ : Promise.resolve([])));
90
+ const targets = results.flatMap((result) => result.status === "fulfilled" ? result.value : []);
91
+ if (targets.length > 0)
92
+ return targets;
93
+ const failures = results.filter((result) => result.status === "rejected");
94
+ const firstFailure = failures[0];
95
+ if (firstFailure && failures.length === results.length) {
96
+ throw firstFailure.reason;
97
+ }
98
+ return targets;
99
+ }
100
+ async getPosition(args) {
101
+ return this.getConnector(args.connectorId).getPosition(args);
102
+ }
103
+ async getAuthorization(args) {
104
+ assertPositionMigrationEnabled(args);
105
+ const connector = this.getConnector(args.connectorId);
106
+ if (!connector.getAuthorization)
107
+ return undefined;
108
+ const position = await this.resolvePosition(args);
109
+ return connector.getAuthorization({ ...args, position });
110
+ }
111
+ async buildMigrationBatch(args) {
112
+ assertPositionMigrationEnabled(args);
113
+ const connector = this.getConnector(args.connectorId);
114
+ const position = await this.resolvePosition(args);
115
+ return this.buildMigrationBatchForConnector(args, connector, position);
116
+ }
117
+ async planMigration(args) {
118
+ const items = await this.buildMigrationBatch(args);
119
+ return this.executionService.convertBatchItemsToPlan(items, args.operationName ?? DEFAULT_OPERATION_NAME);
120
+ }
121
+ async planMigrationSimulation(args) {
122
+ assertPositionMigrationEnabled(args);
123
+ const connector = this.getConnector(args.connectorId);
124
+ const position = await this.resolvePosition(args);
125
+ const authorizationRequest = args.authorization?.request ??
126
+ args.authorizationRequest ??
127
+ (connector.getAuthorization
128
+ ? await connector.getAuthorization({ ...args, position })
129
+ : undefined);
130
+ const simulationAuthorization = authorizationRequest
131
+ ? this.getSimulationAuthorization(authorizationRequest)
132
+ : undefined;
133
+ const items = await this.buildMigrationBatchForConnector({
134
+ ...args,
135
+ authorization: simulationAuthorization?.authorization ??
136
+ args.authorization ??
137
+ (authorizationRequest
138
+ ? this.getStubAuthorization(authorizationRequest)
139
+ : undefined),
140
+ ...(simulationAuthorization ? { skipAuthorizationCheck: true } : {}),
141
+ }, connector, position);
142
+ const simulationItems = simulationAuthorization?.skippedCall
143
+ ? items.filter((item) => !isAuthorizationItem(item, simulationAuthorization.skippedCall))
144
+ : items;
145
+ const operationName = args.operationName ?? DEFAULT_OPERATION_NAME;
146
+ return {
147
+ plan: this.executionService.convertBatchItemsToPlan(simulationItems, operationName),
148
+ stateOverrides: simulationAuthorization?.stateOverrides ?? [],
149
+ // The unfiltered items already carry stub-signed (or caller-signed)
150
+ // authorization calls — exactly what a calldata preview built via
151
+ // `planMigration` with a placeholder authorization would contain.
152
+ // Reusing them avoids a second position-resolve/validate/batch-build.
153
+ previewPlan: this.executionService.convertBatchItemsToPlan(items, operationName),
154
+ ...(authorizationRequest ? { authorizationRequest } : {}),
155
+ };
156
+ }
157
+ async buildMigrationBatchForConnector(args, connector, position) {
158
+ if (args.validateEulerVaults ?? true) {
159
+ if (args.direction === "external-to-euler") {
160
+ if (!args.target) {
161
+ throw new Error("Euler migration target is required");
162
+ }
163
+ await this.validateEulerTargets(position, {
164
+ ...args.target,
165
+ collateralSwapQuote: args.collateralSwapQuote,
166
+ debtSwapQuote: args.debtSwapQuote,
167
+ });
168
+ }
169
+ else if (args.direction === "euler-to-external") {
170
+ if (!args.source) {
171
+ throw new Error("Euler migration source is required");
172
+ }
173
+ await this.validateEulerSource(position, args.source);
174
+ }
175
+ else {
176
+ throw new Error(`Unsupported migration direction: ${args.direction}`);
177
+ }
178
+ }
179
+ const items = await connector.buildMigrationBatch({ ...args, position });
180
+ return [...items, ...this.buildOutgoingEulerCleanupItems(args)];
181
+ }
182
+ buildOutgoingEulerCleanupItems(args) {
183
+ if (args.direction !== "euler-to-external" || !args.source)
184
+ return [];
185
+ const sourceAccount = getAddress(args.source.eulerAccount);
186
+ const sourceBorrowVault = getAddress(args.source.borrowVault);
187
+ const sourceCollateralVault = getAddress(args.source.collateralVault);
188
+ const owner = getAddress(args.owner);
189
+ const items = [];
190
+ const seenCollaterals = new Set([
191
+ sourceCollateralVault.toLowerCase(),
192
+ ]);
193
+ if (args.cleanupEulerPosition) {
194
+ const account = args.account;
195
+ if (!account) {
196
+ throw new Error("cleanupEulerPosition requires an account snapshot");
197
+ }
198
+ const subAccount = account.getSubAccount(sourceAccount);
199
+ if (!subAccount) {
200
+ throw new Error("cleanupEulerPosition requires the source sub-account snapshot");
201
+ }
202
+ for (const collateral of subAccount.enabledCollaterals ?? []) {
203
+ const collateralVault = getAddress(collateral);
204
+ const collateralKey = collateralVault.toLowerCase();
205
+ if (seenCollaterals.has(collateralKey))
206
+ continue;
207
+ seenCollaterals.add(collateralKey);
208
+ items.push(this.executionService.encodeDisableCollateral(args.chainId, sourceAccount, collateralVault));
209
+ const collateralPosition = subAccount.positions.find((position) => getAddress(position.vaultAddress) === collateralVault);
210
+ if (collateralPosition &&
211
+ collateralPosition.shares > 0n &&
212
+ isEVault(collateralPosition.vault) &&
213
+ sourceAccount !== owner) {
214
+ items.push(this.executionService.encodeTransferFromMax(collateralVault, sourceAccount, owner));
215
+ }
216
+ }
217
+ }
218
+ items.push(this.executionService.encodeDisableController(sourceBorrowVault, sourceAccount));
219
+ return items;
220
+ }
221
+ async resolvePosition(args) {
222
+ if (args.position)
223
+ return args.position;
224
+ if (args.positionRef === undefined) {
225
+ throw new Error("Migration position or positionRef is required to resolve a source position");
226
+ }
227
+ return this.getPosition({
228
+ connectorId: args.connectorId,
229
+ chainId: args.chainId,
230
+ owner: args.owner,
231
+ positionRef: args.positionRef,
232
+ });
233
+ }
234
+ getStubAuthorization(request) {
235
+ const postMigrationAuthorization = request.postMigrationAuthorization
236
+ ? this.getStubAuthorization(request.postMigrationAuthorization)
237
+ : undefined;
238
+ return {
239
+ request,
240
+ signature: STUB_SIGNATURE,
241
+ ...(postMigrationAuthorization ? { postMigrationAuthorization } : {}),
242
+ };
243
+ }
244
+ getSimulationAuthorization(request) {
245
+ const message = request.kind === "typedData" ? request.typedData.message : {};
246
+ if (request.kind !== "typedData")
247
+ return undefined;
248
+ if (request.connectorId === AAVE_CONNECTOR_ID &&
249
+ request.authorizationType ===
250
+ "aTokenPermit" &&
251
+ "token" in request &&
252
+ "owner" in message &&
253
+ "spender" in message) {
254
+ const token = getAddress(request.token);
255
+ const owner = getAddress(message.owner);
256
+ const spender = getAddress(message.spender);
257
+ const slot = computeAllowanceSlot(owner, spender, AAVE_ATOKEN_ALLOWANCE_SLOT_INDEX);
258
+ return {
259
+ authorization: this.getStubAuthorization(request),
260
+ stateOverrides: [
261
+ {
262
+ address: token,
263
+ stateDiff: [{ slot, value: toHex(maxUint256, { size: 32 }) }],
264
+ },
265
+ ],
266
+ skippedCall: { target: token, selector: AAVE_PERMIT_SELECTOR },
267
+ };
268
+ }
269
+ if (request.connectorId === AAVE_CONNECTOR_ID &&
270
+ request.authorizationType ===
271
+ "variableDebtDelegation" &&
272
+ "token" in request &&
273
+ "delegator" in request &&
274
+ "delegatee" in message) {
275
+ const token = getAddress(request.token);
276
+ const delegator = getAddress(request.delegator);
277
+ const delegatee = getAddress(message.delegatee);
278
+ const slot = computeAllowanceSlot(delegator, delegatee, AAVE_VARIABLE_DEBT_ALLOWANCE_SLOT_INDEX);
279
+ return {
280
+ authorization: this.getStubAuthorization(request),
281
+ stateOverrides: [
282
+ {
283
+ address: token,
284
+ stateDiff: [{ slot, value: toHex(maxUint256, { size: 32 }) }],
285
+ },
286
+ ],
287
+ skippedCall: { target: token, selector: AAVE_DELEGATION_SELECTOR },
288
+ };
289
+ }
290
+ if (request.connectorId === METAMORPHO_CONNECTOR_ID &&
291
+ request.authorizationType ===
292
+ "metamorphoPermit" &&
293
+ "token" in request &&
294
+ "owner" in message &&
295
+ "spender" in message) {
296
+ const token = getAddress(request.token);
297
+ const owner = getAddress(message.owner);
298
+ const spender = getAddress(message.spender);
299
+ const slotIndex = request.allowanceSlotIndex ??
300
+ METAMORPHO_DEFAULT_ALLOWANCE_SLOT_INDEX;
301
+ const slot = computeAllowanceSlot(owner, spender, slotIndex);
302
+ return {
303
+ authorization: this.getStubAuthorization(request),
304
+ stateOverrides: [
305
+ {
306
+ address: token,
307
+ stateDiff: [{ slot, value: toHex(maxUint256, { size: 32 }) }],
308
+ },
309
+ ],
310
+ skippedCall: { target: token, selector: ERC2612_PERMIT_SELECTOR },
311
+ };
312
+ }
313
+ if (request.connectorId === MORPHO_CONNECTOR_ID &&
314
+ "verifyingContract" in request.typedData.domain &&
315
+ "authorizer" in message &&
316
+ "authorized" in message) {
317
+ const morpho = getAddress(request.typedData.domain.verifyingContract);
318
+ const authorizer = getAddress(message.authorizer);
319
+ const authorized = getAddress(message.authorized);
320
+ const slot = computeAllowanceSlot(authorizer, authorized, MORPHO_AUTHORIZATION_SLOT_INDEX);
321
+ return {
322
+ authorization: this.getStubAuthorization(request),
323
+ stateOverrides: [
324
+ {
325
+ address: morpho,
326
+ stateDiff: [{ slot, value: toHex(1n, { size: 32 }) }],
327
+ },
328
+ ],
329
+ skippedCall: {
330
+ target: morpho,
331
+ selector: MORPHO_SET_AUTHORIZATION_SELECTOR,
332
+ },
333
+ };
334
+ }
335
+ return undefined;
336
+ }
337
+ async validateEulerTargets(position, target) {
338
+ const provider = this.providerService.getProvider(position.chainId);
339
+ const hasDebt = position.debt.amount > 0n;
340
+ const targetBorrowVault = target.borrowVault
341
+ ? getAddress(target.borrowVault)
342
+ : undefined;
343
+ const targetCollateralVault = getAddress(target.collateralVault);
344
+ const collateralVaultAsset = (await provider.readContract({
345
+ address: targetCollateralVault,
346
+ abi: eVaultAbi,
347
+ functionName: "asset",
348
+ }));
349
+ let borrowVaultAsset;
350
+ let borrowLtv = 0;
351
+ if (hasDebt) {
352
+ if (!targetBorrowVault) {
353
+ throw new Error("Target Euler borrow vault is required");
354
+ }
355
+ [borrowVaultAsset, borrowLtv] = (await provider.multicall({
356
+ contracts: [
357
+ {
358
+ address: targetBorrowVault,
359
+ abi: eVaultAbi,
360
+ functionName: "asset",
361
+ },
362
+ {
363
+ address: targetBorrowVault,
364
+ abi: eVaultAbi,
365
+ functionName: "LTVBorrow",
366
+ args: [targetCollateralVault],
367
+ },
368
+ ],
369
+ allowFailure: false,
370
+ }));
371
+ }
372
+ else if (target.debtSwapQuote) {
373
+ throw new Error("Debt swap quote requires source debt");
374
+ }
375
+ if (target.debtSwapQuote && borrowVaultAsset) {
376
+ assertSameAddress(borrowVaultAsset, target.debtSwapQuote.tokenIn.address, "Target Euler borrow vault asset must match debt swap input asset");
377
+ assertSameAddress(target.debtSwapQuote.tokenOut.address, position.debt.asset, "Debt swap output asset must match source debt asset");
378
+ }
379
+ else if (hasDebt && borrowVaultAsset) {
380
+ assertSameAddress(borrowVaultAsset, position.debt.asset, "Target Euler borrow vault asset must match source debt asset");
381
+ }
382
+ if (target.collateralSwapQuote) {
383
+ assertSameAddress(target.collateralSwapQuote.tokenIn.address, position.collateral.asset, "Collateral swap input asset must match source collateral asset");
384
+ assertSameAddress(collateralVaultAsset, target.collateralSwapQuote.tokenOut.address, "Target Euler collateral vault asset must match collateral swap output asset");
385
+ }
386
+ else {
387
+ assertSameAddress(collateralVaultAsset, position.collateral.asset, "Target Euler collateral vault asset must match source collateral asset");
388
+ }
389
+ if (hasDebt && borrowLtv <= 0) {
390
+ throw new Error("Target Euler borrow vault does not accept the selected collateral vault");
391
+ }
392
+ }
393
+ async validateEulerSource(position, source) {
394
+ const provider = this.providerService.getProvider(position.chainId);
395
+ const sourceBorrowVault = getAddress(source.borrowVault);
396
+ const sourceCollateralVault = getAddress(source.collateralVault);
397
+ const [borrowVaultAsset, collateralVaultAsset] = (await provider.multicall({
398
+ contracts: [
399
+ {
400
+ address: sourceBorrowVault,
401
+ abi: eVaultAbi,
402
+ functionName: "asset",
403
+ },
404
+ {
405
+ address: sourceCollateralVault,
406
+ abi: eVaultAbi,
407
+ functionName: "asset",
408
+ },
409
+ ],
410
+ allowFailure: false,
411
+ }));
412
+ assertSameAddress(borrowVaultAsset, position.debt.asset, "Source Euler borrow vault asset must match target debt asset");
413
+ assertSameAddress(collateralVaultAsset, position.collateral.asset, "Source Euler collateral vault asset must match target collateral asset");
414
+ }
415
+ }
416
+ function isAuthorizationItem(item, skippedCall) {
417
+ return (getAddress(item.targetContract) === getAddress(skippedCall.target) &&
418
+ item.data.toLowerCase().startsWith(skippedCall.selector.toLowerCase()));
419
+ }
420
+ //# sourceMappingURL=positionMigrationService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"positionMigrationService.js","sourceRoot":"","sources":["../../../../src/services/positionMigrationService/positionMigrationService.ts"],"names":[],"mappings":"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"}