| 12345678910111213141516171819202122232425262728293031323334 |
- // SPDX-License-Identifier: Apache-2.0
- pragma solidity ^0.8.0;
- library PythUtils {
- /// @notice Converts a Pyth price to a uint256 with a target number of decimals
- /// @param price The Pyth price
- /// @param expo The Pyth price exponent
- /// @param targetDecimals The target number of decimals
- /// @return The price as a uint256
- /// @dev Function will lose precision if targetDecimals is less than the Pyth price decimals.
- /// This method will truncate any digits that cannot be represented by the targetDecimals.
- /// e.g. If the price is 0.000123 and the targetDecimals is 2, the result will be 0
- function convertToUint(
- int64 price,
- int32 expo,
- uint8 targetDecimals
- ) public pure returns (uint256) {
- if (price < 0 || expo > 0 || expo < -255) {
- revert();
- }
- uint8 priceDecimals = uint8(uint32(-1 * expo));
- if (targetDecimals >= priceDecimals) {
- return
- uint(uint64(price)) *
- 10 ** uint32(targetDecimals - priceDecimals);
- } else {
- return
- uint(uint64(price)) /
- 10 ** uint32(priceDecimals - targetDecimals);
- }
- }
- }
|