Uniswap入門

## TL;DR

UniswapはEthereum上で、中央集権的でないトークンスワップ機能を提供します。

トレーダーはEthereumトークンをUniswap上でトラストレスにスワップできます。一方で、自分の資産をLiquidity pool(流動性プール)という場所に預けることで、流動性を提供する代わりに手数料を稼ぐことができます。

Uniswapはどのようにトークンをトレードするのでしょうか？ これから見ていきましょう。

## 導入

最近の暗号通貨マーケットではCEXが主流でした。CEXは高速な取引、高い取引高、継続的な流動性などを提供してくれました。

CEXが取引所に自分の資産を預ける必要がある一方で、トラストレスに取引ができるDEXという取引形態も存在します。

DEXはブロックチェーンの機能的な制限によりCEXのようなUI/UXを提供するのが難しく、それが長年の課題になっていました。

そして、多くの開発者が使いやすいDEXを目指して開発してきましたが、そのパイオニアとなったのがUniswapです。

Uniswapはシンプルな仕組みでありながら優れた点が多いプロトコルでした。そのおかげでUniswapはDeFiでもっとも成功したプロジェクトのひとつとまで言われています。

## Uniswapとは？

Uniswapは、Ethereum上に構築された分散型交換プロトコルです。 より正確には、これは自動化された流動性プロトコルです。

取引を行うために本来必要なオーダーや中央集権的な管理者は必要ありません。 

Uniswapを使用すると、ユーザーは仲介なしで取引でき、高度な分散化と検閲への耐性を備えています。

UniswapはOSSでそのソースコードを誰でも[Github](https://github.com/Uniswap)で見ることができます。

どうやってオーダーブックなしで取引をするのでしょうか？

Uniswapでは、Liquidity provider(流動性提供者)が流動性プールを作成するモデルを採用しています。

このシステムは分散型の価格設定メカニズムを提供し、オーダーブックを必要とせずに取引ができます。

なぜそのようなことができるのかについては後ほど説明します。今のところ、ユーザーはオーダーブックを必要とせずにERC20トークン間でシームレスにスワップすることができることだけを覚えてもらえれば大丈夫です。

また、Uniswapは分散化されているので、上場プロセスというものが存在しません。

トレーダーに流動性プールが提供されてさえいれば誰でもERC20トークンを上場することができます。

結果として、Uniswapは上場手数料を必要とせず、公共財のように振る舞います。

Uniswapプロトコルは2018年にHayden Adams氏によって開発されました。しかし元になった技術はEthereumの共同開発者のVitalik Buterin氏によって提案されたものです。

## Uniswapの仕組み

Uniswapはデジタル取引所の伝統的なアーキテクチャを残し、オーダーブックを持っていません。

UniswapはConstant Product Market Makerと呼ばれるモデルで動作しますが、これはAutomated Market Maker(AMM)と呼ばれるモデルを少しいじったものです。

AMMは、流動性プールを保持するスマートコントラクトです。このAMMが保持する流動性プールを使って、トレーダーは取引を行えます。

流動性プールの準備金は、流動性提供者によって供給されます。

誰でも流動性提供者になることができ、流動性プールに価値が同じになるように2つのトークンを預けることができます。

つまり、ETH/USDTプールに1ETHが500USDTのときに、1ETHを預けるなら500USDTも一緒に預ける必要があります。

その見返りとして、トレーダーはプールに手数料を支払います。　この手数料はプールのシェアに応じて流動性提供者に分配されます。

もう少し詳しく見ていきましょう。

流動性提供者は2種類のトークンを同じ価値になるようにデポジットしてマーケットを作成できます。

2種類のトークンとしてETH-ERC20またはERC20-ERC20の組み合わせが可能です。

基本的に片方はDAI,USDC,USDTなどのステーブルコインになりますが、必須ではありません。

対価として、流動性提供者はプール全体におけるシェアを表す`liquidity tokens`(流動性トークン)を得ます。

これらの流動性トークンはプールにおけるシェアに対して償還することができます。

ETH/USDTの流動性プールを考えてみましょう。

poolにおけるETHのバランスをx、USDTのバランスをyと呼びます。Uniswapは二つの値をかけてプールにおける流動性の合計を計算します。これをkと呼びます。

Uniswapの核となる考え方はこのkの値を一定に保つことです。

数式で表すと

```
x * y = k
```

となります。

## トレード

実際にUniswapで誰かが取引したいと思った時何が起きるかを例を使って説明しましょう。この例では流動性提供者への手数料は0.25%とします

10枚のETHと500枚のOMGが流動性プールを作っていたとします。

このときkは 10×500 = 5000 です。

流動性プールのペアは等価値である必要があるので、このときのOMG/ETHのレートは 0.02 OMG/ETH になります。

ここでAliceが1ETHをUniswapに送りました。流動性提供者に0.25%の手数料がいくので、残りの0.9975ETHがプールに追加されます。

トランザクション前よりETHのプール量は増加します。ここで流動性の合計をkに保つ必要があることを思い出しましょう。

このkを保つにはOMGのプール量が 

```
5000/10.9975 = 454.65
```

となる必要があります。 よってAliceがUniswap受け取るOMGの枚数は 500 - 454.65 で45.35OMGを受け取ることになります。

またスワップ量の計算が終わると、流動性提供者への手数料として計算から除外されていた0.25%もプールに加わります。

すると、ETHのプール量は11、OMGのプール量は454.65となり新しいkは5001.15となります。

また、このとき OMG/ETHのレートは 0.024 OMG/ETH となりOMGの価格上昇を引き起こしてます。

このようなメカニズムが価格を決定しています。ETHのために支払う価格はそのトレードでどれだけxとyの比率が変動するかに基づいて決定されます。

このモデルが直線的にスケールするわけではなく指数関数的にスケールすることは注目に値します。

つまり、ロットの大きい注文はロットの小さい注文に比べて指数関数的にコストが高くなり、[スリッページ](https://academy.binance.com/en/articles/a-complete-guide-to-cryptocurrency-trading-for-beginners#what-is-slippage-in-trading)の量がどんどん増えていくことになります。

また、流動性プールが大きければ大きいほど、ロットの大きい注文を処理しやすくなることも意味します。なぜでしょうか？

その場合、xとyの間のシフトが小さくなるからです。

## impermanent loss

これまで述べてきたように、流動性提供者はトークン間のスワップが可能なトレーダーに流動性を提供する対価として手数料を得ています。

この点以外で流動性提供者が注意すべきことがあります。これはimpermanent lossと呼ばれています。

Aliceが1ETHと100USDTをUniswapプールにデポジットしたとしましょう。トークンのペアは等価値である必要があるのでこのときのETHの価格は100USDTです。

このとき、プールには合計で10ETHと1000USDTがあるとします。(残りの9ETHと900USDTは他の流動性提供者によって提供されたものとします。)

このときAliceはプール全体の10%のシェアを持っています。このときの流動性の合計(k)は10000(10×1000)になります。

ここでBinanceでETHの価格が400USDTになったとき、プールは、5ETHと2000USDT(5×2000)になります。なぜでしょうか？

プールが10ETHと1000USDTのときのUniswap内のETH価格は100USDTなので、アービトラージを狙うトレーダーはUSDTを送ってETHをBinanceより低い価格で手に入れようとします。

その結果、どんどんETHのプールは減っていって、USDTのプールは増えていきます。しまいには5ETHと2000USDTになりBinanceと価格が等しくなったためアービトラージの利益は無くなるためトレーダーはアービトラージをやめます。

さて、Aliceは自分のプールした資産を全部引き出しました。Aliceのプールのシェアは10%なので0.5ETHと200USDTを引き出すことになります。これは400USDTに等しいです。

Aliceは利益を得たように見えますが、落ち着いて考えてください。

彼女は1ETHと100USDTをプールしたので1ETH=400USDTのときに合計の価値は500USDTになります。

実際は、Aliceはプールせずに1ETHと100USDTをHODLしていた方が得をしたことになります。

この場合のimpermanent lossとは、本質的には、価格が上昇するトークンをプールする機会費用のことです。

これは、手数料を得ることを期待してUniswapに資金を預けることで、アリスは他の機会(HODLすること)を失う可能性があることを意味しているだけです。

このimpermanent lossは、入金時から価格が下がろうが上がろうが関係なく生じることに注意してください。つまり、プール時と比べてETHの価格が下がった場合、損失もHODLしていたときに比べて大きくなる可能性があります。

これについて、より詳しい説明を受けたい方は、[Pintail氏の記事](https://medium.com/@pintail/uniswap-a-good-deal-for-liquidity-providers-104c0b6816f2)をチェックしてみてください。

しかし、なぜimpermanent loss(一時的な損失)と呼ぶのでしょうか？ 

プールされたトークンの価格がプールに追加された時の価格に戻れば、その影響は緩和されます。

また、流動性提供者は手数料を稼いでいるので、時間の経過とともに損失額がこともあるでしょう。

とはいえ、流動性提供者はプールに資金を追加する前に、この点に注意したほうがいいでしょう。

## Uniswapはどうマネタイズしているのか？

そもそもUniswapはマネタイズをしていません。

Uniswapはネイティブトークンを持たない分散プロトコルです。手数料の全額は流動性提供者に支払われ、デプロイした人はトレーダーがUniswapを使ったとしてもなんの利益も得られません。

現在、流動性提供者に支払われる取引手数料は、取引ごとに0.3%です。

デフォルトでは、これらは流動性プールに追加されますが、流動性提供者はいつでも換金することができます。手数料は各流動性提供者のプールの取り分に応じて分配されます。

また、手数料の一部は将来的にUniswapの開発に充てられる可能性があります。

UniswapチームはすでにUniswap v2と呼ばれるプロトコルの改良版をデプロイしています。

## Uniswap (UNI) token

UNIはUniswapプロトコルのネイティブトークンで、所有者にガバナンスの権限を与えます。これは、UNIの保有者がプロトコル変更の提案に投票できることを意味します。

先ほど、プロトコルがすでにある種の公共財として機能していることを説明しましたが、UNIトークンはこの考えを確固たるものにしています。

初期段階で10億のUNIトークンがmintされました。そのうち60%は既存のUniswapコミュニティメンバーに配布され、40%は4年間でチームメンバー、投資家、アドバイザーに配布されます。

コミュニティメンバーに対するUNIトークンの分配の一部は、流動性マイニングによって行われます。これはUNIを以下のUniswapプールに流動性を提供している人に分配することを意味しています。

- ETH/USDT
- ETH/USDC
- ETH/DAI
- ETH/WBTC

しかし、そもそもUniswapのコミュニティメンバーとは誰を指すのでしょうか？これはUniswapプロトコルを使ったことのあるEthereumアドレスすべてを対象としています。

## References

- [🦄 Uniswap Whitepaper](https://hackmd.io/@HaydenAdams/HJ9jLsfTz)
- [What Is Uniswap and How Does It Work?](https://academy.binance.com/en/articles/what-is-uniswap-and-how-does-it-work)