Skip to content

Commit b452e7d

Browse files
authored
Merge pull request #37 from Gearbox-protocol/pyth-oracle
feat: pyth oracle
2 parents c86f14d + d83622d commit b452e7d

37 files changed

+1288
-1210
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@
33
.DS_Store
44
cache
55
.env
6+
*.log

contracts/oracles/LPPriceFeed.sol

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,6 @@ import {ACLNonReentrantTrait} from "@gearbox-protocol/core-v3/contracts/traits/A
1010
import {PriceFeedValidationTrait} from "@gearbox-protocol/core-v3/contracts/traits/PriceFeedValidationTrait.sol";
1111
import {IPriceOracleV3} from "@gearbox-protocol/core-v3/contracts/interfaces/IPriceOracleV3.sol";
1212
import {IUpdatablePriceFeed} from "@gearbox-protocol/core-v2/contracts/interfaces/IPriceFeed.sol";
13-
import {
14-
IAddressProviderV3, AP_PRICE_ORACLE
15-
} from "@gearbox-protocol/core-v3/contracts/interfaces/IAddressProviderV3.sol";
1613

1714
/// @dev Window size in bps, used to compute upper bound given lower bound
1815
uint256 constant WINDOW_SIZE = 200;
@@ -54,17 +51,19 @@ abstract contract LPPriceFeed is ILPPriceFeed, ACLNonReentrantTrait, PriceFeedVa
5451
uint40 public override lastBoundsUpdate;
5552

5653
/// @notice Constructor
57-
/// @param _addressProvider Address provider contract address
54+
/// @param _acl Address of the ACL contract
55+
/// @param _priceOracle Address of the price oracle
5856
/// @param _lpToken LP token for which the prices are computed
5957
/// @param _lpContract LP contract (can be different from LP token)
6058
/// @dev Derived price feeds must call `_setLimiter` in their constructor after
6159
/// initializing all state variables needed for exchange rate calculation
62-
constructor(address _addressProvider, address _lpToken, address _lpContract)
63-
ACLNonReentrantTrait(_addressProvider) // U:[LPPF-1]
60+
constructor(address _acl, address _priceOracle, address _lpToken, address _lpContract)
61+
ACLNonReentrantTrait(_acl) // U:[LPPF-1]
62+
nonZeroAddress(_priceOracle) // U:[LPPF-1]
6463
nonZeroAddress(_lpToken) // U:[LPPF-1]
6564
nonZeroAddress(_lpContract) // U:[LPPF-1]
6665
{
67-
priceOracle = IAddressProviderV3(_addressProvider).getAddressOrRevert(AP_PRICE_ORACLE, 3_00); // U:[LPPF-1]
66+
priceOracle = _priceOracle; // U:[LPPF-1]
6867
lpToken = _lpToken; // U:[LPPF-1]
6968
lpContract = _lpContract; // U:[LPPF-1]
7069
}
@@ -149,13 +148,13 @@ abstract contract LPPriceFeed is ILPPriceFeed, ACLNonReentrantTrait, PriceFeedVa
149148
if (block.timestamp < lastBoundsUpdate + UPDATE_BOUNDS_COOLDOWN) revert UpdateBoundsBeforeCooldownException(); // U:[LPPF-7]
150149
lastBoundsUpdate = uint40(block.timestamp); // U:[LPPF-7]
151150

152-
address reserveFeed = IPriceOracleV3(priceOracle).priceFeedsRaw({token: lpToken, reserve: true}); // U:[LPPF-7]
151+
address reserveFeed = IPriceOracleV3(priceOracle).reservePriceFeeds({token: lpToken}); // U:[LPPF-7]
153152
if (reserveFeed == address(this)) revert ReserveFeedMustNotBeSelfException(); // U:[LPPF-7]
154153
try IUpdatablePriceFeed(reserveFeed).updatable() returns (bool updatable) {
155154
if (updatable) IUpdatablePriceFeed(reserveFeed).updatePrice(updateData); // U:[LPPF-7]
156155
} catch {}
157156

158-
uint256 reserveAnswer = IPriceOracleV3(priceOracle).getPriceRaw({token: lpToken, reserve: true}); // U:[LPPF-7]
157+
uint256 reserveAnswer = IPriceOracleV3(priceOracle).getReservePrice({token: lpToken}); // U:[LPPF-7]
159158
uint256 reserveExchangeRate = uint256(reserveAnswer * getScale() / uint256(getAggregatePrice())); // U:[LPPF-7]
160159

161160
_ensureValueInBounds(reserveExchangeRate, lowerBound); // U:[LPPF-7]

contracts/oracles/SingleAssetLPPriceFeed.sol

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,14 @@ abstract contract SingleAssetLPPriceFeed is LPPriceFeed {
1515
bool public immutable skipCheck;
1616

1717
constructor(
18-
address addressProvider,
18+
address _acl,
19+
address _priceOracle,
1920
address _lpToken,
2021
address _lpContract,
2122
address _priceFeed,
2223
uint32 _stalenessPeriod
2324
)
24-
LPPriceFeed(addressProvider, _lpToken, _lpContract) // U:[SAPF-1]
25+
LPPriceFeed(_acl, _priceOracle, _lpToken, _lpContract) // U:[SAPF-1]
2526
nonZeroAddress(_priceFeed) // U:[SAPF-1]
2627
{
2728
priceFeed = _priceFeed; // U:[SAPF-1]

contracts/oracles/aave/WrappedAaveV2PriceFeed.sol

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,14 @@ contract WrappedAaveV2PriceFeed is SingleAssetLPPriceFeed {
1414
PriceFeedType public constant override priceFeedType = PriceFeedType.WRAPPED_AAVE_V2_ORACLE;
1515

1616
constructor(
17-
address addressProvider,
17+
address _acl,
18+
address _priceOracle,
1819
uint256 lowerBound,
1920
address _waToken,
2021
address _priceFeed,
2122
uint32 _stalenessPeriod
2223
)
23-
SingleAssetLPPriceFeed(addressProvider, _waToken, _waToken, _priceFeed, _stalenessPeriod) // U:[AAVE-1]
24+
SingleAssetLPPriceFeed(_acl, _priceOracle, _waToken, _waToken, _priceFeed, _stalenessPeriod) // U:[AAVE-1]
2425
{
2526
_setLimiter(lowerBound); // U:[AAVE-1]
2627
}

contracts/oracles/balancer/BPTStablePriceFeed.sol

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,12 +38,13 @@ contract BPTStablePriceFeed is LPPriceFeed {
3838
bool public immutable skipCheck4;
3939

4040
constructor(
41-
address addressProvider,
41+
address _acl,
42+
address _priceOracle,
4243
uint256 lowerBound,
4344
address _balancerPool,
4445
PriceFeedParams[5] memory priceFeeds
4546
)
46-
LPPriceFeed(addressProvider, _balancerPool, _balancerPool) // U:[BAL-S-1]
47+
LPPriceFeed(_acl, _priceOracle, _balancerPool, _balancerPool) // U:[BAL-S-1]
4748
nonZeroAddress(priceFeeds[0].priceFeed) // U:[BAL-S-2]
4849
nonZeroAddress(priceFeeds[1].priceFeed) // U:[BAL-S-2]
4950
{

contracts/oracles/balancer/BPTWeightedPriceFeed.sol

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -98,13 +98,14 @@ contract BPTWeightedPriceFeed is LPPriceFeed {
9898
uint256 immutable scale7;
9999

100100
constructor(
101-
address addressProvider,
101+
address _acl,
102+
address _priceOracle,
102103
uint256 lowerBound,
103104
address _vault,
104105
address _pool,
105106
PriceFeedParams[] memory priceFeeds
106107
)
107-
LPPriceFeed(addressProvider, _pool, _pool) // U:[BAL-W-1]
108+
LPPriceFeed(_acl, _priceOracle, _pool, _pool) // U:[BAL-W-1]
108109
nonZeroAddress(_vault) // U:[BAL-W-1]
109110
nonZeroAddress(priceFeeds[0].priceFeed) // U:[BAL-W-2]
110111
nonZeroAddress(priceFeeds[1].priceFeed) // U:[BAL-W-2]

contracts/oracles/compound/CompoundV2PriceFeed.sol

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,14 @@ contract CompoundV2PriceFeed is SingleAssetLPPriceFeed {
1414
PriceFeedType public constant override priceFeedType = PriceFeedType.COMPOUND_V2_ORACLE;
1515

1616
constructor(
17-
address addressProvider,
17+
address _acl,
18+
address _priceOracle,
1819
uint256 lowerBound,
1920
address _cToken,
2021
address _priceFeed,
2122
uint32 _stalenessPeriod
2223
)
23-
SingleAssetLPPriceFeed(addressProvider, _cToken, _cToken, _priceFeed, _stalenessPeriod) // U:[COMP-1]
24+
SingleAssetLPPriceFeed(_acl, _priceOracle, _cToken, _cToken, _priceFeed, _stalenessPeriod) // U:[COMP-1]
2425
{
2526
_setLimiter(lowerBound); // U:[COMP-1]
2627
}

contracts/oracles/curve/CurveCryptoLPPriceFeed.sol

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,13 +36,14 @@ contract CurveCryptoLPPriceFeed is LPPriceFeed {
3636
bool public immutable skipCheck2;
3737

3838
constructor(
39-
address addressProvider,
39+
address _acl,
40+
address _priceOracle,
4041
uint256 lowerBound,
4142
address _token,
4243
address _pool,
4344
PriceFeedParams[3] memory priceFeeds
4445
)
45-
LPPriceFeed(addressProvider, _token, _pool) // U:[CRV-C-1]
46+
LPPriceFeed(_acl, _priceOracle, _token, _pool) // U:[CRV-C-1]
4647
nonZeroAddress(priceFeeds[0].priceFeed) // U:[CRV-C-2]
4748
nonZeroAddress(priceFeeds[1].priceFeed) // U:[CRV-C-2]
4849
{

contracts/oracles/curve/CurveStableLPPriceFeed.sol

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,14 @@ contract CurveStableLPPriceFeed is LPPriceFeed {
3535
bool public immutable skipCheck3;
3636

3737
constructor(
38-
address addressProvider,
38+
address _acl,
39+
address _priceOracle,
3940
uint256 lowerBound,
4041
address _token,
4142
address _pool,
4243
PriceFeedParams[4] memory priceFeeds
4344
)
44-
LPPriceFeed(addressProvider, _token, _pool) // U:[CRV-S-1]
45+
LPPriceFeed(_acl, _priceOracle, _token, _pool) // U:[CRV-S-1]
4546
nonZeroAddress(priceFeeds[0].priceFeed) // U:[CRV-S-2]
4647
nonZeroAddress(priceFeeds[1].priceFeed) // U:[CRV-S-2]
4748
{

contracts/oracles/curve/CurveUSDPriceFeed.sol

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,15 @@ contract CurveUSDPriceFeed is SingleAssetLPPriceFeed {
1717
PriceFeedType public constant override priceFeedType = PriceFeedType.CURVE_USD_ORACLE;
1818

1919
constructor(
20-
address addressProvider,
20+
address _acl,
21+
address _priceOracle,
2122
uint256 lowerBound,
2223
address _crvUSD,
2324
address _pool,
2425
address _priceFeed,
2526
uint32 _stalenessPeriod
2627
)
27-
SingleAssetLPPriceFeed(addressProvider, _crvUSD, _pool, _priceFeed, _stalenessPeriod) // U:[CRV-D-1]
28+
SingleAssetLPPriceFeed(_acl, _priceOracle, _crvUSD, _pool, _priceFeed, _stalenessPeriod) // U:[CRV-D-1]
2829
{
2930
_setLimiter(lowerBound); // U:[CRV-D-1]
3031
}

0 commit comments

Comments
 (0)