見出し画像

【初心者向け監修付き翻訳記事】Uniswap, Balancer, Curveの流動性の仕組みについての基礎知識

下記のツイートを翻訳しました。もし間違い等がありましたら、TwitterにDMいただけるとありがたいです。
また、ページの最後にアンケートを置いておりますので、読みたい記事がありましたら、ご回答ください。

https://twitter.com/noobbotter3

まえがき

DeFiの基本を理解することは、新しいプロジェクトを分析する上で非常に重要です。

このスレッドでは、100ページ以上に及ぶ自動マーケットメーカー(AMM)の研究を要約し、これら3つのプロトコルがどのように機能するのかを正確に説明します。面白いので、数学に挑戦してみてください。

暗号分野の新しい才能のほとんどは、DeFiのインフラとその歴史の中心であるこれらのプロトコルのメカニズムに精通していないことに気づきました。

このスレッドの一部をスキップして、お望みのプロジェクトに直接進むことも可能です。

さあ、始めましょう

ユニスワップ(Uniswap)

ユニスワップが投稿した自動マーケットメーカー(AMM)のアイデアに触発されました。ヴィタリック・ブテリン(@VitalikButerin)が2016年に 開発し、ヘイデンザダムス(@haydenzadams)が、2年後の2018年11月にローンチしました。

Uniswap V1 と V2 は等量曲線の式(constant-product formula)で動作します(この用語は覚えておいてください)。

x * y = k(反比例の式)

ここで各変数は下記のように定義されます。
x: プールにあるトークン1の数
y: プールにあるトークン2の数
k:取引中では一定の定数。流動性が提供/撤回されたときに再計算される。

ユーザーは、xとyの資産を等しい割合の価値で預けることで、AMMに流動性(LP)を提供することができます。プール内の流動性のうちユーザーが提供したLPの分はERC-20トークンで表され、流動性を追加する際に受け取り、引き出す際に焼却されます。

トレードが行われると、ユーザーはトークン1の量をプールに追加する(xが増加する)。
定数が変わらないようにするには、yを減らさなければなりません。
元のyと新しいyの差は、トレード後にユーザーがトークン2をどれだけ受け取れるかの数と等しいです。

例えば

20,000USDCと10ETHのプールがあります。kは200,000になります。1ETHを売りたい場合、プールのETHは11に増加します。等式が成立するためには、USDCを200,000 / 11 = 18,181.82まで減少する必要があります。

あなたは1ETHで20,000 - 18,181.82 = 1,818.18 USDCを受け取ります。

UniswapのようなコンスタントプロダクトのAMMにおけるスポット価格(Spot Price; SP)は、プール内のトークン1の量をトークン2の量で割ることで下記のように計算されます。

SP = x / y

今回のUSDC/ETHの例では、スポット価格は20,000 / 10 = 2,000となります。

しかし、スポット価格は無限小の取引にしか成立しません。
取引における有効価格(EP)は、受け取ったトークンの量が渡した量を上回った場合です。

この例では、EP = 1,818.18 / 1 = 1,818.18

新しいSP = 18,181.82 / 11 = 1,652.89 (トレードのEPより低い)

x * y = k の価格方程式は、曲線として可視化することができます。
この曲線は軸のどちらにも接することがなく、一定の製品AMMはどのような価格であっても常に流動性を持っていることを意味します。

上記は双曲線における漸近線の性質をさしています。
漸近線とは単純な反比例のグラフ(y = 1/x)に例えると、グラフの線がx軸とy軸に極限まで近づくことが合っても決して接することがないという性質。

監修者注

取引は曲線に沿ってポイントを移動させます。流動性を追加したり引き出したりすることで、曲線が移動します。

トークン1とトークン2の総積は一定になる(x*y = 定数)という式に沿って価格が算出される。

監修者注

Uniswapの前にもう一つ重要な概念があります。
変動損失 (Impermanent Loss ;IL)です。ILは、トークンをプールに預けた後、トークンの価格が変化したときに発生します。
価格がカーブに沿って動くと、流動性プロバイダー(Liquidity Provider; LP)のポジションは価値を失います。

しかし、スポット価格は元に戻るので、この損失は変動的です。
また、オプション戦略によってILをヘッジすることで、リスクから身を守りながら利回りを確保することも可能です。

ILの詳細については、以下の事例とリンクを参照してください。

アリスは1ETHと100DAIを流動性プールに入金したとします。この特定の自動マーケットメイカー(AMM)では、入金されたトークンペアは等価である必要があります。つまり、入金時には1ETHの価格は100DAIということです。これは、アリスはドル建てだと200ドルを入金したということになります。

アリスが入金した分以外に他のLPからの入金があり、そのプールには合計で10ETHと1,000DAIがあるとします。つまり、アリスのこのプールにおけるシェアは10%で、合計の流動性は10,000ということです。

その後、ETHの価格が上昇して、400DAIになったとしましょう。ETHの高騰中にアービトラージトレーダーは、レートが現在の価格を反映するまで、DAIをプールに追加し、ETHをプールから取り除きます。AMMには注文板がないことを思い出してください。プール内の資産の価格を決定するのはプール内におけるトレードペア同士のレートです。プールにおける流動性は一定(10,000)のままですが、資産のレートは変動します。
ETHの価格が400DAIになった場合、プールにおけるETHの枚数とDAIの枚数のレートは変わりました。アービトラージトレーダーによって、現在プールには5ETHと2,000DAIがあります。

ここで、アリスは自分の資金を出金することにしました。前述のとおり、彼女はこのプールのシェアの10%を占めています。その結果、彼女は0.5ETHと200DAI、つまり合計で400ドルを引き出せます。彼女が入金したトークンはドル建てで200ドルだったので、200ドル分の利益が出ているように見えます。っしかし、待ってください。もしも、彼女が1ETHと100DAIをそのままホールドしていたらどうなっていたでしょう。その場合、ドル建てでの合計価値は500ドルになっていました。

ここからわかる通り、流動性プールに入金するよりもただホールドしているだけの方がアリスは大きな利益を得ることができました。これを変動損失と呼んでいます。この場合、アリスが最初に入金した額が相対的に小さかったため、損失はそこまで大きくはないです。しかし、変動損失は非常に大きなものになり、時には元本割れする可能性もあることは覚えておいてください。

https://academy.binance.com/ja/articles/impermanent-loss-explained

2021年3月に導入されたUniswap V3は、集中流動性と手数料ティアを採用しています。

このモデルにより、目標価格周辺の流動性を高め、LPの様々なリスク・リターンプロファイルを実現することができる。
Uniswap V3はV2よりもはるかに資本効率に優れています。

バランサーラボ(@BalancerLabs)

BalancerLabsは、ブロックサイエンスのインキュベートプロジェクトとして2018年に設立された後、別会社としてスピンアウトしました。2019年9月にホワイトペーパーを公開し、2020年3月にローンチした

Balancerは、最大8つのトークンを任意の比率で組み合わせた流動性プールを許可なく作成することができるAMMです。

簡単に言うと、Uniswapプールが2つのアセット(xとy)で構成されているのに対し、Balancerはその考えを拡張し、任意のウェイトを持つn個のアセットからなるプールの公式を定義しました。

まず、ウェイトの話から。
プール内のトークンのウェイトをWとし、すべてのウェイトを足すと1になるようにします。
そして、スポット価格の計算式を、ターゲットのウェイトを考慮するように、次のように修正することができます。

ここでBi, B0, Wi, W0は下記のように定義されます。
Bi: トークンiの残高 (取引所(trader)が販売(sold)するトークンで、プールに投入されているもの)
Bo:トークンoの残高(取引所(trader)が購入(bought)するトークンで、プールから出ていくもの)
Wi:トークンiの重み
W0:トークンoの重み

監修者注

資産の定積プールの式は、Uniswapのx * y = kを拡張したものです。
(翻訳者注:変数を増やしてx とyとzの式にしたという意味)

3つの資産の場合、次のようになる。x * y * z = kとなります。
注意:x、y、zは、プール内の各トークンの残高です。

2つのアセット間のスポット価格 = x / y

これをすべてまとめてn個のアセットに一般化すると、次のような式になります。これがBalancerの中核となる式です。

ここで、t, Bt, Wtは下記のように定義されます
t: プール内のトークンの範囲
Bt: プール内のトークンの残高
Wt: 重みの総和が1になるように標準化されたトークンの重み。

監修者注

注:直感的なウェイトの掛け算ではなく、ウェイトのべき乗をバランスに使っているのは、これは合計ではなく、掛け算だからです。

Uniswapと同様に、スワップで受け取る金額は、トークン1の金額が増加した後にプールに残るトークン2の金額を、一定で他の資産を固定したまま解くことで計算されます。

Bはもともとプールにあった資産、Aは交換された金額です。

ウェイトとマルチアセットプールが資産のスポット価格にどのような影響を与えるか、簡単なビジュアルを作成しました。

Balancerは、流動性プールと取引プラットフォームの2つの重要なコンポーネントで構成されています。ユーザーは取引を行うために取引プラットフォームを訪問し、プロトコルは、利用可能なすべての流動性プールを介してスワップのための最も最適な見積もりを見つけることができます。

Balancer上の流動性プールは、ControlledとFinalizedがあります。
Controlled poolsは、プール作成者によって更新可能です。コントロールされたプールでは、資産のウェイト、資産タイプ、手数料を調整することができます。
Finalized poolsでは、プールの資産タイプ、ウェイト、および手数料が固定されています。

Balancerの流動性プロバイダーは、取引所手数料と毎週の報酬として$BALを受け取ります。$BALはプロトコルの所有権を表し、ガバナンスの決定における議決権を付与します。

BALは$veBALとステイクすることができ、より多くの流動性マイニング報酬とガバナンス投票権を付与することができます。さらに、$veBALは、流動性採掘報酬をどのプールに割り当てるかを決定するゲージや、後述するCurveのエコシステムと同様の賄賂を導入しています。

Balancerは取引所と考えることもできますが、トークンのウェイトをプール内の特定の割合に設定し、裁定者がそのウェイトを維持するようにするインデックスプロトコルとも考えることができます。

カーブファイナンス(CurveFinance)

CurveFinanceによるStableSwapのホワイトペーパーとしてスタート。
ニューミッチウィル(@newmichwill)が2019年の11月に発表し、2020年の1月にローンチしました。
そのデザインは、UniswapとBalancerで使われている計算式の上に構築されています。

Curveは同種の資産(例:UDSCとUDST)に対して、スリッページの少ない十分な流動性を提供することを目的としている

コンスタントサム式であれば、1:1のスワップが可能だが、流動性がなくなる可能性があり、バランスの取れた状態にはならない。画像は、x + y = 10 の定数和を説明しています。

ここで、Uniswapの定積式を修正しよう:y * x = k 、スポット価格はSP = x / yとして決定される。
事実上、価格は曲線の接線である。
交換される量が多ければ多いほど、元の状態から最終状態へのスリッページが発生する。

Curveの主要な方程式は、定積式と定和式の組み合わせで、目標価格付近ではほぼフラットなカーブになるようになっています。

赤:定積式、青:定和式

監修者注

これにより、目標価格付近でのスリッページを最小限に抑え、レンジ外での流動性を確保することができます。

数学の授業です。
和の不変量と積の不変量を組み合わせたい。まずは、足し算をしてみましょう。後で意味がわかります。

(30M / 2)²とは何か、そして定数からどのようにしてそれに至ったのでしょうか?
バランス状態にあるステーブルコインの積です。
プールにあるコインの合計が30Mであれば、それぞれ15Mです。
その積は15M²です。

さて、私たちが導き出した曲線はどのようなものでしょうか。
並べ替えてみると、次のようなプロットが得られます。
スリッページが少ないという点では、あまり改善されていないようです。

DAIをx、USDCをyと書けば、30Mは再びDとなる。
次に「和」の部分に係数χ(カイ)をかけてみよう。

x + y = D は、χ(x + y) = χD となる。

一般式に足すと

χ(x + y) + x * y = χD + (D / 2)² となる。

χを変化させると曲線がどのように変化するか見てみよう。

パラメータχ(Chi)は(x+y)の重み付けをしているパラメータになります。
χを大きくするとx+y(緑線)の効きが強くなり、小さくすると弱くなります。実際の価格変動に近づくようにχの値を調節するみたいです。

監修者注

カイパラメータ(χ)は、0にするとスリッページがゼロ(平坦)からスリッページが高い(製品が一定)までカーブを動かすことができます。
欲しいのはダイナミックなχで、xによって変化し目標価格付近でカーブを平坦にする(スリッページを低くする)ものです。

xとyの量が釣り合っていない場合、χは減少し、より急なカーブを描くようにしたい。
両者が均衡している場合(目標価格付近)、χを大きくしたい(曲線はx + y = Dに近づき、価格変動が小さくなる)。

また、χはプールの総サイズによって変化しないようにしたい。
χを無次元化するために、和不変量にDを乗じる。

χ(x + y) = χD は Dχ(x + y) = χD² となる。

新しい主方程式である

Dχ(x + y) + x * y = χD² + (D / 2)² となります。

χをプール内のトークンの比率に適応させるために、@newmichwillは、Aを定数とするこの公式を使うことを提案しました。

χを最適化するのはいうほど簡単ではないけれども、この式を使えばそれっぽく近似できるということですね。

監修者注

例えば、あるプールが2つの資産を持ち、それぞれ1ドルの価値があり、合計で40ドルになる場合を考えてみましょう。

これはまさに私たちが望んでいることで、プールのバランスが取れているときにはχは高くなり(曲線を平坦にし、滑りを少なくする)、バランスが崩れているときには低くなる(滑りを多くする)。

ここで、このχを主方程式に代入すると、次のようになる。

この式を単純化すると、最終的にCurveの式になる。

この式を多くのトークンを持つプールに一般化することができる。

Stableswapの最終的な曲線(Curve)は、2つの資産に対して次のように可視化することができます。

補足:Balancerとは異なり、Curveではプール作成者がプール内のトークンのウェイトを指定することができません。例えば、2つのアセットを持つプールは、50%-50%の重みを維持する方向に流動性提供を動機付けます。

Curveの数式により、このプロトコルはUniswapよりも大幅に低いスリッページを達成することができました。
現在、100万DAIをUSDCにスワップする場合のスリッページは127.84ドル、または0.0127%です。
この取引は、DAI、USDC、USDTからなるプール「3pool」を経由して行われる予定です。

しかし現在、Uniswapが流動性を集中させたV3を導入したため、安定したトークンにおけるCurveの市場支配は危機に瀕しています。100万DAIからUSDCへのスワップは、わずか90ドルをスリップします。Uniswap V3については、こちらで詳しく解説しています。

CRVはCurveのネイティブトークンで、投票、ステーキング、報酬のブーストに使用されます。これらのアクティビティに参加するには、ユーザーは$CRVを$veCRV(投票済みCRV)にロックする必要があります。投票とLPの報酬は、ロックされたトークンの数量と期間の両方に依存します。

これにより、保有者のインセンティブを長期的なプロトコルの成功と一致させることができます。現在、全CRVの56.2%が平均3.64年の間ロックされています。

$veCRVの保有者は、流動性提供による報酬のアップを受けることができます。また、流動性マイニングのインセンティブを受けるプールを提案し、投票することができます。4日後に施行されるゲージウェイトの提案はこちらです。

ご覧の通り、カーブ・リキッド・マイニング・エミッションに対する投票権をコントロールすることは、自分のプールに向けたいプレイヤーにとって非常に重要なことです。

LPの報酬を最大化するためには、LPは相当量の$CRVをロックする必要があります。Convex Financeはユーザーの$veCRVと預金を集約し、$veCRVを必要とせずに最大の利回りを得ることができるようにしたのです。

コンベックスはすぐに数十億ドルの流動性と$veCRVを蓄積し、カーブのガバナンスとLPのインセンティブに関する投票の中心地となったのです。現在、プロジェクトは$CVXトークン保有者を買収し、コンベックスが$veCRVで投じる投票に影響を及ぼしている。

Curveの戦争については、別の記事で紹介したいと思いますので、今はここで詳しく知ることができます。

以上で、現在の市場を形成したAMMについての私の概説を終わります。もし何か見逃したものがあれば教えてください。また、何か新しい発見があればTwitterで@kinaumovをフォローしてください。



いいなと思ったら応援しよう!