【solitidy】bancor協議

https://www.jianshu.com/p/376...
官網
白皮書
開源合約
API

介紹

歷史由來

它是在1940年-1942年間由凱恩斯、舒馬赫提出的一個超主權貨幣的概念,可做爲一種帳戶單位用於國際貿易中,並由英國在二戰後正式提出。然而,因爲美國實力在二戰後一枝獨秀,Bancor 方案並無在佈雷頓森林會議上被採納使用。但應用這一思想的 Bancor 算法則繼續延續了其生命力。Bancor 算法由 Bancor Network 項目提出應用,旨在採用公式來設定好數字資產間的兌換價格
那麼回到班柯算法,他的創做者是一羣凱恩斯經濟學的追隨者。經過代碼實現和升級了bancor的設計理念。他的最完美最終形態,是一種自動訂價的一籃子貨幣。你隨便給我一個幣,而後我會根據我籃子裏面你這種幣的儲備量給你訂價賣bancor給你。而後由於籃子裏的貨幣是鐵索連舟連在一塊兒的,而且是根據供需達成的人機交易公式訂價,既沒有利用競價規則炒做的風險,也沒有任何空手套白狼的作多作空工具,更沒有任何被挪用的可能。具備很是牛逼的魯棒性。php

基本概念

  • connector token:用來作抵押發幣使用,具備必定的價值,如:eth、btc。
  • smart token:發出的新幣,如erc20規範的代幣。smart token能夠鏈接多個connector token,此時smart token也叫轉換token,用於connector token之間的轉換。
  • 餘額:價格 x 供應量 = price * supply

算法公式

CW公式

clipboard.png

  • connector balance:鏈接器餘額
  • smart token total values:智能代幣總餘額

CW取值

clipboard.png

  • cw = 100%
    supply(smart token供應量)的增長,price(smart token 價格)不變。
  • cw = 50%
    supply增長,price線性增長。
  • cw = 0-50%
    supply增長,price指數增長。例如EOS RAM的訂價機制的cw=0.0005。隨着supply增長,price漲的飛快,讓supply的峯值只能漲到定點。
  • cw = 50%-100%

價格公式

clipboard.png

  • connector balance:鏈接器餘額
  • Smart Token’s outstanding supply:智能token的供應量
  • CW:connector weight,鏈接器比重

智能代幣買入

clipboard.png

  • token issued:應該得到的智能代幣數量。
  • connectd token paid:應該付出的鏈接代幣的數量。
  • supply:當前的智能代幣供應量(數量)。

智能代幣賣出

clipboard.png

  • token destroyed:賣出的智能代幣數量
  • connected tokens paid out:應該收穫的鏈接幣數量。

有效價格

clipboard.png

用A個connect token 轉換成B個smart tokengit

  • connected tokens exchanged:A
  • smart tokens exchange:B

轉換器兩端token轉換計算公式

clipboard.png

舉個例子,如今將Atoken 轉換成 Btokengithub

  • fromConnectorWeight:Atoken的CW
  • toConnectorWeight:Btoken的CW
  • fromConnectorBalance:Atoken的餘額
  • toConnectorBalance:Btoken的餘額
  • amount:使用amount個Atoken用來轉成Btoken
  • toAmount:能獲取到的Btoken的數量

疑惑?

上面的公式都給出來了,按照智能代幣買入公式,若是一開始supply = 10000,balance = 2500,cw = 0.5;用100個connector token買了198個smart token。那此時supply和balance的值應該變化成多少?經過計算驗證得出:supply = 10000 + 198;balance = 2500 + 100web

案例

php的bancor計算公式

public function buy(){
    $supply = $this->get["supply"];
    $balance = $this->get["balance"];
    $paid = $this->get["paid"];
    $cw = 0.5;

    $token = $supply * (pow(1 + $paid / $balance, $cw) - 1);
    $price = $paid / $token;

    ApiFunc::api_export([
        "token" =>$token,
        "priceBefore" => $balance / $supply / $cw,
        "priceEnd" => $price
    ]);
}

public function sell(){
    $cw = 0.5;
    $supply = $this->get["supply"];
    $balance = $this->get["balance"];
    $token = $this->get["token"];

    $paid = $balance * (1 - pow(1 - $token / $supply, 1 / $cw));
    $price = $paid / $token;
    ApiFunc::api_export([
        "paid" => $paid,
        "priceBefore" => $price,
        "priceEnd" => ($balance - $paid) / ($supply - $token) / $cw
    ]);
}

EOS RAM的Bancor算法

引用
RAM作了二重Bancor算法。Ramcore做爲smart token,鏈接着2個鏈接connector token。以下:
  • 第一重:以EOS爲母幣,Ramcore爲衍生幣;
  • 第二重:以RAM爲母幣,Ramcore爲衍生幣;

須要注意的是,EOS RAM設置的cw值爲0.0005。這樣價格會快速增長,致使Ramcore的supply只能達到指定峯值。實現supply固定。算法

bancor.network

  • BancorNetwork:BancorNetwork是bancor協議token轉換的主要切入點。經過在單個事務中提供轉換路徑,運行在bancor網絡中的任何token與其餘token之間進行轉換。
  • BancorConverter,負責在token及其鏈接器直接進行轉換。(中繼代幣)
  • BancorFormula,不斷從新計算價格,以保持tokens與鏈接器之間的餘額。(自動訂價)
相關文章
相關標籤/搜索