@eulerxyz/euler-v2-sdk 1.1.1 → 1.1.3

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