在上个世纪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%)。
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的报价。
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的购买行为之后进行的售卖,所以Alice卖到了相对较高的价位。假如没有之前Bob的购买行为,而是回到AToken供应量为1000的那个时候,Alice卖掉全部的AToken,也只能获得250个ETH。
由此可见,Bancor算法的精妙之处在于:在交易过程中,并不采用交易所中的买单、卖单匹配(必须要求存在交易对手方)的方式进行,Token持有人是通过与智能合约交互的方式,和整个Token市场做交易。无论交易额度的数量是多少,每一笔购买行为,都会推高Token的价格,而每一笔售卖行为,都会拉低Token价格,合约里的参数状态时刻反应着市场供需情况、维持着价格平衡。对数学感兴趣的童鞋可以参考Bancor算法的证明材料,利用微积分知识复现Bancor公式的推导过程,深刻感受一下Bancor算法的魅力。
网友评论