@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 @@
1
+ {"version":3,"file":"metamorphoConnector.d.ts","sourceRoot":"","sources":["../../../../../../src/services/positionMigrationService/connectors/metamorpho/metamorphoConnector.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qCAAqC,CAAC;AAC9E,OAAO,EACN,KAAK,YAAY,EACjB,KAAK,iBAAiB,EAGtB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,KAAK,EACX,gCAAgC,EAEhC,6BAA6B,EAC7B,wBAAwB,EACxB,0BAA0B,EAE1B,0BAA0B,EAE1B,MAAM,wCAAwC,CAAC;AAahD,OAAO,KAAK,EACX,kCAAkC,EAClC,2BAA2B,EAE3B,gCAAgC,EAEhC,qBAAqB,EACrB,sBAAsB,EACtB,MAAM,+BAA+B,CAAC;AAEvC,eAAO,MAAM,uBAAuB,eAAe,CAAC;AACpD,eAAO,MAAM,mBAAmB,kBAAkB,CAAC;AACnD,qEAAqE;AACrE,eAAO,MAAM,kCAAkC,KAAK,CAAC;AACrD,sCAAsC;AACtC,eAAO,MAAM,kCAAkC,MAAM,CAAC;AAEtD,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;CAQ1B,CAAC;AAQX,wBAAgB,+BAA+B,CAC9C,OAAO,EAAE,sBAAsB,GAC7B,MAAM,CAIR;AAED,wBAAgB,uBAAuB,CACtC,WAAW,EAAE,qBAAqB,GAChC,MAAM,CAMR;AAED,qBAAa,oCACZ,YACC,0BAA0B,CACzB,qBAAqB,EACrB,2BAA2B,CAC3B;IAOD,OAAO,CAAC,QAAQ,CAAC,iBAAiB;IAClC,OAAO,CAAC,QAAQ,CAAC,eAAe;IANjC,QAAQ,CAAC,EAAE,gBAA2B;IACtC,QAAQ,CAAC,QAAQ,mBAAuB;IACxC,QAAQ,CAAC,IAAI,mBAAmB;gBAGd,iBAAiB,EAAE,kBAAkB,EACrC,eAAe,EAAE,gBAAgB,EAClD,iBAAiB,EAAE,iBAAiB,EACpC,OAAO,GAAE,kCAAuC;IAGjD,aAAa,CACZ,IAAI,EAAE,0BAA0B,CAAC,qBAAqB,CAAC,GACrD,OAAO,CAAC,2BAA2B,EAAE,CAAC;IAenC,WAAW,CAChB,IAAI,EAAE,wBAAwB,CAAC,qBAAqB,CAAC,GACnD,OAAO,CAAC,2BAA2B,CAAC;IA8EjC,gBAAgB,CACrB,IAAI,EAAE,6BAA6B,CAAC,2BAA2B,CAAC,GAC9D,OAAO,CAAC,gCAAgC,GAAG,SAAS,CAAC;IAwClD,mBAAmB,CACxB,IAAI,EAAE,gCAAgC,CAAC,2BAA2B,CAAC,GACjE,OAAO,CAAC,YAAY,EAAE,CAAC;YAsKZ,uBAAuB;IAmDrC;;;;;;;OAOG;YACW,mBAAmB;IAmCjC,OAAO,CAAC,qBAAqB;YAuDf,iBAAiB;CAgB/B"}
@@ -0,0 +1,426 @@
1
+ import { encodeFunctionData, getAddress, } from "viem";
2
+ import { swapperAbi, swapVerifierAbi, } from "../../../executionService/index.js";
3
+ import { assertSameAddress, assertSwapQuoteUsesSwapper, encodeDepositVerifiedSwapQuoteItem, encodeGenericSwap, encodeSwapQuoteVerificationItem, encodeVerifyAmountMinAndDepositItem, getSwapperAddress, getSwapVerifierAddress, splitPermitSignature, } from "../shared.js";
4
+ import { metamorphoAbi } from "./abis/metamorphoAbi.js";
5
+ export const METAMORPHO_CONNECTOR_ID = "metamorpho";
6
+ export const METAMORPHO_PROTOCOL = "Morpho Vaults";
7
+ /** OZ ERC-20 `_allowances` mapping slot — MetaMorpho v1 and v1.1. */
8
+ export const METAMORPHO_V1_ALLOWANCE_SLOT_INDEX = 1n;
9
+ /** VaultV2 allowance mapping slot. */
10
+ export const METAMORPHO_V2_ALLOWANCE_SLOT_INDEX = 13n;
11
+ export const METAMORPHO_PERMIT_TYPES = {
12
+ Permit: [
13
+ { name: "owner", type: "address" },
14
+ { name: "spender", type: "address" },
15
+ { name: "value", type: "uint256" },
16
+ { name: "nonce", type: "uint256" },
17
+ { name: "deadline", type: "uint256" },
18
+ ],
19
+ };
20
+ const EIP712_DOMAIN_FIELD_NAME = 1;
21
+ const EIP712_DOMAIN_FIELD_VERSION = 2;
22
+ const EIP712_DOMAIN_FIELD_CHAIN_ID = 4;
23
+ const EIP712_DOMAIN_FIELD_VERIFYING_CONTRACT = 8;
24
+ const EIP712_DOMAIN_FIELD_SALT = 16;
25
+ export function getMetamorphoAllowanceSlotIndex(version) {
26
+ return version === "v2"
27
+ ? METAMORPHO_V2_ALLOWANCE_SLOT_INDEX
28
+ : METAMORPHO_V1_ALLOWANCE_SLOT_INDEX;
29
+ }
30
+ export function getMetamorphoPositionId(positionRef) {
31
+ return [
32
+ METAMORPHO_CONNECTOR_ID,
33
+ getAddress(positionRef.vault),
34
+ "supply",
35
+ ].join(":");
36
+ }
37
+ export class MetamorphoPositionMigrationConnector {
38
+ deploymentService;
39
+ providerService;
40
+ id = METAMORPHO_CONNECTOR_ID;
41
+ protocol = METAMORPHO_PROTOCOL;
42
+ name = "Morpho Vaults";
43
+ constructor(deploymentService, providerService, _executionService, _config = {}) {
44
+ this.deploymentService = deploymentService;
45
+ this.providerService = providerService;
46
+ }
47
+ listPositions(args) {
48
+ return Promise.all((args.positionRefs ?? []).map((positionRef) => this.getPosition({
49
+ connectorId: METAMORPHO_CONNECTOR_ID,
50
+ chainId: args.chainId,
51
+ owner: args.owner,
52
+ positionRef,
53
+ }))).then((positions) => positions.filter((position) => position.collateral.amount > 0n));
54
+ }
55
+ async getPosition(args) {
56
+ const owner = getAddress(args.owner);
57
+ const ref = normalizeMetamorphoPositionRef(args.positionRef);
58
+ const provider = this.providerService.getProvider(args.chainId);
59
+ const [shareBalance, underlying] = (await provider.multicall({
60
+ contracts: [
61
+ {
62
+ address: ref.vault,
63
+ abi: metamorphoAbi,
64
+ functionName: "balanceOf",
65
+ args: [owner],
66
+ },
67
+ {
68
+ address: ref.vault,
69
+ abi: metamorphoAbi,
70
+ functionName: "asset",
71
+ },
72
+ ],
73
+ allowFailure: false,
74
+ }));
75
+ const underlyingAddress = getAddress(underlying);
76
+ const [assets, underlyingSymbol, underlyingDecimals] = (await provider.multicall({
77
+ contracts: [
78
+ {
79
+ address: ref.vault,
80
+ abi: metamorphoAbi,
81
+ functionName: "convertToAssets",
82
+ args: [shareBalance],
83
+ },
84
+ {
85
+ address: underlyingAddress,
86
+ abi: metamorphoAbi,
87
+ functionName: "symbol",
88
+ },
89
+ {
90
+ address: underlyingAddress,
91
+ abi: metamorphoAbi,
92
+ functionName: "decimals",
93
+ },
94
+ ],
95
+ allowFailure: false,
96
+ }));
97
+ const raw = {
98
+ id: getMetamorphoPositionId(ref),
99
+ owner,
100
+ vault: ref.vault,
101
+ version: ref.version,
102
+ shareBalance,
103
+ assets,
104
+ underlying: underlyingAddress,
105
+ underlyingSymbol,
106
+ underlyingDecimals: Number(underlyingDecimals),
107
+ };
108
+ return {
109
+ connectorId: METAMORPHO_CONNECTOR_ID,
110
+ protocol: METAMORPHO_PROTOCOL,
111
+ id: raw.id,
112
+ chainId: args.chainId,
113
+ owner,
114
+ ref,
115
+ debt: {
116
+ asset: underlyingAddress,
117
+ amount: 0n,
118
+ },
119
+ collateral: {
120
+ asset: underlyingAddress,
121
+ amount: assets,
122
+ shares: shareBalance,
123
+ },
124
+ raw,
125
+ };
126
+ }
127
+ async getAuthorization(args) {
128
+ if (args.direction !== "external-to-euler") {
129
+ throw new Error(`Metamorpho migration does not support direction: ${args.direction}`);
130
+ }
131
+ const position = assertMetamorphoPosition(args.position);
132
+ const owner = getAddress(args.owner);
133
+ const swapVerifier = getSwapVerifierAddress(this.deploymentService, args.chainId);
134
+ const vault = position.raw.vault;
135
+ const shareBalance = position.raw.shareBalance;
136
+ if (shareBalance <= 0n)
137
+ return undefined;
138
+ if (await this.hasShareAllowance(args.chainId, vault, owner, swapVerifier, shareBalance)) {
139
+ return undefined;
140
+ }
141
+ return this.buildSharePermitRequest({
142
+ chainId: args.chainId,
143
+ owner,
144
+ spender: swapVerifier,
145
+ vault,
146
+ version: position.raw.version,
147
+ value: shareBalance,
148
+ positionId: position.id,
149
+ deadline: args.deadline,
150
+ });
151
+ }
152
+ async buildMigrationBatch(args) {
153
+ if (args.position.connectorId !== METAMORPHO_CONNECTOR_ID) {
154
+ throw new Error(`Metamorpho connector cannot build migration for ${args.position.connectorId}`);
155
+ }
156
+ if (args.direction !== "external-to-euler") {
157
+ throw new Error(`Metamorpho migration does not support direction: ${args.direction}`);
158
+ }
159
+ const target = assertEulerTarget(args.target);
160
+ const owner = getAddress(args.owner);
161
+ const eulerAccount = getAddress(target.eulerAccount);
162
+ const targetCollateralVault = getAddress(target.collateralVault);
163
+ const swapper = getSwapperAddress(this.deploymentService, args.chainId, target.swapper);
164
+ const swapVerifier = getSwapVerifierAddress(this.deploymentService, args.chainId);
165
+ const vault = args.position.raw.vault;
166
+ const underlying = args.position.raw.underlying;
167
+ const shareBalance = args.position.raw.shareBalance;
168
+ const assets = args.position.collateral.amount;
169
+ const collateralSwapQuote = args.collateralSwapQuote;
170
+ const useDepositSwapVerification = target.collateralSwapVerification === "deposit";
171
+ const verifierDeadline = args.deadline ?? BigInt(Math.floor(Date.now() / 1000) + 60 * 60);
172
+ if (shareBalance <= 0n) {
173
+ throw new Error("Metamorpho source position has no shares to migrate");
174
+ }
175
+ if (args.debtSwapQuote) {
176
+ throw new Error("Metamorpho migration has no debt to swap");
177
+ }
178
+ if (target.borrowVault) {
179
+ throw new Error("Metamorpho migration does not support a borrow vault");
180
+ }
181
+ if (useDepositSwapVerification && !collateralSwapQuote) {
182
+ throw new Error("Deposit-verified collateral swaps require a collateral swap quote");
183
+ }
184
+ if (collateralSwapQuote) {
185
+ assertSwapQuoteUsesSwapper(collateralSwapQuote, swapper, "Metamorpho collateral migration");
186
+ }
187
+ const items = [];
188
+ const needsSharePermit = args.skipAuthorizationCheck && args.authorization
189
+ ? true
190
+ : !(await this.hasShareAllowance(args.chainId, vault, owner, swapVerifier, shareBalance));
191
+ if (needsSharePermit) {
192
+ if (!args.authorization) {
193
+ throw new Error("Metamorpho share permit for the Euler SwapVerifier is required");
194
+ }
195
+ items.push(this.encodeSharePermitItem({
196
+ owner,
197
+ swapVerifier,
198
+ vault,
199
+ shareBalance,
200
+ authorization: args.authorization,
201
+ }));
202
+ }
203
+ items.push({
204
+ targetContract: swapVerifier,
205
+ onBehalfOfAccount: owner,
206
+ value: 0n,
207
+ data: encodeFunctionData({
208
+ abi: swapVerifierAbi,
209
+ functionName: "transferBalanceFromSender",
210
+ args: [vault, shareBalance, swapper],
211
+ }),
212
+ });
213
+ const swapperCalls = [
214
+ encodeGenericSwap({
215
+ target: vault,
216
+ tokenIn: vault,
217
+ tokenOut: underlying,
218
+ payload: encodeFunctionData({
219
+ abi: metamorphoAbi,
220
+ functionName: "redeem",
221
+ args: [
222
+ shareBalance,
223
+ collateralSwapQuote ? swapper : swapVerifier,
224
+ swapper,
225
+ ],
226
+ }),
227
+ }),
228
+ ];
229
+ if (collateralSwapQuote) {
230
+ swapperCalls.push(collateralSwapQuote.swap.swapperData);
231
+ }
232
+ items.push({
233
+ targetContract: swapper,
234
+ onBehalfOfAccount: owner,
235
+ value: 0n,
236
+ data: encodeFunctionData({
237
+ abi: swapperAbi,
238
+ functionName: "multicall",
239
+ args: [swapperCalls],
240
+ }),
241
+ });
242
+ if (collateralSwapQuote && useDepositSwapVerification) {
243
+ items.push(encodeDepositVerifiedSwapQuoteItem({
244
+ quote: collateralSwapQuote,
245
+ swapVerifier,
246
+ vault: targetCollateralVault,
247
+ account: eulerAccount,
248
+ onBehalfOfAccount: owner,
249
+ deadline: verifierDeadline,
250
+ label: "Metamorpho collateral migration",
251
+ }));
252
+ }
253
+ else if (collateralSwapQuote) {
254
+ items.push(encodeSwapQuoteVerificationItem({
255
+ quote: collateralSwapQuote,
256
+ swapVerifier,
257
+ vault: targetCollateralVault,
258
+ account: eulerAccount,
259
+ deadline: args.deadline ?? BigInt(collateralSwapQuote.verify.deadline ?? 0),
260
+ label: "Metamorpho collateral migration",
261
+ }));
262
+ }
263
+ else {
264
+ items.push(encodeVerifyAmountMinAndDepositItem({
265
+ swapVerifier,
266
+ onBehalfOfAccount: owner,
267
+ vault: targetCollateralVault,
268
+ receiver: eulerAccount,
269
+ amountMin: target.minCollateralAssets ?? assets,
270
+ deadline: verifierDeadline,
271
+ }));
272
+ }
273
+ return items;
274
+ }
275
+ async buildSharePermitRequest(args) {
276
+ const provider = this.providerService.getProvider(args.chainId);
277
+ const nonce = (await provider.readContract({
278
+ address: args.vault,
279
+ abi: metamorphoAbi,
280
+ functionName: "nonces",
281
+ args: [args.owner],
282
+ }));
283
+ const domain = await this.resolvePermitDomain(args.chainId, args.vault, args.version);
284
+ const message = {
285
+ owner: args.owner,
286
+ spender: args.spender,
287
+ value: args.value,
288
+ nonce,
289
+ deadline: args.deadline ?? BigInt(Math.floor(Date.now() / 1000) + 60 * 60),
290
+ };
291
+ return {
292
+ kind: "typedData",
293
+ authorizationType: "metamorphoPermit",
294
+ connectorId: METAMORPHO_CONNECTOR_ID,
295
+ protocol: METAMORPHO_PROTOCOL,
296
+ chainId: args.chainId,
297
+ owner: args.owner,
298
+ positionId: args.positionId,
299
+ token: args.vault,
300
+ allowanceSlotIndex: getMetamorphoAllowanceSlotIndex(args.version),
301
+ typedData: {
302
+ domain,
303
+ types: METAMORPHO_PERMIT_TYPES,
304
+ primaryType: "Permit",
305
+ message,
306
+ },
307
+ };
308
+ }
309
+ /**
310
+ * MetaMorpho v1/v1.1 are OZ ERC20Permit — the domain must be read via
311
+ * EIP-5267 `eip712Domain()` because v1.1 vaults may carry an empty domain
312
+ * name that differs from `name()` (the token name is settable post-deploy,
313
+ * the EIP-712 domain is fixed at construction). Vaults V2 does not
314
+ * implement `eip712Domain()` and uses a minimal
315
+ * `EIP712Domain(uint256 chainId,address verifyingContract)` domain.
316
+ */
317
+ async resolvePermitDomain(chainId, vault, version) {
318
+ if (version === "v2") {
319
+ return { chainId, verifyingContract: vault };
320
+ }
321
+ const provider = this.providerService.getProvider(chainId);
322
+ const [fields, name, domainVersion, domainChainId, verifyingContract] = (await provider.readContract({
323
+ address: vault,
324
+ abi: metamorphoAbi,
325
+ functionName: "eip712Domain",
326
+ }));
327
+ const fieldBits = Number.parseInt(fields.slice(2, 4) || "0", 16);
328
+ if (fieldBits & EIP712_DOMAIN_FIELD_SALT) {
329
+ throw new Error("Metamorpho vault EIP-712 domains with salt are not supported");
330
+ }
331
+ const domain = {};
332
+ if (fieldBits & EIP712_DOMAIN_FIELD_NAME)
333
+ domain.name = name;
334
+ if (fieldBits & EIP712_DOMAIN_FIELD_VERSION)
335
+ domain.version = domainVersion;
336
+ if (fieldBits & EIP712_DOMAIN_FIELD_CHAIN_ID) {
337
+ domain.chainId = Number(domainChainId);
338
+ }
339
+ if (fieldBits & EIP712_DOMAIN_FIELD_VERIFYING_CONTRACT) {
340
+ domain.verifyingContract = getAddress(verifyingContract);
341
+ }
342
+ return domain;
343
+ }
344
+ encodeSharePermitItem(args) {
345
+ const request = assertMetamorphoAuthorizationRequest(args.authorization.request);
346
+ if (!args.authorization.signature) {
347
+ throw new Error("Metamorpho share permit signature is required");
348
+ }
349
+ const message = toMetamorphoPermitMessage(request.typedData.message);
350
+ assertSameAddress(message.owner, args.owner, "Metamorpho permit owner mismatch");
351
+ assertSameAddress(message.spender, args.swapVerifier, "Metamorpho permit spender must be the Euler SwapVerifier");
352
+ assertSameAddress(request.token, args.vault, "Metamorpho permit token mismatch");
353
+ if (message.value < args.shareBalance) {
354
+ throw new Error("Metamorpho permit value is below the share balance");
355
+ }
356
+ const signature = splitPermitSignature(args.authorization.signature);
357
+ return {
358
+ targetContract: args.vault,
359
+ onBehalfOfAccount: args.owner,
360
+ value: 0n,
361
+ data: encodeFunctionData({
362
+ abi: metamorphoAbi,
363
+ functionName: "permit",
364
+ args: [
365
+ message.owner,
366
+ message.spender,
367
+ message.value,
368
+ message.deadline,
369
+ signature.v,
370
+ signature.r,
371
+ signature.s,
372
+ ],
373
+ }),
374
+ };
375
+ }
376
+ async hasShareAllowance(chainId, vault, owner, spender, amount) {
377
+ const provider = this.providerService.getProvider(chainId);
378
+ const allowance = (await provider.readContract({
379
+ address: vault,
380
+ abi: metamorphoAbi,
381
+ functionName: "allowance",
382
+ args: [owner, spender],
383
+ }));
384
+ return allowance >= amount;
385
+ }
386
+ }
387
+ function normalizeMetamorphoPositionRef(positionRef) {
388
+ if (positionRef.version !== "v1" && positionRef.version !== "v2") {
389
+ throw new Error(`Unsupported Metamorpho vault version: ${String(positionRef.version)}`);
390
+ }
391
+ return {
392
+ vault: getAddress(positionRef.vault),
393
+ version: positionRef.version,
394
+ };
395
+ }
396
+ function assertMetamorphoPosition(position) {
397
+ if (!position || position.connectorId !== METAMORPHO_CONNECTOR_ID) {
398
+ throw new Error("Metamorpho migration position is required");
399
+ }
400
+ return position;
401
+ }
402
+ function assertMetamorphoAuthorizationRequest(request) {
403
+ const metamorphoRequest = request;
404
+ if (request.kind !== "typedData" ||
405
+ request.connectorId !== METAMORPHO_CONNECTOR_ID ||
406
+ metamorphoRequest.authorizationType !== "metamorphoPermit") {
407
+ throw new Error("Expected a Metamorpho share permit authorization request");
408
+ }
409
+ return metamorphoRequest;
410
+ }
411
+ function assertEulerTarget(target) {
412
+ if (!target) {
413
+ throw new Error("Euler migration target is required");
414
+ }
415
+ return target;
416
+ }
417
+ function toMetamorphoPermitMessage(message) {
418
+ return {
419
+ owner: getAddress(message.owner),
420
+ spender: getAddress(message.spender),
421
+ value: BigInt(message.value),
422
+ nonce: BigInt(message.nonce),
423
+ deadline: BigInt(message.deadline),
424
+ };
425
+ }
426
+ //# sourceMappingURL=metamorphoConnector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metamorphoConnector.js","sourceRoot":"","sources":["../../../../../../src/services/positionMigrationService/connectors/metamorpho/metamorphoConnector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ import type { Address } from "viem";
2
+ import type { MigrationPosition, TypedDataMigrationAuthorizationRequest } from "../../positionMigrationServiceTypes.js";
3
+ /**
4
+ * `v1` covers MetaMorpho v1 and v1.1 — both are OZ ERC20Permit vaults with an
5
+ * identical ERC-4626/permit interface and allowance storage layout. `v2` is
6
+ * Morpho Vaults V2, which uses a minimal EIP-712 domain (chainId +
7
+ * verifyingContract only) and a different allowance slot.
8
+ */
9
+ export type MetamorphoVaultVersion = "v1" | "v2";
10
+ export type MetamorphoPositionRef = {
11
+ vault: Address;
12
+ version: MetamorphoVaultVersion;
13
+ };
14
+ export type MetamorphoPositionRaw = {
15
+ id: string;
16
+ owner: Address;
17
+ vault: Address;
18
+ version: MetamorphoVaultVersion;
19
+ shareBalance: bigint;
20
+ assets: bigint;
21
+ underlying: Address;
22
+ underlyingSymbol: string;
23
+ underlyingDecimals: number;
24
+ };
25
+ export type MetamorphoMigrationPosition = MigrationPosition<MetamorphoPositionRaw, MetamorphoPositionRef>;
26
+ export type MetamorphoPermitTypedDataMessage = {
27
+ owner: Address;
28
+ spender: Address;
29
+ value: bigint;
30
+ nonce: bigint;
31
+ deadline: bigint;
32
+ } & Record<string, unknown>;
33
+ export type MetamorphoPermitTypedDataRequest = TypedDataMigrationAuthorizationRequest<MetamorphoPermitTypedDataMessage> & {
34
+ authorizationType: "metamorphoPermit";
35
+ /** The vault address — Metamorpho shares are the vault token itself. */
36
+ token: Address;
37
+ /**
38
+ * Storage slot index of the vault's ERC-20 allowance mapping, used to
39
+ * stub the permit with a state override during simulation. Empirically
40
+ * verified: 1 for MetaMorpho v1/v1.1 (OZ layout), 13 for Vaults V2.
41
+ */
42
+ allowanceSlotIndex: bigint;
43
+ };
44
+ export type MetamorphoMigrationAuthorizationRequest = MetamorphoPermitTypedDataRequest;
45
+ export type MetamorphoMigrationConnectorConfig = Record<string, never>;
46
+ //# sourceMappingURL=metamorphoConnectorTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metamorphoConnectorTypes.d.ts","sourceRoot":"","sources":["../../../../../../src/services/positionMigrationService/connectors/metamorpho/metamorphoConnectorTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,KAAK,EACX,iBAAiB,EACjB,sCAAsC,EACtC,MAAM,wCAAwC,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,MAAM,sBAAsB,GAAG,IAAI,GAAG,IAAI,CAAC;AAEjD,MAAM,MAAM,qBAAqB,GAAG;IACnC,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,sBAAsB,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,sBAAsB,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,2BAA2B,GAAG,iBAAiB,CAC1D,qBAAqB,EACrB,qBAAqB,CACrB,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC9C,KAAK,EAAE,OAAO,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAE5B,MAAM,MAAM,gCAAgC,GAC3C,sCAAsC,CAAC,gCAAgC,CAAC,GAAG;IAC1E,iBAAiB,EAAE,kBAAkB,CAAC;IACtC,wEAAwE;IACxE,KAAK,EAAE,OAAO,CAAC;IACf;;;;OAIG;IACH,kBAAkB,EAAE,MAAM,CAAC;CAC3B,CAAC;AAEH,MAAM,MAAM,uCAAuC,GAClD,gCAAgC,CAAC;AAElC,MAAM,MAAM,kCAAkC,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=metamorphoConnectorTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metamorphoConnectorTypes.js","sourceRoot":"","sources":["../../../../../../src/services/positionMigrationService/connectors/metamorpho/metamorphoConnectorTypes.ts"],"names":[],"mappings":""}