@@ -15,7 +15,9 @@ import "@pythnetwork/pyth-sdk-solidity/IPyth.sol";
15
15
/// @notice Morpho Blue oracle using Pyth Price Feeds.
16
16
contract MorphoPythOracle is IMorphoPythOracle {
17
17
using Math for uint256 ;
18
+
18
19
IPyth public immutable pyth;
20
+
19
21
using VaultLib for IERC4626 ;
20
22
21
23
/* IMMUTABLES */
@@ -73,18 +75,11 @@ contract MorphoPythOracle is IMorphoPythOracle {
73
75
PythErrorsLib.VAULT_CONVERSION_SAMPLE_IS_NOT_ONE
74
76
);
75
77
require (
76
- address (quoteVault) != address (0 ) ||
77
- quoteVaultConversionSample == 1 ,
78
+ address (quoteVault) != address (0 ) || quoteVaultConversionSample == 1 ,
78
79
PythErrorsLib.VAULT_CONVERSION_SAMPLE_IS_NOT_ONE
79
80
);
80
- require (
81
- baseVaultConversionSample != 0 ,
82
- PythErrorsLib.VAULT_CONVERSION_SAMPLE_IS_ZERO
83
- );
84
- require (
85
- quoteVaultConversionSample != 0 ,
86
- PythErrorsLib.VAULT_CONVERSION_SAMPLE_IS_ZERO
87
- );
81
+ require (baseVaultConversionSample != 0 , PythErrorsLib.VAULT_CONVERSION_SAMPLE_IS_ZERO);
82
+ require (quoteVaultConversionSample != 0 , PythErrorsLib.VAULT_CONVERSION_SAMPLE_IS_ZERO);
88
83
BASE_VAULT = baseVault;
89
84
BASE_VAULT_CONVERSION_SAMPLE = baseVaultConversionSample;
90
85
QUOTE_VAULT = quoteVault;
@@ -95,17 +90,14 @@ contract MorphoPythOracle is IMorphoPythOracle {
95
90
QUOTE_FEED_2 = quoteFeed2;
96
91
97
92
pyth = IPyth (pyth_);
98
- SCALE_FACTOR =
99
- (10 **
100
- (36 +
101
- quoteTokenDecimals +
102
- PythFeedLib.getDecimals (pyth, QUOTE_FEED_1) +
103
- PythFeedLib.getDecimals (pyth, QUOTE_FEED_2) -
104
- baseTokenDecimals -
105
- PythFeedLib.getDecimals (pyth, BASE_FEED_1) -
106
- PythFeedLib.getDecimals (pyth, BASE_FEED_2)) *
107
- quoteVaultConversionSample) /
108
- baseVaultConversionSample;
93
+ SCALE_FACTOR = (
94
+ 10
95
+ ** (
96
+ 36 + quoteTokenDecimals + PythFeedLib.getDecimals (pyth, QUOTE_FEED_1)
97
+ + PythFeedLib.getDecimals (pyth, QUOTE_FEED_2) - baseTokenDecimals
98
+ - PythFeedLib.getDecimals (pyth, BASE_FEED_1) - PythFeedLib.getDecimals (pyth, BASE_FEED_2)
99
+ ) * quoteVaultConversionSample
100
+ ) / baseVaultConversionSample;
109
101
110
102
PRICE_FEED_MAX_AGE = priceFeedMaxAge;
111
103
}
@@ -114,22 +106,13 @@ contract MorphoPythOracle is IMorphoPythOracle {
114
106
115
107
/// @inheritdoc IOracle
116
108
function price () external view returns (uint256 ) {
117
- return
118
- SCALE_FACTOR.mulDiv (
119
- BASE_VAULT.getAssets (BASE_VAULT_CONVERSION_SAMPLE) *
120
- PythFeedLib.getPrice (
121
- pyth,
122
- BASE_FEED_1,
123
- PRICE_FEED_MAX_AGE
124
- ) *
125
- PythFeedLib.getPrice (pyth, BASE_FEED_2, PRICE_FEED_MAX_AGE),
126
- QUOTE_VAULT.getAssets (QUOTE_VAULT_CONVERSION_SAMPLE) *
127
- PythFeedLib.getPrice (
128
- pyth,
129
- QUOTE_FEED_1,
130
- PRICE_FEED_MAX_AGE
131
- ) *
132
- PythFeedLib.getPrice (pyth, QUOTE_FEED_2, PRICE_FEED_MAX_AGE)
133
- );
109
+ return SCALE_FACTOR.mulDiv (
110
+ BASE_VAULT.getAssets (BASE_VAULT_CONVERSION_SAMPLE)
111
+ * PythFeedLib.getPrice (pyth, BASE_FEED_1, PRICE_FEED_MAX_AGE)
112
+ * PythFeedLib.getPrice (pyth, BASE_FEED_2, PRICE_FEED_MAX_AGE),
113
+ QUOTE_VAULT.getAssets (QUOTE_VAULT_CONVERSION_SAMPLE)
114
+ * PythFeedLib.getPrice (pyth, QUOTE_FEED_1, PRICE_FEED_MAX_AGE)
115
+ * PythFeedLib.getPrice (pyth, QUOTE_FEED_2, PRICE_FEED_MAX_AGE)
116
+ );
134
117
}
135
118
}
0 commit comments