
FLUIDの貸出・借入時の流動性再配置はどのように行われるのか? 在庫と価格、アービトラージの理解【AIレポート】
まめだいメモ
FLUIDについて調べているのですが、スルメみたいな難解実装になっていてめちゃくちゃ難しいです。実際英語圏でも、あまりまともな解説記事がなく公式ドキュメントを頼っている状態なので、エイヤッとまとめてもらいました。
一回のレポートでは分からないことが多すぎたため、DeepResearchを数回回していい感じにマージしています。詳細な挙動は「集中流動性の決定方法」から解説です。前半は概要なので、詳しい人は読み飛ばしてください。数式が一部文字化けしていますが、治すと趣旨が変わってしまう懸念もあるので一部校正したのみで公開します。
1. FLUIDのAMMはオラクルレスか?集中流動性型か?
オラクルレス:
FLUIDのAMM(Fluid DEX)は基本的にプール内資産の比率によって価格が決まるAMMであり、価格決定に外部オラクルを直接参照しない点ではオラクルレスの設計です。スワップの価格計算にはUniswap v2と同様の定数積フォーミュラ(x*y=k)を用いており、取引ごとに外部価格フィードを参照せずに内部で価格が形成されます。このため、AMM自体は価格オラクル不要で動作します(ただし、後述するように安全性のために流動性範囲の制御や価格の制限にChainlink等のオラクル情報を利用する仕組みも組み込まれています)。
集中流動性型:
FLUIDのAMMは集中型流動性(Concentrated Liquidity)モデルを採用しています。公式ブログによれば、Fluid DEX v1は「単一レンジの自動リバランスUX(Uniswap v2のような使い勝手)とUniswap v3のような流動性集中」を組み合わせた設計とされています。つまり、ユーザーから見るとUniswap v2のようにシンプルに流動性提供できますが、プロトコル内部ではUniswap v3型に特定の価格範囲へ資産を集中させて流動性を配置します。この“レンジオーダー”は好きなサイズ・手数料・資産比率で作成可能であり、例えばETH:wstETHなら流動性の80%をETH、20%をwstETHのように偏った構成も許容されています。
実際、Fluid DEXでは「中心価格 (central price)」を定め、その周辺の狭い価格帯(上下限となる価格)にのみ実際の流動性を配置します。これはちょうどUniswap v3において全流動性をあるレンジに集中させた状態に相当します。その範囲外では実際の資産は配置されませんが、代わりに仮想的なリザーブ(imaginary reserves)を想定することでAMM全体としての価格曲線(x*y=k)を維持しています。このように「集中したレンジ+仮想的な外部流動性」で構成することで、常に狭い範囲に資産を集中させつつも定数積モデルによるスワップ計算を可能にしています。結果として、FluidのAMMはUniswap v3型の集中流動性AMMと言えます。
2. ETH-USDCペアにおけるTickごとの流動性配置と決定要因
中心価格とレンジの決定:
ETH-USDCのように価格変動のあるペアでも、Fluid AMMは上記のような中心価格とレンジ幅を用いて流動性を配置します。中心価格は基本的に市場価格に沿うよう決定されますが、その算出には直近のスワップ価格や必要に応じて外部情報も参照します。例えば流動性がペッグされたペア(ETH-wstETH等)では外部コントラクトから価格を取得するケースもあり、ETH-USDCのような一般的なペアでもChainlink価格などを参考に初期の中心価格を設定しつつ、以降のスワップに応じて内部で調整されると考えられます。またガバナンスにより「レンジの幅(%)」や「価格変動のしきい値」がパラメータとして設定されており、これらによって中心価格から上下何%の範囲に流動性を集中させるか(レンジ幅)、および一度の変動で価格をどこまで動かせるか(しきい値)が決まります。例えばETH-USDCのボラティリティに応じてレンジ幅が広めに設定され、安定資産ペアでは非常に狭く設定される、といった具合です。実際Fluid DEXでは、ペッグ資産間では価格変動が小さいためごく狭い範囲に集中流動性を配置するのが有効であると述べられています。一方でETH-USDCでは価格変動幅を考慮した適切なレンジが設定され、その範囲内でUniswap v3と同様にTick(価格帯区切り)ごとに均一に流動性が配置されます(実装上はTickMathに基づき離散化されますが、基本的にレンジ全体で一定量の流動性を提供しているイメージです)。
流動性分布の特徴:
FLUIDでは基本的に全実流動性を一つの大きなレンジ区間(Tick区間)に集中配置します。そのため、そのレンジ内では各Tickに同じ流動性が載っている状態で、レンジ外の価格帯には実流動性は置かれません。この状態は「現在の中心価格を中心に、特定の上下限までオーダーブックに厚みを持たせ、そこを超えると流動性がない」状況に相当します。もっとも、Fluidではレンジ外にも仮想的な流動性を定義しており、これにより大きなスワップで価格がレンジ外まで動く際も数式上の一貫性を保っています。イメージとしては、Uniswap v3でLPが設定した範囲外では取引が停止しますが、Fluidでは仮想残高を用いて一応スワップ計算はできるようにしつつ、実際には一定以上の価格変動が起こらないよう制限する仕組みになっています(急激な価格変化を避けるハードしきい値も導入)。価格がレンジ限界に達すると、中心価格自体が時間経過とともにレンジ方向へゆっくりシフトする機構もあります。これによって、例えばETHの価格上昇が続く場合には中心価格とレンジが徐々に上方に追従し、流動性範囲もそれに合わせてスライドしていきます(ただし一気には動かず、設定された「シフト時間」に基づき連続的に移行)。このようにレンジ(Tick区間)の再設定・リバランスが自動かつ段階的に行われ、常に現在の価格近辺に流動性が集中するようになっています。
レンディング側の借入・供給量の影響:
Fluidの特徴は流動性レイヤー(Liquidity Layer)と呼ばれる仕組みにより、レンディング(貸借)とDEX流動性が統合されている点です。ユーザーがFluidに預けた資産(供給資産)は、そのままDEXの流動性の一部として活用され、ユーザーが借りた資産(負債)も逆の側でDEX流動性に組み込まれます。具体的には、ETH-USDCペアの場合、ETHを担保にUSDCを借りるユーザーと、USDCを担保にETHを借りるユーザーのポジションがそれぞれ対応する2つの流動性プール(ETHをコラテラルとするプールとUSDCをコラテラルとするプール)を形成し、両者が組み合わさって全体のETH-USDCマーケットを構成します。したがって、レンディング側でどちらの資産が多く供給され、どちらが多く借りられているかが流動性分布に直結します。例えば、ETHの預け入れが潤沢でUSDCの供給が少ない(USDC借入が多い)場合、プール内の実質的なUSDC残高が減るため、流動性の大半はETH側に偏り(ETHの比率が高くUSDCが少ない流動性分布)となります。これはUniswap v3のレンジ内で現在価格が下限寄りになる状況に近く、プール内の構成比が80%ETH:20%USDCのように偏るケースです。逆にUSDC供給が豊富でETH借入が多い場合は、プール内USDCが厚くなり価格レンジ内でETHの保有比率が低下するでしょう。Fluidではこのような資産偏在が起きた際でも常に両資産間の交換レートが一貫するよう内部で自己裁定(セルフアービトラージ)処理が行われます。例えば、一方のプールにUSDCを追加すると一時的にUSDC:USDT間のレート(例示)が他方プールとズレますが、直後にシステム内部で一部USDCをUSDTにスワップしてバランスを取り直す、といった具合です。ETH-USDCペアでも、ETH側資産だけ増えた場合には一部ETHを売却してUSDCを確保し、プールの価格が変わらないよう調整する動きが考えられます。この機構により、ユーザーは片方の資産だけを提供/引き出ししてもプールは適切にリバランスされ、結果的に流動性レンジ内の価格(中心価格)は維持されます。また、流動性レイヤーには利用率(utilization)による制御も組み込まれており、ある資産の借入が極端に多く利用率が上がっている場合、スワップによりその資産をさらに取り出すことで利用率閾値を超えないよう取引量や価格変動に制限が掛かります。実装上は、スワップ処理内で最終的な「総借入/総供給」の利用率がプロトコル設定を超えないか検証し、超えるような大口のスワップは拒否されるようになっています。さらに、中心価格にも利用率に応じた制約があり、極端な偏りでプロトコルの安全性が損なわれる方向への価格変動(例:USDC枯渇状態でのETH急騰など)は価格レンジのシフト速度や範囲に制限が掛かります。これらにより、レンディング側での借入・返済・預け入れ・引き出しといった動作がリアルタイムにAMMプールの流動性バランス(各Tickへの資産配分や価格レンジ)に反映されると同時に、不健全な偏りが急激に進行しないようプロトコル全体で調整されています。
1. 集中流動性の決定方法
【Tickごとの流動性配置の数式】:Uniswap v3では価格空間を離散的な「tick」(ティック)で区切り、1 tick変動すると価格が約0.01%変化するよう定義されています。具体的には価格とtickの関係式は、例えば「1.0001」の累乗で表され、$P = 1.0001^{,t}$($t$はtick指数)となります。各tickは流動性を配置できる離散的な価格範囲の境界を意味し、流動性提供者(LP)は下限tickと上限tickを選んでその区間に資本$L$を集中させます。あるポジションが価格範囲[$P_a$, $P_b$](対応するtick区間[$t_a$, $t_b$])に流動性$L$を提供した場合、その区間内の各tickで一定量$L$の流動性が供給されています(区間外では流動性0)。この状況は数式で表せて、例えば単一LPの場合:

つまり全ての実流動性を特定のtick範囲(価格範囲)[$t_a$, $t_b$]に集中させ、範囲外では流動性が存在しないことを意味します。なお、$P_a$・$P_b$はそれぞれtick $t_a$・$t_b$に対応する価格で、tick間の価格幅は$P(t+1)/P(t)=1.0001$(約0.01%)です。また流動性$L$とプール内のトークン量との関係は、Uniswap v3の定式に従い$x$軸(トークン0)・$y$軸(トークン1)の両資産について次のように表せます($P$は現在価格):
トークン0の保有量: $;X = L!\left(\dfrac{1}{\sqrt{P_a}} - \dfrac{1}{\sqrt{P}}\right)$
トークン1の保有量: $;Y = L!\left(\sqrt{P} - \sqrt{P_a}\right)$
※まめだい注:上記のように正しく表示できていない箇所がありますが、内容としては伝わるのでママ掲載
(※現在価格$P$が範囲内にある場合の式。範囲外では一方の資産が全てプールに存在し、もう一方は0になります。)このようにして、有限の価格帯に集中した流動性が設定されます。
【Uniswap v3型との違い】:FluidプロトコルのAMM(Fluid DEX)は基本的にUniswap v3と同様の集中型流動性モデルを採用しますが、その流動性配置はプロトコルによって自動制御される点が異なります。Uniswap v3では各LPが任意の価格範囲に独自のポジションを作成し、複数の流動性曲線が重ね合わさってプール全体の流動性分布$L_{\text{global}}(P)$が形成されます。一方、Fluidでは流動性レイヤーに集約された資金を用いて、プロトコルが単一のレンジポジション(Range Order)を自動的に設定・再平衡します。具体的には、Fluid DEXはまずオラクル等から取得した中心価格$P_{\text{center}}$を基準に、予め設定された上下割合(パーセンテージ)の範囲内に全流動性を集中させます。例えば中心価格を挟んで「±X%」の範囲を有効レンジとする場合、下限価格$P_{\text{low}} = P_{\text{center}}(1 - X%)$、上限価格$P_{\text{high}} = P_{\text{center}}(1 + X%)$と定め、その価格帯(対応するtick区間)にFluid全体の流動性が配置されます。このレンジ内ではUniswap v3と同様に一定の$L$が提供され、集中した深い流動性を実現します。一方、レンジ外の価格帯には「実流動性」は存在せず、代わりに仮想的な準備金(Imaginary Reserves)を設定することでプールの価格計算を拡張しています。これは、Uniswap v3のように設定範囲外で流動性がゼロになると価格が無限大/ゼロへ発散して取引不能になる問題を避け、Uniswap v2型の常時取引可能性を維持するためです。Fluidでは価格がレンジ端に達すると、仮想的な在庫を用いてそれ以上の急激な価格変動を一時的に緩和しつつ、中心価格やレンジ自体を動的にシフトさせます。この自動レンジ調整によって、価格がレンジを外れた際でも流動性の途切れを防ぎ、徐々に新たな価格帯へと集中レンジを移動させる仕組みになっています。要するに、FluidのAMMは「Uniswap v2のシンプルなUX+Uniswap v3の集中効率」を組み合わせ、LPが個別にレンジを指定しなくてもプロトコル側で最適な流動性分布を実現するよう設計されています。この点が従来のUniswap v3型AMMとの大きな違いです。
2. 借り入れ・貸し出しと流動性の関係
【流動性レイヤーにおける借貸の影響】:Fluidプロトコルでは貸し出しプール(流動性レイヤー)とAMMプール(DEX)が一体化しており、預けられた資産(供給資産)はそのままAMMの流動性として活用され、借りられた資産(負債)は逆にAMMの流動性から引き出される構造になっています。つまりFluidでは、貸し手(供給者)は自動的に流動性プロバイダでもあり、一方で借り手(負債保有者)はその借入資産を流動性として提供する(Smart Debt)ことが可能です。この二層統合により、Fluid DEX上のスワップ手数料収益は貸し手の利息に上乗せされ、借り手の負債コストの一部補填にも充てられます。
資産の利用率(Utilization)と流動性の関係を見てみます。ある資産について、流動性レイヤー全体での総供給量を$S$、そのうち貸し出されている量(借入残高)を$B$とすると、利用率$U$は $U = \dfrac{B}{S}$ で定義されます。プール内に実際残っているその資産の量(リザーブ)は $R = S - B = S(1 - U)$ となります。同様にペアとなるもう一方の資産についても $U'$を利用率、$R'$を残存量とすれば $R' = S'(1 - U')$ です。Fluid DEXのスワップ計算は基本的にUniswap v2と同じ恒常積インバリアント$x \cdot y = k$($x,y$はプール内の両資産量)に従って行われています。したがってプールが提示する価格$P$(例えばETH/USDCプールなら「1 ETHあたりのUSDC量」)は、両資産のプール残存量の比として表されます。すなわち:

(ETH/USDCペアの場合。一般に「token0/token1」価格なら $P = \dfrac{\text{reserve}{\text{token1}}}{\text{reserve}{\text{token0}}}$ となります。)この式に上記の残存量$R=S(1-U)$を代入すると、利用率と価格の関係が明示できます。例えばETH/USDCプールにおいて、初期状態でプールが外部市場価格と一致するように両資産が供給されていたと仮定します(すなわち $\frac{S_{\text{USDC}}}{S_{\text{ETH}}} = P_{\text{oracle}}$ であったとします)。片方の資産だけ大きく借り出された場合、プール価格は次のように変化します。
ETHの借入増加(利用率$U_{\text{ETH}}$上昇):プール内のETH残存量が減少するため、価格は $P_{\text{new}} = P_{\text{oracle}} \div (1 - U_{\text{ETH}})$ と上昇します。ETHが不足するとプール上ではETHの価格が高騰する(多くのUSDCを払わないとETHが買えない)ことを意味します。
USDCの借入増加(利用率$U_{\text{USDC}}$上昇):プール内のUSDC残存量が減少するため、価格は $P_{\text{new}} = P_{\text{oracle}} \times (1 - U_{\text{USDC}})$ と低下します。USDCが不足するとプール上ではETHの価格が下落する(少ないUSDCでETHが買える=ETHが安く評価される)ことを意味します。
より一般的には、ETH側利用率を$U_{\text{ETH}}$、USDC側利用率を$U_{\text{USDC}}$とすると、プール価格の変化はおおまかに $P_{\text{new}} \approx P_{\text{oracle}} \cdot \dfrac{1 - U_{\text{USDC}}}{,1 - U_{\text{ETH}},}$ と表せます(両資産の初期供給比率が市場価格に対応していた場合)。これは直感的にも、片側資産の借入が進んで残存量が減ればその資産のプール内価値が相対的に上昇し、逆に借入が少なく余っている資産の価値は相対的に低下することを示しています。
Fluidでは、このような借入・返済によるプール残高の変化が常に流動性に反映され、スワップを通じてリアルタイムにプール構成が再バランスされます。例えば、あるユーザーが大量のETHを借り出した場合、プールからETHが抜かれるためETH残高が減り価格が上昇します。この価格変動は裁定取引(アービトラージ)を誘発し、他のトレーダーが高騰したプール内ETHを売却(代わりにUSDCを提供)することで、プールのETH残高が部分的に回復し価格が落ち着く方向に向かいます。このプロセスにより、借入による一時的な流動性偏在は市場の力で緩和されます。ただし流動性レイヤー側でも、極端な資産枯渇を防ぐために利用率に基づく制限を設けています。Fluidは各マーケットに最大利用率(Borrow利用上限や自動的な借入制限)を設定し、利用率が閾値に近づくと新たな借入を段階的に制限します。加えて中心価格のシフト幅にも上限を設け、仮に一方の資産がほとんど借り尽くされてもプール価格が無制限に乖離しないよう調整されます。このように、借入・貸出とAMM流動性は相互に影響し合っていますが、Fluidではプロトコル内アルゴリズムと市場メカニズムの双方で流動性の偏りを緩和し安定化させる仕組みになっています。
3. 仮定パラメーターと具体的な計算例
ここでは、最新のFluidプロトコルのパラメーター傾向を参考に簡単な数値例を示し、借入量の変化が集中流動性に与える影響を計算してみます。想定する主なパラメーターは以下の通りです(2025年初頭の状況を想定):
ETH市場価格: $2,000 とする
ETH-USDCプール初期状態: ETHとUSDCが市場価格に沿って供給されていると仮定(例えばETH供給量100 ETH、USDC供給量$200,000で、プール内価格$200{,}000/100 = $2,000$)
担保係数(Collateral Factor): 85%(FluidのETH<>USDC市場での典型値。すなわちETHを担保にUSDCを借りる場合、評価額の85%まで借入可能)
流動性供給量: 上記の通り初期供給は100 ETH + $200k USDC(両者は誰かの預け入れに相当)
この初期状態ではプールの集中流動性レンジは中心価格$2,000付近に設定され、例えば±20%($1,600~$2,400)の範囲に全流動性が配置されていると仮定します(実際のレンジ幅はガバナンス設定によりますが概念例とします)。このときプールのtick区間[$t_{\text{low}}$, $t_{\text{high}}$]は価格$1,600と$2,400に対応するtickとなり、その範囲内では一定の流動性$L$が提供されています。初期状態での各資産の利用率はまだ0(誰も借りていない)なので、プール内流動性はETH・USDCとも十分に存在し、価格も外部と一致しています。
次に、ETH<>USDCプールの片側資産について借入が発生したケースを考えます。
ケース1: ETHの借入増加 – あるユーザーが自身の預けたETHを担保にUSDCを借りるケースです。例えばユーザーが 担保100 ETHのうち50%相当($100,000分)のUSDCを借り入れたとします(担保価値$200kに対し借入$100kなので健全性は十分、流動性レイヤー制限内です)。この操作により、プールから$100,000のUSDCが引き出され(借り手に渡り)ます。借入後のプール残高は ETH: 100 ETH(変化なし)、USDC: $100,000(半減) となります。利用率で見るとUSDCの利用率が50%($100k借入/$200k供給)に上昇し、ETHの利用率は0%のままです。この状態でのプール価格を計算すると、

となり、外部価格$2,000に対してETHが大幅に安い状態(価格が半減)になります。これはUSDCが借り出されて不足した結果、プール内ではETHが相対的に余っている(=売れ残っている)ためです。実際には、かかる価格乖離が生じると他のトレーダーがFluid DEXで安価なETHを買い漁るアービトラージが発生します。第三者はプールにUSDCを追加で入れてETHを引き出すスワップを行うため、プールはUSDC残高が増えETH残高が減少します。この裁定取引によりプール価格は再び上昇方向($1,000→$2,000)へ向かい、最終的には外部市場と一致するところで落ち着きます。Fluidの設計上、この過程で借り手のポジションも自動調整されます。借り手は当初$100kの負債と100 ETHの担保を持っていましたが、裁定によって例えばプールから20 ETHが引き出された(売却された)とすると、その分借り手の担保ETHが減少します。ただし同時に負債USDCも一部返済された形になり(裁定者が支払ったUSDCはプールに残り、間接的に借り手の負債を圧縮します)、結果として借り手のポジションはより小さい額で安定します。Fluidではこのようにトレーダーのスワップが半ば強制的な部分清算のように働き、ポジション全体の健全性を保つ仕組みになっています。ケース1では最終的にETH残高が減った分だけ集中流動性レンジも左側(低価格側)へシフトし、例えば中心価格が$1800に近づくなどの変化が起こると考えられます。
ケース2: USDCの借入増加 – 別のユーザーがUSDCを担保にETHを借りるケースです(もしくはETHを直接借り出すケースと等価です)。例えばあるユーザーが 担保として$200,000のUSDCを預け入れ、その85%に当たる 85 ETH($170,000相当)を最大限借り出したとします(流動性レイヤーの担保係数85%を利用)。この操作により、プールから85 ETHが引き出されユーザーに渡ります。借入後のプール残高は ETH: 15 ETH(100 - 85)、USDC: $200,000(担保USDCはプールに新規追加) となります。ETHの利用率は85%(85/100)に急上昇し、USDCの利用率は0%(誰もUSDCを借りていない)です。この状態のプール価格を計算すると、

と、外部価格$2,000に比べてETHが極端に高い状態になります(約6.7倍の価格)。これはETHが大量に借り出されプール内で枯渇したため、残るわずかなETHに対してUSDCが過剰にある(=ETHが希少になっている)ためです。もちろん実際には、ここまで激しい乖離はFluidの制御機構が許しません。利用率85%は流動性レイヤーが許容するほぼ上限に達しており、Fluidはこの段階で新規のETH借入を停止します。またプールの中心価格も上方向へある程度シフトしますが、最大でも清算閾値90%に対応する水準まで(例えば数%~十数%の上昇)に抑えられます。さらに裁定取引が発生し、高値のプールETHを売るために他のトレーダーがETHを持ち込んでUSDCを引き出すでしょう。この結果プールETH残高は増え(例えば15→50 ETHに回復)、USDC残高は減ります(例えば$200k→$60kに減少)。プール価格は$13kから再び下落し、おおよそ$1,200 (=$60k/50$) 付近まで調整される計算です。この時点でFluidは中心価格を外部価格に近づけるべくゆっくりとレンジを動かし、同時に借り手のUSDC担保ポジションの一部清算(ETH返却)も行われて、最終的にプール価格は再び外部価格に一致することになります。ケース2では当初流動性がETH側に偏っていましたが、最終的にはETH預け入れが増えたぶん流動性レンジは右側(高価格側)へシフトし、中心価格が$2000に戻る動きが起こります。
以上の例から、借り入れの増減によってプール内の実際の資産配分(=集中流動性の配置)がどのように変化するかが理解できます。式で表すと、プール内残高比の変化率は $1/(1-U)$ によって左右されることが分かります。特に利用率$U$が高まるほど $1/(1-U)$ は急激に大きくなり、価格・流動性配分の変動が非線形に増幅されます(例えば$U=0.5$で2倍、$U=0.9$で10倍の変化)。Fluidではこうした極端な状況を避けるため、利用率が閾値に達する前に借入を制限し、また集中レンジ範囲も動的に変更して流動性を再配置します。そのおかげで、ユーザーから見ればプールは常に安定した流動性を保ち、スワップも円滑に行えるようになっています。Fluidの公式資料でも、この統合設計により「流動性レイヤー上の $1 のTVLから最大 $39 の流動性を創出でき、極めて資本効率が高い」ことが謳われています。これは借入資産と供給資産の両方を無駄なくプール流動性として機能させているためであり、上述の数式や例で示したメカニズムがその根底にあります。