概要
Curve v2で導入されたDynamic feeについて解説します。簡単に言うと、プールがバランスした状態から乖離するにつれて手数料が高くなります。
序
Curve v2のホワイトペーパーでは、以下の f の形でDynamic feeが与えられる、とあります:
g=γfee+1−(∑xi/N)N∏xiγfee,
f=g⋅fmid+(1−g)⋅fout.
これ以外に説明がなされていませんので、読者としては少し置いてけぼりな気分になるかもしれません。
一見難解に見えるこの項: ∏xi/(∑xi/N)N さえ意味を掴めればなんとかなります。
相加平均と相乗平均
結論から先に言うと、∏xi/(∑xi/N)Nは相加平均と相乗平均の比率を表しています。アセット種類が2つ(x,y)のときなら次のような形ですね:
((x+y)/2)2xy=((x+y)/2√xy)2.
変形したら見たことのある形になったでしょうか?
相加平均と相乗平均の重要な関係は相乗平均 ≤ 相加平均です:
√xy≤2x+y.
これはN次元でも成り立ちます:
(∏xi)1/N≤(∑xi)/N.
等号が成り立つのはxiが全て同じ場合です:
x1=⋯=xi=⋯=xN.
つまり相乗平均/相加平均である例の項は必ず1以下になります:
0<(∑xi/N)N∏xi≤1,(xi>0).
なぜ相加/相乗平均が出てくるのか?
端的に言うと、Curveは以下の2つの式において k を一定に保つという原理を組み合わせたAMMになっています:
x⋅y=k,x+y=k.
下図の在庫曲線において、青線が x⋅y=k (Uniswap等)に対応し、赤線が x+y=k に対応します。Curveはそれらの中間であるオレンジ線や緑線を表現することができます。
このことの意味は以前解説したのでこちらの記事をご覧ください。
N次元で書くと次のようになります:
(∏xi)1/N=k,(∑xi)/N=k.
つまるところ、相乗平均=一定と相加平均=一定の原理をブレンドしたのがCurveです。そしてそれらは x=y のとき(上図赤点)に一致します。
Curve v1はステーブルコイン同士のプールだったので x,y は在庫量と考えて良いですが、Curve v2はステーブルコインに限らないので、x,yを在庫の価値(=在庫量×オラクル目標価格)と捉え直してください。
g因子のふるまい
g は少し変形すると
g=1+γfee1−(∑xi/N)N∏xi1
です。
バランスしているとき
前々章で解説したように ∏xi/(∑xi/N)N はプールがバランスしているときに最大値の1をとり、そのとき
g=1+γfee1−11=1
となります。つまりそのとき f=fmidです。
乖離しているとき
逆にバランス状態からひどく乖離して ∏xi/(∑xi/N)N<<1 となると
g∼1+γfee11
です。
TriCryptoPoolのコントラクトを見ると、fee_gamma=10000000000000000 となっており、10−18をかけると0.01です。
そうすると
g∼1+γfee11=0.0099∼0.01
なので、f∼fout となります。
γfee の意味
γfee は変形した g の分母に次の形で登場します:
h=γfee1−(∑xi/N)N∏xi.
この分子はバランス状態からの乖離度を表しており、 γfee はその乖離度をどの程度から深刻にとらえるかという尺度を与えています。例えばちょうど乖離度が γfee くらいのときに
h∼1,
g∼1/2,
f∼(fmid+fout)/2
となります。
乖離度(d)を変数として γfee=0.01 のときの g を図示すると以下のようになります。
まとめ
以上、Curve v2のDynamic feeの解説でした。結論としては、相加平均と相乗平均の比率を使ってプールのバランス点からの乖離度を表現し、その比率に応じて最低手数料(fmid)から最大手数料(fout)までを接続させる仕組みになっていることがわかりました。また、γfeeというパラメータにより乖離度に対して尺度が与えられていることもわかりました。
...と大体理解できたとは思うのですが、
TriCryptoPoolのコントラクトの mid_fee と out_fee の値は 10−18 をかけてみるとそれぞれ 4×10−12,4×10−11 となってとても小さいのが謎です。