EOS“帶貨”Bancor 算法,但大多數人並未真正讀懂它

在上個世紀 40 年代,英國經濟學家凱恩斯提出採用 30 種有代表性的商品作爲價值錨定發行國際貨幣 Bancor 的構想。而其他國家或機構再以 Bancor 爲價值錨定發行各自的貨幣。然而這一方案沒有得到實施,取而代之的是美元成爲國際貨幣。

在以太坊沒有出現之前,若在網絡上搜索關於 Bancor 的資料,內容估計都是關於經濟學的。以太坊流行後,發行 Token 變得非常火熱。這久違 Bancor 的設計思想在區塊鏈領域的實際應用提供了環境基礎。大約在 2017 年 6 月份的時候,Bancor 項目發佈了白皮書並進行了“哎西歐”。

其白皮書下載地址爲:https://storage.googleapis.com/website-bancor/2018/04/01ba8253-bancor_protocol_whitepaper_en.pdf

算法推導過程資料下載地址爲:

https://goo.gl/HXQBUr

與算法有關的智能合約代碼地址爲:

https://github.com/bancorprotocol/contracts/blob/master/solidity/contracts/converter/BancorFormula.sol

白皮書中給出了 Bancor 協議的算法公式,並論述了 Bancor 在數字貨幣領域的發展前景。然而 Bancor 這個字樣能夠真正進入大衆的視野裏,可能要歸功於 EOS 項目。

由於 EOS 項目在 RAM 分配中採用了 Bancor 算法,並將 RAM 的價格爆炒到了很高的價位,憑藉 EOS 項目在區塊鏈領域的強大運營宣傳能力與影響力,Bancor 算法廣爲流傳。

目前網絡上的很多關於 Bancor 協議與算法的文章,基本上都是對 Bancor 項目白皮書的轉述,未能真正講清楚 Bancor 算法,有的文章甚至將購買與售賣 Token 的公式混爲一談,誤人子弟。因此我想通過該文, 幫大家在理解 Bancor 算法的過程中少走一些彎路。

Bancor 協議的基本思路

在以太坊上發行的大量 ERC20-Token 是沒有價值錨定的,其價值完全依賴於項目方的技術與運營能力,若項目失敗了,則 Token 價值就很可能歸零。

若利用智能合約的強大而靈活的「資金流轉控制」能力,在 Token 合約中控制着一定量的儲備金,讓 Token 與儲備金之間擁有一定的兌換能力 ,那麼 Token 的價值就可以儲備金爲錨定物,而不完全依賴於項目方。 Token 持有者也就不用承擔項目失敗或者項目方可能詐騙跑路的風險。

在以太坊平臺上,顯然 ETH 的價值與公信力最大,是最佳的儲備金與錨定物(Connector),不過其他有價值的 Token 也可以作爲 Connector,而且 Connector 可以有多個。

若 Token 與 Connector 之間的兌換算法採用了 Bancor 算法,又符合 ERC20 標準,則被稱爲智能通證(Smart-Token) 。 爲了簡單起見,以下的論述以 ETH 作爲 Connector 舉例說明。購買與售賣 Token 的過程如下:

「購買者」發送一定量的 ETH 到 Token 合約地址,觸發了合約代碼自動執行「購買功能代碼」,獲得對應數量的 Token;

「售賣者」發送一定量的 Token 到 Token 合約地址,觸發了合約代碼自動執行「售賣功能代碼」,獲得對應數量的 ETH。

若 AToken 與 BToken 都是以 ETH 爲錨定物的智能通證,那麼 Token 持有者無需通過交易所,僅僅憑藉智能合約提供的買賣與兌換功能,就能實現 AToken 與 BToken 的自由兌換,比如 AToken–>ETH–>BToken,多種智能通證之間通過共同的錨定物串接起來,就形成了一個價值網絡(Bancor Network)。

Bancor 的基本計算公式

計算公式涉及多個參數,解釋如下:

Token 的供應量【Smart Token\’s Supply】,簡稱 Supply;

Token 的價格【Smart Token\’s Price 】,簡稱 Price;

Token 的總市值【Smart Token\’s Total Value】,簡稱 TotalValue;

儲備金餘額【Connector Balance】,簡稱 Balance;

儲備金固定比率【Connector Weight】,簡稱 CW。

計算公式如下:

CW = Balance / TotalValue;

TotalValue = Price * Supply;

Price = Balance / (Supply * CW)

舉例: 若當前 AToken 的發行量爲 1000,報價爲 0.5 個 ETH 兌換 1 個 AToken,那麼 AToken 的總價值爲 500 個 ETH,但是儲備金餘額可能並沒有 500 個 ETH,比如爲 250 個 ETH,那麼 CW 則爲 0.5 (50%)。

EOS“帶貨”Bancor 算法,但大多數人並未真正讀懂它

Token 買入計算公式:

** _Token_Return = Supply ((1 + ETH_Amount / Balance)^ CW – 1)_
*

舉例: 若當前 AToken 的發行量爲 1000,儲備金餘額爲 250 個 ETH,CW 爲 0.5,那麼當前的報價則爲 0.5 個 ETH 兌換 1 個 AToken;現在 Bob 想花 750 個 ETH 購買 AToken,帶入公式: Token_Return = 1000 *((1 + 750 / 250)^ 0.5 – 1)= 1000 __

即 Bob 花了 750 個 ETH 購買了 1000 個 AToken,本次購買的平均價格爲 0.75 個 ETH 兌換 1 個 AToken,比初始報價已經高了許多。Bob 的購買行爲推高了 AToken 的報價。若 Bob 接着購買同樣數量的 AToken,則需要付出更多的 ETH 代價,每一筆購買都會繼續推高 AToken 的報價。

EOS“帶貨”Bancor 算法,但大多數人並未真正讀懂它

Token 賣出計算公式(注意:Bancor 項目白皮書裏未明確給出):

** _ETH_Return = Balance (1 – (1 – Token_Amount / Supply)^ (1 / CW))_
*

舉例: 在 Bob 的那筆交易完成後,AToken 的發行總量爲 2000 個,儲備金餘額爲 1000 個 ETH,CW 維持不變、仍然爲 0.5,那麼通過公式可以計算當前的報價爲 1 個 ETH 兌換 1 個 AToken;現在 Alice 想賣掉 1000 個 AToken,帶入公式: ETH_Return = 1000 *(1 – (1 – 1000 / 2000)^ (1 /0.5))= 750

即 Alice 賣掉了 1000 個 AToken,獲得了 750 個 ETH,本次購買的平均價格爲 0.75 個 ETH 兌換 1 個 AToken。因爲 Bob 的購買行爲推高了 AToken 的報價,而 Alice 是在 Bob 的購買行爲之後賣掉了 AToken,所以 Alice 賣到了相對較高的價位。假如沒有 Bob 的購買行爲,回到 AToken 的供應量爲 1000 的那個時候,Alice 賣掉全部的 AToken,也只能獲得 250 個 ETH。

由此可見, Bancor 算法的精妙之處就在於 :在交易過程中,並不採用交易所中買單、賣單匹配(必須要求存在交易對手方)的方式進行,Token 持有人是通過與智能合約交互的方式,和整個 Token 市場做交易。 無論交易額度的數量多少,每一筆購買行爲,都會推高 Token 的價格,而每一筆售賣行爲,都會拉低 Token 價格,合約裏的參數狀態時刻反應着市場供需情況、維持着價格平衡。對數學感興趣的童鞋可以參考 Bancor 算法的證明材料,利用微積分知識復現 Bancor 公式的推導過程,深刻感受一下 Bancor 算法的魅力。

作者:Karl 嘉楠區塊鏈研究院高級研究員

嘉楠區塊鏈:嘉楠耘智(Canaan Inc.)旗下區塊鏈板塊。

熱文搶讀:

1、對可驗證隨機函數 VRF 的簡明解釋

2、Byteball 技術剖析之一:DAG 賬本與最優樹

3、以太坊 ERC875 示例分析:一手交幣,一手交證

EOS“帶貨”Bancor 算法,但大多數人並未真正讀懂它