From 5b32e5187e46ee0528f75405fa8567ce90467149 Mon Sep 17 00:00:00 2001 From: clemlak Date: Mon, 3 Apr 2023 11:03:12 +0400 Subject: [PATCH 1/2] fix: wrong computation for invariant getX --- src/Invariant.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Invariant.sol b/src/Invariant.sol index edb55f2..b717626 100644 --- a/src/Invariant.sol +++ b/src/Invariant.sol @@ -111,7 +111,7 @@ library Invariant { /** * @notice Uses reserves `R_y` to compute reserves `R_x`. * - * @dev Computes `x` in `x = 1 - Φ(Φ⁻¹( (y + k) / K ) + σ√τ)`. + * @dev Computes `x` in `x = 1 - Φ(Φ⁻¹( (y - k) / K ) + σ√τ)`. * Not used in invariant function. Used for computing swap outputs. * Simplifies to `1 - ( (y + k) / K )` when time to expiry is zero. * Reverts if `R_y` is greater than one. Units are WAD. @@ -150,7 +150,7 @@ library Invariant { input = input.cdf(); R_x = uint256(ONE - input); } else { - int256 numerator = int256(R_y) + inv; + int256 numerator = int256(R_y) - inv; int256 denominator = int256(stk); R_x = uint256(ONE - diviWad(numerator, denominator)); } From 7c16413e5a541de05dae8eefe143f1d9cae16b70 Mon Sep 17 00:00:00 2001 From: clemlak Date: Mon, 3 Apr 2023 11:06:54 +0400 Subject: [PATCH 2/2] fix: update getX for real this time --- src/Invariant.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Invariant.sol b/src/Invariant.sol index b717626..666cafa 100644 --- a/src/Invariant.sol +++ b/src/Invariant.sol @@ -137,7 +137,7 @@ library Invariant { sdr = sdr * uint256(HALF_SCALAR); sdr = vol.mulWadDown(sdr); - int256 phi = diviWad(int256(R_y) + inv, int256(stk)); + int256 phi = diviWad(int256(R_y) - inv, int256(stk)); if (phi < 0) revert OOB(); // Negative input for `ppf` is invalid. if (phi > ONE) revert OOB(); @@ -150,7 +150,7 @@ library Invariant { input = input.cdf(); R_x = uint256(ONE - input); } else { - int256 numerator = int256(R_y) - inv; + int256 numerator = int256(R_y) + inv; int256 denominator = int256(stk); R_x = uint256(ONE - diviWad(numerator, denominator)); }