From c72238deded1ba284b50a29d883b3db4b232984c Mon Sep 17 00:00:00 2001 From: MrDeadCe11 Date: Sat, 20 Jul 2024 17:23:10 -0500 Subject: [PATCH 1/4] fixed compiler errors --- script/Common.s.sol | 2 - script/DeployOracle.s.sol | 48 --------------------- script/dexrelayer/DeployPendleFactory.s.sol | 4 +- src/contracts/oracles/ChainlinkRelayer.sol | 5 ++- 4 files changed, 4 insertions(+), 55 deletions(-) diff --git a/script/Common.s.sol b/script/Common.s.sol index fdb1194..e5fef49 100644 --- a/script/Common.s.sol +++ b/script/Common.s.sol @@ -10,7 +10,6 @@ import {IAuthorizable} from '@interfaces/utils/IAuthorizable.sol'; import {CamelotRelayerFactory} from '@contracts/factories/CamelotRelayerFactory.sol'; import {ChainlinkRelayerFactory} from '@contracts/factories/ChainlinkRelayerFactory.sol'; import {DenominatedOracleFactory} from '@contracts/factories/DenominatedOracleFactory.sol'; -import {PendleRelayerFactory} from '@contracts/factories/pendle/PendleRelayerFactory.sol'; import {IDelayedOracleFactory} from '@interfaces/factories/IDelayedOracleFactory.sol'; abstract contract CommonMainnet is Script { @@ -18,7 +17,6 @@ abstract contract CommonMainnet is Script { CamelotRelayerFactory public camelotRelayerFactory = CamelotRelayerFactory(MAINNET_CAMELOT_RELAYER_FACTORY); DenominatedOracleFactory public denominatedOracleFactory = DenominatedOracleFactory(MAINNET_DENOMINATED_ORACLE_FACTORY); - PendleRelayerFactory public pendleRelayerFactory = PendleRelayerFactory(MAINNET_PENDLE_RELAYER_FACTORY); IDelayedOracleFactory public delayedOracleFactory = IDelayedOracleFactory(MAINNET_DELAYED_ORACLE_FACTORY); } diff --git a/script/DeployOracle.s.sol b/script/DeployOracle.s.sol index b6a4167..030a1df 100644 --- a/script/DeployOracle.s.sol +++ b/script/DeployOracle.s.sol @@ -72,51 +72,3 @@ contract DeployLinkGrtEthOracles is Script, CommonMainnet { vm.stopBroadcast(); } } - -// BROADCAST -// source .env && forge script DeployRethPtToSyPendleRelayerMainnet rtEthOracles --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_MAINNET_RPC --broadcast --verify --etherscan-api-key $ARB_ETHERSCAN_API_KEY --account defaultKey --sender $DEFAULT_KEY_PUBLIC_ADDRESS -// SIMULATE -// source .env && forge script DeployRethPtToSyPendleRelayerMainnet rtEthOracles --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_MAINNET_RPC --account defaultKey --sender $DEFAULT_KEY_PUBLIC -contract DeployRethPtToSyPendleRelayerMainnet is CommonMainnet { - function run() public { - vm.startBroadcast(); - IBaseOracle _pendleRethPtToSyFeed = pendleRelayerFactory.deployPendlePtRelayer( - MAINNET_PENDLE_RETH_MARKET, MAINNET_PENDLE_ORACLE, MAINNET_PENDLE_TWAP_DURATION - ); - - IBaseOracle _rethToUSDOracle = denominatedOracleFactory.deployDenominatedOracle( - _pendleRethPtToSyFeed, IBaseOracle(MAINNET_DENOMINATED_RETH_USD_ORACLE), false - ); - - IBaseOracle __rethToUSDOracleDelayedOracle = - delayedOracleFactory.deployDelayedOracle(_wstethyToUSDOracle, MAINNET_ORACLE_DELAY); - - __rethToUSDOracleDelayedOracle.symbol(); - vm.stopBroadcast(); - } -} - -// BROADCAST -// source .env && forge script DeployWsethPtToSyPendleRelayerMainnet --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_MAINNET_RPC --broadcast --verify --etherscan-api-key $ARB_ETHERSCAN_API_KEY --account defaultKey --sender $DEFAULT_KEY_PUBLIC_ADDRESS - -// SIMULATE -// source .env && forge script DeployWsethPtToSyPendleRelayerMainnet --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_MAINNET_RPC --account defaultKey --sender $DEFAULT_KEY_PUBLIC - -contract DeployWstethPtToSyPendleRelayerMainnet is CommonMainnet { - function run() public { - vm.startBroadcast(); - IBaseOracle _pendleWstethPtToSyFeed = pendleRelayerFactory.deployPendlePtRelayer( - MAINNET_PENDLE_WSTETH_MARKET, MAINNET_PENDLE_ORACLE, MAINNET_PENDLE_TWAP_DURATION - ); - - IBaseOracle _wstethToUSDOracle = denominatedOracleFactory.deployDenominatedOracle( - _pendleRethPtToSyFeed, IBaseOracle(MAINNET_DENOMINATED_WSTETH_USD_ORACLE), false - ); - - IBaseOracle _wstethToUSDDelayedOracle = - delayedOracleFactory.deployDelayedOracle(_wstethToUSDOracle, MAINNET_ORACLE_DELAY); - - _wstethToUSDDelayedOracle.symbol(); - vm.stopBroadcast(); - } -} diff --git a/script/dexrelayer/DeployPendleFactory.s.sol b/script/dexrelayer/DeployPendleFactory.s.sol index c791ce3..39b58b6 100644 --- a/script/dexrelayer/DeployPendleFactory.s.sol +++ b/script/dexrelayer/DeployPendleFactory.s.sol @@ -22,9 +22,7 @@ contract DeployPendleFactory is Script { PendleRelayerFactory public pendleRelayerFactory; function run() public { - - uint256 pk = vm.envUint(); - vm.startBroadcast(pk); + vm.startBroadcast(); pendleRelayerFactory = new PendleRelayerFactory(); vm.stopBroadcast(); } diff --git a/src/contracts/oracles/ChainlinkRelayer.sol b/src/contracts/oracles/ChainlinkRelayer.sol index e9c9674..de9b31b 100644 --- a/src/contracts/oracles/ChainlinkRelayer.sol +++ b/src/contracts/oracles/ChainlinkRelayer.sol @@ -2,12 +2,13 @@ pragma solidity 0.7.6; import {IChainlinkOracle} from '@interfaces/oracles/IChainlinkOracle.sol'; - +import 'forge-std/console2.sol'; /** * @title ChainlinkRelayer * @notice This contracts transforms a Chainlink price feed into a standard IBaseOracle feed * It also verifies that the reading is new enough, compared to a STALE_THRESHOLD */ + contract ChainlinkRelayer { uint256 public immutable STALE_THRESHOLD; int256 public immutable MULTIPLIER; @@ -47,7 +48,7 @@ contract ChainlinkRelayer { function read() public view virtual returns (uint256 _result) { // Fetch values from Chainlink (, int256 _aggregatorResult,, uint256 _aggregatorTimestamp,) = chainlinkFeed.latestRoundData(); - + console2.logInt(_aggregatorResult); // Revert if price is invalid require(_aggregatorResult != 0 && _isValidFeed(_aggregatorTimestamp), 'InvalidPriceFeed'); From 30c98d048d6cbd85dacf0e50e1839cda2564f98a Mon Sep 17 00:00:00 2001 From: MrDeadCe11 Date: Sat, 20 Jul 2024 17:26:17 -0500 Subject: [PATCH 2/4] removed pendle tests --- test/unit/RelayerFactories.t.sol | 63 +------------------------------- 1 file changed, 1 insertion(+), 62 deletions(-) diff --git a/test/unit/RelayerFactories.t.sol b/test/unit/RelayerFactories.t.sol index 7536e87..bf02331 100644 --- a/test/unit/RelayerFactories.t.sol +++ b/test/unit/RelayerFactories.t.sol @@ -401,7 +401,7 @@ contract Unit_Pendle_Renzo_Deploy_Oracle is Base { delayedOracleFactory = IDelayedOracleFactory(MAINNET_DELAYED_ORACLE_FACTORY); chainlinkRelayerFactory = ChainlinkRelayerFactory(MAINNET_CHAINLINK_RELAYER_FACTORY); denominatedOracleFactory = DenominatedOracleFactory(MAINNET_DENOMINATED_ORACLE_FACTORY); - pendleFactory = IPendleRelayerFactory(address(new PendleRelayerFactory())); + pendleFactory = IPendleRelayerFactory(address(new PendleRelayerFactory())); label(address(delayedOracleFactory), 'DelayedOracleFactory'); label(address(chainlinkRelayerFactory), 'ChainlinkRelayerFactory'); label(address(denominatedOracleFactory), 'DenominatedOracleFactory'); @@ -425,66 +425,5 @@ contract Unit_Pendle_Renzo_Deploy_Oracle is Base { string memory _ezEthSymbol = _ezEthUsdDelayedOracle.symbol(); // "(EZETH / ETH) * (ETH / USD)" vm.stopPrank(); assertEq(_ezEthSymbol, '(ezETH / ETH) * (ETH / USD)'); - - } - - function test_Deploy_PendleFactory() public { - assertEq(pendleFactory.relayerId(), 0); - assertEq(pendleFactory.authorizedAccounts()[0], address(this)); - } - - - function test_Deploy_PT_Oracle() public { - IBaseOracle ptOracle = - pendleFactory.deployPendlePtRelayer(MAINNET_PENDLE_RETH_MARKET, MAINNET_PENDLE_ORACLE, uint32(900)); - assertTrue(keccak256(abi.encode(ptOracle.symbol())) != keccak256(abi.encode(''))); - assertEq(uint256(IPendleRelayer(address(ptOracle)).twapDuration()), 900); - assertEq(address(IPendleRelayer(address(ptOracle)).market()), MAINNET_PENDLE_RETH_MARKET); - assertEq(address(IPendleRelayer(address(ptOracle)).oracle()), MAINNET_PENDLE_ORACLE); - assertEq(address(IPendleRelayer(address(ptOracle)).PT()), 0x685155D3BD593508Fe32Be39729810A591ED9c87); - assertEq(address(IPendleRelayer(address(ptOracle)).YT()), 0xe822AE44EB2466B4E263b1cbC94b4833dDEf9700); - assertEq(address(IPendleRelayer(address(ptOracle)).SY()), 0xc0Cf4b266bE5B3229C49590B59E67A09c15b22f4); - } - - function test_Deploy_YT_Oracle() public { - IBaseOracle ytOracle = - pendleFactory.deployPendleYtRelayer(MAINNET_PENDLE_RETH_MARKET, MAINNET_PENDLE_ORACLE, uint32(900)); - assertTrue(keccak256(abi.encode(ytOracle.symbol())) != keccak256(abi.encode(''))); - assertEq(uint256(IPendleRelayer(address(ytOracle)).twapDuration()), 900); - assertEq(address(IPendleRelayer(address(ytOracle)).market()), MAINNET_PENDLE_RETH_MARKET); - assertEq(address(IPendleRelayer(address(ytOracle)).oracle()), MAINNET_PENDLE_ORACLE); - assertEq(address(IPendleRelayer(address(ytOracle)).PT()), 0x685155D3BD593508Fe32Be39729810A591ED9c87); - assertEq(address(IPendleRelayer(address(ytOracle)).YT()), 0xe822AE44EB2466B4E263b1cbC94b4833dDEf9700); - assertEq(address(IPendleRelayer(address(ytOracle)).SY()), 0xc0Cf4b266bE5B3229C49590B59E67A09c15b22f4); - } - - function test_Deploy_LP_Oracle() public { - IBaseOracle lpOracle = - pendleFactory.deployPendleLpRelayer(MAINNET_PENDLE_RETH_MARKET, MAINNET_PENDLE_ORACLE, uint32(900)); - assertTrue(keccak256(abi.encode(lpOracle.symbol())) != keccak256(abi.encode(''))); - assertEq(uint256(IPendleRelayer(address(lpOracle)).twapDuration()), 900); - assertEq(address(IPendleRelayer(address(lpOracle)).market()), MAINNET_PENDLE_RETH_MARKET); - assertEq(address(IPendleRelayer(address(lpOracle)).oracle()), MAINNET_PENDLE_ORACLE); - assertEq(address(IPendleRelayer(address(lpOracle)).PT()), 0x685155D3BD593508Fe32Be39729810A591ED9c87); - assertEq(address(IPendleRelayer(address(lpOracle)).YT()), 0xe822AE44EB2466B4E263b1cbC94b4833dDEf9700); - assertEq(address(IPendleRelayer(address(lpOracle)).SY()), 0xc0Cf4b266bE5B3229C49590B59E67A09c15b22f4); - } - - function test_Deploy_Oracle_Revert_Invalid_Twap() public { - vm.expectRevert('Invalid TWAP duration'); - pendleFactory.deployPendlePtRelayer(MAINNET_PENDLE_RETH_MARKET, MAINNET_PENDLE_ORACLE, uint32(0)); - vm.expectRevert('Invalid TWAP duration'); - pendleFactory.deployPendleYtRelayer(MAINNET_PENDLE_RETH_MARKET, MAINNET_PENDLE_ORACLE, uint32(0)); - vm.expectRevert('Invalid TWAP duration'); - pendleFactory.deployPendleLpRelayer(MAINNET_PENDLE_RETH_MARKET, MAINNET_PENDLE_ORACLE, uint32(0)); - } - - function test_Deploy_Oracle_Revert_Invalid_Address() public { - vm.expectRevert('Invalid address'); - pendleFactory.deployPendlePtRelayer(address(0), MAINNET_PENDLE_ORACLE, uint32(900)); - vm.expectRevert('Invalid address'); - pendleFactory.deployPendleYtRelayer(address(0), MAINNET_PENDLE_ORACLE, uint32(900)); - vm.expectRevert('Invalid address'); - pendleFactory.deployPendleLpRelayer(address(0), MAINNET_PENDLE_ORACLE, uint32(900)); } } From 95aa4f2b636c444cc25692da00eb8925b45710ec Mon Sep 17 00:00:00 2001 From: MrDeadCe11 Date: Mon, 22 Jul 2024 21:31:17 -0500 Subject: [PATCH 3/4] finished removing pendle contracts --- script/Registry.s.sol | 7 - script/dexrelayer/DeployPendleFactory.s.sol | 29 ---- .../pendle/PendleLpToSyRelayerChild.sol | 20 --- .../pendle/PendlePtToSyRelayerChild.sol | 20 --- .../factories/pendle/PendleRelayerFactory.sol | 59 -------- .../pendle/PendleYtToSyRelayerChild.sol | 20 --- .../oracles/pendle/PendleLpToSyRelayer.sol | 49 ------ .../oracles/pendle/PendlePtToSyRelayer.sol | 52 ------- .../oracles/pendle/PendleYtToSyRelayer.sol | 50 ------ .../factories/IPendleRelayerFactory.sol | 33 ---- src/interfaces/oracles/pendle/IPMarket.sol | 11 -- src/interfaces/oracles/pendle/IPOracle.sol | 41 ----- .../oracles/pendle/IPPrincipalToken.sol | 22 --- .../oracles/pendle/IPYieldToken.sol | 71 --------- .../oracles/pendle/IPendleRelayer.sol | 18 --- .../oracles/pendle/IStandardizedYield.sol | 143 ------------------ test/unit/RelayerFactories.t.sol | 8 +- 17 files changed, 1 insertion(+), 652 deletions(-) delete mode 100644 script/dexrelayer/DeployPendleFactory.s.sol delete mode 100644 src/contracts/factories/pendle/PendleLpToSyRelayerChild.sol delete mode 100644 src/contracts/factories/pendle/PendlePtToSyRelayerChild.sol delete mode 100644 src/contracts/factories/pendle/PendleRelayerFactory.sol delete mode 100644 src/contracts/factories/pendle/PendleYtToSyRelayerChild.sol delete mode 100644 src/contracts/oracles/pendle/PendleLpToSyRelayer.sol delete mode 100644 src/contracts/oracles/pendle/PendlePtToSyRelayer.sol delete mode 100644 src/contracts/oracles/pendle/PendleYtToSyRelayer.sol delete mode 100644 src/interfaces/factories/IPendleRelayerFactory.sol delete mode 100644 src/interfaces/oracles/pendle/IPMarket.sol delete mode 100644 src/interfaces/oracles/pendle/IPOracle.sol delete mode 100644 src/interfaces/oracles/pendle/IPPrincipalToken.sol delete mode 100644 src/interfaces/oracles/pendle/IPYieldToken.sol delete mode 100644 src/interfaces/oracles/pendle/IPendleRelayer.sol delete mode 100644 src/interfaces/oracles/pendle/IStandardizedYield.sol diff --git a/script/Registry.s.sol b/script/Registry.s.sol index 10d9d4b..73641cc 100644 --- a/script/Registry.s.sol +++ b/script/Registry.s.sol @@ -112,10 +112,3 @@ address constant ETH_ARB_POOL = 0xe51635ae8136aBAc44906A8f230C2D235E9c195F; //////RENZO address constant MAINNET_CHAINLINK_EZETH_ETH_FEED = 0x11E1836bFF2ce9d6A5bec9cA79dc998210f3886d; - -//Pendle -uint32 constant MAINNET_PENDLE_TWAP_DURATION = 900; -address constant MAINNET_PENDLE_ORACLE = 0x9a9Fa8338dd5E5B2188006f1Cd2Ef26d921650C2; -address constant MAINNET_PENDLE_RETH_MARKET = 0x14FbC760eFaF36781cB0eb3Cb255aD976117B9Bd; -address constant MAINNET_PENDLE_WSTETH_MARKET = 0x08a152834de126d2ef83D612ff36e4523FD0017F; - diff --git a/script/dexrelayer/DeployPendleFactory.s.sol b/script/dexrelayer/DeployPendleFactory.s.sol deleted file mode 100644 index 39b58b6..0000000 --- a/script/dexrelayer/DeployPendleFactory.s.sol +++ /dev/null @@ -1,29 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.7.6; - -import '@script/Registry.s.sol'; -import {Script} from 'forge-std/Script.sol'; -import {PendleRelayerFactory} from '@contracts/factories/pendle/PendleRelayerFactory.sol'; -import {IAuthorizable} from '@interfaces/utils/IAuthorizable.sol'; -import {IBaseOracle} from '@interfaces/oracles/IBaseOracle.sol'; - -// BROADCAST - -// source .env && forge script DeployPendleFactory --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_MAINNET_RPC --broadcast --verify --etherscan-api-key $ARB_ETHERSCAN_API_KEY --account defaultKey --sender $DEFAULT_KEY_PUBLIC_ADDRESS - -// SIMULATE -// source .env && forge script DeployPendleFactory --with-gas-price 2000000000 -vvvvv --rpc-url $ARB_SEPOLIA_RPC --account defaultKey --sender $DEFAULT_KEY_PUBLIC_ADDRESS - -contract DeployPendleFactory is Script { - IBaseOracle public pendleLpToSyRelayer; - IBaseOracle public pendleYtToSyRelayer; - IBaseOracle public pendlePtToSyRelayer; - - PendleRelayerFactory public pendleRelayerFactory; - - function run() public { - vm.startBroadcast(); - pendleRelayerFactory = new PendleRelayerFactory(); - vm.stopBroadcast(); - } -} diff --git a/src/contracts/factories/pendle/PendleLpToSyRelayerChild.sol b/src/contracts/factories/pendle/PendleLpToSyRelayerChild.sol deleted file mode 100644 index 795e2df..0000000 --- a/src/contracts/factories/pendle/PendleLpToSyRelayerChild.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.7.6; - -import {PendleLpToSyRelayer} from '@contracts/oracles/pendle/PendleLpToSyRelayer.sol'; -import {FactoryChild} from '@contracts/factories/FactoryChild.sol'; - -contract PendleLpToSyRelayerChild is PendleLpToSyRelayer, FactoryChild { - // --- Init --- - - /** - * @param _market The address pendle market - * @param _oracle The address of the pendle oracle - * @param _twapDuration the amount in seconds of the desired twap observations (recommended 900s) - */ - constructor( - address _market, - address _oracle, - uint32 _twapDuration - ) PendleLpToSyRelayer(_market, _oracle, _twapDuration) {} -} diff --git a/src/contracts/factories/pendle/PendlePtToSyRelayerChild.sol b/src/contracts/factories/pendle/PendlePtToSyRelayerChild.sol deleted file mode 100644 index 8ea1274..0000000 --- a/src/contracts/factories/pendle/PendlePtToSyRelayerChild.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.7.6; - -import {PendlePtToSyRelayer} from '@contracts/oracles/pendle/PendlePtToSyRelayer.sol'; -import {FactoryChild} from '@contracts/factories/FactoryChild.sol'; - -contract PendlePtToSyRelayerChild is PendlePtToSyRelayer, FactoryChild { - // --- Init --- - - /** - * @param _market The address pendle market - * @param _oracle The address of the pendle oracle - * @param _twapDuration the amount in seconds of the desired twap observations (recommended 900s) - */ - constructor( - address _market, - address _oracle, - uint32 _twapDuration - ) PendlePtToSyRelayer(_market, _oracle, _twapDuration) {} -} diff --git a/src/contracts/factories/pendle/PendleRelayerFactory.sol b/src/contracts/factories/pendle/PendleRelayerFactory.sol deleted file mode 100644 index 06104e3..0000000 --- a/src/contracts/factories/pendle/PendleRelayerFactory.sol +++ /dev/null @@ -1,59 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.7.6; - -import {IBaseOracle} from '@interfaces/oracles/IBaseOracle.sol'; -import {PendlePtToSyRelayerChild} from '@contracts/factories/pendle/PendlePtToSyRelayerChild.sol'; -import {PendleYtToSyRelayerChild} from '@contracts/factories/pendle/PendleYtToSyRelayerChild.sol'; -import {PendleLpToSyRelayerChild} from '@contracts/factories/pendle/PendleLpToSyRelayerChild.sol'; -import {Authorizable} from '@contracts/utils/Authorizable.sol'; -import 'forge-std/console2.sol'; - -contract PendleRelayerFactory is Authorizable { - uint256 public relayerId; - - // --- Events --- - event NewPendlePtRelayer(address indexed _market, address _oracle, uint32 _twapDuration); - event NewPendleYtRelayer(address indexed _market, address _oracle, uint32 _twapDuration); - event NewPendleLpRelayer(address indexed _market, address _oracle, uint32 _twapDuration); - - // --- Data --- - mapping(uint256 => address) public relayerById; - - // --- Init --- - constructor() Authorizable(msg.sender) {} - - // --- Methods --- - - function deployPendlePtRelayer( - address _market, - address _oracle, - uint32 _twapDuration - ) external isAuthorized returns (IBaseOracle _pendlePtRelayerChild) { - _pendlePtRelayerChild = IBaseOracle(address(new PendlePtToSyRelayerChild(_market, _oracle, _twapDuration))); - relayerId++; - relayerById[relayerId] = address(_pendlePtRelayerChild); - emit NewPendlePtRelayer(address(_market), _oracle, _twapDuration); - } - - function deployPendleYtRelayer( - address _market, - address _oracle, - uint32 _twapDuration - ) external isAuthorized returns (IBaseOracle _pendleYtRelayerChild) { - _pendleYtRelayerChild = IBaseOracle(address(new PendleYtToSyRelayerChild(_market, _oracle, _twapDuration))); - relayerId++; - relayerById[relayerId] = address(_pendleYtRelayerChild); - emit NewPendleYtRelayer(address(_market), _oracle, _twapDuration); - } - - function deployPendleLpRelayer( - address _market, - address _oracle, - uint32 _twapDuration - ) external isAuthorized returns (IBaseOracle _pendleLpRelayerChild) { - _pendleLpRelayerChild = IBaseOracle(address(new PendleLpToSyRelayerChild(_market, _oracle, _twapDuration))); - relayerId++; - relayerById[relayerId] = address(_pendleLpRelayerChild); - emit NewPendleLpRelayer(address(_market), _oracle, _twapDuration); - } -} diff --git a/src/contracts/factories/pendle/PendleYtToSyRelayerChild.sol b/src/contracts/factories/pendle/PendleYtToSyRelayerChild.sol deleted file mode 100644 index 6d83aa3..0000000 --- a/src/contracts/factories/pendle/PendleYtToSyRelayerChild.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.7.6; - -import {PendleYtToSyRelayer} from '@contracts/oracles/pendle/PendleYtToSyRelayer.sol'; -import {FactoryChild} from '@contracts/factories/FactoryChild.sol'; - -contract PendleYtToSyRelayerChild is PendleYtToSyRelayer, FactoryChild { - // --- Init --- - - /** - * @param _market The address pendle market - * @param _oracle The address of the pendle oracle - * @param _twapDuration the amount in seconds of the desired twap observations (recommended 900s) - */ - constructor( - address _market, - address _oracle, - uint32 _twapDuration - ) PendleYtToSyRelayer(_market, _oracle, _twapDuration) {} -} diff --git a/src/contracts/oracles/pendle/PendleLpToSyRelayer.sol b/src/contracts/oracles/pendle/PendleLpToSyRelayer.sol deleted file mode 100644 index de7e55e..0000000 --- a/src/contracts/oracles/pendle/PendleLpToSyRelayer.sol +++ /dev/null @@ -1,49 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.7.6; - -import '@interfaces/oracles/pendle/IPOracle.sol'; -import '@interfaces/oracles/pendle/IPMarket.sol'; - -/** - * @title PendleRelayer - * @notice This contracts transforms a Pendle TWAP price feed into a standard IBaseOracle feed - * - */ -contract PendleLpToSyRelayer { - IStandardizedYield public SY; - - IPMarket public market; - IPOracle public oracle; - - uint32 public twapDuration; - string public symbol; - - constructor(address _market, address _oracle, uint32 _twapDuration) { - require(_market != address(0) && _oracle != address(0), 'Invalid address'); - require(_twapDuration != 0, 'Invalid TWAP duration'); - - market = IPMarket(_market); - oracle = IPOracle(_oracle); - twapDuration = _twapDuration; - - (SY,,) = market.readTokens(); - - symbol = string(abi.encodePacked('LP / ', SY.symbol())); - // test if oracle is ready - (bool increaseCardinalityRequired,, bool oldestObservationSatisfied) = oracle.getOracleState(_market, _twapDuration); - // It's required to call IPMarket(market).increaseObservationsCardinalityNext(cardinalityRequired) and wait - // for at least the twapDuration, to allow data population. - // also - // It's necessary to wait for at least the twapDuration, to allow data population. - require(!increaseCardinalityRequired && oldestObservationSatisfied, 'Oracle not ready'); - } - - function getResultWithValidity() external view returns (uint256 _result, bool _validity) { - _result = oracle.getLpToSyRate(address(market), twapDuration); - _validity = true; - } - - function read() external view returns (uint256 _value) { - _value = oracle.getLpToSyRate(address(market), twapDuration); - } -} diff --git a/src/contracts/oracles/pendle/PendlePtToSyRelayer.sol b/src/contracts/oracles/pendle/PendlePtToSyRelayer.sol deleted file mode 100644 index 7879110..0000000 --- a/src/contracts/oracles/pendle/PendlePtToSyRelayer.sol +++ /dev/null @@ -1,52 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.7.6; - -import '@interfaces/oracles/pendle/IPOracle.sol'; -import '@interfaces/oracles/pendle/IPMarket.sol'; -import 'forge-std/console2.sol'; -/** - * @title PendleRelayer - * @notice This contracts transforms a Pendle TWAP price feed into a standard IBaseOracle feed - * - */ - -contract PendlePtToSyRelayer { - IStandardizedYield public SY; - IPPrincipalToken public PT; - - IPMarket public market; - IPOracle public oracle; - - uint32 public twapDuration; - string public symbol; - - constructor(address _market, address _oracle, uint32 _twapDuration) { - require(_market != address(0) && _oracle != address(0), 'Invalid address'); - require(_twapDuration != uint32(0), 'Invalid TWAP duration'); - - market = IPMarket(_market); - oracle = IPOracle(_oracle); - twapDuration = _twapDuration; - - (SY, PT,) = market.readTokens(); - - symbol = string(abi.encodePacked(PT.symbol(), ' / ', SY.symbol())); - - // test if oracle is ready - (bool increaseCardinalityRequired,, bool oldestObservationSatisfied) = oracle.getOracleState(_market, _twapDuration); - // It's required to call IPMarket(market).increaseObservationsCardinalityNext(cardinalityRequired) and wait - // for at least the twapDuration, to allow data population. - // also - // It's necessary to wait for at least the twapDuration, to allow data population. - require(!increaseCardinalityRequired && oldestObservationSatisfied, 'Oracle not ready'); - } - - function getResultWithValidity() external view returns (uint256 _result, bool _validity) { - _result = oracle.getPtToSyRate(address(market), twapDuration); - _validity = true; - } - - function read() external view returns (uint256 _value) { - _value = oracle.getPtToSyRate(address(market), twapDuration); - } -} diff --git a/src/contracts/oracles/pendle/PendleYtToSyRelayer.sol b/src/contracts/oracles/pendle/PendleYtToSyRelayer.sol deleted file mode 100644 index e291c8e..0000000 --- a/src/contracts/oracles/pendle/PendleYtToSyRelayer.sol +++ /dev/null @@ -1,50 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity 0.7.6; - -import '@interfaces/oracles/pendle/IPOracle.sol'; -import '@interfaces/oracles/pendle/IPMarket.sol'; - -/** - * @title PendleRelayer - * @notice This contracts transforms a Pendle TWAP price feed into a standard IBaseOracle feed - * - */ -contract PendleYtToSyRelayer { - IStandardizedYield public SY; - IPYieldToken public YT; - - IPMarket public market; - IPOracle public oracle; - - uint32 public twapDuration; - string public symbol; - - constructor(address _market, address _oracle, uint32 _twapDuration) { - require(_market != address(0) && _oracle != address(0), 'Invalid address'); - require(_twapDuration != 0, 'Invalid TWAP duration'); - - market = IPMarket(_market); - oracle = IPOracle(_oracle); - twapDuration = _twapDuration; - - (SY,, YT) = market.readTokens(); - - symbol = string(abi.encodePacked(YT.symbol(), ' / ', SY.symbol())); - // test if oracle is ready - (bool increaseCardinalityRequired,, bool oldestObservationSatisfied) = oracle.getOracleState(_market, _twapDuration); - // It's required to call IPMarket(market).increaseObservationsCardinalityNext(cardinalityRequired) and wait - // for at least the twapDuration, to allow data population. - // also - // It's necessary to wait for at least the twapDuration, to allow data population. - require(!increaseCardinalityRequired && oldestObservationSatisfied, 'Oracle not ready'); - } - - function getResultWithValidity() external view returns (uint256 _result, bool _validity) { - _result = oracle.getYtToSyRate(address(market), twapDuration); - _validity = true; - } - - function read() external view returns (uint256 _value) { - _value = oracle.getYtToSyRate(address(market), twapDuration); - } -} diff --git a/src/interfaces/factories/IPendleRelayerFactory.sol b/src/interfaces/factories/IPendleRelayerFactory.sol deleted file mode 100644 index 44ec165..0000000 --- a/src/interfaces/factories/IPendleRelayerFactory.sol +++ /dev/null @@ -1,33 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.7.6; - -import {IBaseOracle} from '@interfaces/oracles/IBaseOracle.sol'; -import {IAuthorizable} from '@interfaces/utils/IAuthorizable.sol'; - -interface IPendleRelayerFactory is IAuthorizable { - // --- Events --- - event NewPendlePtRelayer(address indexed _market, address _oracle, uint32 _twapDuration); - event NewPendleYtRelayer(address indexed _market, address _oracle, uint32 _twapDuration); - event NewPendleLpRelayer(address indexed _market, address _oracle, uint32 _twapDuration); - - // --- Methods --- - function relayerId() external view returns (uint256); - - function deployPendlePtRelayer( - address _market, - address _oracle, - uint32 _twapDuration - ) external returns (IBaseOracle _pendlePtRelayerChild); - - function deployPendleYtRelayer( - address _market, - address _oracle, - uint32 _twapDuration - ) external returns (IBaseOracle _pendleYtRelayerChild); - - function deployPendleLpRelayer( - address _market, - address _oracle, - uint32 _twapDuration - ) external returns (IBaseOracle _pendleLpRelayerChild); -} diff --git a/src/interfaces/oracles/pendle/IPMarket.sol b/src/interfaces/oracles/pendle/IPMarket.sol deleted file mode 100644 index 707b00e..0000000 --- a/src/interfaces/oracles/pendle/IPMarket.sol +++ /dev/null @@ -1,11 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.7.6; - -import {IStandardizedYield} from '@interfaces/oracles/pendle/IStandardizedYield.sol'; -import {IPPrincipalToken} from '@interfaces/oracles/pendle/IPPrincipalToken.sol'; -import {IPYieldToken} from '@interfaces/oracles/pendle/IPYieldToken.sol'; -import {IERC20Metadata} from '@interfaces/utils/IERC20Metadata.sol'; - -interface IPMarket is IERC20Metadata { - function readTokens() external view returns (IStandardizedYield _SY, IPPrincipalToken _PT, IPYieldToken _YT); -} diff --git a/src/interfaces/oracles/pendle/IPOracle.sol b/src/interfaces/oracles/pendle/IPOracle.sol deleted file mode 100644 index e4456fc..0000000 --- a/src/interfaces/oracles/pendle/IPOracle.sol +++ /dev/null @@ -1,41 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.7.6; - -// a minimal interface to interact with Pendle TWAP oracles -interface IPOracle { - /*/////////////////////////////////////////////////////////////// - PT, YT, LP to SY - //////////////////////////////////////////////////////////////*/ - - function getPtToSyRate(address market, uint32 duration) external view returns (uint256); - - function getYtToSyRate(address market, uint32 duration) external view returns (uint256); - - function getLpToSyRate(address market, uint32 duration) external view returns (uint256); - - /*/////////////////////////////////////////////////////////////// - PT, YT, LP to Asset - //////////////////////////////////////////////////////////////*/ - - /// @notice make sure you have taken into account the risk of not being able to withdraw from SY to Asset - function getPtToAssetRate(address market, uint32 duration) external view returns (uint256); - - function getYtToAssetRate(address market, uint32 duration) external view returns (uint256); - - function getLpToAssetRate(address market, uint32 duration) external view returns (uint256); - - /** - * A check function for the cardinality status of the market - * @param market PendleMarket address - * @param duration twap duration - * @return increaseCardinalityRequired a boolean indicates whether the cardinality should be increased to serve the duration - * @return cardinalityRequired the amount of cardinality required for the twap duration - */ - function getOracleState( - address market, - uint32 duration - ) - external - view - returns (bool increaseCardinalityRequired, uint16 cardinalityRequired, bool oldestObservationSatisfied); -} diff --git a/src/interfaces/oracles/pendle/IPPrincipalToken.sol b/src/interfaces/oracles/pendle/IPPrincipalToken.sol deleted file mode 100644 index 588525b..0000000 --- a/src/interfaces/oracles/pendle/IPPrincipalToken.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.7.6; - -import {IERC20Metadata} from '@interfaces/utils/IERC20Metadata.sol'; - -interface IPPrincipalToken is IERC20Metadata { - function burnByYT(address user, uint256 amount) external; - - function mintByYT(address user, uint256 amount) external; - - function initialize(address _YT) external; - - function SY() external view returns (address); - - function YT() external view returns (address); - - function factory() external view returns (address); - - function expiry() external view returns (uint256); - - function isExpired() external view returns (bool); -} diff --git a/src/interfaces/oracles/pendle/IPYieldToken.sol b/src/interfaces/oracles/pendle/IPYieldToken.sol deleted file mode 100644 index 47f3ddd..0000000 --- a/src/interfaces/oracles/pendle/IPYieldToken.sol +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.7.6; - -import {IERC20Metadata} from '@interfaces/utils/IERC20Metadata.sol'; - -interface IRewardManager { - function userReward(address token, address user) external view returns (uint128 index, uint128 accrued); -} - -interface IPInterestManagerYT { - event CollectInterestFee(uint256 amountInterestFee); - - function userInterest(address user) external view returns (uint128 lastPYIndex, uint128 accruedInterest); -} - -interface IPYieldToken is IERC20Metadata, IRewardManager, IPInterestManagerYT { - event NewInterestIndex(uint256 indexed newIndex); - - event Mint( - address indexed caller, - address indexed receiverPT, - address indexed receiverYT, - uint256 amountSyToMint, - uint256 amountPYOut - ); - - event Burn(address indexed caller, address indexed receiver, uint256 amountPYToRedeem, uint256 amountSyOut); - - event RedeemRewards(address indexed user, uint256[] amountRewardsOut); - - event RedeemInterest(address indexed user, uint256 interestOut); - - event CollectRewardFee(address indexed rewardToken, uint256 amountRewardFee); - - function mintPY(address receiverPT, address receiverYT) external returns (uint256 amountPYOut); - - function redeemPY(address receiver) external returns (uint256 amountSyOut); - - function redeemPYMulti( - address[] calldata receivers, - uint256[] calldata amountPYToRedeems - ) external returns (uint256[] memory amountSyOuts); - - function redeemDueInterestAndRewards( - address user, - bool redeemInterest, - bool redeemRewards - ) external returns (uint256 interestOut, uint256[] memory rewardsOut); - - function rewardIndexesCurrent() external returns (uint256[] memory); - - function pyIndexCurrent() external returns (uint256); - - function pyIndexStored() external view returns (uint256); - - function getRewardTokens() external view returns (address[] memory); - - function SY() external view returns (address); - - function PT() external view returns (address); - - function factory() external view returns (address); - - function expiry() external view returns (uint256); - - function isExpired() external view returns (bool); - - function doCacheIndexSameBlock() external view returns (bool); - - function pyIndexLastUpdatedBlock() external view returns (uint128); -} diff --git a/src/interfaces/oracles/pendle/IPendleRelayer.sol b/src/interfaces/oracles/pendle/IPendleRelayer.sol deleted file mode 100644 index 1968db8..0000000 --- a/src/interfaces/oracles/pendle/IPendleRelayer.sol +++ /dev/null @@ -1,18 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.7.6; - -import {IBaseOracle} from '@interfaces/oracles/IBaseOracle.sol'; -import {IPMarket} from '@interfaces/oracles/pendle/IPMarket.sol'; -import {IPOracle} from '@interfaces/oracles/pendle/IPOracle.sol'; -import {IStandardizedYield} from '@interfaces/oracles/pendle/IStandardizedYield.sol'; -import {IPPrincipalToken} from '@interfaces/oracles/pendle/IPPrincipalToken.sol'; -import {IPYieldToken} from '@interfaces/oracles/pendle/IPYieldToken.sol'; - -interface IPendleRelayer is IBaseOracle { - function twapDuration() external view returns (uint32); - function market() external view returns (IPMarket); - function oracle() external view returns (IPOracle); - function SY() external view returns (IStandardizedYield); - function PT() external view returns (IPPrincipalToken); - function YT() external view returns (IPYieldToken); -} diff --git a/src/interfaces/oracles/pendle/IStandardizedYield.sol b/src/interfaces/oracles/pendle/IStandardizedYield.sol deleted file mode 100644 index 599c1f7..0000000 --- a/src/interfaces/oracles/pendle/IStandardizedYield.sol +++ /dev/null @@ -1,143 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0 -pragma solidity ^0.7.6; - -import {IERC20Metadata} from '@interfaces/utils/IERC20Metadata.sol'; - -interface IStandardizedYield is IERC20Metadata { - /// @dev Emitted when any base tokens is deposited to mint shares - event Deposit( - address indexed caller, - address indexed receiver, - address indexed tokenIn, - uint256 amountDeposited, - uint256 amountSyOut - ); - - /// @dev Emitted when any shares are redeemed for base tokens - event Redeem( - address indexed caller, - address indexed receiver, - address indexed tokenOut, - uint256 amountSyToRedeem, - uint256 amountTokenOut - ); - - /// @dev check `assetInfo()` for more information - enum AssetType { - TOKEN, - LIQUIDITY - } - - /// @dev Emitted when (`user`) claims their rewards - event ClaimRewards(address indexed user, address[] rewardTokens, uint256[] rewardAmounts); - - /** - * @notice mints an amount of shares by depositing a base token. - * @param receiver shares recipient address - * @param tokenIn address of the base tokens to mint shares - * @param amountTokenToDeposit amount of base tokens to be transferred from (`msg.sender`) - * @param minSharesOut reverts if amount of shares minted is lower than this - * @return amountSharesOut amount of shares minted - * @dev Emits a {Deposit} event - * - * Requirements: - * - (`tokenIn`) must be a valid base token. - */ - function deposit( - address receiver, - address tokenIn, - uint256 amountTokenToDeposit, - uint256 minSharesOut - ) external payable returns (uint256 amountSharesOut); - - /** - * @notice redeems an amount of base tokens by burning some shares - * @param receiver recipient address - * @param amountSharesToRedeem amount of shares to be burned - * @param tokenOut address of the base token to be redeemed - * @param minTokenOut reverts if amount of base token redeemed is lower than this - * @param burnFromInternalBalance if true, burns from balance of `address(this)`, otherwise burns from `msg.sender` - * @return amountTokenOut amount of base tokens redeemed - * @dev Emits a {Redeem} event - * - * Requirements: - * - (`tokenOut`) must be a valid base token. - */ - function redeem( - address receiver, - uint256 amountSharesToRedeem, - address tokenOut, - uint256 minTokenOut, - bool burnFromInternalBalance - ) external returns (uint256 amountTokenOut); - - /** - * @notice exchangeRate * syBalance / 1e18 must return the asset balance of the account - * @notice vice-versa, if a user uses some amount of tokens equivalent to X asset, the amount of sy - * he can mint must be X * exchangeRate / 1e18 - * @dev SYUtils's assetToSy & syToAsset should be used instead of raw multiplication - * & division - */ - function exchangeRate() external view returns (uint256 res); - - /** - * @notice claims reward for (`user`) - * @param user the user receiving their rewards - * @return rewardAmounts an array of reward amounts in the same order as `getRewardTokens` - * @dev - * Emits a `ClaimRewards` event - * See {getRewardTokens} for list of reward tokens - */ - function claimRewards(address user) external returns (uint256[] memory rewardAmounts); - - /** - * @notice get the amount of unclaimed rewards for (`user`) - * @param user the user to check for - * @return rewardAmounts an array of reward amounts in the same order as `getRewardTokens` - */ - function accruedRewards(address user) external view returns (uint256[] memory rewardAmounts); - - function rewardIndexesCurrent() external returns (uint256[] memory indexes); - - function rewardIndexesStored() external view returns (uint256[] memory indexes); - - /** - * @notice returns the list of reward token addresses - */ - function getRewardTokens() external view returns (address[] memory); - - /** - * @notice returns the address of the underlying yield token - */ - function yieldToken() external view returns (address); - - /** - * @notice returns all tokens that can mint this SY - */ - function getTokensIn() external view returns (address[] memory res); - - /** - * @notice returns all tokens that can be redeemed by this SY - */ - function getTokensOut() external view returns (address[] memory res); - - function isValidTokenIn(address token) external view returns (bool); - - function isValidTokenOut(address token) external view returns (bool); - - function previewDeposit( - address tokenIn, - uint256 amountTokenToDeposit - ) external view returns (uint256 amountSharesOut); - - function previewRedeem(address tokenOut, uint256 amountSharesToRedeem) external view returns (uint256 amountTokenOut); - - /** - * @notice This function contains information to interpret what the asset is - * @return assetType the type of the asset (0 for ERC20 tokens, 1 for AMM liquidity tokens, - * 2 for bridged yield bearing tokens like wstETH, rETH on Arbi whose the underlying asset doesn't exist on the chain) - * @return assetAddress the address of the asset - * @return assetDecimals the decimals of the asset - */ - function assetInfo() external view returns (AssetType assetType, address assetAddress, uint8 assetDecimals); -} diff --git a/test/unit/RelayerFactories.t.sol b/test/unit/RelayerFactories.t.sol index bf02331..84be2aa 100644 --- a/test/unit/RelayerFactories.t.sol +++ b/test/unit/RelayerFactories.t.sol @@ -11,16 +11,12 @@ import {CamelotRelayerFactory} from '@contracts/factories/CamelotRelayerFactory. import {CamelotRelayerChild} from '@contracts/factories/CamelotRelayerChild.sol'; import {ChainlinkRelayerFactory} from '@contracts/factories/ChainlinkRelayerFactory.sol'; import {ChainlinkRelayerChild} from '@contracts/factories/ChainlinkRelayerChild.sol'; -import {PendleRelayerFactory} from '@contracts/factories/pendle/PendleRelayerFactory.sol'; import {IBaseOracle} from '@interfaces/oracles/IBaseOracle.sol'; import {DenominatedOracleFactory} from '@contracts/factories/DenominatedOracleFactory.sol'; import {DenominatedOracleChild} from '@contracts/factories/DenominatedOracleChild.sol'; import {IDelayedOracleFactory} from '@interfaces/factories/IDelayedOracleFactory.sol'; import {IAuthorizable} from '@interfaces/utils/IAuthorizable.sol'; -import {MAINNET_PENDLE_ORACLE, MAINNET_PENDLE_RETH_MARKET} from '@script/Registry.s.sol'; import {IAuthorizable} from '@interfaces/utils/IAuthorizable.sol'; -import {IPendleRelayerFactory} from '@interfaces/factories/IPendleRelayerFactory.sol'; -import {IPendleRelayer} from '@interfaces/oracles/pendle/IPendleRelayer.sol'; abstract contract Base is DSTestPlus { address deployer = label('deployer'); @@ -391,9 +387,8 @@ contract Unit_DenominatedPriceOracleFactory_DeployDenominatedOracle is Base { } } -contract Unit_Pendle_Renzo_Deploy_Oracle is Base { +contract Unit_Renzo_Deploy_Oracle is Base { address mainnetAuthorizedAccount = 0xF78dA2A37049627636546E0cFAaB2aD664950917; - IPendleRelayerFactory public pendleFactory; function setUp() public virtual override { super.setUp(); @@ -401,7 +396,6 @@ contract Unit_Pendle_Renzo_Deploy_Oracle is Base { delayedOracleFactory = IDelayedOracleFactory(MAINNET_DELAYED_ORACLE_FACTORY); chainlinkRelayerFactory = ChainlinkRelayerFactory(MAINNET_CHAINLINK_RELAYER_FACTORY); denominatedOracleFactory = DenominatedOracleFactory(MAINNET_DENOMINATED_ORACLE_FACTORY); - pendleFactory = IPendleRelayerFactory(address(new PendleRelayerFactory())); label(address(delayedOracleFactory), 'DelayedOracleFactory'); label(address(chainlinkRelayerFactory), 'ChainlinkRelayerFactory'); label(address(denominatedOracleFactory), 'DenominatedOracleFactory'); From 9f8bff5ad6d77f92d2534a9efd34716f4aa82a0b Mon Sep 17 00:00:00 2001 From: MrDeadCe11 Date: Tue, 23 Jul 2024 13:51:20 -0500 Subject: [PATCH 4/4] removed console log from chainlink relayer --- src/contracts/oracles/ChainlinkRelayer.sol | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/contracts/oracles/ChainlinkRelayer.sol b/src/contracts/oracles/ChainlinkRelayer.sol index de9b31b..e9c9674 100644 --- a/src/contracts/oracles/ChainlinkRelayer.sol +++ b/src/contracts/oracles/ChainlinkRelayer.sol @@ -2,13 +2,12 @@ pragma solidity 0.7.6; import {IChainlinkOracle} from '@interfaces/oracles/IChainlinkOracle.sol'; -import 'forge-std/console2.sol'; + /** * @title ChainlinkRelayer * @notice This contracts transforms a Chainlink price feed into a standard IBaseOracle feed * It also verifies that the reading is new enough, compared to a STALE_THRESHOLD */ - contract ChainlinkRelayer { uint256 public immutable STALE_THRESHOLD; int256 public immutable MULTIPLIER; @@ -48,7 +47,7 @@ contract ChainlinkRelayer { function read() public view virtual returns (uint256 _result) { // Fetch values from Chainlink (, int256 _aggregatorResult,, uint256 _aggregatorTimestamp,) = chainlinkFeed.latestRoundData(); - console2.logInt(_aggregatorResult); + // Revert if price is invalid require(_aggregatorResult != 0 && _isValidFeed(_aggregatorTimestamp), 'InvalidPriceFeed');