見出し画像

Revolutionalize AMM - Asymmetric Liquidity by Carbon

今回の記事は、再びプロジェクトについて解説に戻り、Bancorが開発を進めてきたCarbonというDEXについてその理解を深めていきたいと思います。Carbonはトレーダー向けなDEXではありますが、Uniswap V3に次いで美しい設計であると感じています。これまでの記事は複雑な式と長い解説のオンパレードだったので、なるべく簡潔にわかりやすく私の所感とともにお伝えできればと思います。また微積分学に対する簡単な理解があると、より記事が読みやすくなるかと思います。基本的に Carbonのホワイトペーパーをベースに書いておりますので、こちらも併せてご参照くださ。https://resources.carbondefi.xyz/pages/CarbonWhitepaper.pdf

注意

  1. 本noteは、情報提供のみを目的として作成されており、いかなる金融商品及び暗号資産の購入や売却を推奨するものではありません。またいかなる金融商品及び暗号資産の売買の勧誘を意図しておりません。

  2. 本noteに記載している情報に起因するいかなる損失または損害についても、私自身が責任を負うものではありません。もちろん正確な情報発信を心がけておりますが、情報の正確性について保証をするものではございません。

  3. 本noteは税務、法務、投資アドバイスとなる情報提供を行う用途で作成されたものではありません。

  4. その他、誤り等もあるかと思いますので、コメント欄などでご指摘いただければと思います。

Uniswap V3など従来のAMMの概要

さて、Carbonの概要に移る前に、基本的なDEXの仕組みについておさらいしておきましょう。DEXとは分散型取引所ともいい、トレーダーがトークン同士を交換できます。また、それには流動性提供者が流動性をDEXに提供することで、その働きを促進します。DeFiの運用方法にはさまざまな手法があるわけですが、皆さんは流動性提供を行なったことがあるでしょうか。以前の記事にも記述しましたが、流動性提供というは平たくいえばUniswapやCurveといったDEX(分散型取引所)に多くの場合ペアでトークンを預け入れて、その流動性提供の見返りとしてトレーダーの取引手数料を得るというものです。流動性提供者は取引手数料を得て、DEXとしては、その流動性によってトレーダーがスワップ取引をより効率的に実行できるようになります。またDEXにおいて価格が変化するということは、DEX内のプールのトークン構成比が変化することを示しています。トレーダーがトークンAとトークンBを交換する場合、トークンAをプールにデポジットし、トークンBを引き出すことになります。したがってLPは常に相対的に価値が低いトークンを保持することになります。例えばETH-USDCというトークンペアで、流動性提供を行なった場合、ETHの価値が上がれば、DEXプール内のETHの枚数はどんどん減少します。つまりUSDCを抱え込むということです。一方、ETHの価値が下がればプール内のETHの枚数は増えてしまいます。反対にHodlerは、価格の変化の影響は受けますが、数量の変化は受けません。かなり説明を端折りますが、つまり数学的にいうと両者の関係は相加相乗平均といえるのです。

流動性提供のインセンティブを再考する

流動性提供という行為について整理してみましょう。流動性提供者は、トークンの価格変動に賭けない戦略つまり、ボラティリティをショートする戦略を取っているのに近いと言えます。特にUniswap V3などの集中流動性提供者は、市場価格が推移するであろう価格帯を予測して流動性を提供し、取引手数料を稼ぐという戦略を取っています。2023年4月1日にUniswap V3のソースコードのビジネスライセンスが失効して以降、Pancake swapなども集中流動性を実装し始めており、流動性提供において価格帯の予測はより重要な要素となっています。集中流動性における懸念の一つは、流動性提供者同士でその収益性に格差が生じることです。上記の通り流動性提供者がDEXに流動性を提供する最大の理由は、トレーダーがスワップ取引を執行する度に支払う取引手数料の全てもしくは、一部を受け取れることにあります。つまり、十分な取引手数料を得られなければ、流動性を提供する意味はほとんどないですし、ステーブルコインを除いたほぼ全てのペアでは、トークン自体の価格の下落や、インパーマネントロスによって流動性提供者が損失を被るリスクがあるのです。さて、これまでDEXの誕生以降、流動性提供者が流動性を提供するインセンティブはトレーダーが支払う取引手数料にありました。では、インセンティブが取引手数料でなくなったとしたら、、、
これがCarbonが引き起こす革命の概要です。下記で詳細な解説を行いますが、Carbonは、売りと買いのBonding Curveを分離させ、流動性提供者のインセンティブをBuy-low sell-high戦略の執行としたのです。
(補足1 : 実際にはLP提供後に、流動性の提供範囲内で、大きな価格変動が発生して、LP解体時に提供時の価格に戻るというのが手数料を稼ぐ上ではLPにとって最適です。したがって厳密にボラティリティが低いことが、望ましいわけではありません。しかしながらこの点を議論し出すとややこしくなるので、これ以上の言及は避けます。また流動性提供者のインセンティブは、取引手数料だけではなく、取引所のトークン、例えばSushiswapならSushiトークンを得るという点もありますが、これも本記事の趣旨には逸れますので、これ以上の言及は避けます。)

Carbonの概要

Carbonは、まさに次世代のAMMプロトコルであり、これまでのAMMの既成概念を破壊するプロダクトであると考えます。CarbonはこれまでのDEXにはない、さまざまな新しい仕組みを採用していますが、非対称流動性の導入は特筆すべきものです。流動性提供者は、任意のボンディングカーブを設定し流動性を提供しますが、これは一方向にのみ取引されるため、いわゆるオーダーブックでの注文様式に近づきます。Carbonでは一方向つまり売りと買いのBonding Curveを分離させることで、より高度なトレーディングやマーケットメイク戦略を実現します。また流動性提供者のインセンティブをBuy-low sell-high戦略による利益とすることで、取引手数料に依らない新しい仕組みを提案します。したがってCarbonではトークンの推移する価格帯の予測がUniswap V3以上に重要となります。以下では主にCarbonの非対称流動性提供について詳しく解説します。

非対称流動性

Carbonの非対称流動性提供は、トークンの売りの範囲と買いの範囲を分離させていると上段で何度も言及してきましたが、読者の皆様はいまいちピンとこない点も多いかなと思いますので既存のUniswap V3を例にその理解を深めていきたいと思います。Uniswap  V3で流動性を提供した場合、トークン売りと買いはカウンターパーティになることを通じて常に同じ範囲で執行されます。下記のスクリーンショットのようにETH/USDCのペアで747ドルから4670ドルの範囲で流動性を提供したとします。

出典 : https://uniswap-simulator.vercel.app

この場合、仮に現在価格が1868ドルから1000ドルに低下すると、流動性提供者のETHの枚数は増えます。なぜならトレーダーがETHをUSDCに交換しているため、流動性提供者はカウンターパーティとしてETHを購入し続けるからです。価格の下落後1000ドルから例えば1500ドルにETHの価格が回復すれば、トレーダーはUSDCをETHに交換しているため、流動性提供者は、カウンターパーティとしてUSDCを購入し続けます。既存のDEXでは、上記の例のように747ドルから4670ドルで流動性を提供すると、その同一の範囲内で、ETHが下がればカウンターパーティとして流動性提供者はETHを買い、価格が上がれば、ETHを売っているのです。しかしながらCarbonでは下記のスクリーンショットのように、流動性提供における売りと買いの範囲を分離させるのです。

出典 : https://medium.com/carbondefi/introducing-carbon-1f41aebf634b

つまりCarbonの流動性提供者は、カウンターパーティとして、買いは1300ドルから1100ドルの範囲内で、売りは1700ドルから1800ドルの範囲でトレーダーから注文を捌くということです。何度も言いますがUniswap V3とは異なり、売りと買いの範囲が分離されていることに注意が必要です。上記のスクリーンショットのように現在価格が1500ドルだとして、ETH価格が1000ドルに急落したとします。Carbonの流動性提供者は1300ドルから1100ドルに買いの流動性を提供しているわけですから、USDCはこの範囲内でETHに転換されます。そして仮にETH価格が1500ドルに戻ったとするとUniswap V3の場合であれば、再び1100ドルから1300ドルの範囲内で今度はETHがUSDCに転換されます。しかしながらCarbonで流動性を提供した場合、この範囲では常に買いしか執行しないため何も起きません。売りが発生する、つまりETHがUSDCに転換されていくのは売りの範囲として指定した1700ドルから1800ドルです。したがって仮にETHの価格が一定の価格帯(一番良いのは1100ドルから1800ドルを行ったり来たり)で推移すれば、流動性提供者は流動性提供を通じてBuy-low Sell-high戦略、つまり安く買って高く売るという戦略を実行することになります。下記のCarbon公式Tweetと上記の例を踏まれば、価格が一定の範囲内で推移することで雪だるま式に提供した流動性が増えていきます。この点は記事の最終部で再び言及します。ただ注意点としては、価格が予想したレンジに到達しない場合です。上記の例に倣うと、ETHの現在価格1500ドルとして、その後1400ドルから1600ドルの範囲で推移しても特段何も起きません。またETH価格が1000ドルに下落し1600ドルまで上昇したものの、また下落という場合、単にUSDCが不利な価格でETHに転換されただけです。加えてETH価格が1200ドルまで下落し、その後1800ドルまで上昇しても1200ドル時点では全てのUSDCがETHに変換されるわけではありません。よって1200ドルまでで転換されたETHがUSDCに変わるだけです。したがってETH価格が1000ドルに下落し、その後1800ドルに上昇した場合の利益よりは限定的です。それらの注意点を踏まえながら以下ではホワイトペーパーを読み込みながらさらに具体的なCarbonの仕組みついて深堀していきたいと思います。注意ですが、必ずしも売りと買いのレンジ両方にあらかじめ流動性を提供する必要はありません。例えば先例にならない1100ドルから1300ドルにUSDCを提供し、1700ドルから1800ドルにはETHを提供しなかったとします。その場合に現在価格が1500ドルから2000ドルに上昇したとしても売りのレンジにETHが提供されていなけければ何も発生しません。売りの流動性レンジを踏まえたBonding Curveが、Carbonに反映されているだけです。もし現在価格がそれ以前に1300ドルを割っており、流動性のETHへの転換が少しでも進んでいれば1700ドルから1800ドルの範囲内でUSDCへの流動性の転換が執行されます。したがってペアでなく単一トークンによる流動性提供も可能です。

Parametric concentrated liquidity

上記では、流動性提供者は自由に売りと買いの範囲を決定できる、つまり自由にBonding Curveを設定できるわけです。それではCarbonのBonding Curveを見てみましょう。
$${y =\frac { P_0x_0(x(Γ − 1) − x_0 (Γ − 2))} { Γx−x_0 (Γ−1)}}$$
一瞬面食らってしまいますが、冷静に式を解釈すれば何の問題もありません。ここから確率微分方程式が出てくるわけでも、ラプラス変換をするわけでもありません。式自体の意味を丁寧に追えば、理解できるものなので恐れずついてきてください。

出典 : https://medium.com/carbondefi/introducing-carbon-1f41aebf634b

Constant-product curveは、いわゆる従来のDEXで採用されてきたBonding Curveです。一方Constant-price curveは、Curve financeなどステーブルスワップを専門とするDEXが採用するBonding  CurveでUSDC-USDTといった価格が極めて変動しづらいペアで用いられています。(補足2 : 厳密にはこんな単純な式ではありませんが、雰囲気を掴むことが大事です。)
Carbonでは$${Γ}$$、もしくは画像では$${r}$$を$${0 < Γ < 1}$$の範囲で変化させることで任意のBonding Curveを表現することができるのです。下記のGif画像をご覧になれば、$${Γ}$$を動かすことによりBonding Curveの形が変化しているのが確認できるかと思います。例えば$${Γ=0}$$とすれば、
$${y =\frac { P_0x_0(x(0 − 1) − x_0 (0 − 2))} { 0x−x_0 (0−1)}}$$
$${y =\frac { P_0x_0(x(− 1) − x_0 (− 2))} { 0−x_0 (−1)}}$$
$${y =\frac { - P_0x_0(-x_0x + 2x_0)} { x_0}}$$
$${y= - P_0(-x + 2x_0)}$$
となります。また$${P_0,x_0}$$は定数みたいなものなものなので、さすれば$${x+Py}$$というステーブルスワップの式に近しくなります。反対に$${Γ=1}$$とすれば、途中式は省略しますが、$${y=\frac {P_0x_0^2}{x}}$$となります。したがってこれまた$${xy=k}$$という一般的なDEXの式に近しくなります。

出典 : CarbonWhitepaper記載のDesmosより

では、任意のBonding Curveを作成するとはどのような意味を持つのでしょうか。それは任意の価格帯に流動性を提供するということと当然同義です。詳しく説明します。Bonding Curveの図は、一般にトークンAとトークンBの任意の点における量を示しています。ではその図において価格を表現するためにはどうすれば良いでしょうか。それはBonding Curveに接線を引くことです。この接線の傾きがその点における価格を示しています。接線を引くということはつまり微分をすることであり、DEXにおける価格とは究極的には微分係数なのです。もちろんDEXにおける価格とはトークン同士の比とも理解することが出来ます。例えばあるDEXのプールにUSDC-USDTのペアでUSDCが1000枚、USDTが1000枚存在していれば、両者の価値は同じであり、1000/1000で価格は1となります。しかしながら、この理解はいずれ限界が来るのと、見通しが悪くなる気がするのでオススメしません。
解説を進めますが、指値注文のように流動性を提供するというのは、$${y =x}$$のように一次式のBonding curveを作成して流動性を提供することと同義なのです。なぜなら一次式の微分係数は定数で、いかなる点におけても同じだからです。このことは、一次式の接線がそれ自体で一つしかないことからも明らかです。下記のGif画像をご覧ください。

CarbonWhitepaperよりDesmosを用いて著者が作成

そして狭い範囲で流動性を提供するというのは、限りになく線形に近いBonding Curveを設定するということです。なぜなら先ほどから記述している通り、DEXにおける価格は微分係数であり、接線の傾きなのです。限りなく線形に近いBonding Curveにおいて、感覚的には、引くことのできる接線の数は少ないはずです。以下のGit画像をご覧ください。先の画像と比べれば、引ける接戦は当然増えていますが、もう一つ下ののGit画像と比べれば明らかに引ける接線の数は少なそうです。

CarbonWhitepaperよりDesmosを用いて著者が作成

これが例えばConstan-product curveの場合、ボンディングカーブがより湾曲するため、引ける接線は、上段の例と比べると圧倒的に多いはずです。以下のGif画像を確認してください。

CarbonWhitepaperよりDesmosを用いて著者が作成

もちろん実際には関数は実数上の点の集合であり、無限集合なので接線は無限に引くことができます。ただ今回は感覚的な話として持ち出しましたので、お許しください。

Buy-low-Sell-high戦略とは、Bonding Curveの分離と共に

Carbonでは上記で説明した任意のBonding Curveを売りと買いの範囲で一本づつ設定し合計2つの曲線を1つの流動性ポジションとして取り扱います。では実際にBuy-low-Sell-high戦略について具体例を元に理解を深めます。

出典 : CarbonWhitepaper記載のDesmosより

上記の図では青色を買いのBonding Curve、赤色を売りのBonding Curveとして設定します。各パラメーターについての詳しい概要はホワイトペーパーを参照いただくとして、一旦下記とします。
$${Q = 0.8 , x_{int} = 100 , y_{int} = 50 , P_x = 0.4 , P_y = 0.625 , P_0 = 0.5 }$$そして$${Q = 0.8、x_{intr} = 100、y_{intr} = 80 P_{xr} = 0.64, P_{yr} = 1.0, P_{0r} = 0.8}$$
そして代入する式は以下です。
$${Q = \frac {xy}{(x-x_{int})(y-y_{int})}}$$
全く見慣れない式と変数ばかりが並んでいると思いますが、実はこの式は
$${y =\frac { P_0x_0(x(Γ − 1) − x_0 (Γ − 2))} { Γx−x_0 (Γ−1)}}$$
を$${Q=(1-Γ)^2,x_{int} = \frac {x_0(2-Γ)}{1-Γ},y_{int} = \frac {y_0(2-Γ)}{1-Γ}}$$と置いて式変形したものなのです。
$${(1-Γ)^2 = \frac {xy}{(x-x_{int})(y-y_{int})}=\frac {xy}{(x-\frac {x_0(2-Γ)}{1-Γ})(y-\frac {y_0(2-Γ)}{1-Γ})}}$$
この式を$${y}$$について解くと$${y =\frac { P_0x_0(x(Γ − 1) − x_0 (Γ − 2))} { Γx−x_0 (Γ−1)}}$$になります。式の展開は面倒なので、気になる方はご自身で確かめてみると良いでしょう。また数式のAppendixはホワイトペーパーに記述されているのでそちらを確認いただければと思います。とにかく$${Q = \frac {xy}{(x-x_{int})(y-y_{int})}}$$も$${y =\frac { P_0x_0(x(Γ − 1) − x_0 (Γ − 2))} { Γx−x_0 (Γ−1)}}$$も使われる変数が変わっただけで、同じBonding Curveの式です。では上記のスクリーンショットの解説を始めましょう。まずトークン$${x}$$50枚を価格レンジ0.4から0.64の範囲で流動性提供します。このスクリーンショットからすぐに価格を理解することはできませんが、価格は先ほどから申し上げている通り接線の傾きです。したがって青い線に接線を引いてみれば何となしに、価格レンジの両端つまり$${x=0,y=0}$$のところで、傾き0.64と0.4の接線が引けるかと思います。もちろんその点以外でも第一象限の範囲内で無数に接線は引けますが、流動性提供のレンジの両端として両者を挙げています。現在価格が0.64、つまり青い曲線である買いのレンジに現在価格が差し掛かったとします。買いのレンジにはトークン$${x}$$を50枚流動性として提供しています。したがってトークン$${x}$$の価格の下落に沿ってトークン$${y}$$へと提供した価格レンジ0.64から0.4の間で流動性が転換されていきます。そして買いのレンジである0.4以下に現在価格が下落すれば、50枚のトークン$${x}$$は、100枚のトークン$${y}$$へとトレーダーの売買を通じて全て転換されます。その後トークン$${x}$$の現在価格が再び上昇し、1.0以上となれば、赤い曲線である売りの流動性レンジは0.625から1.0に設定されているため100枚のトークン$${y}$$が80枚のトークン$${x}$$へと転換されます。つまり流動性提供者は当該のトークン建30%の利益が得ることができます。加えて流動性提範囲の変更についてですが、この点も非常に興味深いものです。Uniswap V3などのDEXはティックベースであるため、流動性提供者はリバランスを執行する際に、一度提供した流動性を引き出して再度新しい価格帯に流動性を提供する必要があります。しかしながらCarbonでは、パラメーターを変更することでBonding Curveの曲線を調整し、新しい価格帯へと流動性を提供したこととします。この他にもCarbonには、MEVの一種であるサンドイッチアタックへの耐性が備えられているなど、本記事では言及しきれない、さまざまな特色を持っています。私自身はこのCarbon、非常に美しいモデルだなと感じると共に多くの一般ユーザーが流動性提供者としてプロトコルを使用するのは非常に難しいかなとも思いました。というのも流動性提供者は、買いのレンジと売りのレンジを適切に見極めて流動性を提供する必要があります。確かにUniswap V3など集中流動性を実装するプロダクトでも一定トークンの価格推移予測を行う必要があります。ただUniswap V3ではとりあえず流動性の提供範囲にトークンの現在価格が差し掛かれば手数料を稼げてきたわけです。一方Carbonでは、明確に売りと買いの流動性レンジを指定しなければならず、価格推移をより正確に予測できなければ、収益を稼ぐことはできません。したがってCarbon上では洗練されたトレーダーやArrakis FinanceやOrange Financeといった流動性マネジメントプロトコルによる利用がある意味前提となるのかと理解しています。今回の記事は以上です。

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