# Mathematical Derivations

Source: [https://docs.curve.finance/developer/resources/derivations](https://docs.curve.finance/developer/resources/derivations)

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

* * *

<a id="stableswap-derivations"></a>

## StableSwap Derivations

The StableSwap invariant is defined as:

$$
A n^n \sum x_i + D = A D n^n + \frac{D^{n+1}}{n^n \prod x_i}
$$

Where:

-   $A$ is the amplification coefficient
-   $n$ is the number of coins
-   $x_i$ is the amount of the $i$\-th coin
-   $D$ is the invariant (i.e. the total virtual balance when all coins are equal)

* * *

<a id="newtons-method-for-solving-d"></a>

## Newton’s Method for Solving $D$

We derive Newton's iteration for solving $D$ given $\{x_i\}_{i=1}^n$ and $A$.

Start with:

$$
f(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) = \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) = \frac{(n + 1) D^n}{n^n \prod x_i} + A n^n - 1
$$

<a id="newton-iteration"></a>

### Newton Iteration

Using Newton’s formula:

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

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

$$
\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`.

* * *

<a id="newtons-method-for-solving-x_j"></a>

## Newton’s Method for Solving $x_j$

Now derive Newton’s iteration for solving $x_j$, given $\{x_i\}_{i \neq j}$, $A$, and $D$.

Start with the invariant:

$$
A n^n \sum x_i + D = A D n^n + \frac{D^{n+1}}{n^n \prod x_i}
$$

Isolate $x_j$:

$$
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 $x_j$:

$$
A 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 $A n^n$:

$$
x_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:

$$
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} = 0
$$

Define:

$$
f(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'(x_j) = 2 x_j + \sum_{i \neq j} x_i + \frac{D}{A n^n} - D
$$

<a id="newton-iteration-1"></a>

### Newton Iteration

$$
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:

$$
\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`.

* * *

<a id="cryptoswap-derivations"></a>

## Cryptoswap Derivations

<a id="newton-step-for-newton_d-in-tricrypto-and-twocrypto"></a>

### 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.

* * *

<a id="invariant-function-definitions"></a>

## Invariant Function Definitions

We start with the core function:

$$
F = K D^{n-1} S + P - K D^n - \left(\frac{D}{n}\right)^n
$$

Where:

-   $D$: the invariant
-   $S = \sum x_i$
-   $P = \prod x_i$
-   $n$: number of tokens (typically 2 or 3)
-   $\gamma$: price scale parameter
-   $A$: amplification coefficient

* * *

<a id="intermediate-definitions"></a>

### Intermediate Definitions

$$
K = \frac{A K_0 \gamma^2}{(\gamma + 1 - K_0)^2}, \quad K_0 = \frac{P n^n}{D^n}
$$

 

$$
g = \gamma + 1 - K_0, \quad \hat{A} = n^n A
$$

 

$$
m_1 = \frac{D g^2}{\hat{A} \gamma^2}, \quad m_2 = \frac{2n K_0}{g}
$$

 

$$
\text{neg\_fprime} = S + S m_2 + \frac{m_1 n}{K_0} - m_2 D
$$

* * *

<a id="derivative-of-k"></a>

## Derivative of $K$

$$
K' = \left( \frac{A K_0 \gamma^2}{(\gamma + 1 - K_0)^2} \right)'
$$

 

$$
= \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 \left( \frac{A \gamma^2}{g^2} + \frac{2 A K_0 \gamma^2}{g^3} \right) \cdot \frac{K_0}{D}
$$

* * *

<a id="derivative-of-f"></a>

## Derivative of $F$

$$
F = K D^{n-1} S + P - K D^n - \left( \frac{D}{n} \right)^n
$$

Taking the derivative:

$$
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 $K$ and $K'$:

$$
F' = - \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}}
$$

* * *

<a id="derivation-of-fracff"></a>

## Derivation of $\frac{F}{F'}$

$$
\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 $D^n / n^n$:

$$
= \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 $\frac{\hat{A} \gamma^2}{g^2 D}$:

$$
= \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 $D$:

$$
= \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 $K_0$:

$$
= \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:

$$
= \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 $-\text{neg\_fprime}$:

$$
= \frac{S D + m_1 \left(1 - \frac{1}{K_0} \right) D - D^2}{-\text{neg\_fprime}}
$$

* * *

<a id="newton-iteration-step"></a>

## Newton Iteration Step

$$
D_{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}}
$$

 

$$
= \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}}
$$

* * *

<a id="final-form-positive-and-negative-contributions"></a>

## Final Form: Positive and Negative Contributions

Separate into two parts:

**Positive Term $D_+$:**

$$
D_+ = \frac{(\text{neg\_fprime} + S) D_k}{\text{neg\_fprime}}
$$

**Negative Term $D_-$:**

$$
D_- = \frac{D_k^2 - m_1 \left( \frac{K_0 - 1}{K_0} \right) D_k}{\text{neg\_fprime}}
$$

**Final Newton Step:**

$$
D_{k+1} = D_+ - D_-
$$
