diff --git a/contracts/feeds/chainlink/OverlayV1ChainlinkFeedFactory.sol b/contracts/feeds/chainlink/OverlayV1ChainlinkFeedFactory.sol index b32ce195..f0b3d68c 100644 --- a/contracts/feeds/chainlink/OverlayV1ChainlinkFeedFactory.sol +++ b/contracts/feeds/chainlink/OverlayV1ChainlinkFeedFactory.sol @@ -6,18 +6,22 @@ import "./OverlayV1ChainlinkFeed.sol"; import "../../interfaces/feeds/chainlink/IOverlayV1ChainlinkFeedFactory.sol"; contract OverlayV1ChainlinkFeedFactory is IOverlayV1ChainlinkFeedFactory, OverlayV1FeedFactory { + address public immutable OV; // registry of feeds; for a given aggregator pair, returns associated feed mapping(address => address) public getFeed; - constructor(uint256 _microWindow, uint256 _macroWindow) + constructor(address _ov, uint256 _microWindow, uint256 _macroWindow) OverlayV1FeedFactory(_microWindow, _macroWindow) - {} + { + require(_ov != address(0), "OVV1: invalid ov"); + OV = _ov; + } /// @dev deploys a new feed contract /// @param _aggregator chainlink price feed /// @param _heartbeat expected update frequency of the feed /// @return _feed address of the new feed - function deployFeed(address _ov, address _aggregator, uint256 _heartbeat) + function deployFeed(address _aggregator, uint256 _heartbeat) external returns (address _feed) { @@ -26,7 +30,7 @@ contract OverlayV1ChainlinkFeedFactory is IOverlayV1ChainlinkFeedFactory, Overla // Create a new Feed contract _feed = address( - new OverlayV1ChainlinkFeed(_ov, _aggregator, microWindow, macroWindow, _heartbeat) + new OverlayV1ChainlinkFeed(OV, _aggregator, microWindow, macroWindow, _heartbeat) ); // store feed registry record for _aggregator and record address as deployed feed diff --git a/contracts/interfaces/feeds/chainlink/IOverlayV1ChainlinkFeedFactory.sol b/contracts/interfaces/feeds/chainlink/IOverlayV1ChainlinkFeedFactory.sol index 975ddcb2..67fef962 100644 --- a/contracts/interfaces/feeds/chainlink/IOverlayV1ChainlinkFeedFactory.sol +++ b/contracts/interfaces/feeds/chainlink/IOverlayV1ChainlinkFeedFactory.sol @@ -9,7 +9,7 @@ interface IOverlayV1ChainlinkFeedFactory is IOverlayV1FeedFactory { /// @dev deploys a new feed contract /// @return _feed address of the new feed - function deployFeed(address _ov, address _aggregator, uint256 _heartbeat) + function deployFeed(address _aggregator, uint256 _heartbeat) external returns (address _feed); } diff --git a/tests/OverlayV1ChainlinkFeed.t.sol b/tests/OverlayV1ChainlinkFeed.t.sol index 4331210d..88065a6c 100644 --- a/tests/OverlayV1ChainlinkFeed.t.sol +++ b/tests/OverlayV1ChainlinkFeed.t.sol @@ -20,10 +20,8 @@ contract MarketTest is Test { vm.createSelectFork(vm.envString("RPC"), 169_490_320); ov = new OverlayV1Token(); aggregator = new AggregatorMock(); - feedFactory = new OverlayV1ChainlinkFeedFactory(600, 3600); - feed = OverlayV1ChainlinkFeed( - feedFactory.deployFeed(address(ov), address(aggregator), 60 minutes) - ); + feedFactory = new OverlayV1ChainlinkFeedFactory(address(ov), 600, 3600); + feed = OverlayV1ChainlinkFeed(feedFactory.deployFeed(address(aggregator), 60 minutes)); ov.grantRole(GOVERNOR_ROLE, GOVERNOR); }