Skip to content

Instantly share code, notes, and snippets.

@zeuslawyer
Created October 29, 2022 23:31
Show Gist options
  • Save zeuslawyer/237529d2000259ee9963a0457fcd15fa to your computer and use it in GitHub Desktop.
Save zeuslawyer/237529d2000259ee9963a0457fcd15fa to your computer and use it in GitHub Desktop.
OpenZeppelin + Chainlink Upgradeable Contracts
// 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;
}
}
// 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