雖然Bancor Network近期也經歷被盜風波,但這不妨礙我們繼續研究這一演算法。既然是原本要用於國際貿易的模型,那必然涉及到不同實體間如何兌換。Bancor 白皮書中對定價模型有著十分嚴謹和詳細的說明。它定義了兩類token:一種是通常會流通使用的 connector token(即儲備金,例如:BTC、ETH、EOS等),而另一種是作為“超平臺”中間媒介的 Smart Token。為了使得兌換價格滿足剛才提到的供需關係,設計的公式中的價格為 connector 的可流通餘量(balance)除以 按照一定係數的Smart Token 供應量:
其中,CW 的英文是 Connector Weight,表示設計出來的 Smart Token 的總價值與實際在使用中的 connector 餘量間的關係,設計好後為一個固定引數:
總體上來說,就是 Smart Token 的供應量越少或者 connector 的餘量越多,那麼使用 connector 來兌換 Smart Token 的價格就越高。
雖然很不嚴謹,但這也就能理解了為什麼 EOS 的 RAM 越少,價格越高了。至於不嚴謹的原因,我們將在下文繼續解釋。
4.公式設計思路
回到 RAM 價格上,那麼無疑在 EOS 主網剛上線的時候,RAM 供應量最多。可以看到最低價格是 0.017 EOS/KB 。按照這個價格,也就是買 1MB 需要 0.017 * 1024 = 17.408 EOS。那麼,全部 64GB RAM 在這個時候值 1140850.688 EOS,是不是這個時候花費這些 EOS 就可以把 64 GB一次性都買下?答案顯然是否定的。
實際上,有多種方式可以限制這種做法。最簡單的一種就是限制每次買賣的數量:只要設定每次只能購買 32GB,那麼第二次買 RAM 的價格就會提高很多,買的總成本就會變的很高。再迴圈細分下去為 16GB、8GB …… 總的價格就會越來越合理。這在數學上是有相應的工具可以使用的。
是的,就是微積分。在 Bancor Network 白皮書中引用的另外一個資料中,可以看到這個推導過程。
定義R為當前connector的餘量、S為當前Smart Token的供應量、F為係數(即上文中的CW)、P為當前Smart Token的價格,那麼有:
Smart Token的市場總量 = SP
當要購買dS 的Smart Token時,使用者需要付出P dS 的成本,也等於剩餘connector的變化量,即dR = P dS
又因為R = FSP,同時微分可得到:dR = d(FSP) = F d(SP) = F(S dP + P dS),所以綜合上述兩個等式可得:
然後我們可以看到,這個微分方程的結果和經濟學上的一個概念是一樣的。
是的,就是經濟學上的價格彈性曲線:
當 CW 或者 F 為 1 時,提供100%的流動性,因此價格毫無彈性,一直維持在某一水平線上
當 CW 大於 0 小於 1 時,即上述正常供需情況下的價格曲線
有了這個價格函式後,再對其進行積分,即可得到不同量的 connector 可換購的 Smart Token 數量。
定義使用者要購買Smart Token的數量為T,那麼可得到需要付出的connector的數量E為:
如果用付出的connector 除以兌換到的Smart Token 數量,即可得到等效價格(Effective Price),即只要付出的connector總量一樣,不管分多少次購買,所獲得的Smart Token總量是一樣的,因此也就不需要限制單次購買量了。但相應的,如果單次付出不同數量的connector,折算得到的單價也會不一樣,所以不會存在上文假設的“套利”情況。
5.EOS RAM的公式更復雜
EOS 應用 Bancor 演算法過程中,並不是將 EOS 和 RAM 直接用價格曲線進行兌換,而是引入了中間 token——RAMCORE,對應於 Bancor 中的 Smart Token。
EOS 和 RAM 兌換邏輯的程式碼主要在:
https://github.com/EOSIO/eos/blob/v1.0.8/contracts/eosio.system/exchange_state.cpp
EOS 到 RAM 的兌換過程就涉及了兩個公式,所以上文中用一個公式來舉例就很不嚴謹,只是為了定性的說明價格特性。
從程式碼中可看到EOS與RAMCORE的兌換公式為:
其中,E為EOS到RAMCORE所能兌換的數量,R是RAMCORE的初始發行總量,C1為當前EOS餘量,T1為用於購買的EOS數量,F為常量引數
將上述公式的進行反向整理設計,即可得到RAMCORE與RAM的兌換公式為:
其中,T2是準備購入的RAM數量;C2為可分配的RAM餘量。將中間變數E代入即可得出用於購買的EOS數量(T1)與可兌換到的RAM數量(T2)之間的關係。
為方便直觀的理解,可以對公式進行簡化,得到:
可以看到隨著可買RAM餘量(C2)的降低或者EOS數量(C1)的增多,RAM的價格會加速增長(即同樣付出T1的EOS下,可換取到的RAM數量T2變少了)
6.不同引數下的價格偏差計算
根據簡化公式,F 應該對價格影響很小。那麼 BM 之前說的把 0.5 多除了1000,變成0.0005,對價格是否有很大影響?我們可以直接透過公式計算來驗證。
按照公式,要計算先確定好公式中的引數。引數的獲取可透過網路渠道來獲得(參考https://github.com/eoshackathon/eos_dapp_development_cn/blob/master/docs/ram_price.md):
由於C1和C2的引數會時刻根據行情進行變化,我們選取上述時間作為示例計算引數。下一步,我們使用MATLAB(R2015a 8.5.0.197613)進行公式的計算。
當要付出不同量 EOS 時,分別計算出F=0.0005和F=0.5的 RAM 價格結果,可購買到的RAM之差(F=0.0005-F=0.5)以及兩個價格之間的差值:
可以看到,當F取值變化的時候,不同購買量下的結果的確不同:當一次付出10000 EOS時,F=0.0005能購買到的RAM比F=0.5少了 20 KB,相應的RAM單價高了 4.0412e-04 EOS/KB;而當一次付出100000 EOS時,會少近 2MB,同時單價高 0.0040 EOS/KB。
根據結果,在購買量大的時候,確實會有區別,而且改為F=0.5後RAM的“價效比”反而會更高,這很可能也是BM及EOS社羣在調整引數時所考慮的問題。
更多區塊鏈資訊:http://www.qukuaiwang.com.cn/news