@@ -15,7 +15,9 @@ import "@pythnetwork/pyth-sdk-solidity/IPyth.sol";
1515/// @notice Morpho Blue oracle using Pyth Price Feeds.
1616contract MorphoPythOracle is IMorphoPythOracle {
1717 using Math for uint256 ;
18+
1819 IPyth public immutable pyth;
20+
1921 using VaultLib for IERC4626 ;
2022
2123 /* IMMUTABLES */
@@ -73,18 +75,11 @@ contract MorphoPythOracle is IMorphoPythOracle {
7375 PythErrorsLib.VAULT_CONVERSION_SAMPLE_IS_NOT_ONE
7476 );
7577 require (
76- address (quoteVault) != address (0 ) ||
77- quoteVaultConversionSample == 1 ,
78+ address (quoteVault) != address (0 ) || quoteVaultConversionSample == 1 ,
7879 PythErrorsLib.VAULT_CONVERSION_SAMPLE_IS_NOT_ONE
7980 );
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);
8883 BASE_VAULT = baseVault;
8984 BASE_VAULT_CONVERSION_SAMPLE = baseVaultConversionSample;
9085 QUOTE_VAULT = quoteVault;
@@ -95,17 +90,14 @@ contract MorphoPythOracle is IMorphoPythOracle {
9590 QUOTE_FEED_2 = quoteFeed2;
9691
9792 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;
109101
110102 PRICE_FEED_MAX_AGE = priceFeedMaxAge;
111103 }
@@ -114,22 +106,13 @@ contract MorphoPythOracle is IMorphoPythOracle {
114106
115107 /// @inheritdoc IOracle
116108 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+ );
134117 }
135118}
0 commit comments