【分享实录】BANCOR算法详解及代码实现

Posted by

【分享实录】BANCOR算法详解及代码实现

本文作者:HiBlock区块链技术布道群-辉哥

原文发布于简书

整理:Ella

加微信baobaotalk_com,加入技术布道群

【分享实录】BANCOR算法详解及代码实现

1

活动基本信息

1)主题:【区块链技术工坊22期】BANCOR算法详解及代码实现

2)议题:

  • BANCOR算法的特点和优劣势

  • BANCOR算法和举例

  • 如何加入BANCOR.NETWORK交易所

  • 如何开发自己的BANCOR去中心化交易平台?

3)嘉宾:

【分享实录】BANCOR算法详解及代码实现王登辉

创业股平台 CTO,尖晶技术赋能中心副总经理, HiBlock区块链社区上海合伙人,电子科技大学硕士毕业, 10年华为/中兴 产品.研发经验,深耕区块链应用。

4)活动定位

由HiBlock、创业股平台和兄弟区块链社群共同主办的区块链技术工坊,深度分享区块链知识,实现小会技术交友。区块链技术工坊坚持4F原则:

  • Frency – 每周三晚上一次;

  • Focus – 聚焦区块链技术分享;

  • Fun – 20人以内会前做自我介绍,分享有深度的技术内容,技术交友;

  • Feedback – 会后有活动总结和合影照片。

2

分享实录

【分享实录】BANCOR算法详解及代码实现

【分享实录】BANCOR算法详解及代码实现

【分享实录】BANCOR算法详解及代码实现

目前小规模通证交易痛点:

  • 数字货币市场形成长尾效应,缺乏流动性,无法形成成交。

  • 交易所上币成本高,项目方容易被收割,新代币在交易所上币是需要一笔不小的启动费用的。

  • 交易存在暗箱操作可能,用户容易被收割

【分享实录】BANCOR算法详解及代码实现

  • 没有对手风险,所有的交易都是人机交易,买家不需要去找卖家,卖家不需要去找买家,交易信息公开透明。

  • 不同于中心化交易所的撮合定价,BANCOR协议的定价是根据真实供需公式定价公开透明可预测;

  • 没有竞价这个环节,不依赖流动性。刷单,刷交易量,刷净流入,净流出等操作都是无意义的。

【分享实录】BANCOR算法详解及代码实现

轻松创建 Token

Bancor 使创建数字资产变得更容易,解放用户生成 Token 的巨大潜力。这些token 还提供便宜的访问服务,这些服务之前都是很昂贵的,或者其他方式无法访问的。

模块化工具包

Bancor 协议建立了唯一的标准从而使多种应用场景变得可能。由于智能代币能够将其他智能代币作为储备,它们可以被用来作为新的金融,银行或其他货币解决方案的模块,这些模块能够向它们自己乃至整个生态系统传递价值。

嵌套估值

通过在储备中持有一个预先存在的代币,智能代币与相关资产有一个预先的估值。因此,由于与这些预先储备的代币的联系,智能代币的建立,或直接或间接的与更大的价值相连接(这些预先存在的代币所代表的价值)。生态系统的长期演变是开放的,对于 Bancor 协议来说,网络可能会设定它们对投机或波动性的偏好。

互联的框架

通过帮助一些非常小的实体和网络在无须牺牲个体独特性的前提下共享和交换资源,智能代币使它们连接成一个更大的网络。

【分享实录】BANCOR算法详解及代码实现

连续流动性

用户总能通过智能合约在网络中直接购买或出售代币,即便市场中只有很少或者没有其他买家或卖家。因为价格会根据兑换规模进行调整,所以总可以使用特定价格来兑换代币。Bancor 协议有效地使得流动性与交易量脱钩。

没有内置手续费

默认情况下,智能代币不会对它们执行的兑换收取费用。用户承担的唯一费用是处理下层区块链易所需的费用(例如,以太坊的 gas)。虽然智能代币的发行者可能为通过他们的特定智能代币进行的兑换设定可选的使用费(称为捐赠)。

Bancor 协议不会为了获取运营利润而收取兑换费用,而是从代币网络的扩展以及用户数量的增长中获利。

可调整的价格敏感度

大量连接器余额和高权重的带来的影响,是使得智能代币价格对大宗交易导致的短期投机和价格波动更不敏感。例如,一个 CW 为 10%的智能代币,相当于交易所里一个占代币市值 10%的订单。这种灵敏度可以通过 CW 和连接器余额进行调整,以实现特定智能代币的预期配置。

没有价差

Bancor 公式在处理买单和卖单时使用同样的价格计算方法。这与传统交易所不同,传统交易所的买入价格总是低于卖出价格。买卖价差,即所谓的价差,是传统的做市商赚取利润的原因。如上所述,Bancor 协议不会为了运营而获得这种利润,另外为了鼓励采用该网络,可能会引入去中心化的价差,从而使所有参与者受益。

价格可预测

智能代币的价格算法是完全透明的,允许用户在执行兑换之前预先计算他们想要兑换的有效价格。这与传统的以订单为基础的交易所形成了鲜明对比,在传统交易所,大量订单可能导致价格不可预测地下滑至明显不同的水平。

兼容 ERC20

智能代币是与 ERC20 兼容的代币(尽管具备额外的功能),它们与现有的代币应用程序(如钱包或 DApp)无缝集成,因为它们符合流行的 ERC20 代币标准。此外,任何现有的 ERC20 标准代币都可以通过带有连接器的智能代币连接到Bancor 网络,这使得 Bancor 协议向后兼容现有的 ERC20 代币。

【分享实录】BANCOR算法详解及代码实现

  • 单点失效对于 Bancor 协议建立的去中心化交易所,都是用代币合约来处理交易。虽然说明面上是去中心化交易所,但是需要在合约中设立超级管理员权限。当有账户存在超级管理员权限时,整个代币生态极容易发生单点失效。超级管理员权限是把双刃剑。在 Bancor 事件中,黑客利用了管理员权限盗取代币,而项目方也正利用了管理员权限来降低损失。不过我们认为,开发者依然可以通过良好的代码设计来降低代币和协议合约对管理员的依赖。

  • 牺牲交易深度Bancor 协议的问题是价格曲线调节参数完全受项目方控制,参与而且鼓励价格投机,越早买入的人越容易获利。买盘能够推高价格,同时买盘也会降低价格,一旦曲线上升停滞容易发生「踩踏」造成较大的波动。所谓牺牲深度带来流动性。

  • 参数被操控问题Bancor 算法根据参数 CW 的不同,以及构造关系不同,会产生不同的数学图形,或杠杆效果。比如常见的四类图形,如 3.2.2 节 4 张图所示。市场对价格变化的预期几乎完全基于 CW,因为它决定了价格曲线。那么如果项目中途改变 CW 参数呢?RAM 和 FIBOS 项目都发生过这一的情况,只不过一个是简单粗暴,一个是有其他参数配合的「合理解释」的。这类风险也是目前 Bancor 协议投资者面临的最大风险。

【分享实录】BANCOR算法详解及代码实现

【分享实录】BANCOR算法详解及代码实现

【分享实录】BANCOR算法详解及代码实现

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 = Connector Balance / Smart Token’s Value;

  • TotalValue = Price * Supply = Smart Token’s Price * Smart Token’s Supply ;

  • Price = Balance /(Supply * CW)= Connector Balance / (Smart Token’s Supply * Connector Weight)

举例:若当前AToken的发行量为1000,报价为0.5个ETH兑换1个AToken,那么AToken的总价值为500个ETH,但是储备金余额可能并没有500个ETH,比如为250个ETH,那么CW则为0.5(50%)。

【分享实录】BANCOR算法详解及代码实现

【分享实录】BANCOR算法详解及代码实现

Token买入计算公式:

  • Token_Return = Supply *((1 + ETH_Paid / 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的报价。

【分享实录】BANCOR算法详解及代码实现

Token卖出计算公式:

  • ETH_Return = Balance *(1 – (1 – Token_Paid / 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算法详解及代码实现

【分享实录】BANCOR算法详解及代码实现

网址: https://www.bancor.network/communities/5a174bc0171b0100018276b3/currency

【分享实录】BANCOR算法详解及代码实现

【分享实录】BANCOR算法详解及代码实现

核心点为需要存入10万美元等值的BNT智能代币。

【分享实录】BANCOR算法详解及代码实现

【分享实录】BANCOR算法详解及代码实现

1000个CLOB可以兑换多少个TKN1?SmartTokenAmount = SmartTokenTokenSupply *((1 + ConnectorToken / ConnectorTokenBalance)^ CW – 1)�= 1000 * (( 1 + 1000 / 90000 )^ 0.9 – 1 )�=?9.99446694706181297191051400502(个TNK1)

【分享实录】BANCOR算法详解及代码实现

【分享实录】BANCOR算法详解及代码实现

9.994466947个TKN1可以兑换多少个ETH呢?

connectorTokenAmount = ConnectorTokenBalance *(1 – (1 – SmartTokenAmount / SmartTokenTokenSupply)^ (1 / CW) )connectorTokenAmount = 10 * (1 – (1 – (9.994466947 / (1000 + 9.994466947)))^ (1 / 0.1) )�= 10 * (1 – (1 – (9.994466947 / (1000 + 9.994466947)))^ (1 / 0.1) )�= 10 * (1 – (1 – (0.00989556603929837667128805564395))^ (1 / 0.1) )�= 10 * (1 – (1 – (0.00989556603929837667128805564395))^ (1 / 0.1) )�= 10 * (1 – 0.99010443396070162332871194435605 ^ 10 )�= 10 * (1 – 0.90533655025365121589722721359431)�=?0.94663449746348784102772786405694(个ETH)兑换结论:1000个CLB可以兑换0.946个ETH按照假设的市价,两者的价值均为1000元左右,符合期望。

【分享实录】BANCOR算法详解及代码实现

省略运行部分。

【分享实录】BANCOR算法详解及代码实现

参考记录文章:

本次活动照片:

【分享实录】BANCOR算法详解及代码实现

【分享实录】BANCOR算法详解及代码实现

下期活动预告

【分享实录】BANCOR算法详解及代码实现

原文始发于微信公众号( 区块链社区HiBlock ):【分享实录】BANCOR算法详解及代码实现