FullMath

Struct FullMath 

Source
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

Source

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.

Source

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.

Source

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.

Source

pub fn sqrt(x: U256) -> U256

Computes the integer square root of a 256-bit unsigned integer using the Babylonian method

Source

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.

Source

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
Source

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§

Source§

impl Debug for FullMath

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

impl<T> Ungil for T
where T: Send,