pub struct FullMath;Expand description
Contains 512-bit math functions for Uniswap V3 style calculations Handles “phantom overflow” - allows multiplication and division where intermediate values overflow 256 bits
Implementations§
Source§impl FullMath
impl FullMath
Sourcepub fn mul_div(a: U256, b: U256, denominator: U256) -> Result<U256>
pub fn mul_div(a: U256, b: U256, denominator: U256) -> Result<U256>
Calculates floor(a×b÷denominator) with full precision
§Errors
Returns error if denominator is zero or the result would overflow 256 bits.
Sourcepub fn mul_div_rounding_up(a: U256, b: U256, denominator: U256) -> Result<U256>
pub fn mul_div_rounding_up(a: U256, b: U256, denominator: U256) -> Result<U256>
Calculates ceil(a×b÷denominator) with full precision
Returns Ok with the rounded result or an error when rounding cannot be performed safely.
§Errors
Returns error if denominator is zero or the rounded result would overflow U256.
Sourcepub fn div_rounding_up(a: U256, b: U256) -> Result<U256>
pub fn div_rounding_up(a: U256, b: U256) -> Result<U256>
Calculates ceil(a÷b) with proper rounding up Equivalent to Solidity’s divRoundingUp function
§Errors
Returns error if b is zero or if the rounded quotient would overflow U256.
Sourcepub fn sqrt(x: U256) -> U256
pub fn sqrt(x: U256) -> U256
Computes the integer square root of a 256-bit unsigned integer using the Babylonian method
Sourcepub fn truncate_to_u128(value: U256) -> u128
pub fn truncate_to_u128(value: U256) -> u128
Truncates a U256 value to u128 by extracting the lower 128 bits.
This matches Solidity’s uint128(value) cast behavior, which discards
the upper 128 bits. If the value is larger than u128::MAX, the upper
bits are lost.
Sourcepub fn truncate_to_u256(value: I256) -> U256
pub fn truncate_to_u256(value: I256) -> U256
Converts an I256 signed integer to U256, mimicking Solidity’s uint256(int256) cast.
This performs a reinterpret cast, preserving the bit pattern:
- Positive values: returns the value as-is
- Negative values: returns the two’s complement representation as unsigned
Sourcepub fn truncate_to_i256(value: U256) -> I256
pub fn truncate_to_i256(value: U256) -> I256
Converts a U256 unsigned integer to I256, mimicking Solidity’s int256(uint256) cast.
This performs a reinterpret cast, preserving the bit pattern. Solidity’s SafeCast.toInt256() checks the value fits in I256::MAX, then reinterprets.
§Panics
Panics if the value exceeds I256::MAX (matching Solidity’s require check)
Trait Implementations§
Auto Trait Implementations§
impl Freeze for FullMath
impl RefUnwindSafe for FullMath
impl Send for FullMath
impl Sync for FullMath
impl Unpin for FullMath
impl UnwindSafe for FullMath
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more