Created
October 29, 2022 23:31
-
-
Save zeuslawyer/237529d2000259ee9963a0457fcd15fa to your computer and use it in GitHub Desktop.
OpenZeppelin + Chainlink Upgradeable Contracts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.8.0; | |
import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; | |
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; | |
contract PriceFeedTracker is Initializable { | |
address private admin; | |
function initialize(address _admin) public initializer { | |
admin = _admin; | |
} | |
function getAdmin() public view returns (address) { | |
return admin; | |
} | |
/** | |
* Network: Goerli | |
* Aggregator: ETH/USD | |
* Address: 0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e | |
*/ | |
function retrievePrice() public view returns (int) { | |
AggregatorV3Interface aggregator = AggregatorV3Interface( | |
0xD4a33860578De61DBAbDc8BFdb98FD742fA7028e | |
); | |
( | |
, | |
/*uint80 roundID*/ | |
int price, /*uint startedAt*/ /*uint timeStamp*/ /*uint80 answeredInRound*/ | |
, | |
, | |
) = aggregator.latestRoundData(); | |
return price; | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// SPDX-License-Identifier: MIT | |
pragma solidity ^0.8.0; | |
import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol"; | |
import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; | |
contract PriceFeedTrackerV2 is Initializable { | |
address private admin; | |
int public price; // TODO new storage slot | |
// Emitted when the price is retrieved changes | |
event PriceRetrievedFrom(address feed, int price); | |
function initialize(address _admin) public initializer { | |
admin = _admin; | |
} | |
function getAdmin() public view returns (address) { | |
return admin; | |
} | |
// Fetches the price from the feed. | |
// Note that the function is no longer a view function as it emits an event. | |
function retrievePrice(address feed) public { | |
require( | |
feed != address(0x0), | |
"PriceFeedTrackerV2: Pricefeed address must not be zero address." | |
); | |
AggregatorV3Interface aggregator = AggregatorV3Interface(feed); | |
( | |
, | |
/*uint80 roundID*/ | |
int _price, /*uint startedAt*/ /*uint timeStamp*/ /*uint80 answeredInRound*/ | |
, | |
, | |
) = aggregator.latestRoundData(); | |
emit PriceRetrievedFrom(feed, _price); | |
price = _price; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment