34 lines
1.3 KiB
Solidity
34 lines
1.3 KiB
Solidity
// SPDX-License-Identifier: MIT
|
|
pragma solidity ^0.8.8;
|
|
|
|
//import "@chainlink/contracts/src/v0.8/shared/interfaces/AggregatorV3Interface.sol";
|
|
import "@chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol";
|
|
|
|
// Why is this a library and not abstract?
|
|
// Why not an interface?
|
|
library PriceConverter {
|
|
// We could make this public, but then we'd have to deploy it
|
|
function getPrice(
|
|
AggregatorV3Interface priceFeed
|
|
) internal view returns (uint256) {
|
|
(, int256 answer, , , ) = priceFeed.latestRoundData();
|
|
// ETH/USD rate in 18 digit
|
|
return uint256(answer * 10000000000);
|
|
// or (Both will do the same thing)
|
|
// return uint256(answer * 1e10); // 1* 10 ** 10 == 10000000000
|
|
}
|
|
|
|
// 1000000000
|
|
function getConversionRate(
|
|
uint256 ethAmount,
|
|
AggregatorV3Interface priceFeed
|
|
) internal view returns (uint256) {
|
|
uint256 ethPrice = getPrice(priceFeed);
|
|
uint256 ethAmountInUsd = (ethPrice * ethAmount) / 1000000000000000000;
|
|
// or (Both will do the same thing)
|
|
// uint256 ethAmountInUsd = (ethPrice * ethAmount) / 1e18; // 1 * 10 ** 18 == 1000000000000000000
|
|
// the actual ETH/USD conversion rate, after adjusting the extra 0s.
|
|
return ethAmountInUsd;
|
|
}
|
|
}
|