Aave V4 integer-native math ports.
V4 split the V3 half-up WadRay helpers into explicit down/up variants. These functions preserve the deployed Solidity formulas for valid non-overflowing inputs while relying on BEAM arbitrary-precision integers instead of uint256 overflow reverts.
Source: aave/aave-v4 src/libraries/math/{WadRayMath,MathUtils}.sol and
src/spoke/libraries/LiquidationLogic.sol.
Summary
Functions
Add a signed integer to a non-negative integer, rejecting underflow.
Convert basis points to ray scale.
Convert basis points to wad scale.
Calculate V4 linear interest between two timestamps at a ray-scaled rate.
Calculate V4's liquidation bonus from health-factor and bonus parameters.
Divide two integers, rounding up.
Remove ray precision, rounding up.
Remove wad precision, rounding down.
Return the smaller of two non-negative integers.
Multiply two integers and divide by a third, rounding down.
Multiply two integers and divide by a third, rounding up.
Divide two ray-scaled integers, rounding down.
Divide two ray-scaled integers, rounding up.
Multiply two ray-scaled integers, rounding down.
Multiply two ray-scaled integers, rounding up.
Round a ray value up to the nearest whole ray.
Cast an integer to ray scale by multiplying by 10^27.
Cast an integer to wad scale by multiplying by 10^18.
Divide two wad-scaled integers, rounding down.
Divide two wad-scaled integers, rounding up.
Multiply two wad-scaled integers, rounding down.
Multiply two wad-scaled integers, rounding up.
Subtract with a floor at zero.
Functions
@spec add(non_neg_integer(), integer()) :: non_neg_integer()
Add a signed integer to a non-negative integer, rejecting underflow.
@spec bps_to_ray(non_neg_integer()) :: non_neg_integer()
Convert basis points to ray scale.
@spec bps_to_wad(non_neg_integer()) :: non_neg_integer()
Convert basis points to wad scale.
@spec calculate_linear_interest( non_neg_integer(), non_neg_integer(), non_neg_integer() ) :: non_neg_integer()
Calculate V4 linear interest between two timestamps at a ray-scaled rate.
@spec calculate_liquidation_bonus( non_neg_integer(), non_neg_integer(), non_neg_integer(), non_neg_integer() ) :: non_neg_integer()
Calculate V4's liquidation bonus from health-factor and bonus parameters.
@spec div_up(non_neg_integer(), pos_integer()) :: non_neg_integer()
Divide two integers, rounding up.
@spec from_ray_up(non_neg_integer()) :: non_neg_integer()
Remove ray precision, rounding up.
@spec from_wad_down(non_neg_integer()) :: non_neg_integer()
Remove wad precision, rounding down.
@spec min(non_neg_integer(), non_neg_integer()) :: non_neg_integer()
Return the smaller of two non-negative integers.
@spec mul_div_down(non_neg_integer(), non_neg_integer(), pos_integer()) :: non_neg_integer()
Multiply two integers and divide by a third, rounding down.
@spec mul_div_up(non_neg_integer(), non_neg_integer(), pos_integer()) :: non_neg_integer()
Multiply two integers and divide by a third, rounding up.
@spec ray_div_down(non_neg_integer(), pos_integer()) :: non_neg_integer()
Divide two ray-scaled integers, rounding down.
@spec ray_div_up(non_neg_integer(), pos_integer()) :: non_neg_integer()
Divide two ray-scaled integers, rounding up.
@spec ray_mul_down(non_neg_integer(), non_neg_integer()) :: non_neg_integer()
Multiply two ray-scaled integers, rounding down.
@spec ray_mul_up(non_neg_integer(), non_neg_integer()) :: non_neg_integer()
Multiply two ray-scaled integers, rounding up.
@spec round_ray_up(non_neg_integer()) :: non_neg_integer()
Round a ray value up to the nearest whole ray.
@spec to_ray(non_neg_integer()) :: non_neg_integer()
Cast an integer to ray scale by multiplying by 10^27.
@spec to_wad(non_neg_integer()) :: non_neg_integer()
Cast an integer to wad scale by multiplying by 10^18.
@spec wad_div_down(non_neg_integer(), pos_integer()) :: non_neg_integer()
Divide two wad-scaled integers, rounding down.
@spec wad_div_up(non_neg_integer(), pos_integer()) :: non_neg_integer()
Divide two wad-scaled integers, rounding up.
@spec wad_mul_down(non_neg_integer(), non_neg_integer()) :: non_neg_integer()
Multiply two wad-scaled integers, rounding down.
@spec wad_mul_up(non_neg_integer(), non_neg_integer()) :: non_neg_integer()
Multiply two wad-scaled integers, rounding up.
@spec zero_floor_sub(non_neg_integer(), non_neg_integer()) :: non_neg_integer()
Subtract with a floor at zero.