Automated Market Maker(AMM)とは

Automated Market Maker(AMM), 日本語だと自動マーケットメイカーと訳す.

売買マッチング(マーケットメイキング)のための取引所のプロトコル(ルール, 共通仕様).

🏢Uniswapが採用したことから🏢DEXに取引方法として有名になった.

🐥AMM Glossary

🪣流動性プール/LP

流動性プール(Liquidity pools).

DEXにおける📝板情報(LOB)のようなもの. 注文はここにいれられる.

📝流動性プロパイダ

流動性プロバイダ/Liquidity Provider(LP)とは流動性プールに資金を提供することで流動性を提供するユーザ.


  • オーダーブックに注文板を並べるようなCEXの📝マーケットメイカーにあたる存在.
  • 単にスワップするだけのトレーダーはTraders.

📝Price Impact/PI

価格インパクト, プライスインパクト, Price Impact. 流動性プールで(大きな)トレードをすることで価格が変動すること.

  • 板取引における📝マーケットインパクトのようなもの.
  • 低い流動性のときにPrice Impactは高くなる.
  • 大口注文のときにPrice Impactは高くなる.

計算方法

LPの設計によって計算方法は異なるが, 基本的には📐Constant Product Curveの応用.

PI = (‘P - P)/P x 100(%) where P=取引後のprice, ‘P=取引前のprice.

🔦DEXにおけるSlippageはTx送信から承認までの価格変動

DEXの文脈での📝スリッページ(Slippage)は, TXの送信(Submittion)から承認(erification)の間の価格変動を指す.

Price impactは、取引の大きさ(amount)に直接関連している. 取引が流動性プールに与える即座の影響を示す. Slippageは, 取引が提出されたときの予期された価格と, 実際の取引価格との差異を示す.

目安

  • 単位は%.
  • 1%以上だとWarningレベル.

📝変動損失/IL

インパーマネントロス, Impermanet Loss(IL). 📝価格インパクトによる損失.

;; from ChatGPT

流動性プロバイダーとしてAMMプールに2つのトークンを預けると、預けられたトークンの価値が相対的に変動することがあります。 AMMは、プール内の2つの資産の比率を一定に保つように動作するため、一方の資産の価値が大幅に上昇すると、それに対応して他方の資産が自動的に売られることがあります。 結果として、トークンの価値が時間とともに変動すると、流動性プロバイダーはプールからトークンを取り出す際に直接ホールドしていた場合に比べて損失を被る可能性があります。

🔖マーケットインパクトコストのようなもの.

📝スワップシミュレーション

俗に, 📝Swapsを「見積もる(quote)」ともいう.

実際のトレードを行う前に, 特定のトークンの交換レートやスワップ時の価格影響を事前に計算または予測すること.

現在のプールの残高を取得: 各トークンの現在のプール内の残高を確認します。

交換レートの計算: AMMのアルゴリズム(例: Uniswapのx*y=kのような式)を使用して、特定の量のトークンAをトークンBにスワップする際のレートを計算します。

スリッページの考慮: プールのサイズやトレードのサイズによっては、実際のトレード時に予測されたレートからの逸脱が生じることがあります。この逸脱をスリッページと呼びます。シミュレーション時にスリッページを考慮することで、取引の結果がどの程度変わるかを予測することができます。

手数料の考慮: 一部のAMM DEXでは、トレードごとに手数料が発生します。この手数料を考慮して、最終的な受け取り量を計算します。

📊LVR

Loss-Versus-Rebalancing. リバランスしないことによって生じる損失.

AMMでよく議論される指標.

🪣集中流動性 Market Maker(CLMM)

Concentrated Liquidity Market Maker(CLMM). 集中流動性マーケットメイカー方式. 及び集中流動性プール.

  • 価格レンジを指定して、流動性を提供する仕組み.
    • 価格レンジを絞ることで、資金効率を向上させられる.
    • これが🔖AMMの課題だった資金効率を改善するポイント.
  • 片側に一方的に動いた際に、v2では存在しなかったLiquidationのリスクがある.

Concentrated Pools

📝流動性プール/LPの進化版.

Range

指値注文のように範囲を指定する.

CLMM vx CLOB

  • tickArray: 板
  • tick: 価格帯
  • Position: CLOBに桶苦指値板に近い(CLOBにおけるポジションとはニュアンスが異なる).

🔦集中流動性プールに流動性を提供するとは板取引で指値を出すことに似ている

CLMM流動性プロバイダーとは, CLOB market makerという考察. とてもおもしろい.

①自身の定めた価格範囲に存在するすべての価格に対して、“Bid""Ask”両サイドに指値を置く②どちらかが約定した瞬間、その数量分の反対売買となる指値を置く

;; https://note.com/saruo_hunbook/n/ncb50cc953515


Refs

AMM派生

CFMM

Constant Function Market Maker. 日本語訳不明.

AMMはDeFi以前の昔からあったものだが, それをrebornしたはじめてのModelがCFMM. 🏢Uniswap(UNI)が実装. 第2世代AMM.

  • CPMM(Constant Product Market Makers)
  • CSMM(Constant Sum Market Makers)
  • CMMM(Constant Mean Market Makers)

🔖vAMM

Vertual 📝Automated Market Maker(AMM).

🪣Multitoken Pools

複数のトークンを同時に取り扱うことが可能な流動性プールのこと. 3つ以上の異なるトークンを1つのプール内で管理し、スワップや流動性提供を行う仕組み.

Topics

AMM手数料

  • liquidity provider fee/流動性供給手数料
    • 流動性提供者へ支払う手数料.
    • Swap手数料.
  • 送金手数料/ネットワーク手数料
    • 📝ガス代(Gas), イーサリアム送金手数料. gas fee.
    • イーサ以外でもガス料金といわれることも.
  • deposit fee: お金を引き出すときの手数料.

💡AMM = DEXではないことに注意

AMMはDEXの基盤技術ではあるものの, すべてのDEXがAMM方式を採用しているわけではなく, 主流アルゴリズムがAMMであるということに注意. 従来型の板取引のDEXもある.

💡AMM = ブロックチェーン技術ではないことに注意

AMMのアルゴリズム自体は90年代には存在した. 実用的に実装されたのが2018年のUniswapだったという話.

AMM Curves

📐Constant Product Curve

Constant Product Curve, またはConstant Swap.

AMMの最も基本コンセプトかつ有名なモデル. 🏢Uniswap(UNI)がはじめて実装.

x * y = k

Stable Curve

Stable Curve, またはCurve Stable Swap.

🏢Curve Financeの提示したモデル.

Offset Curve

❓AMM DEXにおいてswapの価格を取得するとは?

CLOB方式のCEXにおいて, 価格はAPIで取得する. 一方, AMM DEXだとこのCEXにおける常識が異なるので初めはとまどう. ここを噛み砕く. 2つの方法がある.

  • 流動性プールからの情報に基づくローカル計算
    • リアルタイムのオンチェーンデータを使用して価格情報を取得するため、非常に正確.
    • ローカル環境に計算リソースの負荷がかかる.
    • 各取引ごとにガス料金が発生する可能性があるので注意.
  • HTTP経由での価格取得(SDK使用)
    • http getような方法でサーバで計算された値を取得.
      • web3.jsでオンチェーンから.
      • SDKでDEX/DEX Aggregagor から.
    • ローカルの負荷はないが, API rate limitに注意する必要がある.
    • 近似値を取得できる. 価格の精度は自分で計算した値よりはリアルタイムではない.

💡DEX SDKから取得する

DEXの提供しているSDKを使うことで, swapを見積もる, 📝スワップシミュレーションを実行する.

板取引における📝最良価格(best rate)ようなもの. 見積もるとはquoteであり, 気配値はquote priceの日本語訳. best priceを分解すると, 最良気配値, buy/sellの時の板における最も内側に並んでいる板の価格.

💡オンチェーンから計算する

DEXのAMMはオンチェーン上に存在する. いいかえると, DEXの運用するサーバ上にあるのではなく, 世界中に分散されたブロックチェーン上に存在する. そのため, 価格取得はブロックチェーンでスマートコントラクトを実行することで取得することとができる.

たとえばUniswapの例.

  1. スマートコントラクトのアドレスを取得する.
  2. 🔌EVM ABIを取得する.
  3. クライアントライブラリをつかってaddressとABI情報からgetReservesという関数を呼ぶ.
    • getReservesは2つのトークンのLPにおける保有量を取得できる.
  4. 数式によって交換レートを算出する.
const reserves = await pairContract.methods.getReserves().call();
const token0Reserves = reserves[0];
const token1Reserves = reserves[1];
 
const exchangeRate = token1Reserves / token0Reserves;

これがEthereumならばよいが, Solanaだと取得できるデータがバイナリでありパースしないといけないという課題がある. すると取引所の提供しているTypeScriptで書かれたSDKをつかうほうが容易いう課題点がある.

Refs

💡板取引からみたAMM

Orderbookに慣れているのでどうもAMMの概念がわかりにくい.

AMMのこれってOrderbookだとなに?という観点をまとめる.

📍価格はなぜ動くのか?(流動性プール)

cf. 📍価格はなぜ動くのか?(CLOB)

通貨ペアとLP

既存の板取引における通貨ペアでの表記は📝基軸通貨/📝決済通貨となる.

LPでは,


SOL/mSOLのswapを考える.

  • SOL->mSOL:
    • SOLからmSOLへの変換.
    • sell SOL
    • buy mSOL
    • outAmount/inAmount -> SOL/mSOL asks
    • inAmount/outAmount -> mSOL/SOL bids
  • mSOL->SOL:
    • mSOLからSOLへの変換.
    • sell mSOL
    • buy SOL
    • inAmount/outAmount -> SOL/mSOL bids
    • outAmount/inAmount -> mSOL/SOL asks

💡AMMにおける成行注文はSwapのこと

📝成行注文📝スワップ(DEX)である.

💡AMMに指値注文はないが似たようなコンセプトの機能がある

オリジナルのAMMに📝指値注文, Limit Orderというコンセプトはない.

しかし, その指値注文のようなコンセプトはある. または既存のLOBに慣れているトレーダーを呼び込むためにDEXがそういう機能を開発した. 発展途上なのでこれからはあるかも.

🤔Mempoolをみるということは板取引における成行注文を先読みするということか?

📝DEXフロントランニング📝Mempool及び, LOBにおける📝成行注文の考察.

💡AMMにおける成行注文はSwapのこと

板取引においてフロントランニングは違法とされている. 具体的には, 📝インサイダー情報を掴んて, 必ず価格がこの後上がる(または下がる)という情報をもとに先に仕掛ける行為. これはフェアでない.

しかし, mempoolをのぞくということは, これから大きな注文によって価格が変動するということを, 事前にみることができる. それはオープンなブロックチェーンの仕組みからすれば当たり前なのかもしれない.

DEX場合にmemboolをのぞくということは, いわば成行注文が入ることを予測してアクションをするということ? 逆にいえばAMMにおいては未来の価格変動をおこすインサイダー情報が公開されているんだ.

大地震が起きることが事前にわかれば逃げたい. mempoolをみるとは, 地殻変動を察知して逃げるようなもの.


注文板に大口指値注文があるかどうかでアクションを起こす戦略はいくつかCEXにある.

Insights

🤔DEXにccxtのような取引所共通IFがないのは操作がweb3ライブラリで問題ないからか?

DEXにはCEXの🔧ccxt/ccxtのようなツールがないとアービトラージが大変そうだと思っていた.

価格取得もswapも, DEXのSDKをつかわなくてもweb3ライブラリで直接オンチェーンとやり取りすることでできてしまう. そのためweb3ライブラリが取引所の共通IFとして機能するので必要ないのかも.

🔗References