Skip to main content

Mathematical Derivations

This page contains the mathematical derivations for the Newton's method implementations used in Curve's AMM contracts.


StableSwap Derivations

The StableSwap invariant is defined as:

Annxi+D=ADnn+Dn+1nnxiA n^n \sum x_i + D = A D n^n + \frac{D^{n+1}}{n^n \prod x_i}

Where:

  • AA is the amplification coefficient
  • nn is the number of coins
  • xix_i is the amount of the ii-th coin
  • DD is the invariant (i.e. the total virtual balance when all coins are equal)

Newton’s Method for Solving DD

We derive Newton's iteration for solving DD given {xi}i=1n\{x_i\}_{i=1}^n and AA.

Start with:

f(D)=Annxi+D(1Ann)Dn+1nnxi=0f(D) = A n^n \sum x_i + D(1 - A n^n) - \frac{D^{n+1}}{n^n \prod x_i} = 0

Or equivalently:

f(D)=Dn+1nnxiD(1Ann)Annxif(D) = \frac{D^{n+1}}{n^n \prod x_i} - D(1 - A n^n) - A n^n \sum x_i

Taking the derivative:

f(D)=(n+1)Dnnnxi+Ann1f'(D) = \frac{(n + 1) D^n}{n^n \prod x_i} + A n^n - 1

Newton Iteration

Using Newton’s formula:

Dnew=Df(D)f(D)=Df(D)f(D)f(D)D_{\text{new}} = D - \frac{f(D)}{f'(D)} = \frac{D f'(D) - f(D)}{f'(D)}

Substituting f(D)f(D) and f(D)f'(D):

Dnew=D((n+1)Dnnnxi+Ann1)(Dn+1nnxiD(1Ann)Annxi)(n+1)Dnnnxi+Ann1=(n+1)Dn+1nnxi+AnnDDDn+1nnxi+DAnnD+Annxi(n+1)Dnnnxi+Ann1=nDn+1nnxi+Annxi(n+1)Dnnnxi+Ann1\begin{aligned} D_{\text{new}} &= \frac{D \left(\frac{(n+1) D^n}{n^n \prod x_i} + A n^n - 1\right) - \left(\frac{D^{n+1}}{n^n \prod x_i} - D(1 - A n^n) - A n^n \sum x_i \right)}{\frac{(n+1) D^n}{n^n \prod x_i} + A n^n - 1} \\ &= \frac{\frac{(n+1) D^{n+1}}{n^n \prod x_i} + A n^n D - D - \frac{D^{n+1}}{n^n \prod x_i} + D - A n^n D + A n^n \sum x_i}{\frac{(n+1) D^n}{n^n \prod x_i} + A n^n - 1} \\ &= \frac{\frac{n D^{n+1}}{n^n \prod x_i} + A n^n \sum x_i}{\frac{(n+1) D^n}{n^n \prod x_i} + A n^n - 1} \end{aligned}

This corresponds to the newton_D function in math.vy.


Newton’s Method for Solving xjx_j

Now derive Newton’s iteration for solving xjx_j, given {xi}ij\{x_i\}_{i \neq j}, AA, and DD.

Start with the invariant:

Annxi+D=ADnn+Dn+1nnxiA n^n \sum x_i + D = A D n^n + \frac{D^{n+1}}{n^n \prod x_i}

Isolate xjx_j:

Ann(xj+ijxi)+D=ADnn+Dn+1nn(xjijxi)A n^n \left(x_j + \sum_{i \neq j} x_i\right) + D = A D n^n + \frac{D^{n+1}}{n^n (x_j \prod_{i \neq j} x_i)}

Multiply both sides by xjx_j:

Ann(xj2+xjijxi)+Dxj=ADnnxj+Dn+1nnijxiA n^n \left(x_j^2 + x_j \sum_{i \neq j} x_i \right) + D x_j = A D n^n x_j + \frac{D^{n+1}}{n^n \prod_{i \neq j} x_i}

Divide by AnnA n^n:

xj2+xjijxi+DAnnxj=Dxj+Dn+1An2nijxix_j^2 + x_j \sum_{i \neq j} x_i + \frac{D}{A n^n} x_j = D x_j + \frac{D^{n+1}}{A n^{2n} \prod_{i \neq j} x_i}

Bring terms to one side:

xj2+xj(ijxi+DAnnD)Dn+1An2nijxi=0x_j^2 + x_j \left(\sum_{i \neq j} x_i + \frac{D}{A n^n} - D\right) - \frac{D^{n+1}}{A n^{2n} \prod_{i \neq j} x_i} = 0

Define:

f(xj)=xj2+xj(ijxi+DAnnD)Dn+1An2nijxif(x_j) = x_j^2 + x_j \left(\sum_{i \neq j} x_i + \frac{D}{A n^n} - D\right) - \frac{D^{n+1}}{A n^{2n} \prod_{i \neq j} x_i}

Taking the derivative:

f(xj)=2xj+ijxi+DAnnDf'(x_j) = 2 x_j + \sum_{i \neq j} x_i + \frac{D}{A n^n} - D

Newton Iteration

xjnew=xjf(xj)f(xj)=xjf(xj)f(xj)f(xj)x_j^{\text{new}} = x_j - \frac{f(x_j)}{f'(x_j)} = \frac{x_j f'(x_j) - f(x_j)}{f'(x_j)}

Substitute in the expressions:

xjnew=xj(2xj+ijxi+DAnnD)(xj2+xj(ijxi+DAnnD)Dn+1An2nijxi)2xj+ijxi+DAnnD=xj2+Dn+1An2nijxi2xj+ijxi+DAnnD\begin{aligned} x_j^{\text{new}} &= \frac{x_j \left(2 x_j + \sum_{i \neq j} x_i + \frac{D}{A n^n} - D\right) - \left(x_j^2 + x_j \left(\sum_{i \neq j} x_i + \frac{D}{A n^n} - D\right) - \frac{D^{n+1}}{A n^{2n} \prod_{i \neq j} x_i} \right)}{2 x_j + \sum_{i \neq j} x_i + \frac{D}{A n^n} - D} \\ &= \frac{x_j^2 + \frac{D^{n+1}}{A n^{2n} \prod_{i \neq j} x_i}}{2 x_j + \sum_{i \neq j} x_i + \frac{D}{A n^n} - D} \end{aligned}

This corresponds to the newton_x function in math.vy.


Cryptoswap Derivations

Newton Step for newton_D() in Tricrypto and Twocrypto

This derivation explains the mathematical logic behind the newton_D() function used in Curve’s tricrypto and twocrypto pools.


Invariant Function Definitions

We start with the core function:

F=KDn1S+PKDn(Dn)nF = K D^{n-1} S + P - K D^n - \left(\frac{D}{n}\right)^n

Where:

  • DD: the invariant
  • S=xiS = \sum x_i
  • P=xiP = \prod x_i
  • nn: number of tokens (typically 2 or 3)
  • γ\gamma: price scale parameter
  • AA: amplification coefficient

Intermediate Definitions

K=AK0γ2(γ+1K0)2,K0=PnnDnK = \frac{A K_0 \gamma^2}{(\gamma + 1 - K_0)^2}, \quad K_0 = \frac{P n^n}{D^n} g=γ+1K0,A^=nnAg = \gamma + 1 - K_0, \quad \hat{A} = n^n A m1=Dg2A^γ2,m2=2nK0gm_1 = \frac{D g^2}{\hat{A} \gamma^2}, \quad m_2 = \frac{2n K_0}{g} neg_fprime=S+Sm2+m1nK0m2D\text{neg\_fprime} = S + S m_2 + \frac{m_1 n}{K_0} - m_2 D

Derivative of KK

K=(AK0γ2(γ+1K0)2)K' = \left( \frac{A K_0 \gamma^2}{(\gamma + 1 - K_0)^2} \right)' =(Aγ2(γ+1K0)2+2AK0γ2(γ+1K0)3)(nPnnDn+1)= \left( \frac{A \gamma^2}{(\gamma + 1 - K_0)^2} + \frac{2 A K_0 \gamma^2}{(\gamma + 1 - K_0)^3} \right) \cdot \left( -n \frac{P n^n}{D^{n+1}} \right) =n(Aγ2g2+2AK0γ2g3)K0D= -n \left( \frac{A \gamma^2}{g^2} + \frac{2 A K_0 \gamma^2}{g^3} \right) \cdot \frac{K_0}{D}

Derivative of FF

F=KDn1S+PKDn(Dn)nF = K D^{n-1} S + P - K D^n - \left( \frac{D}{n} \right)^n

Taking the derivative:

F=(n1)KDn2SnKDn1Dn1nn1+KDn1(SD)F' = (n-1) K D^{n-2} S - n K D^{n-1} - \frac{D^{n-1}}{n^{n-1}} + K' D^{n-1} (S - D)

Substitute KK and KK':

F=AK0γ2g2Dn2S2nAK02γ2g3Dn2(SD)Dn1nn1F' = - \frac{A K_0 \gamma^2}{g^2} D^{n-2} S - \frac{2 n A K_0^2 \gamma^2}{g^3} D^{n-2} (S - D) - \frac{D^{n-1}}{n^{n-1}}

Derivation of FF\frac{F}{F'}

FF=AK0γ2g2Dn1S+PAK0γ2g2Dn(Dn)nAK0γ2g2Dn2S+2nAK02γ2g3Dn2(DS)(Dn)n1\frac{F}{F'} = \frac { \frac{A K_0 \gamma^2}{g^2} D^{n-1} S + P - \frac{A K_0 \gamma^2}{g^2} D^n - \left( \frac{D}{n} \right)^n } { - \frac{A K_0 \gamma^2}{g^2} D^{n-2} S + \frac{2 n A K_0^2 \gamma^2}{g^3} D^{n-2}(D - S) - \left( \frac{D}{n} \right)^{n-1} }

Divide numerator and denominator by Dn/nnD^n / n^n:

=A^K0γ2g2D1S+K0A^K0γ2g21A^K0γ2g2D2S+2nA^K02γ2g3D2(DS)nD= \frac { \frac{\hat{A} K_0 \gamma^2}{g^2} D^{-1} S + K_0 - \frac{\hat{A} K_0 \gamma^2}{g^2} - 1 } { - \frac{\hat{A} K_0 \gamma^2}{g^2} D^{-2} S + \frac{2n \hat{A} K_0^2 \gamma^2}{g^3} D^{-2} (D - S) - \frac{n}{D} }

Divide numerator and denominator by A^γ2g2D\frac{\hat{A} \gamma^2}{g^2 D}:

=K0S+m1(K01)K0DK0SD+m2K0D(DS)nm1D= \frac { K_0 S + m_1 (K_0 - 1) - K_0 D } { - \frac{K_0 S}{D} + \frac{m_2 K_0}{D} (D - S) - \frac{n m_1}{D} }

Multiply numerator and denominator by DD:

=K0SD+m1(K01)DK0D2K0S+m2K0(DS)nm1= \frac { K_0 S D + m_1 (K_0 - 1) D - K_0 D^2 } { - K_0 S + m_2 K_0 (D - S) - n m_1 }

Divide numerator and denominator by K0K_0:

=SD+m1(11K0)DD2S+m2(DS)nm1K0= \frac { S D + m_1 \left(1 - \frac{1}{K_0}\right) D - D^2 } { - S + m_2 (D - S) - \frac{n m_1}{K_0} }

Distribute:

=SD+m1(11K0)DD2Sm2S+m2Dnm1K0= \frac { S D + m_1 \left(1 - \frac{1}{K_0} \right) D - D^2 } { - S - m_2 S + m_2 D - \frac{n m_1}{K_0} }

Substitute the denominator with neg_fprime-\text{neg\_fprime}:

=SD+m1(11K0)DD2neg_fprime= \frac{S D + m_1 \left(1 - \frac{1}{K_0} \right) D - D^2}{-\text{neg\_fprime}}

Newton Iteration Step

Dk+1=DkFF=Dk+SDk+m1(11K0)DkDk2neg_fprimeD_{k+1} = D_k - \frac{F}{F'} = D_k + \frac{S D_k + m_1 \left(1 - \frac{1}{K_0} \right) D_k - D_k^2}{\text{neg\_fprime}} =neg_fprimeDk+SDk+m1(11K0)DkDk2neg_fprime= \frac{\text{neg\_fprime} D_k + S D_k + m_1 \left(1 - \frac{1}{K_0} \right) D_k - D_k^2}{\text{neg\_fprime}}

Final Form: Positive and Negative Contributions

Separate into two parts:

Positive Term D+D_+:

D+=(neg_fprime+S)Dkneg_fprimeD_+ = \frac{(\text{neg\_fprime} + S) D_k}{\text{neg\_fprime}}

Negative Term DD_-:

D=Dk2m1(K01K0)Dkneg_fprimeD_- = \frac{D_k^2 - m_1 \left( \frac{K_0 - 1}{K_0} \right) D_k}{\text{neg\_fprime}}

Final Newton Step:

Dk+1=D+DD_{k+1} = D_+ - D_-