@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.
- package/README.md +16 -12
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/sdk/buildSDK.d.ts +8 -0
- package/dist/src/sdk/buildSDK.d.ts.map +1 -1
- package/dist/src/sdk/buildSDK.js +20 -1
- package/dist/src/sdk/buildSDK.js.map +1 -1
- package/dist/src/sdk/sdk.d.ts +3 -0
- package/dist/src/sdk/sdk.d.ts.map +1 -1
- package/dist/src/sdk/sdk.js +2 -0
- package/dist/src/sdk/sdk.js.map +1 -1
- package/dist/src/services/executionService/abis/swapVerifierAbi.d.ts +130 -0
- package/dist/src/services/executionService/abis/swapVerifierAbi.d.ts.map +1 -1
- package/dist/src/services/executionService/abis/swapVerifierAbi.js +69 -0
- package/dist/src/services/executionService/abis/swapVerifierAbi.js.map +1 -1
- package/dist/src/services/executionService/encode.js +1 -1
- package/dist/src/services/executionService/encode.js.map +1 -1
- package/dist/src/services/executionService/executionService.d.ts +8 -6
- package/dist/src/services/executionService/executionService.d.ts.map +1 -1
- package/dist/src/services/executionService/executionService.js +6 -5
- package/dist/src/services/executionService/executionService.js.map +1 -1
- package/dist/src/services/executionService/simulate.d.ts +2 -0
- package/dist/src/services/executionService/simulate.d.ts.map +1 -1
- package/dist/src/services/executionService/simulate.js +9 -1
- package/dist/src/services/executionService/simulate.js.map +1 -1
- package/dist/src/services/positionMigrationService/connectors/aave/aaveConnector.d.ts +81 -0
- package/dist/src/services/positionMigrationService/connectors/aave/aaveConnector.d.ts.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/aave/aaveConnector.js +1291 -0
- package/dist/src/services/positionMigrationService/connectors/aave/aaveConnector.js.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/aave/aaveConnectorTypes.d.ts +84 -0
- package/dist/src/services/positionMigrationService/connectors/aave/aaveConnectorTypes.d.ts.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/aave/aaveConnectorTypes.js +2 -0
- package/dist/src/services/positionMigrationService/connectors/aave/aaveConnectorTypes.js.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/aave/abis/aaveV3Abi.d.ts +370 -0
- package/dist/src/services/positionMigrationService/connectors/aave/abis/aaveV3Abi.d.ts.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/aave/abis/aaveV3Abi.js +243 -0
- package/dist/src/services/positionMigrationService/connectors/aave/abis/aaveV3Abi.js.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/aave/index.d.ts +4 -0
- package/dist/src/services/positionMigrationService/connectors/aave/index.d.ts.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/aave/index.js +3 -0
- package/dist/src/services/positionMigrationService/connectors/aave/index.js.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/index.d.ts +4 -0
- package/dist/src/services/positionMigrationService/connectors/index.d.ts.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/index.js +4 -0
- package/dist/src/services/positionMigrationService/connectors/index.js.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/metamorpho/abis/metamorphoAbi.d.ts +166 -0
- package/dist/src/services/positionMigrationService/connectors/metamorpho/abis/metamorphoAbi.d.ts.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/metamorpho/abis/metamorphoAbi.js +108 -0
- package/dist/src/services/positionMigrationService/connectors/metamorpho/abis/metamorphoAbi.js.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/metamorpho/index.d.ts +4 -0
- package/dist/src/services/positionMigrationService/connectors/metamorpho/index.d.ts.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/metamorpho/index.js +3 -0
- package/dist/src/services/positionMigrationService/connectors/metamorpho/index.js.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnector.d.ts +56 -0
- package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnector.d.ts.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnector.js +426 -0
- package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnector.js.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnectorTypes.d.ts +46 -0
- package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnectorTypes.d.ts.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnectorTypes.js +2 -0
- package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnectorTypes.js.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/morpho/abis/morphoBlueAbi.d.ts +269 -0
- package/dist/src/services/positionMigrationService/connectors/morpho/abis/morphoBlueAbi.d.ts.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/morpho/abis/morphoBlueAbi.js +172 -0
- package/dist/src/services/positionMigrationService/connectors/morpho/abis/morphoBlueAbi.js.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/morpho/index.d.ts +4 -0
- package/dist/src/services/positionMigrationService/connectors/morpho/index.d.ts.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/morpho/index.js +3 -0
- package/dist/src/services/positionMigrationService/connectors/morpho/index.js.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnector.d.ts +57 -0
- package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnector.d.ts.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnector.js +856 -0
- package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnector.js.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnectorTypes.d.ts +61 -0
- package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnectorTypes.d.ts.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnectorTypes.js +2 -0
- package/dist/src/services/positionMigrationService/connectors/morpho/morphoConnectorTypes.js.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/shared.d.ts +83 -0
- package/dist/src/services/positionMigrationService/connectors/shared.d.ts.map +1 -0
- package/dist/src/services/positionMigrationService/connectors/shared.js +214 -0
- package/dist/src/services/positionMigrationService/connectors/shared.js.map +1 -0
- package/dist/src/services/positionMigrationService/index.d.ts +4 -0
- package/dist/src/services/positionMigrationService/index.d.ts.map +1 -0
- package/dist/src/services/positionMigrationService/index.js +3 -0
- package/dist/src/services/positionMigrationService/index.js.map +1 -0
- package/dist/src/services/positionMigrationService/positionMigrationService.d.ts +55 -0
- package/dist/src/services/positionMigrationService/positionMigrationService.d.ts.map +1 -0
- package/dist/src/services/positionMigrationService/positionMigrationService.js +449 -0
- package/dist/src/services/positionMigrationService/positionMigrationService.js.map +1 -0
- package/dist/src/services/positionMigrationService/positionMigrationServiceTypes.d.ts +235 -0
- package/dist/src/services/positionMigrationService/positionMigrationServiceTypes.d.ts.map +1 -0
- package/dist/src/services/positionMigrationService/positionMigrationServiceTypes.js +2 -0
- package/dist/src/services/positionMigrationService/positionMigrationServiceTypes.js.map +1 -0
- package/dist/src/services/swapService/swapVerification.d.ts +1 -1
- package/dist/src/services/swapService/swapVerification.d.ts.map +1 -1
- 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"}
|
package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnector.js
ADDED
|
@@ -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
|
package/dist/src/services/positionMigrationService/connectors/metamorpho/metamorphoConnector.js.map
ADDED
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"metamorphoConnectorTypes.js","sourceRoot":"","sources":["../../../../../../src/services/positionMigrationService/connectors/metamorpho/metamorphoConnectorTypes.ts"],"names":[],"mappings":""}
|