2020年3月12日から13日にかけて発生した相場大変動によってUniswap DAIプールのLP(Liquidity Provider, 流動性提供者)が得た収益を計算します。
Uniswapの収益を可視化してくれるツールは pools.fyi や zumzoomのツール がありますが、計算方法が移動平均だったり、日次取引量をベースにしていたりします。
この記事では大変動の開始と終了を明確にターゲットにして計算を行います。
具体的には 3/12 0AM UTC から 3/14 0AM UTCです。
相場急変時には入退場したLPがいるはずです。取引高ベースの計算ではこの影響を加味できないので、オンチェーン情報からそれらに依らない計算を行います。
プールの状態は
1. プールトークン総量
2. プールトークンあたりのETH量
3. プールトークンあたりのDAI量
が分かれば完璧です。
ということで任意の時刻でのプールトークン総量を EtherScanのToken Balance Checker で調べようと思ったのですが、なぜかプールトークンに関しては0しか返ってきませんでした。
諦めて、目的の時刻近くでのLPの入退場トランザクションを覗くことにしました。
TX1: 開始時近く 3/11 23:41
0.7900 ETH + 151.4 DAI を提供して、0.7579 PoolTokenを受け取った。
TX2: 終了時近く 3/14 00:08
0.1489 ETH + 19.87 DAI を提供して、0.1154 PoolTokenを受け取った。
開始時
DAI/ETH: 191.6
ETH/PoolToken: 1.042
DAI/PoolToken: 199.7
終了時
DAI/ETH: 133.4
ETH/PoolToken: 1.290
DAI/PoolToken: 172.2
終了時のプールトークン価値は、プールトークンあたりのDAI量から分かって
172.2*2 = 344.4 DAI
です。
これと比較したい量は、開始時から流動性提供をしないで単にホールドしていたETHとDAIの終了時での価値です。
今の計算はDAI建てなので、DAIはそのままとして、ETHは開始時の量に終了時のレートをかけてDAI建ての価値を計算します。
199.7 + 1.042 * 133.4 = 338.7 DAI
です。
つまり収益は
344.4 / 338.7 = 1.017
ですので、+1.7%です。
価格変動損失とは、入退場時の価格の違いにより発生する損失のことです。今回の場合、
191.6 / 133.4 = 1.436
という価格変動がありました。
これに対応する損失は、リンクを貼った記事中の式を利用して
2 * sqrt(1.436) / (1 + 1.436) - 1 = -0.016
ということで1.6%です。
3.2で計算した収益は生の手数料収入から価格変動損失を差し引いたものです。ですので、生の手数料収入を逆算すると、
1.017 + 0.016 = 1.033
で、3.3%です。
Uniswapのトレード一回当たりの徴収手数料は0.3%なので、
プールが11回転したことになります。
コロナショック期間にあたる3/12--3/14の2日間でUniswap DAIプールは11回転しました。
これにより発生した手数料収入は3.3%で、価格変動損失1.6%が差し引かれても+1.7%の収益があったことになります。
※計算終盤になって有効数字がもう一桁必要ということに気づきましたが、ご容赦ください。