fluid-contracts-public/contracts/oracle/libraries/oracleUtils.sol
2024-07-11 13:05:09 +00:00

22 lines
906 B
Solidity

// SPDX-License-Identifier: BUSL-1.1
pragma solidity 0.8.21;
/// @title Oracle utils library
/// @notice implements common utility methods for Fluid Oracles
library OracleUtils {
/// @dev The scaler for max delta point math (100%)
uint256 internal constant HUNDRED_PERCENT_DELTA_SCALER = 10_000;
/// @dev output precision of rates
uint256 internal constant RATE_OUTPUT_DECIMALS = 27;
/// @dev checks if `mainSourceRate_` is within a `maxDeltaPercent_` of `checkSourceRate_`. Returns true if so.
function isRateOutsideDelta(
uint256 mainSourceRate_,
uint256 checkSourceRate_,
uint256 maxDeltaPercent_
) internal pure returns (bool) {
uint256 offset_ = (checkSourceRate_ * maxDeltaPercent_) / HUNDRED_PERCENT_DELTA_SCALER;
return (mainSourceRate_ > (checkSourceRate_ + offset_) || mainSourceRate_ < (checkSourceRate_ - offset_));
}
}