Bancorの状態方程式と価格決定方程式

Bancorは対スマートコントラクトでトークンの売買ができる仕組みです。DEXが分散型取引所だとすればBancorは分散型販売所でしょうか。

そんなBancorですが、2日前に盗難事件に遭いました。

btcnews.jp

この事件を受けてDEXが本当に非中央集権的なのか考えさせられるのは良い流れですね。 onlyOwner のような関数を全て無くせば良いんでしょうけど運用することを考えるとどうしてもそういうことは言えませんね。逆に問題があった時に停止措置が取れなかったとしても世間様からなにか言われることでしょう。

Bancor、盗難後の対応で非中央集権性に疑念浮上 | ビットコインの最新情報 BTCN|ビットコインニュース

ところで、Bancorの中核をなす概念として以下の式があります。

{ \displaystyle
Price = \frac{Balance}{Supply \times CW}
}

(ちなみにBancorに慣れていない人はこの記事を読むのがオススメです )

この式はトークンの価格が準備金の残高を総発行量にCW(connector weight)という定数をかけた値で決まることを表しています。しかしこの式から直接トークンを売買する時の価格が計算できるかというとそうではありません。なぜならトークンの売買を行うと準備金残高も総発行量も変化してしまうので単純な計算ができないからです。

この式は昔に物理で習った理想気体の状態方程式のようなもので、ある時点で系の状態を観測した時に成り立っているべき関係式を表しています。ではここから売買の時に必要な価格はどうやって計算したら良いかというと、まず簡単のために状態方程式の変数の名前を変えて

{ \displaystyle
P = \frac{B}{S \cdot C}
}

と表すことにします。ユーザーがdS(Supplyの微小変化量)の量だけトークンを買うとすると、ユーザーはPdSだけお金が必要になります。このお金は準備金の増加量dBに一致するので、

{ \displaystyle
PdS = dB
}

が成り立ちます。ここで状態方程式よりB=PSCと表せるので、両辺の微小変化量を取ると

{ \displaystyle
dB = C(PdS + SdP)
}

となり、先程の式と比べると

{ \displaystyle
PdS = dB = C(PdS + SdP)
}

つまり、

{ \displaystyle
PdS(1-C) = SCdP
}

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

{ \displaystyle
PdS\left(\frac{1}{C}-1\right) = SdP
}

となります。ここで\alpha=\frac{1}{C}-1とおいて上式を変形していくと、

{ \displaystyle
\alpha PdS = SdP
}

{ \displaystyle
\alpha \frac{dS}{S} = S\frac{dP}{P}
}

{ \displaystyle
\alpha d\log S = S d\log P
}

{ \displaystyle
\alpha\log S + A= S \log P
}

{ \displaystyle
e^{A}S^{\alpha} = P
}

ここでトークンを買う直前の価格をP_0、総発行量をS_0と置くと

{ \displaystyle
P = \left(\frac{S}{S_0}\right)^{\alpha}P_0
}

となります。この式はトークンを購入するに従って変化する価格と総発行量の間に常に成り立ってる関係式です。

この式から、トークンを新たにTだけ購入するのに必要な金額Eは、

{ \displaystyle
E = \int_{S_0}^{S_0+T}PdS
}

{ \displaystyle
= \int_{S_0}^{S_0+T}P_0\left(\frac{S}{S_0}\right)^{\alpha}dS
}

となり、この積分を計算すると、

{ \displaystyle
E=\frac{P_0S_0}{\alpha+1}\left(\left(1+\frac{T}{S_0}\right)^{\alpha+1}-1\right)
}

{ \displaystyle
=CP_0S_0\left(\left(1+\frac{T}{S_0}\right)^{1/C}-1\right)
}

{ \displaystyle
=B_0\left(\left(1+\frac{T}{S_0}\right)^{1/C}-1\right)
}

となることがわかります。これを逆に解けば金額Eを払った時に購入できるトークンの量Tを計算することもできますね。

以上の議論はFormulas for Bancor systemという論文に載っているので気になる人はチェックしてみてください。