morpho-contracts-helper 0.0.19 → 0.0.21
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/contracts/MorphoMarketDataFetcher.sol +36 -77
- package/contracts/MorphoVaultV2DeployHelper.sol +64 -4
- package/contracts/OracleFactory.sol +301 -63
- package/dist/typechain-types/contracts/{MorphoMarketDataFetcher.sol/MorphoMarketDataFetcher.d.ts → MorphoMarketDataFetcher.d.ts} +7 -7
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.d.ts.map +1 -0
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.js.map +1 -0
- package/dist/typechain-types/contracts/MorphoVaultV2DeployHelper.d.ts +3 -0
- package/dist/typechain-types/contracts/MorphoVaultV2DeployHelper.d.ts.map +1 -1
- package/dist/typechain-types/contracts/OracleFactory.sol/ManualChainlinkMockFeed.d.ts +132 -6
- package/dist/typechain-types/contracts/OracleFactory.sol/ManualChainlinkMockFeed.d.ts.map +1 -1
- package/dist/typechain-types/contracts/OracleFactory.sol/ManualChainlinkMockFeedFactory.d.ts +11 -21
- package/dist/typechain-types/contracts/OracleFactory.sol/ManualChainlinkMockFeedFactory.d.ts.map +1 -1
- package/dist/typechain-types/contracts/OracleFactory.sol/index.d.ts +0 -1
- package/dist/typechain-types/contracts/OracleFactory.sol/index.d.ts.map +1 -1
- package/dist/typechain-types/contracts/index.d.ts +1 -2
- package/dist/typechain-types/contracts/index.d.ts.map +1 -1
- package/dist/typechain-types/factories/contracts/{MorphoMarketDataFetcher.sol/MorphoMarketDataFetcher__factory.d.ts → MorphoMarketDataFetcher__factory.d.ts} +13 -13
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher__factory.d.ts.map +1 -0
- package/dist/typechain-types/factories/contracts/{MorphoMarketDataFetcher.sol/MorphoMarketDataFetcher__factory.js → MorphoMarketDataFetcher__factory.js} +11 -11
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher__factory.js.map +1 -0
- package/dist/typechain-types/factories/contracts/MorphoVaultV2DeployHelper__factory.d.ts +5 -1
- package/dist/typechain-types/factories/contracts/MorphoVaultV2DeployHelper__factory.d.ts.map +1 -1
- package/dist/typechain-types/factories/contracts/MorphoVaultV2DeployHelper__factory.js +6 -1
- package/dist/typechain-types/factories/contracts/MorphoVaultV2DeployHelper__factory.js.map +1 -1
- package/dist/typechain-types/factories/contracts/OracleFactory.sol/ManualChainlinkMockFeedFactory__factory.d.ts +7 -37
- package/dist/typechain-types/factories/contracts/OracleFactory.sol/ManualChainlinkMockFeedFactory__factory.d.ts.map +1 -1
- package/dist/typechain-types/factories/contracts/OracleFactory.sol/ManualChainlinkMockFeedFactory__factory.js +8 -48
- package/dist/typechain-types/factories/contracts/OracleFactory.sol/ManualChainlinkMockFeedFactory__factory.js.map +1 -1
- package/dist/typechain-types/factories/contracts/OracleFactory.sol/ManualChainlinkMockFeed__factory.d.ts +191 -7
- package/dist/typechain-types/factories/contracts/OracleFactory.sol/ManualChainlinkMockFeed__factory.d.ts.map +1 -1
- package/dist/typechain-types/factories/contracts/OracleFactory.sol/ManualChainlinkMockFeed__factory.js +246 -9
- package/dist/typechain-types/factories/contracts/OracleFactory.sol/ManualChainlinkMockFeed__factory.js.map +1 -1
- package/dist/typechain-types/factories/contracts/OracleFactory.sol/index.d.ts +0 -1
- package/dist/typechain-types/factories/contracts/OracleFactory.sol/index.d.ts.map +1 -1
- package/dist/typechain-types/factories/contracts/OracleFactory.sol/index.js +1 -3
- package/dist/typechain-types/factories/contracts/OracleFactory.sol/index.js.map +1 -1
- package/dist/typechain-types/factories/contracts/index.d.ts +1 -1
- package/dist/typechain-types/factories/contracts/index.d.ts.map +1 -1
- package/dist/typechain-types/factories/contracts/index.js +3 -2
- package/dist/typechain-types/factories/contracts/index.js.map +1 -1
- package/dist/typechain-types/index.d.ts +2 -4
- package/dist/typechain-types/index.d.ts.map +1 -1
- package/dist/typechain-types/index.js +3 -5
- package/dist/typechain-types/index.js.map +1 -1
- package/package.json +1 -1
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IChainlinkAggregator.d.ts +0 -60
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IChainlinkAggregator.d.ts.map +0 -1
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IChainlinkAggregator.js +0 -3
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IChainlinkAggregator.js.map +0 -1
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IERC20Metadata.d.ts +0 -48
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IERC20Metadata.d.ts.map +0 -1
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IERC20Metadata.js +0 -3
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IERC20Metadata.js.map +0 -1
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IMorpho.d.ts +0 -84
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IMorpho.d.ts.map +0 -1
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IMorpho.js +0 -3
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IMorpho.js.map +0 -1
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IMorphoChainlinkOracleV2.d.ts +0 -62
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IMorphoChainlinkOracleV2.d.ts.map +0 -1
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IMorphoChainlinkOracleV2.js +0 -3
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IMorphoChainlinkOracleV2.js.map +0 -1
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/MorphoMarketDataFetcher.d.ts.map +0 -1
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/MorphoMarketDataFetcher.js.map +0 -1
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/index.d.ts +0 -6
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/index.d.ts.map +0 -1
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/index.js +0 -3
- package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/index.js.map +0 -1
- package/dist/typechain-types/contracts/OracleFactory.sol/IChainlinkAggregator.d.ts +0 -60
- package/dist/typechain-types/contracts/OracleFactory.sol/IChainlinkAggregator.d.ts.map +0 -1
- package/dist/typechain-types/contracts/OracleFactory.sol/IChainlinkAggregator.js +0 -3
- package/dist/typechain-types/contracts/OracleFactory.sol/IChainlinkAggregator.js.map +0 -1
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IChainlinkAggregator__factory.d.ts +0 -44
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IChainlinkAggregator__factory.d.ts.map +0 -1
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IChainlinkAggregator__factory.js +0 -67
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IChainlinkAggregator__factory.js.map +0 -1
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IERC20Metadata__factory.d.ts +0 -56
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IERC20Metadata__factory.d.ts.map +0 -1
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IERC20Metadata__factory.js +0 -84
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IERC20Metadata__factory.js.map +0 -1
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IMorphoChainlinkOracleV2__factory.d.ts +0 -108
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IMorphoChainlinkOracleV2__factory.d.ts.map +0 -1
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IMorphoChainlinkOracleV2__factory.js +0 -151
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IMorphoChainlinkOracleV2__factory.js.map +0 -1
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IMorpho__factory.d.ts +0 -69
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IMorpho__factory.d.ts.map +0 -1
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IMorpho__factory.js +0 -101
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IMorpho__factory.js.map +0 -1
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/MorphoMarketDataFetcher__factory.d.ts.map +0 -1
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/MorphoMarketDataFetcher__factory.js.map +0 -1
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/index.d.ts +0 -6
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/index.d.ts.map +0 -1
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/index.js +0 -18
- package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/index.js.map +0 -1
- package/dist/typechain-types/factories/contracts/OracleFactory.sol/IChainlinkAggregator__factory.d.ts +0 -44
- package/dist/typechain-types/factories/contracts/OracleFactory.sol/IChainlinkAggregator__factory.d.ts.map +0 -1
- package/dist/typechain-types/factories/contracts/OracleFactory.sol/IChainlinkAggregator__factory.js +0 -67
- package/dist/typechain-types/factories/contracts/OracleFactory.sol/IChainlinkAggregator__factory.js.map +0 -1
- /package/dist/typechain-types/contracts/{MorphoMarketDataFetcher.sol/MorphoMarketDataFetcher.js → MorphoMarketDataFetcher.js} +0 -0
|
@@ -1,53 +1,12 @@
|
|
|
1
1
|
// SPDX-License-Identifier: MIT
|
|
2
2
|
pragma solidity ^0.8.20;
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
interface IChainlinkAggregator {
|
|
13
|
-
function decimals() external view returns (uint8);
|
|
14
|
-
|
|
15
|
-
function latestRoundData()
|
|
16
|
-
external
|
|
17
|
-
view
|
|
18
|
-
returns (
|
|
19
|
-
uint80 roundId,
|
|
20
|
-
int256 answer,
|
|
21
|
-
uint256 startedAt,
|
|
22
|
-
uint256 updatedAt,
|
|
23
|
-
uint80 answeredInRound
|
|
24
|
-
);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
interface IERC20Metadata {
|
|
28
|
-
function name() external view returns (string memory);
|
|
29
|
-
function symbol() external view returns (string memory);
|
|
30
|
-
function decimals() external view returns (uint8);
|
|
31
|
-
function allowance(address owner, address spender) external view returns (uint256);
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
interface IMorphoChainlinkOracleV2 {
|
|
35
|
-
function BASE_FEED_1() external view returns (address);
|
|
36
|
-
function BASE_FEED_2() external view returns (address);
|
|
37
|
-
function BASE_VAULT() external view returns (address);
|
|
38
|
-
function BASE_VAULT_CONVERSION_SAMPLE() external view returns (address);
|
|
39
|
-
function QUOTE_FEED_1() external view returns (address);
|
|
40
|
-
function QUOTE_FEED_2() external view returns (address);
|
|
41
|
-
function QUOTE_VAULT() external view returns (address);
|
|
42
|
-
function QUOTE_VAULT_CONVERSION_SAMPLE() external view returns (address);
|
|
43
|
-
function SCALE_FACTOR() external view returns (uint256);
|
|
44
|
-
function price() external view returns (uint256);
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
interface IMorpho {
|
|
48
|
-
function position(bytes32 marketId, address account) external view returns (uint128 supplyShares, uint128 borrowShares, uint128 collateral);
|
|
49
|
-
function idToMarketParams(bytes32 marketId) external view returns (MarketParams memory);
|
|
50
|
-
}
|
|
4
|
+
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
|
|
5
|
+
|
|
6
|
+
import {AggregatorV3Interface} from "./external/morpho/interfaces/AggregatorV3Interface.sol";
|
|
7
|
+
import {IMorpho, MarketParams, Market, Id, Position} from "./external/morpho/interfaces/IMorpho.sol";
|
|
8
|
+
import {IMorphoChainlinkOracleV2} from "./external/morpho/interfaces/IMorphoChainlinkOracleV2.sol";
|
|
9
|
+
import {IERC4626} from "./external/morpho/interfaces/IERC4626.sol";
|
|
51
10
|
|
|
52
11
|
contract MorphoMarketDataFetcher {
|
|
53
12
|
|
|
@@ -74,14 +33,14 @@ contract MorphoMarketDataFetcher {
|
|
|
74
33
|
|
|
75
34
|
struct OracleInfo {
|
|
76
35
|
address oracleAddress;
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
36
|
+
AggregatorV3Interface baseFeed1;
|
|
37
|
+
AggregatorV3Interface baseFeed2;
|
|
38
|
+
IERC4626 baseVault;
|
|
39
|
+
uint256 baseVaultConversionSample;
|
|
40
|
+
AggregatorV3Interface quoteFeed1;
|
|
41
|
+
AggregatorV3Interface quoteFeed2;
|
|
42
|
+
IERC4626 quoteVault;
|
|
43
|
+
uint256 quoteVaultConversionSample;
|
|
85
44
|
uint256 scaleFactor;
|
|
86
45
|
uint256 currentPrice;
|
|
87
46
|
MockOracleInfo baseFeed;
|
|
@@ -101,7 +60,7 @@ contract MorphoMarketDataFetcher {
|
|
|
101
60
|
address user
|
|
102
61
|
) external view returns (MarketData memory data) {
|
|
103
62
|
|
|
104
|
-
MarketParams memory params = IMorpho(morphoAddress).idToMarketParams(marketId);
|
|
63
|
+
MarketParams memory params = IMorpho(morphoAddress).idToMarketParams(Id.wrap(marketId));
|
|
105
64
|
|
|
106
65
|
data.marketParams = params;
|
|
107
66
|
|
|
@@ -123,49 +82,49 @@ contract MorphoMarketDataFetcher {
|
|
|
123
82
|
|
|
124
83
|
if (params.oracle != address(0)) {
|
|
125
84
|
data.oracle.oracleAddress = params.oracle;
|
|
126
|
-
try IMorphoChainlinkOracleV2(params.oracle).BASE_FEED_1() returns (
|
|
127
|
-
try IMorphoChainlinkOracleV2(params.oracle).BASE_FEED_2() returns (
|
|
128
|
-
try IMorphoChainlinkOracleV2(params.oracle).BASE_VAULT() returns (
|
|
129
|
-
try IMorphoChainlinkOracleV2(params.oracle).BASE_VAULT_CONVERSION_SAMPLE() returns (
|
|
130
|
-
try IMorphoChainlinkOracleV2(params.oracle).QUOTE_FEED_1() returns (
|
|
131
|
-
try IMorphoChainlinkOracleV2(params.oracle).QUOTE_FEED_2() returns (
|
|
132
|
-
try IMorphoChainlinkOracleV2(params.oracle).QUOTE_VAULT() returns (
|
|
133
|
-
try IMorphoChainlinkOracleV2(params.oracle).QUOTE_VAULT_CONVERSION_SAMPLE() returns (
|
|
85
|
+
try IMorphoChainlinkOracleV2(params.oracle).BASE_FEED_1() returns (AggregatorV3Interface a) { data.oracle.baseFeed1 = a; } catch {}
|
|
86
|
+
try IMorphoChainlinkOracleV2(params.oracle).BASE_FEED_2() returns (AggregatorV3Interface a) { data.oracle.baseFeed2 = a; } catch {}
|
|
87
|
+
try IMorphoChainlinkOracleV2(params.oracle).BASE_VAULT() returns (IERC4626 a) { data.oracle.baseVault = a; } catch {}
|
|
88
|
+
try IMorphoChainlinkOracleV2(params.oracle).BASE_VAULT_CONVERSION_SAMPLE() returns (uint256 a) { data.oracle.baseVaultConversionSample = a; } catch {}
|
|
89
|
+
try IMorphoChainlinkOracleV2(params.oracle).QUOTE_FEED_1() returns (AggregatorV3Interface a) { data.oracle.quoteFeed1 = a; } catch {}
|
|
90
|
+
try IMorphoChainlinkOracleV2(params.oracle).QUOTE_FEED_2() returns (AggregatorV3Interface a) { data.oracle.quoteFeed2 = a; } catch {}
|
|
91
|
+
try IMorphoChainlinkOracleV2(params.oracle).QUOTE_VAULT() returns (IERC4626 a) { data.oracle.quoteVault = a; } catch {}
|
|
92
|
+
try IMorphoChainlinkOracleV2(params.oracle).QUOTE_VAULT_CONVERSION_SAMPLE() returns (uint256 a) { data.oracle.quoteVaultConversionSample = a; } catch {}
|
|
134
93
|
try IMorphoChainlinkOracleV2(params.oracle).SCALE_FACTOR() returns (uint256 s) { data.oracle.scaleFactor = s; } catch {}
|
|
135
94
|
try IMorphoChainlinkOracleV2(params.oracle).price() returns (uint256 p) { data.oracle.currentPrice = p; } catch {}
|
|
136
95
|
}
|
|
137
96
|
|
|
138
|
-
if (data.oracle.baseFeed1 != address(0)) {
|
|
139
|
-
data.oracle.baseFeed.oracleAddress = data.oracle.baseFeed1;
|
|
97
|
+
if (address(data.oracle.baseFeed1) != address(0)) {
|
|
98
|
+
data.oracle.baseFeed.oracleAddress = address(data.oracle.baseFeed1);
|
|
140
99
|
|
|
141
|
-
try
|
|
100
|
+
try data.oracle.baseFeed1.latestRoundData() returns (
|
|
142
101
|
uint80, int256 answer, uint256, uint256, uint80
|
|
143
102
|
) {
|
|
144
103
|
data.oracle.baseFeed.price = answer > 0 ? uint256(answer) : 0;
|
|
145
104
|
} catch {}
|
|
146
105
|
|
|
147
|
-
try
|
|
148
|
-
try
|
|
106
|
+
try data.oracle.baseFeed1.decimals() returns (uint8 _dec) { data.oracle.baseFeed.decimals = _dec; } catch {}
|
|
107
|
+
try data.oracle.baseFeed1.description() returns (string memory _sym) { data.oracle.baseFeed.symbol = _sym; } catch {}
|
|
149
108
|
}
|
|
150
109
|
|
|
151
|
-
if (data.oracle.quoteFeed1 != address(0)) {
|
|
152
|
-
data.oracle.quoteFeed.oracleAddress = data.oracle.quoteFeed1;
|
|
110
|
+
if (address(data.oracle.quoteFeed1) != address(0)) {
|
|
111
|
+
data.oracle.quoteFeed.oracleAddress = address(data.oracle.quoteFeed1);
|
|
153
112
|
|
|
154
|
-
try
|
|
113
|
+
try data.oracle.quoteFeed1.latestRoundData() returns (
|
|
155
114
|
uint80, int256 answer, uint256, uint256, uint80
|
|
156
115
|
) {
|
|
157
116
|
data.oracle.quoteFeed.price = answer > 0 ? uint256(answer) : 0;
|
|
158
117
|
} catch {}
|
|
159
118
|
|
|
160
|
-
try
|
|
161
|
-
try
|
|
119
|
+
try data.oracle.quoteFeed1.decimals() returns (uint8 _dec) { data.oracle.quoteFeed.decimals = _dec; } catch {}
|
|
120
|
+
try data.oracle.quoteFeed1.description() returns (string memory _sym) { data.oracle.quoteFeed.symbol = _sym; } catch {}
|
|
162
121
|
}
|
|
163
122
|
|
|
164
123
|
if (morphoAddress != address(0) && marketId != bytes32(0)) {
|
|
165
124
|
address deadAddress = 0x000000000000000000000000000000000000dEaD;
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
125
|
+
|
|
126
|
+
Position memory deadPosition = IMorpho(morphoAddress).position(Id.wrap(marketId), deadAddress);
|
|
127
|
+
data.deadAddressSupply = deadPosition.supplyShares;
|
|
169
128
|
}
|
|
170
129
|
}
|
|
171
130
|
}
|
|
@@ -9,6 +9,7 @@ import {IVaultV2Factory} from "./external/morpho/interfaces/IVaultV2Factory.sol"
|
|
|
9
9
|
import {IVaultV2} from "./external/morpho/interfaces/IVaultV2.sol";
|
|
10
10
|
import {IERC20} from "./external/morpho/interfaces/IERC20.sol";
|
|
11
11
|
import {IERC4626} from "./external/morpho/interfaces/IERC4626.sol";
|
|
12
|
+
import {IMorpho, MarketParams, Id, Position} from "./external/morpho/interfaces/IMorpho.sol";
|
|
12
13
|
import {IMorphoMarketV1AdapterV2} from "./external/morpho/interfaces/IMorphoMarketV1AdapterV2.sol";
|
|
13
14
|
import {IMorphoMarketV1AdapterV2Factory} from "./external/morpho/interfaces/IMorphoMarketV1AdapterV2Factory.sol";
|
|
14
15
|
|
|
@@ -18,6 +19,8 @@ contract MorphoVaultV2DeployHelper {
|
|
|
18
19
|
address public immutable adapterV2FactoryAddress;
|
|
19
20
|
address public immutable morphoRegistryAddress;
|
|
20
21
|
|
|
22
|
+
address constant DEAD_ADDRESS = 0x000000000000000000000000000000000000dEaD;
|
|
23
|
+
|
|
21
24
|
constructor(address _vaultV2FactoryAddress, address _adapterV2FactoryAddress, address _morphoRegistryAddress) {
|
|
22
25
|
vaultV2FactoryAddress = _vaultV2FactoryAddress;
|
|
23
26
|
adapterV2FactoryAddress = _adapterV2FactoryAddress;
|
|
@@ -33,7 +36,9 @@ contract MorphoVaultV2DeployHelper {
|
|
|
33
36
|
address finalOwner;
|
|
34
37
|
address finalCurator;
|
|
35
38
|
address allocator;
|
|
36
|
-
address sentinel;
|
|
39
|
+
address sentinel;
|
|
40
|
+
|
|
41
|
+
bytes32 marketID;
|
|
37
42
|
|
|
38
43
|
uint256 vaultTimelockHigh;
|
|
39
44
|
uint256 vaultTimelockMid;
|
|
@@ -71,6 +76,7 @@ contract MorphoVaultV2DeployHelper {
|
|
|
71
76
|
result.adapter = adapter;
|
|
72
77
|
|
|
73
78
|
iVault2.submit(abi.encodeCall(IVaultV2.setIsAllocator, (p.allocator, true)));
|
|
79
|
+
iVault2.submit(abi.encodeCall(IVaultV2.setIsAllocator, (address(this), true)));
|
|
74
80
|
iVault2.submit(abi.encodeCall(IVaultV2.setAdapterRegistry, (morphoRegistryAddress)));
|
|
75
81
|
|
|
76
82
|
bytes memory adapterIdData = abi.encode("this", adapter);
|
|
@@ -85,6 +91,7 @@ contract MorphoVaultV2DeployHelper {
|
|
|
85
91
|
|
|
86
92
|
iVault2.setAdapterRegistry(morphoRegistryAddress);
|
|
87
93
|
iVault2.setIsAllocator(p.allocator, true);
|
|
94
|
+
iVault2.setIsAllocator(address(this), true);
|
|
88
95
|
iVault2.addAdapter(adapter);
|
|
89
96
|
|
|
90
97
|
iVault2.increaseAbsoluteCap(adapterIdData, type(uint128).max);
|
|
@@ -95,6 +102,13 @@ contract MorphoVaultV2DeployHelper {
|
|
|
95
102
|
iVault2.abdicate(IVaultV2.setSendSharesGate.selector);
|
|
96
103
|
iVault2.abdicate(IVaultV2.setReceiveAssetsGate.selector);
|
|
97
104
|
|
|
105
|
+
if (p.marketID != bytes32(0)) {
|
|
106
|
+
_configureMarketAndLiquidityAdapter(vault, p.marketID, adapter, p.asset);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
iVault2.submit(abi.encodeCall(IVaultV2.setIsAllocator, (address(this), false)));
|
|
110
|
+
iVault2.setIsAllocator(address(this), false);
|
|
111
|
+
|
|
98
112
|
_configureVaultTimelocks(vault, p.vaultTimelockHigh, p.vaultTimelockMid);
|
|
99
113
|
_configureAdapterTimelocks(adapter, p.adapterTimelock);
|
|
100
114
|
|
|
@@ -109,6 +123,52 @@ contract MorphoVaultV2DeployHelper {
|
|
|
109
123
|
emit VaultDeployed(vault, adapter, p.finalOwner, p.finalCurator, p.allocator);
|
|
110
124
|
}
|
|
111
125
|
|
|
126
|
+
function _configureMarketAndLiquidityAdapter(address vault, bytes32 marketID, address adapter, address loanAsset) internal {
|
|
127
|
+
IVaultV2 iVault2 = IVaultV2(vault);
|
|
128
|
+
IMorphoMarketV1AdapterV2 iAdapter = IMorphoMarketV1AdapterV2(adapter);
|
|
129
|
+
|
|
130
|
+
address morpho = iAdapter.morpho();
|
|
131
|
+
|
|
132
|
+
MarketParams memory marketParams = IMorpho(morpho).idToMarketParams(Id.wrap(marketID));
|
|
133
|
+
|
|
134
|
+
address irm = iAdapter.adaptiveCurveIrm();
|
|
135
|
+
_validateMarketParams(marketParams, loanAsset, irm);
|
|
136
|
+
|
|
137
|
+
bytes memory liquidityData = abi.encode(marketParams);
|
|
138
|
+
iVault2.submit(abi.encodeCall(IVaultV2.setLiquidityAdapterAndData, (adapter, liquidityData)));
|
|
139
|
+
iVault2.setLiquidityAdapterAndData(address(iAdapter), liquidityData);
|
|
140
|
+
|
|
141
|
+
Position memory deadPosition = IMorpho(morpho).position(Id.wrap(marketID), address(DEAD_ADDRESS));
|
|
142
|
+
uint256 deadSupplyShares = deadPosition.supplyShares;
|
|
143
|
+
|
|
144
|
+
_validateDepositAmount(1e9, deadSupplyShares);
|
|
145
|
+
|
|
146
|
+
bytes memory collateralTokenIdData = abi.encode("collateralToken", marketParams.collateralToken);
|
|
147
|
+
iVault2.submit(abi.encodeCall(IVaultV2.increaseAbsoluteCap, (collateralTokenIdData, type(uint128).max)));
|
|
148
|
+
iVault2.submit(abi.encodeCall(IVaultV2.increaseRelativeCap, (collateralTokenIdData, 1e18)));
|
|
149
|
+
iVault2.increaseAbsoluteCap(collateralTokenIdData, type(uint128).max);
|
|
150
|
+
iVault2.increaseRelativeCap(collateralTokenIdData, 1e18);
|
|
151
|
+
|
|
152
|
+
bytes memory marketIdData = abi.encode("this/marketParams", address(adapter), marketParams);
|
|
153
|
+
iVault2.submit(abi.encodeCall(IVaultV2.increaseAbsoluteCap, (marketIdData, type(uint128).max)));
|
|
154
|
+
iVault2.submit(abi.encodeCall(IVaultV2.increaseRelativeCap, (marketIdData, 1e18)));
|
|
155
|
+
iVault2.increaseAbsoluteCap(marketIdData, type(uint128).max);
|
|
156
|
+
iVault2.increaseRelativeCap(marketIdData, 1e18);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
function _validateDepositAmount(uint256 requiredDeadDeposit, uint256 deadSupplyShares) internal pure {
|
|
160
|
+
require(deadSupplyShares >= requiredDeadDeposit, "Market needs dead deposit");
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function _validateMarketParams(MarketParams memory marketParams, address expectedAsset, address expectedIrm)
|
|
164
|
+
internal
|
|
165
|
+
pure
|
|
166
|
+
{
|
|
167
|
+
require(marketParams.loanToken == expectedAsset, "Market loanToken does not match vault asset");
|
|
168
|
+
require(marketParams.irm == expectedIrm, "Market IRM does not match adaptiveCurveIrm");
|
|
169
|
+
require(marketParams.collateralToken != address(0), "Market not found (collateralToken is zero)");
|
|
170
|
+
}
|
|
171
|
+
|
|
112
172
|
function _configureVaultTimelocks(
|
|
113
173
|
address vault,
|
|
114
174
|
uint256 highDuration,
|
|
@@ -127,12 +187,12 @@ contract MorphoVaultV2DeployHelper {
|
|
|
127
187
|
selectors[6] = iVault.increaseTimelock.selector;
|
|
128
188
|
|
|
129
189
|
for (uint256 i = 0; i < 4; i++) {
|
|
130
|
-
iVault.submit(abi.encodeCall(
|
|
190
|
+
iVault.submit(abi.encodeCall(IVaultV2.increaseTimelock, (selectors[i], midDuration)));
|
|
131
191
|
iVault.increaseTimelock(selectors[i], midDuration);
|
|
132
192
|
}
|
|
133
193
|
|
|
134
194
|
for (uint256 i = 4; i < selectors.length; i++) {
|
|
135
|
-
iVault.submit(abi.encodeCall(
|
|
195
|
+
iVault.submit(abi.encodeCall(IVaultV2.increaseTimelock, (selectors[i], highDuration)));
|
|
136
196
|
iVault.increaseTimelock(selectors[i], highDuration);
|
|
137
197
|
}
|
|
138
198
|
|
|
@@ -152,7 +212,7 @@ contract MorphoVaultV2DeployHelper {
|
|
|
152
212
|
selectors[3] = IMorphoMarketV1AdapterV2.increaseTimelock.selector;
|
|
153
213
|
|
|
154
214
|
for (uint256 i = 0; i < selectors.length; i++) {
|
|
155
|
-
iAdapter.submit(abi.encodeCall(
|
|
215
|
+
iAdapter.submit(abi.encodeCall(IMorphoMarketV1AdapterV2.increaseTimelock, (selectors[i], duration)));
|
|
156
216
|
iAdapter.increaseTimelock(selectors[i], duration);
|
|
157
217
|
}
|
|
158
218
|
|