From 75190a52f6bbd19ae27fc8bc28368652d2b3af0f Mon Sep 17 00:00:00 2001 From: mingda Date: Sat, 21 Nov 2020 01:08:55 +0800 Subject: [PATCH] DODO Math support k=1 --- contracts/lib/DODOMath.sol | 24 +++++++++++++----------- contracts/lib/PMMPricing.sol | 4 ---- 2 files changed, 13 insertions(+), 15 deletions(-) diff --git a/contracts/lib/DODOMath.sol b/contracts/lib/DODOMath.sol index ba5be02..8bbacb6 100644 --- a/contracts/lib/DODOMath.sol +++ b/contracts/lib/DODOMath.sol @@ -55,25 +55,31 @@ library DODOMath { if deltaBSig=true, then Q2>Q1, user sell Q and receive B if deltaBSig=false, then Q2 0, "TARGET_IS_ZERO"); + if (k == DecimalMath.ONE) { + // Q2=Q1/(1-ideltaBQ1/Q0/Q0) + uint256 temp = ideltaB.mul(Q1).mul(DecimalMath.ONE).div(Q0.mul(Q0)); + return Q1.sub(DecimalMath.divFloor(DecimalMath.ONE, DecimalMath.ONE.add(temp))); + } // calculate -b value and sig // -b = (1-k)Q1-kQ0^2/Q1+i*deltaB uint256 kQ02Q1 = DecimalMath.mul(k, Q0).mul(Q0).div(Q1); // kQ0^2/Q1 uint256 b = DecimalMath.mul(DecimalMath.ONE.sub(k), Q1); // (1-k)Q1 bool minusbSig = true; - if (deltaBSig) { - b = b.add(ideltaB); // (1-k)Q1+i*deltaB - } else { - kQ02Q1 = kQ02Q1.add(ideltaB); // i*deltaB+kQ0^2/Q1 - } + kQ02Q1 = kQ02Q1.add(ideltaB); // i*deltaB+kQ0^2/Q1 if (b >= kQ02Q1) { b = b.sub(kQ02Q1); minusbSig = true; @@ -98,11 +104,7 @@ library DODOMath { numerator = squareRoot.sub(b); } - if (deltaBSig) { - return DecimalMath.divFloor(numerator, denominator).sub(Q1); - } else { - return Q1.sub(DecimalMath.divCeil(numerator, denominator)); - } + return Q1.sub(DecimalMath.divCeil(numerator, denominator)); } /* diff --git a/contracts/lib/PMMPricing.sol b/contracts/lib/PMMPricing.sol index 75912e0..a6846ab 100644 --- a/contracts/lib/PMMPricing.sol +++ b/contracts/lib/PMMPricing.sol @@ -127,7 +127,6 @@ library PMMPricing { state.Q0, state.Q0, DecimalMath.mulFloor(state.i, payBaseAmount), - false, state.K ); } @@ -142,7 +141,6 @@ library PMMPricing { state.B0, state.B0, DecimalMath.divFloor(payQuoteAmount, state.i), - false, state.K ); } @@ -174,7 +172,6 @@ library PMMPricing { state.Q0, state.Q, DecimalMath.mul(state.i, payBaseAmount), - false, state.K ); } @@ -206,7 +203,6 @@ library PMMPricing { state.B0, state.B, DecimalMath.divFloor(payQuoteAmount, state.i), - false, state.K ); }