Uniswap V3の流動性供給の数学原理を深く分析する
撰文:Mellow Protocol
编译:Blake
皆さん、こんにちは。お世辞はさておき、Uniswap V3 の数学的論理について話しましょう!
私たちは、Uniswap V3 における流動性供給の仕組みを深く掘り下げ、2つのトークンのポートフォリオをどのように調整して最大の LP ポジションを得ると同時に IL を最小限に抑えるかを探ります。次に、多くの公式と数字が登場します。
Uniswap V2 の振り返り:トレーダーの視点
Uniswap V2 は自動化されたマーケットメーカーで、以下を可能にします:
- トレーダーがある資産を別の資産に交換すること;
- 流動性提供者 (LP) が流動性を提供し、取引手数料を得ること。
各プールには2つのトークンがあります:X と Y。プール内に X~p~ 個の X トークンと Y~p~ の Y トークン(プールの準備金とも呼ばれます)がある場合、プールの流動性 L は次のように定義されます:
現在のプール内のトークンの比率は、現在の交換価格 p を定義します:
トレーダーが y 個の Y トークンを交換したい場合、彼らは y 個のトークンをプールに預け入れ、x 個の X トークンを受け取ります。x はプールが次の等式を使用して決定します:
ここでの ϕ はプール手数料です。Uni V2 の場合、その数値は 0.3% です。
今、ϕ= 0 の場合を仮定しましょう。現在の価格 p = 1、プール準備金 X~p~=1、Y~p~=1 で、トレーダーが y= 1 単位の Y トークンを交換したい場合、何が起こるでしょうか。
図 1:Uniswap V2 トレーダーの視点
トレーダーは X の x = 0.5 トークンを受け取ります。プールの準備金と価格は X~p~ = 0.5, Y~p~ = 2, p = 4 に更新されます。
私たちは現在の価格 p = 1 のとき x = 1 を期待しますが、実際の x の金額は損失を受け、これをスリッページ(sl= 0.5)と呼びます:
良いニュースは、sl→0 になることです。これはプールの流動性 L が増加するか、交換量が減少することを意味します。つまり、十分に小さな交換量に対して、価格 p で交換する際の手数料が小さくなります。
Uniswap V2 の振り返り:流動性提供者の視点
次に、p = 4、プール準備金 X~p~ = 0.5、Y~p~ = 2、L = 1 で、流動性提供者が x = 0.25 のトークン X と y = 1 のトークン Y を配置した場合、何が起こるでしょうか。
図 2:Uniswap V2 流動性提供者の視点
この場合、プールの新しい準備金は X~p~ = 0.75、Y~p~ = 3 となり、L² = X~p~·Y~p~ = 2.25 です。したがって L = 1.5 となり、流動性提供者は Uni V2 lp トークンの形で ΔL = 0.5 の流動性を受け取ります。現在、各取引で流動性提供者は ΔL/L=1/3 の割合の手数料を受け取ります。
この例では、流動性提供者の投資として x = 0.25 と y = 1 を意図的に使用しています。したがって y / x = 4 = p です。
もし y / x≠p の場合、何が起こるでしょうか?この場合、一部のトークン Δx または Δy が流動性提供者に返還され、残りの比率 (y-Δy)/ x = p または y / (x-Δx) = p になります。流動性提供者が自分のトークンを最大限に活用し、最大の流動性を得たい場合、まずトークンを取引して y / x = p にし、その後プールに入れる必要があります。
Uni V2 では、最大流動性を得るためにトークンの組み合わせを調整するのは非常に簡単です。では、Uni V3 はどうでしょうか?実際、これはますます複雑になります。
Uniswap V3:単一ポジション
2021年5月、Uniswap チームは V3 を発表しました。Uni V3 では、流動性を任意の価格範囲 [pᵃ, pᵇ] に配置できます。価格が [pᵃ, pᵇ] の範囲内にある限り、流動性 L を持ち、手数料を得ることができます。価格が範囲を超えると、価格が範囲に戻るまで手数料は得られません。
それがどのように機能するか見てみましょう。まず、単一のポジションを持ち、価格範囲が [pᵃ, pᵇ] = [0.25, 4] のマイニングプールを考えます。現在のプール準備金は X~p~ = Y~p~ = 0.5 で、価格は p = 1 です。この場合、交換が発生し、価格が変動するにつれて、次のプールの挙動を観察します:
図 3:Uniswap V3 単一ポジション
ここでの緑の曲線は、交換に使用される実際のトークン準備金(実際の流動性曲線)であり、赤の曲線は仮想流動性曲線で、Uni V2 でのユーザーの交換をシミュレートしています。
価格が [0.25, 4] の範囲内にある限り、プールの挙動は赤の流動性曲線を持つ UniV2 プールと完全に同じです。価格が範囲を超えると、仮想流動性はゼロになり、実際の流動性は X または Y トークンに集中し、交換には使用されません。
Uniswap V3:複数ポジション
次に、[pᵃ₁, pᵇ₁] に2つの流動性投資 x₁, y₁ と [pᵃ₂, pᵇ₂] に x₂, y₂ がある場合、何が起こるか見てみましょう。これらの投資のそれぞれは(後の章で見るように)仮想流動性 L₁ と L₂ を意味します。
図 4:Uniswap V3 2つのポジション
価格が2つの範囲の両方にカバーされているとき、2つの実際の準備金が使用され、プールの仮想流動性は流動性の合計に等しくなります。価格が1つの範囲のみにカバーされている場合、その流動性のみが使用されます。価格が2つの範囲の外にあるとき、プールの流動性はゼロ(または手数料を得ない)になります。
これにより、Uni V3 に独特の特徴が与えられます——段階的流動性関数。価格が仮想曲線に沿って移動する際、流動性の価値は特定の価格点(すなわち流動性ポジションの境界)で ΔL だけ変化します。図 3 では、価格 pᵃ₁ と pᵇ₁ でこのジャンプが発生するのを見ることができます。
スケールとスケール間隔
Uniswap V3 の実際の状況は、上の図で示されているよりも少し難しいです。真の Uni V3 では、流動性を任意の価格範囲に配置することはできません。代わりに、いわゆるスケールが価格範囲内に離散的なグリッドを形成します。スケールは次の式で定義されます(i は整数):
各プールには、スケール間隔の概念もあります。スケール間隔は、スケールの上にある別のグリッドで、流動性を配置できるスケールを制限します。たとえば、0.3% 手数料のプールでは、スケール間隔は 60 で、60 ごとに流動性を配置できます。たとえば、0, -60, 60, 120, -120, … 下の図は、スケール間隔スケール(オレンジ)とスケール(黒)を示しています。
図 5:スケールとスケール間隔
流動性の価格範囲の境界はスケール間隔スケールにしかできないため、スケール間隔内の流動性は一定であり、価格がスケール間隔スケールを超えたときにのみ変化します。
したがって、スケール間隔スケールでジャンプが発生する段階的流動性関数があります(図 2 に似ています)。
ポジションの流動性価値
流動性 L がどのように計算されるかを見てみましょう。初期トークン x と y、価格範囲 [pᵃ, pᵇ]、および現在の価格 p が与えられた場合。
これらの等式から、x と y トークンの比率が正しくない場合(Lx≠Ly)、いくつかのトークンが流動性提供者に返還されることがわかります。これは、Uni V2 で観察された挙動に似ています。
しかし、Uni V3 では、段階的流動性関数があり、スケール間隔スケールでジャンプします。次の章では、Uni V3 でトークンを最も効率的に配置する方法を示します。
効率的な流動性提供
もし私たちが x 個のトークン X と y 個のトークン Y からなるポートフォリオを持ち、価格範囲 [pᵃ, pᵇ] に流動性を提供したい場合、最大の流動性を得るためにどれだけのトークン X または Y を交換すべきでしょうか?
この質問に答えるために、R = y / x で表しましょう——私たちのポートフォリオ内のトークンの比率と rᵃᵇ(p)——Lx = Ly を満たす最適なトークン比率です。Lx と Ly の公式から次のように導き出せます:
したがって、私たちの目標は R = rᵃᵇ にすることです。
しかし、このタスクは単に x と y を指定された比率 rᵃᵇ に合わせるよりも少し複雑です。私たちが x を y に交換し始めると、プールの価格 p が変化し、rᵃᵇ も変化します。この挙動は次の図に示されています:
図 6:R を rᵃᵇ に合わせる
もう一つの複雑さは、価格 p が変化するにつれて、時間を超えてプールの流動性 L も変化することです!この問題を解決するために、まず流動性 L が不変の状態で、トークン Y をトークン X に交換する際の比率 R の進化を理解しましょう。
方程式 L²=xy と p = y / x から簡単に導き出せます:
したがって、Y を X に交換すると、Y から手数料を引いた後、交換後の価格は p₁ (p₁ > p₀) になります:
もし X を Y に交換する場合、p₁\< p₀ で、次のようになります:
次の問題は:
R はどの比率でスケール間隔を超え、流動性の変化を引き起こすでしょうか?
R+ を上のスケールを超える比率、R- を下のスケールの比率、p₀ を初期価格、p-、p+ をそれぞれスケール上の対応する価格、L をスケール間隔の現在の流動性とすると、次のようになります:
最後に、私たちは問題を解決する準備ができました。
まず、2つの質問に答える必要があります:
- R > rᵃᵇ(p₀) ですか?もしそうなら、Y を X に交換する必要があります。そうでなければ、X を Y に交換します。
- 交換する際に------マイニングプールの価格はスケール間隔を超えますか?もしそうでなければ、私たちはすぐに問題を解決できます。もしそうなら、私たちは値を調整する必要があります。まるでスケール間隔を超えて交換し、新しい流動性でアルゴリズムを繰り返すかのように。
これらの質問の答えは、私たちを4つの異なるケースに導きます:
- スケール間隔内で Y を X に交換する:R > rᵃᵇ(p₀), R+ ≤ rᵃᵇ(p+)
- スケール間隔内で X を Y に交換する:R \< rᵃᵇ(p₀), R- ≥ rᵃᵇ(p-)
- 異なるスケール間隔で Y を X に交換する:R > rᵃᵇ(p₀), R+ > rᵃᵇ(p+)
- 異なるスケール間隔で X を Y に交換する:R \< rᵃᵇ(p₀), R- \< rᵃᵇ(p-)
ケース 1:スケール間隔内で Y を X に交換する:R > rᵃᵇ(p₀), R+ ≤ rᵃᵇ(p+)
図 7:スケール間隔内で Y を X に交換する。Y から X に交換すると、価格は p₃ に上昇し、R は R+ に減少し、rᵃᵇ は rᵃᵇ+ に増加します。最初に R > rᵃᵇ であり、R+ ≤ rᵃᵇ+ であるため、R = r がスケール間隔内で保証されます。
もし私たちが y を x に交換し、交換後の価格が p₁ に安定している場合、私たちはただ Ryx(p₁) = rᵃᵇ(p₁) を確保する必要があります:
もし z = √p₁ と仮定し、方程式の項を再配置すると、二次方程式が得られます:
したがって、私たちはそれを解決し、p₁ を見つけることができます:
交換する必要のあるトークン Y の数は:
ケース 2:スケール間隔内で X を Y に交換する:R \< rᵃᵇ(p₀), R- ≥ rᵃᵇ(p-)
図 8:スケール間隔内で X を Y に交換する。X から Y に交換すると、価格は p₂ に下がり、R は R- に増加し、rᵃᵇ は rᵃᵇ- に減少します。最初に R \< rᵃᵇ であり、R- ≥ rᵃᵇ- であるため、R = r がスケール間隔内で保証されます。
このケースはケース 1 と非常に似ていますが、私たちは X を Y に交換しているため、Rxy(p₁) = rᵃᵇ(p₁) を確保する必要があります:
ケース 1 と同様に、次のようになります:
交換する必要のあるトークン X の数は:
ケース 3:異なるスケール間隔で Y を X に交換する:R > rᵃᵇ(p₀)、R+ > rᵃᵇ(p+)
図 9:異なるスケール間隔で Y を X に交換する。Y から X に交換すると、価格は p2 に上昇し、その後 p₃ に上昇し、R は R+ に減少し、rᵃᵇ は rᵃᵇ+ に増加します。最初に R > rᵃᵇ であり、R+ > rᵃᵇ+ であるため、R = rᵃᵇ に交換する際に価格がスケール間隔を超えることが保証されます。
この場合、私たちは Y を X に交換し、R = R+ になり、p = p+ になり、新しい流動性の新しいスケール間隔にいます。私たちは、後で最終的な数字に追加するために、交換した Y トークンの数を記録します。その後、私たちはアルゴリズムを再開し、ケース 1 に遭遇するまで繰り返します。 その後、私たちは再定義します:
ケース 4:異なるスケール間隔で X を Y に交換する:R \< rᵃᵇ(p₀)、R- \< rᵃᵇ(p-)
図 10:異なるスケール間隔で X を Y に交換する。X から Y に交換すると、価格は p₃ に下がり、その後 p₂ に下がり、R は R- に増加し、rᵃᵇ は rᵃᵇ- に減少します。最初に R \< rᵃᵇ であり、R- \< rᵃᵇ- であるため、R = rᵃᵇ に交換する際に価格がスケール間隔を超えることが保証されます。
ケース 3 と全く同じですが、私たちは X を Y に交換し、R = R- になるまで繰り返し、ケース 2 に遭遇するまで繰り返します。私たちは再定義します:
結論
Uni V3 で正しい比率で流動性を提供することは非常に複雑なタスクです。スケール間隔内の異なる流動性値など、多くの要因を考慮する必要があります。上記のアルゴリズムは、プールデータを使用して、最高の流動性を得るために交換する必要のあるトークンの数を計算する方法を説明しています。
数字のグラフはここで入手できます:
https://www.desmos.com/calculator/rqbrnapxbj
https://www.desmos.com/calculator/ys7kcfgjxe
https://www.desmos.com/calculator/ehdwkbtu7z
https://www.desmos.com/calculator/huzzwffze9
https://www.desmos.com/calculator/t9u9x8xgcy
今後の記事では、Uni V3 の他の興味深い側面、例えば無常損失やマルチヘッジファンド、戦略リスクなどについて議論する予定です。
Mellow Protocol は AMM の流動性提供とマーケットメイキングの空間を探求しています。私たちの初期研究論文は こちら でご覧いただけます。Mellow の目標は、市場の非効率を排除し、ユーザーに成果をもたらす強力なツールエコシステムを構築することです。
私たちはこれを単なる製品と見なすだけでなく、複雑な数学が DeFi 分野にもたらす進化として捉えています。Uniswap や Curve がユーザーの取引体験を革新する方法と同様に、私たちは LP の最適化が tradfi の可能性を推進していると信じています。
次の記事では、適切なリバランス戦略の実施方法についてのさらなるアイデアを議論し、DeFi におけるより広範なテーマについても引き続き議論していきます。