こんにちは!弐号です。
Uniswap (v2以前) など多くのAMM (Automated Market Maker) では定数積公式 (Constant Product Formula) を用いています。
しかし定数積公式のAMMでは狭い価格レンジでトレードを行う場合には提供されている流動性のごく一部しか使わないため、流動性の利用効率としては非常に悪いという性質がありました。
例えば、ざっくりいうと流動性のうち1%をトレードするとスリッページ(プライスインパクト)が約1%発生してしまい、流動性のごく一部だけをトレードしたとしても巨大なスリッページとなってしまいます。
これを改善する目的で作られたのが今回ご紹介する集中流動性 (CLMM) であり、Uniswap v3 から導入されました。
本記事では集中流動性の数理について Uniswap v3 のホワイトペーパーを参考に解説していきます。
定数積公式の問題点
定数積公式では流動性ペア X/Y のそれぞれの数量を x, y とすると、
x \cdot y = k
という制約のもとで X と Y をトレードします。
これはいわばすべての価格レンジ([0, ∞])に対して流動性を供給している状態となっており、価格が大きく変わらない限り流動性のごく一部しか利用されません。
そのため、冒頭で述べたとおり流動性のごく一部だけをトレードしたとしても巨大なスリッページが発生してしまいます。
集中流動性
導入
これを改善するためには、無限の価格レンジではなく、ボラティリティの範囲内のごく狭い価格レンジで流動性を提供すればよいと考えられます。
もっともナイーブな実装では、定数積公式のカーブを左下に移動し、以下の図のような公式とすることです。
このようなオレンジ色の曲線とすることで、狭い価格レンジに対して流動性を提供することができ、この価格レンジをまたぐ場合にはすべての流動性を利用することができ大変効率的になります。
数式の導出
それでは具体的にはどのような数式にすればいいでしょうか?
定数積公式を平行移動するだけですので、式としては
(x + \alpha) (y + \beta) = k
という形になるはずです。
不明な変数の \alpha, \beta
を求めましょう。
まず提供する価格レンジを [p_a, p_b]
とし、L := \sqrt{k}
とします。
提供されている流動性に対する現在のトークン価格は、曲線の傾き(の-1倍)であったことを思い出すと、価格の式は
\displaystyle
p = - \frac{dy}{dx} = \frac{y + \beta}{x + \alpha}
となります(演習問題①)。
Yトークンの供給量がゼロのときに価格が p_a
、Xトークンの供給量がゼロのときに価格が p_b
とそれぞれなってほしいので
\begin{array}{l}
\displaystyle
p(y = 0) = \frac{\beta^2}{L^2} = p_a \\\\
\displaystyle
p(x = 0) = \frac{L^2}{\alpha^2} = p_b
\end{array}
が成立します(演習問題②)。
したがって
\begin{array}{l}
\displaystyle
\alpha = \frac{L}{\sqrt{p_b}} \\\\
\displaystyle
\beta = L \sqrt{p_a}
\end{array}
となりますので、結局公式としては
\displaystyle
\left( x + \frac{L}{\sqrt{p_b}} \right) \left( y + L \sqrt{p_a} \right) = L^2
となります。
ユーザ目線の話
さて、少し数学的に込み入った話が入ってしまいましたが、ここで一般ユーザ視点でのお話をしていきたいと思います。
トレーダーとして
AMMを使ったトレーダーとしては、集中流動性により従来よりも小さなスリッページで大量のトークンを交換できる可能性があります。
もちろん現在の価格レンジに提供されている流動性が十分あればの話ではありますが、一般的に流動性提供者は取引手数料を得るために現在の価格レンジ内にボラティリティを考えながら流動性を提供すると考えられますので、従来の定数積公式と比較してより有利な価格で約定する可能性が高いです。
流動性提供者として
流動性提供者としては、指定した価格範囲内で上下すればトレーダーやアービトラージボットによる取引によって、定数積公式で流動性を提供した場合よりも多くのトレードがカウンターパーティとして発生し、より多くの手数料収入が期待できます。
ただし、注意点としては指定した価格範囲から外れてしまうと実質的に何も流動性を提供していないことになってしまいますので、定期的に価格をチェックし必要に応じてポジションを再構築する必要があるという手間が発生します。
とはいえある程度のボラティリティを見込んで十分かつ最小限の価格範囲で流動性を提供すればデメリットはそれほどないでしょう。
収益曲線
最後にCLMMで流動性を提供した場合の収益曲線について触れておきます。
英語でも情報がなかったため、間違っているかもしれませんのでなにかお気づきの方はご指摘ください。
まず前提として、従来の定数積公式では価格変化率を r
としたときのポジションの評価額(カウンターカレンシーベース)は