メインコンテンツまでスキップ

lesson-2_swap時の手数料を理解しよう

🐣 swap 時の手数料について理解しましょう

前回のレッスンでは、swap時にどのような計算によってプールで増減するトークンの量を求めるのかを考えました。

このレッスンではユーザのswap時に手数料を設ける方法について考えます。

ポイントは以下です。

swapを要求するユーザがプールに送信するトークンの量を、AMM内部では少しだけ少なく見積もった量に変換してからswapの計算をします。

今回は0.3% だけ少なく見積ります。

具体例で考えてみましょう。

🦴 状況

プールにはトークンX、Yがそれぞれ10,000ずつあるとします。

ユーザAがX -> Yへ量 1,000をswapします。

前回のレッスンのシチュエーション 1で導き出した式

を使用すると、

  • y': swapにより得られるYの量
  • y : 10,000
  • x': 1,000
  • x : 10,000

となります。

🐟 手数料を考慮しない場合

プール内のXは1,000増えます。 Yは909減ります。

プール内のトークンX、Yの量はそれぞれ11,0009,091となります。

🐿️ 手数料を考慮する場合

ユーザはXの量に1,000を指定してswapを実行しますが、 AMMの内部では1,000から0.3% の3を引いて997で計算をします。

プール内のXは1,000増えます。 Yは906減ります。

プール内のトークンX、Yの量はそれぞれ11,0009,094となります。

手数料を考慮しない場合に比べて、 ユーザが受け取れるトークンYの量は減り プールに残るYの量は増えます。

Y -> Xへswapをするとこれと逆のことが起こります。

手数料を考慮しない場合に比べて、 ユーザが受け取れるトークンXの量は減り プールに残るYの量は増えます。


手数料を考慮してswapを繰り返すとプール内のトークン量は、 流動性の提供によって預けられたトークンの量に加え、swap時にユーザから引いた手数料の量が上乗せされていきます。

すると流動性の提供者がプールから自分のシェアの分トークンを引き出す際、プール内のトークンの絶対量は提供時に比べて増えているので、 シェアに相当するトークンの量も増えます。

このようにしてswapによって得られた手数料を流動性の提供者は得られるという仕組みになっています。

🐔 手数料を考慮した計算式を導きましょう

手数料の仕組みについて理解したので、前回のレッスンで得られた計算式を手数料を考慮した計算式に変形します。

🦕 シチュエーション1: x' からy' を算出する

元の式は以下です。

x'に関して、0.3% 引いた0.997x' とすれば良いのですが、 後にsolidityで実装する際に小数を扱えないことに備えて 全ての値に1,000をかけて3桁分繰り上げましょう。

両辺を1,000で割ると以下の式が導き出せます。

🐬 シチュエーション2: y' からx' を算出する

元の式は以下です。

先ほどと同じようにx' から0.3% 引き、全ての値を3桁分繰り上げると以下のような形になります。

右辺は分母と分子をそれぞれ1,000で割ると

となり、両辺を997で割ると

x'について式が導き出せました。

ここで算出した計算式をAMMコントラクト内で実装していきます。

🙋‍♂️ 質問する

ここまでの作業で何かわからないことがある場合は、Discordの#avalancheで質問をしてください。

ヘルプをするときのフローが円滑になるので、エラーレポートには下記の3点を記載してください ✨

1. 質問が関連しているセクション番号とレッスン番号
2. 何をしようとしていたか
3. エラー文をコピー&ペースト
4. エラー画面のスクリーンショット

次のレッスンでコントラクトにswap機能を実装し、コントラクトを完成させましょう! 🎉