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

lesson-1_swapを理解しよう

🐣 swap の仕組みを理解しましょう

AMMではアルゴリズムに従ってswapできるトークンの量を決定します。 ここではUniswapと同様に式

を使用します。

yは流動性プールにある一方のトークンYの量、xは他方のトークンXの量です。

kは固定定数です。 つまり、プールにある双方のトークン量の積は常に一定です。

⚠️ 実際には、流動性の提供時やswap時に手数料を考慮するとkは変化しますが、 あくまで

の法則に基づいてトークンの価格を算出しています。

上式を図にすると以下のような曲線を描きます。

xの量が増えるほどyの量が減り、yの量が増えるほどxの量は減るような式になっています。

つまりトークンXからYへswapする場合は、ユーザからプールへXの送信がありプール内にXの量が増えるので、 プール内のYの量は減らします。 減らした分のYの量をユーザへ送信することでswapが完了します。

今の処理を図で見てみましょう。 トークンXからYへのswap時、プール内のトークンの量の変化は下の図のA地点->B地点への移動で表すことができます。

逆にトークンYからXへのswapは以下のように考えられます。

このようにAMMの内部では基本式に基づいて価格決定をしています。

X->Yへのswapが続きプール内にXの量が増えるだけ、同じXの量でswapできるYの量は減ります。 Xの価値は下がりYの価値は上がります。

🏛️ swap で得られるトークン量の計算式を導き出しましょう。

ここからは、AMMコントラクトがユーザのswap要求に対してどのような計算式を使えば、 swapによりユーザに送信するトークンの量を算出できるかを考えます。

もしわかりにくい場合は一度先に進んでコードを実装してみて、再度このレッスンに戻ってくると理解しやすくなっているかもしれません。 Discordの#avalancheで聞くのも良いでしょう。 また、間違っている部分がありましたらこちらにプルリクエストを送って頂けると大変助かりますのでよろしくお願い致します。

それでは以下の状況についてswap時に使用する計算式を導きます。

プール内に、トークンXトークンYの量がそれぞれxとyあるとします。

ユーザはトークンXを投入し、トークンYを受け取る状況を考えます(X -> Yへのswap)

この時、投入するトークンXの量をx'、受け取るトークンYの量をy' で表すことにします。

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

プールに入るx' の量が分かっていて、x' を元にプールから出る量y' を算出する方法を導きます。

基本式は以下で、Kは定数というものでした。

つまりx' とy' 分の増減があってもプールに残るXとYの積は一定ということです。 これを式にすると以下のようになります。

式の左辺が上図のA地点、右辺が上図のB地点のKを表しています。 さらに今回求めたいy' について上の式を解いていきます。

シンプルな式が導き出されました。 この計算式を利用することでy' を求めることができます。

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

図はシチュエーション1と同じものです。

ここでは先ほどとは逆に、プールから出る量y' があらかじめ指定された状態で、どのくらいの量のx' をプールに入れなければいけないのかを求めます。

計算は先ほどとほとんど同じで、今度はx' について解きます。

以上でユーザがswapをする際に、swap元のトークンの量から受け取れるswap先のトークンの量を求めたい時はシチュエーション1の式を、 swapによって受け取りたいswap先のトークンの量からどのくらいswap元のトークンが必要かを求めたい時はシチュエーション2の式を利用すれば良いことがわかりました。

🙋‍♂️ 質問する

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

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

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

swapについて理解をしたところで、次のレッスンでswap時の手数料についても理解を深めましょう 🎉