見出し画像

Concentrated Liquidity の理解 Part 2

Part 2 では流動性提供について書きます。「集中」流動性まで書こうと思ったのですが、長くなってしまったため、集中流動性は Part 3 にしました。

Part 1 で手に入れた $${\sqrt{P}}$$ を x 軸にしたグラフが武器となります。

価格を軸にしたトークン保有量のグラフ

Part 1 から読んで頂く場合はこちらです。

流動性提供とはなにか

流動性提供で「合意」すること

まず、流動性提供とはなにか整理します。

Orca の Constant Product AMM の SOL / USDC プールに流動性を提供する場合は下図の画面で実行します。

便宜上、1 SOL = 100 USDC で進めます。

Constant Product AMM でのデポジット操作

Constant Product AMM に流動性を提供する場合、2種類のトークンそれぞれで同じ価値となる量をデポジットします。

上図であれば、10 SOL と 1,000 USDC が等しい価値があり、それらをデポジットします。

これをグラフで表現すると下図になります。

Constant Product AMM へのデポジットのグラフ表現

$${L}$$ と $${USDC_{amount}}$$ は 1 SOL = 100 USDC という価格情報と、10 SOL デポジットするという情報から決まります。

$$
\begin{array}{ccl}
SOL_{amount} &=& \frac{L}{\sqrt{P}}\\\ \\\
L &=& SOL_{amount} \cdot \sqrt{P}\\\ \\\
&=& 10 \cdot \sqrt{100}\\\ \\\
&=& 100\\\ \\\
\\\ \\\
USDC_{amount} &=& L \cdot \sqrt{P}\\\ \\\
&=& 100 \cdot \sqrt{100}\\\ \\\
&=& 1000
\end{array}
$$

このとき、流動性提供者はいったい何に合意したか、それはこのグラフが合意そのものです。

あなたが預けた SOL と USDC は、価格の変動に応じて、このグラフの線をなぞるように交換されていきます。

その対価として、あなたは手数料や追加報酬を受け取ることができます。

これが合意になります。この合意が守られる限り、プール (Orca や Uniswap) は流動性提供者が提供したトークンを使って、スワップ機能を提供することができます。

もし流動性提供が投信であれば、この言葉とグラフは投資信託説明書(目論見書)に記載されると思います(笑)

「合意」に基づくトークンの量の変化

この合意に基づくと、仮に SOL の価格が 400 USDC に上昇した場合や 25 USDC に下落した場合には、流動性提供者が引き出せるトークンの量は以下のように変化します。

1 SOL = 400 USDC に上昇した場合:

$$
\begin{array}{ccl}
SOL_{amount} &=& \frac{L}{\sqrt{P}}\\\ \\\
&=& \frac{100}{\sqrt{400}}\\\ \\\
&=& 5\\\ \\\
\\\ \\\
USDC_{amount} &=& L \cdot \sqrt{P}\\\ \\\
&=& 100 \cdot \sqrt{400}\\\ \\\
&=& 2000
\end{array}
$$

1 SOL = 25 USDC に下落した場合:

$$
\begin{array}{ccl}
SOL_{amount} &=& \frac{L}{\sqrt{P}}\\\ \\\
&=& \frac{100}{\sqrt{25}}\\\ \\\
&=& 20\\\ \\\
\\\ \\\
USDC_{amount} &=& L \cdot \sqrt{P}\\\ \\\
&=& 100 \cdot \sqrt{25}\\\ \\\
&=& 500
\end{array}
$$

1 SOL = 100 USDC から 25 USDC と 400 USDC への変化

「合意」はプールと流動性提供者の 1:1 でなされている

実はこれまでの計算のなかで、登場していない要素があります。

他の流動性提供者の情報です。

「合意」には他の流動性提供者についての条件は一切ないです。つまり、他の流動性提供者が大勢いようと、ほとんどいなかろうと、デポジットしたトークンの量の変化には影響しないということです。

ただただ、「価格」($${\sqrt{P}}$$) と最初に提供したトークンの量によって決まった $${L}$$ に基づくグラフの形が交換の条件です。

流動性提供のポイント

これまで見てきた流動性提供のポイントは 2 点です。

  1. 流動性提供とは $${L}$$ によって形が決まるグラフの線をなぞって、デポジットしたトークンが交換されることを了解し、その対価として手数料や報酬を受け取ることができるという合意であること。

  2. 流動性提供の合意はプール(Orca や Uniswap)と流動性提供者一人ひとりの間で 1:1 でなされており、他の流動性提供者とは直接の関連がないこと。(最初に決まる $${L}$$ と価格情報だけでトークン量は計算できる)

流動性を束ねる

複数の流動性を束ねたプールの挙動

前章では $${L = 100}$$ の流動性提供者のトークンの量がどう変化していくか見ていました。

今度は 3 人の流動性提供者が、それぞれ $${L_1 = 100}$$, $${L_2 = 200}$$, $${L_3 = 300}$$ の流動性を提供したプールの振る舞いを見ていきます。

$$
\begin{array}{}
L_1 &=& 100&, & SOL_{amount_1} &=& 10&, & USDC_{amount_1} &=& 1000\\\ \\\
L_2 &=& 200&, & SOL_{amount_2} &=& 20&, & USDC_{amount_2} &=& 2000\\\ \\\
L_3 &=& 300&, & SOL_{amount_3} &=& 30&, & USDC_{amount_3} &=& 3000
\end{array}
$$

このプール状態で、トレーダーが 600 USDC を SOL にスワップした場合を考えます。

プールを管理しているプログラム(コントラクト)は提供されている流動性を利用してスワップします。3 人から提供されているトークンをどのように交換するでしょうか?

3人が流動性提供しているプールのスワップ処理の概念

それぞれの流動性提供者との合意は、最初にそれぞれと決めた $${L}$$ によって決まるグラフ通りにトークンを交換していくことです。$${L}$$ が定数であるため、操作できるのは価格 $${\sqrt{P}}$$ だけです。

そして、価格はプールとして管理している値 1 つをすべての流動性提供者に適用するべきです。適用しなければ不公平です。

これらの条件を満たすように 600 USDC をそれぞれの流動性提供者にどう振り分け、SOL と交換するか。

$${L}$$ の割合に応じて振り分けます。

$$
\begin{array}{ccl}
USDC_{input} &=& 600\\\ \\\
USDC_{input_1} &=& USDC_{input} \cdot \frac{L_1}{L_1 + L_2 + L_3} &=& 100\\\ \\\
USDC_{input_2} &=& USDC_{input} \cdot \frac{L_2}{L_1 + L_2 + L_3} &=& 200\\\ \\\
USDC_{input_3} &=& USDC_{input} \cdot \frac{L_3}{L_1 + L_2 + L_3} &=& 300
\end{array}
$$

この振り分けですべての流動性提供者にとっての価格が全体と一致します。

$$
\begin{array}{ccl}
\sqrt{P} &=& \frac{USDC_{amount_1} + USDC_{input_1}}{L_1} &=& \frac{1000 + 100}{100} &=& 11\\\ \\\
&=& \frac{USDC_{amount_2} + USDC_{input_2}}{L_2} &=& \frac{2000 + 200}{200} &=& 11\\\ \\\
&=& \frac{USDC_{amount_3} + USDC_{input_3}}{L_3} &=& \frac{3000 + 300}{300} &=& 11\\\ \\\
\\\
P &=& 121
\end{array}
$$

結果として、プールにおける SOL の価格が 121 USDC に上昇し、 トレーダーは 5.454 SOL を得ます。

それぞれの流動性提供者への振り分け

複数の流動性であってもまとめて処理できる

さて、複数の流動性提供を束ねたプールの振る舞いを確認しましたが、このような振り分けをする処理は大変です。どうにかまとめて処理したいです。この $${L_1, L_2, L_3}$$ を合計して処理できないものか。

できます。

プール全体のトークン保有量は次の式でまとめられます。単に合計しているだけなので、個々の流動性が満たすべき「合意」も常に満たされます。

$$
\begin{array}{ccl}
L_{all} &=& \displaystyle\sum_{i=1}^{3} L_i\\\\\\
USDC_{amount_{all}} &=& USDC_{amount_1} + USDC_{amount_2} + USDC_{amount_3}\\\\\\
&=& L_1 \cdot \sqrt{P} + L_2 \cdot \sqrt{P} + L_3 \cdot \sqrt{P}\\\\\\
&=& (L_1 + L_2 + L_3) \cdot \sqrt{P}\\\\\\
&=& L_{all} \cdot \sqrt{P}\\\\\\
SOL_{amount_{all}} &=& SOL_{amount_1} + SOL_{amount_2} + SOL_{amount_3}\\\\\\
&=& \frac{L_1}{\sqrt{P}} + \frac{L_2}{\sqrt{P}} + \frac{L_3}{\sqrt{P}}\\\\\\
&=& \frac{L_1 + L_2 + L_3}{\sqrt{P}}\\\\\\
&=& \frac{L_{all}}{\sqrt{P}}
\end{array}
$$

振り分けせずに同じ結果を得ることができるようになりました。

L を合算することで複数の流動性を束ねたグラフ

流動性を束ねたことのポイント

複数の流動性提供を束ねたプールにおいては、全ての流動性提供の $${L}$$ を合算して処理すれば良いことがわかりました。

「処理が簡単になる」というメリットはもちろんありますが、より重要なのは次のことです。

$${L}$$ を加算・減算することで流動性提供の追加・削除を表現できる。

もう $${L}$$ を流動性 (Liquidity) と呼んでも違和感はなくなってきているのではないでしょうか。

この記事が気に入ったらサポートをしてみませんか?