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.
Files changed (98) hide show
  1. package/contracts/MorphoMarketDataFetcher.sol +36 -77
  2. package/contracts/MorphoVaultV2DeployHelper.sol +64 -4
  3. package/contracts/OracleFactory.sol +301 -63
  4. package/dist/typechain-types/contracts/{MorphoMarketDataFetcher.sol/MorphoMarketDataFetcher.d.ts → MorphoMarketDataFetcher.d.ts} +7 -7
  5. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.d.ts.map +1 -0
  6. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.js.map +1 -0
  7. package/dist/typechain-types/contracts/MorphoVaultV2DeployHelper.d.ts +3 -0
  8. package/dist/typechain-types/contracts/MorphoVaultV2DeployHelper.d.ts.map +1 -1
  9. package/dist/typechain-types/contracts/OracleFactory.sol/ManualChainlinkMockFeed.d.ts +132 -6
  10. package/dist/typechain-types/contracts/OracleFactory.sol/ManualChainlinkMockFeed.d.ts.map +1 -1
  11. package/dist/typechain-types/contracts/OracleFactory.sol/ManualChainlinkMockFeedFactory.d.ts +11 -21
  12. package/dist/typechain-types/contracts/OracleFactory.sol/ManualChainlinkMockFeedFactory.d.ts.map +1 -1
  13. package/dist/typechain-types/contracts/OracleFactory.sol/index.d.ts +0 -1
  14. package/dist/typechain-types/contracts/OracleFactory.sol/index.d.ts.map +1 -1
  15. package/dist/typechain-types/contracts/index.d.ts +1 -2
  16. package/dist/typechain-types/contracts/index.d.ts.map +1 -1
  17. package/dist/typechain-types/factories/contracts/{MorphoMarketDataFetcher.sol/MorphoMarketDataFetcher__factory.d.ts → MorphoMarketDataFetcher__factory.d.ts} +13 -13
  18. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher__factory.d.ts.map +1 -0
  19. package/dist/typechain-types/factories/contracts/{MorphoMarketDataFetcher.sol/MorphoMarketDataFetcher__factory.js → MorphoMarketDataFetcher__factory.js} +11 -11
  20. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher__factory.js.map +1 -0
  21. package/dist/typechain-types/factories/contracts/MorphoVaultV2DeployHelper__factory.d.ts +5 -1
  22. package/dist/typechain-types/factories/contracts/MorphoVaultV2DeployHelper__factory.d.ts.map +1 -1
  23. package/dist/typechain-types/factories/contracts/MorphoVaultV2DeployHelper__factory.js +6 -1
  24. package/dist/typechain-types/factories/contracts/MorphoVaultV2DeployHelper__factory.js.map +1 -1
  25. package/dist/typechain-types/factories/contracts/OracleFactory.sol/ManualChainlinkMockFeedFactory__factory.d.ts +7 -37
  26. package/dist/typechain-types/factories/contracts/OracleFactory.sol/ManualChainlinkMockFeedFactory__factory.d.ts.map +1 -1
  27. package/dist/typechain-types/factories/contracts/OracleFactory.sol/ManualChainlinkMockFeedFactory__factory.js +8 -48
  28. package/dist/typechain-types/factories/contracts/OracleFactory.sol/ManualChainlinkMockFeedFactory__factory.js.map +1 -1
  29. package/dist/typechain-types/factories/contracts/OracleFactory.sol/ManualChainlinkMockFeed__factory.d.ts +191 -7
  30. package/dist/typechain-types/factories/contracts/OracleFactory.sol/ManualChainlinkMockFeed__factory.d.ts.map +1 -1
  31. package/dist/typechain-types/factories/contracts/OracleFactory.sol/ManualChainlinkMockFeed__factory.js +246 -9
  32. package/dist/typechain-types/factories/contracts/OracleFactory.sol/ManualChainlinkMockFeed__factory.js.map +1 -1
  33. package/dist/typechain-types/factories/contracts/OracleFactory.sol/index.d.ts +0 -1
  34. package/dist/typechain-types/factories/contracts/OracleFactory.sol/index.d.ts.map +1 -1
  35. package/dist/typechain-types/factories/contracts/OracleFactory.sol/index.js +1 -3
  36. package/dist/typechain-types/factories/contracts/OracleFactory.sol/index.js.map +1 -1
  37. package/dist/typechain-types/factories/contracts/index.d.ts +1 -1
  38. package/dist/typechain-types/factories/contracts/index.d.ts.map +1 -1
  39. package/dist/typechain-types/factories/contracts/index.js +3 -2
  40. package/dist/typechain-types/factories/contracts/index.js.map +1 -1
  41. package/dist/typechain-types/index.d.ts +2 -4
  42. package/dist/typechain-types/index.d.ts.map +1 -1
  43. package/dist/typechain-types/index.js +3 -5
  44. package/dist/typechain-types/index.js.map +1 -1
  45. package/package.json +1 -1
  46. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IChainlinkAggregator.d.ts +0 -60
  47. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IChainlinkAggregator.d.ts.map +0 -1
  48. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IChainlinkAggregator.js +0 -3
  49. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IChainlinkAggregator.js.map +0 -1
  50. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IERC20Metadata.d.ts +0 -48
  51. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IERC20Metadata.d.ts.map +0 -1
  52. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IERC20Metadata.js +0 -3
  53. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IERC20Metadata.js.map +0 -1
  54. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IMorpho.d.ts +0 -84
  55. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IMorpho.d.ts.map +0 -1
  56. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IMorpho.js +0 -3
  57. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IMorpho.js.map +0 -1
  58. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IMorphoChainlinkOracleV2.d.ts +0 -62
  59. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IMorphoChainlinkOracleV2.d.ts.map +0 -1
  60. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IMorphoChainlinkOracleV2.js +0 -3
  61. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/IMorphoChainlinkOracleV2.js.map +0 -1
  62. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/MorphoMarketDataFetcher.d.ts.map +0 -1
  63. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/MorphoMarketDataFetcher.js.map +0 -1
  64. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/index.d.ts +0 -6
  65. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/index.d.ts.map +0 -1
  66. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/index.js +0 -3
  67. package/dist/typechain-types/contracts/MorphoMarketDataFetcher.sol/index.js.map +0 -1
  68. package/dist/typechain-types/contracts/OracleFactory.sol/IChainlinkAggregator.d.ts +0 -60
  69. package/dist/typechain-types/contracts/OracleFactory.sol/IChainlinkAggregator.d.ts.map +0 -1
  70. package/dist/typechain-types/contracts/OracleFactory.sol/IChainlinkAggregator.js +0 -3
  71. package/dist/typechain-types/contracts/OracleFactory.sol/IChainlinkAggregator.js.map +0 -1
  72. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IChainlinkAggregator__factory.d.ts +0 -44
  73. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IChainlinkAggregator__factory.d.ts.map +0 -1
  74. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IChainlinkAggregator__factory.js +0 -67
  75. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IChainlinkAggregator__factory.js.map +0 -1
  76. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IERC20Metadata__factory.d.ts +0 -56
  77. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IERC20Metadata__factory.d.ts.map +0 -1
  78. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IERC20Metadata__factory.js +0 -84
  79. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IERC20Metadata__factory.js.map +0 -1
  80. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IMorphoChainlinkOracleV2__factory.d.ts +0 -108
  81. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IMorphoChainlinkOracleV2__factory.d.ts.map +0 -1
  82. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IMorphoChainlinkOracleV2__factory.js +0 -151
  83. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IMorphoChainlinkOracleV2__factory.js.map +0 -1
  84. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IMorpho__factory.d.ts +0 -69
  85. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IMorpho__factory.d.ts.map +0 -1
  86. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IMorpho__factory.js +0 -101
  87. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/IMorpho__factory.js.map +0 -1
  88. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/MorphoMarketDataFetcher__factory.d.ts.map +0 -1
  89. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/MorphoMarketDataFetcher__factory.js.map +0 -1
  90. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/index.d.ts +0 -6
  91. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/index.d.ts.map +0 -1
  92. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/index.js +0 -18
  93. package/dist/typechain-types/factories/contracts/MorphoMarketDataFetcher.sol/index.js.map +0 -1
  94. package/dist/typechain-types/factories/contracts/OracleFactory.sol/IChainlinkAggregator__factory.d.ts +0 -44
  95. package/dist/typechain-types/factories/contracts/OracleFactory.sol/IChainlinkAggregator__factory.d.ts.map +0 -1
  96. package/dist/typechain-types/factories/contracts/OracleFactory.sol/IChainlinkAggregator__factory.js +0 -67
  97. package/dist/typechain-types/factories/contracts/OracleFactory.sol/IChainlinkAggregator__factory.js.map +0 -1
  98. /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
- struct MarketParams {
5
- address loanToken;
6
- address collateralToken;
7
- address oracle;
8
- address irm;
9
- uint256 lltv;
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
- address baseFeed1;
78
- address baseFeed2;
79
- address baseVault;
80
- address baseVaultConversionSample;
81
- address quoteFeed1;
82
- address quoteFeed2;
83
- address quoteVault;
84
- address quoteVaultConversionSample;
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 (address a) { data.oracle.baseFeed1 = a; } catch {}
127
- try IMorphoChainlinkOracleV2(params.oracle).BASE_FEED_2() returns (address a) { data.oracle.baseFeed2 = a; } catch {}
128
- try IMorphoChainlinkOracleV2(params.oracle).BASE_VAULT() returns (address a) { data.oracle.baseVault = a; } catch {}
129
- try IMorphoChainlinkOracleV2(params.oracle).BASE_VAULT_CONVERSION_SAMPLE() returns (address a) { data.oracle.baseVaultConversionSample = a; } catch {}
130
- try IMorphoChainlinkOracleV2(params.oracle).QUOTE_FEED_1() returns (address a) { data.oracle.quoteFeed1 = a; } catch {}
131
- try IMorphoChainlinkOracleV2(params.oracle).QUOTE_FEED_2() returns (address a) { data.oracle.quoteFeed2 = a; } catch {}
132
- try IMorphoChainlinkOracleV2(params.oracle).QUOTE_VAULT() returns (address a) { data.oracle.quoteVault = a; } catch {}
133
- try IMorphoChainlinkOracleV2(params.oracle).QUOTE_VAULT_CONVERSION_SAMPLE() returns (address a) { data.oracle.quoteVaultConversionSample = a; } catch {}
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 IChainlinkAggregator(data.oracle.baseFeed1).latestRoundData() returns (
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 IChainlinkAggregator(data.oracle.baseFeed1).decimals() returns (uint8 _dec) { data.oracle.baseFeed.decimals = _dec; } catch {}
148
- try IERC20Metadata(data.oracle.baseFeed1).symbol() returns (string memory _sym) { data.oracle.baseFeed.symbol = _sym; } catch {}
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 IChainlinkAggregator(data.oracle.quoteFeed1).latestRoundData() returns (
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 IChainlinkAggregator(data.oracle.quoteFeed1).decimals() returns (uint8 _dec) { data.oracle.quoteFeed.decimals = _dec; } catch {}
161
- try IERC20Metadata(data.oracle.quoteFeed1).symbol() returns (string memory _sym) { data.oracle.quoteFeed.symbol = _sym; } catch {}
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
- try IMorpho(morphoAddress).position(marketId, deadAddress) returns (uint128 supplyShares, uint128, uint128) {
167
- data.deadAddressSupply = uint256(supplyShares);
168
- } catch {}
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(iVault.increaseTimelock, (selectors[i], midDuration)));
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(iVault.increaseTimelock, (selectors[i], highDuration)));
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(iAdapter.increaseTimelock, (selectors[i], duration)));
215
+ iAdapter.submit(abi.encodeCall(IMorphoMarketV1AdapterV2.increaseTimelock, (selectors[i], duration)));
156
216
  iAdapter.increaseTimelock(selectors[i], duration);
157
217
  }
158
218