bancor plan: 能夠理解爲凱恩斯提出的「國際清算同盟計劃」bancor protocol / bancor協議: 能夠理解成bancor機制的核心算法git
bancor.network:基於bancor協議的智能合約實現的去中心化交易所github
function issue(address _user, uint _amount) { balances[_user] += _amount; totalSupply += _amount; }
二戰以後,凱恩斯爲了遏制美圓稱霸世界提出的「國際清算同盟計劃」中的重要計劃,也有人稱其爲「bancor plan」。這個計劃主張多邊清算,取消雙邊清算。而bancor自己在這個計劃中,也是各國帳戶的記帳單位。算法
而bancor的初始分配則以二戰前三年的進出口貿易平均值計算,這樣加上英聯邦的殖民地,英聯邦能夠分配到的bancor多達35%,可讓英國在戰後黃金儲備耗盡的狀況下,和美國共享國際金融的領導權。網絡
而bancor plan所倡導的多邊清算,在區塊鏈token化興起的今天,被用來解決token市場的長尾效應。目前,幾乎每個項目都要發行本身的token,目前大交易所都採用撮合交易的方式,即買和賣同時都有需求,交易才能發生。所以一些關注度小的token都有很大的流動性風險。併發
bancor協議不依賴於雙邊需求匹配,其運用鏈接器 (connector)做爲橋樑,實現了異步價格機制。即用戶能夠隨時按照自動計算獲得的價格,把某一種token賣給"鏈接器"拿出抵押物(一般是eth)或者換取其餘token;買過程也同樣。(這裏說賣給了鏈接器並不恰當,你們能夠理解成把token發送給鏈接器,再由鏈接器來實現兌換的邏輯)。異步
token發行方能夠鎖定一些ETH在鏈接器中並自定義CW(connector weight, 鏈接器權重,之前也叫CRR,即恆定準備金率),發行出必定數量的本身的token,bancor裏稱之爲智能代幣(smart token)。通常若是買需求增長,smart token的價格就會相應升高;賣需求增長,smart token的價格會相應降低。至於漲跌幅度,能夠根據項目方對本身token的定義結合項目須要,經過自定義CW來實現控制。區塊鏈
將來用戶也能夠鎖定一些smart token來發行新的smart token。這樣就會造成一個價值網絡,在這個網絡中的token均可以以某種路徑實現雙向兌換,且由於異步價格機制,於是並不依賴買賣需求雙邊匹配。測試
在這樣的機制保證下,即便是關注度小的token也沒有流動性風險,釋放token市場的長尾潛力。ui
bancor協議的白皮書中涉及到不少名詞,先作一下解釋:spa
上圖中能夠看到:不一樣的cw值對應的smart token價格隨供應量不一樣表現出的不一樣走勢。
當cw爲1時,價格恆定;cw爲0.5時,價格隨供給量成線性變化;當價格分別爲10%和90%時,價格隨供給量的增長,一個表現爲敏感,另外一個表現爲不敏感。這樣的曲線走向和經濟學中的價格彈性有殊途同歸之妙。(筆者在旁邊標註的$E_s$表示的就是價格彈性係數)。
在bancor的白皮書中有提升,smart token的價格公式爲:
$$ price = \frac{connectorBalance}{smartToken's supply \times CW} $$
咱們對上面的公式作個變形,用R表示connector balance
(好比說ETHER),用S表示smart token
的供給量,用F表示CW
, 最後用P表示智能代幣的價格。
那麼整個市場上的smart token的市值上限就是S*P
,根據上面的公式定義,獲得R = FSP,變換成以前的公式也就是
$$ P = \frac{R}{SF} $$
當用戶想購買很是少數量的smart token
,用dS
表示,那麼該用戶就須要支付PdS
,而用戶正是connetor token做爲支付貨幣,所以connector balance
增長的dR
= PdS
。
這樣咱們又獲得了一個公式 (F是一個常量) :
$$ dR = d(FSP) = Fd(SP) = F(SdP + PdS) $$
繼續往下推導:
$$ P dS = dR = F(S dP + P dS) $$
$$ P dS(1 − F) = FS dP $$
$$ P dS (\frac{1}{F} - 1) = S dP $$
爲了計算方便,繼續使得α = 1/F - 1
:
$$ αP dS = S dP $$
$$ α \frac{dS}{S} = \frac{dP}{P} $$
$$ α d log S = d log P $$
等式兩邊同時積分:
$$ α log S + A = log P $$
$$ e^A S^α = P $$
$$ P = (\frac{S}{S_0})^ α P_0 $$
這樣再已知當前smart token供應量、初始價格$P_0$和初始供應量$S_0$的基礎上,就能夠推算出當前的Smart token的價格。
繼續,若是一個用戶想要買總量爲T的smart token,這樣總供應量就會從$S_0$變爲$S_0$+T, 那麼用戶所需支付的費用爲:
$$ E = \int_{S_0}^{S_0 + T}{P}dS $$
$$ = \int_{S_0}^{S_0 + T}{P(\frac{S}{S_0})^α}dS $$
$$ = P_0S_0\frac{(S/S_0)^{α+1}}{α + 1}|_{S_0}^{S_0+T} $$
$$ = P_0S_0(\frac{((S_0+T)/S_0)^{α+1}}{α+1} - \frac{(S_0/S_0)^{α+1}}{α+1}) $$
$$ = P_0S_0((1 + \frac{T}{S_0})^{α+1} - 1) $$
$$ = FP_0S_0((1+\frac{T}{S_0})^{1/F} -1 $$
$$ = R_0((1 + \frac{T}{S_0})^{1/F} - 1) $$
$$ =R_0(\sqrt[F]{1 + \frac{T}{S_0}} - 1) $$
細心的同窗可能已經發現了,這其實就等於以前提到的price-supply曲線從$S_0$到$S_0$+T這段區間曲線下的面積。
對F這個參數,也就是CW,還有一個頗有趣的視角:
即圖中紫色部分的面積除以灰色部分的面積剛好等於CW。有興趣的同窗能夠自行驗證一下。這裏貼出原貼地址:
https://forum.evolution.land/...
注: bancor.network團隊已經實現了bancor協議的智能合約實現。
這裏舉一個簡單的例子,以ETH和智能代幣的兌換爲例,進行說明。
當用戶想用1個eth來兌換必定量的智能代幣時,智能合約地執行步驟是:
在上面的例子中,ETHERTOKEN和SmartToken都是發行出來的,所以在以前的價格計算公式中,connector_balance和smart token's supply都會變多。
再具體一些,在智能合約的具體實現中,connector又被拆分紅兩個角色bancorConverter
和bancorNetwork
,分別對應兩個智能合約,把上面的ETH兌換smartToken的操做進一步細化獲得:
bancorConverter
,bancorConverter
再把這1個ETH發送給bancorNetwork
bancorNetwork
拿着這1個ETH在ETHERTOKEN存入ETHERTOKEN中,並給本身發行一個etherToken:
EtherToken.deposit(bancorNetwork, 1 * 10^18);
bancorNetwork
把這1個etherToken發送給了bancorConverter
;bancorConverter
裏實現代幣兌換的計算,並把計算獲得的必定數量的smartToken發行給bancorNetwork
;bancorNetwork
再把這一筆smartToken發送給用戶;以上面的方式完成了ETH兌換smartToken的全過程。
下圖爲ETH、etherToken以及smartToken的資金流向圖:
能夠看到,ETH最後留在了ETHERTOKEN
合約地址中;etherToken最後留在了bancorConverter
合約地址中;而smartToken則流向了用戶。
這個過程比上一個更簡單:
bancorNetwork
;bancorConverter
中銷燬bancorNetwork
帳戶上相應數量的smartToken,並計算出smartToken對應多少數量的etherToken,而後把計算獲得的etherToken從本身的地址轉移到bancorNetwork
地址;bancorNetwork
再拿着獲得的etherToken,去ethertoken的合約地址中兌換出等額的eth,併發送給用戶下圖爲賣出smartToken換回ETH中的資金流向圖:
能夠看到,直接從用戶的帳戶上銷燬smartToken;而etherToken則從bancorConverter
中流向bancorNetwork
並最終銷燬;在完成上述過程當中,則從ETHERTOKEN
地址中把ETH還給用戶。
bancor.network官方的github庫其實已經挺完善了,不過任何人想要使用換幣的邏輯就必須通過白名單的承認,換言之只有白名單中標記爲true的地址才能夠進行換幣行爲,這樣對單個用戶很不友好,而bancor官方也並未給出交易所的智能合約實現,所以咱們在bancor的基礎上又封裝了一個bancorExchange
,用於實現特定幣種之間的兌換行爲。
github地址:https://github.com/evolutionl...
在readme裏列出了系列合約的kovan地址,你們能夠自行測試。固然若是想親手部署一個bancor網絡的同窗,咱們也給出了詳細的部署步驟,網址以下:
https://github.com/evolutionl...
bancor plan是一個很棒的去中心化貨幣解決方案,雖然在幾十年前就被凱恩斯提出,可是由於中心化(政治)的緣由被廢棄。感謝區塊鏈的興起,又把bancor帶回了大衆的視野,並在區塊鏈的技術支持下,獲得了徹底實現。
那麼像bancor這樣曾經由於技術水平或者中心化組織出於自身利益被廢棄卻很棒的提議,是否均可以隨着區塊鏈的普及而復活,從而爲整個世界帶來更有效率地運行方式?
筆者這裏想拋磚引玉,就拿咱們目前最熟悉的DAO來講,就是區塊鏈世界中代替企業的一種存在。
科斯在「社會成本問題」中曾經探討過產權界定和資源配置有效性的問題,他認爲:
而受限於技術水平,科斯認爲企業是惟一下降交易費用的方式,由於企業替代了市場的做用,企業的本質就是對價格機制的替代。價格機制的運行自己也是有成本的,市場運行自己也存在費用,企業的存在就是經過管理協調替市場下降成本的必然結果。
而張五常在「經濟的解釋」中則更進一步地提出,市場只要合約就能夠了,企業只是合約的特殊表現形式。是用一種叫「企業」的長期合約替代了「市場」的一系列短時間合約的方式來節省交易費用的結果。
很顯然,基於區塊鏈和智能合約,已經發展除了初級的DAO組織,這些DAO就是以一種「新的合約」代替「企業」這種合約。在某種程度上已經實現了鬆散的協調自制;將來DAO在市場資源配置上,是否能夠既代替企業實現更有效率的資源分配,在網絡價值傳遞中,又能夠超越企業的科層制的傳播實現更普遍更高效的價值互聯呢?
期待更多像bancor.network這樣優秀的項目,幫助咱們在實現去中心化價值傳遞的道路上走的更遠。