Menu

BANCOR算法究竟有什么不一般的地方呢,【区块链技术工坊22期】BANCOR算法详解及代码实现



EOSRAM近期很火!前有BM不遗余力的推动,后有炒币人群的追捧,EOSRAM就这么火了。随着EOSRAM火起来的,还有BANCOR算法。正是BM在EOSIO主网中引入BANCOR算法,才让热度正在降低的EOS再次成为币圈焦点。那么,BANCOR算法究竟有什么不一般的地方呢?不妨来了解一下。

澳门新葡亰官网登录 1

澳门新葡亰官网登录 2

EOS带火了Bancor算法。其实BANCOR算法是解决长尾通证流通的最好方式之一。鉴于目前通证大部分是基于ERC20的,辉哥正在尝试实现一个使用SOLIDITY语言实现的去中心化交易所,把项目信息整理分享出来。学习BANCOR通证转换合约的类图学习BANCOR通证核心函数获取源码和注释

1)题目:【区块链技术工坊22期】BANCOR算法详解及代码实现2)议题:1)BANCOR算法的特点和优劣势2)BANCOR算法和举例3)如何加入BANCOR.NETWORK交易所4)如何开发自己的BANCOR去中心化交易平台?3)嘉宾:

在以太坊上发行的大量ERC20-Token是没有价值锚定的,其价值完全依赖于项目方的技术与运营能力,若项目失败了,则通证价值就很可能归零。若利用智能合约的强大而灵活的“资金流转控制”能力,在通证合约中控制着一定量的储备金,让通证与储备金之间拥有一定的兑换能力,那么Token的价值就可以储备金为锚定物,而不完全依赖于项目方。通证持有者也就不用承担项目失败或者项目方可能诈骗跑路的风险。若通证与锚定物之间的兑换算法采用了Bancor算法,又符合ERC20标准,则被称为智能通证(Smart-Token)
。为了简单起见,以下的论述以ETH作为锚定物举例说明。购买与售卖Token的过程如下:

澳门新葡亰官网登录 3创业股平台
CTO,尖晶投资技术赋能中心副总经理,
HiBlock技术社群上海合伙人,电子科技大学硕士毕业, 10年华为/中兴
产品.研发经验,深耕区块链应用。4)活动定位由HiBlock,创业股平台和兄弟区块链社群共同主办的区块链技术工坊,深度分享区块链知识,实现小会技术交友。区块链技术工坊坚持4F原则:

  • “购买者”发送一定量的ETH到Token合约地址,触发了合约代码自动执行”购买功能代码”,获得对应数量的Token;
  • “售卖者”发送一定量的Token到Token合约地址,触发了合约代码自动执行“售卖功能代码”,获得对应数量的ETH。
  • Frency – 每周三晚上一次;
  • Focus – 聚焦区块链技术分享;
  • Fun – 20人以内会前做自我介绍,分享有深度的技术内容,技术交友;
  • Feedback – 会后有活动总结和合影照片。

若AToken与BToken都是以ETH为锚定物的智能通证,那么Token持有者无需通过交易所,仅仅凭借智能合约提供的买卖与兑换功能,就能实现AToken与BToken的自由兑换,比如AToken–>ETH–>BToken,多种智能通证之间通过共同的锚定物串接起来,就形成了一个价值网络(Bancor
Network)。鉴于篇幅限制,本文不准备上传完整源码文件,有需要的同学可加入知识星球下载。

澳门新葡亰官网登录 4澳门新葡亰官网登录 5澳门新葡亰官网登录 6

澳门新葡亰官网登录 7
加入辉哥知识星球可申请加入区块链交流专项微信群,及时交流各种区块链技术问题。澳门新葡亰官网登录 8BANCOR转换算法框架类图.png【核心智能合约简单描述】1,contract
BancorConverter功能说明
:代币转换器,允许一个智能代币和其他代币之间的转换,ERC20连接器的余额可以是虚拟的,从而不需要依赖于真实的余额,这有助于避免在一个协约中有大量金额的风险。转换器可以升级。2,ITokenConverter功能说明:BancorConverter的父类接口之一,EIP228
Token
Converter接口,用于智能代币的买卖和数量计算接口。3,SmartTokenController功能说明:BancorConverter的父类接口之一,智能代币管理器。智能代币管理器是一个可以升级的模块,从而允许更多功能和问题修复。当它接受了代币的所有权,它会成为代币的唯一管理器,执行各个功能。4,Managed功能说明
BancorConverter的父类之一,提供协议管理的支持。5,IBancorConverterExtensions功能说明:BancorConverter的公开变量类,bancor
converter extensions
协议。能返回formula,gasPriceLimit,quickConverter等3类接口合约。

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

  • convert(IERC20Token _fromToken, IERC20Token _toToken, uint256
    _amount, uint256 _minReturn) public returns
  • 功能: 将一定数量的_fromToken 转换为 _toToken;
  • 流程图:澳门新葡亰官网登录 9convert函数.png
  • 源码:
  • 数字货币市场形成长尾效应,缺乏流动性,无法形成成交。
  • 交易所上币成本高,项目方容易被收割,新代币在交易所上币是需要一笔不小的启动费用的。
  • 交易存在暗箱操作可能,用户容易被收割

澳门新葡亰官网登录 10

/** @dev 将一定数量的_fromToken 转换为 _toToken @param _fromToken 用来转换ERC20代币 @param _toToken 被转换到的ERC20代币 @param _amount 转换的数量,基于fromToken @param _minReturn 限制转换的结果需要高于minReturn,否则取消 @return conversion 返回数量 */ function convert(IERC20Token _fromToken, IERC20Token _toToken, uint256 _amount, uint256 _minReturn) public returns  { convertPath = [_fromToken, token, _toToken]; return quickConvert(convertPath, _amount, _minReturn); }/** @dev 通过之前定义的转换路径来转换代币 注意:当从ERC20代币进行转换,需要提前设置补贴 @param _path 转换路径 @param _amount 转换的数量 @param _minReturn 限制转换的结果需要高于minReturn,否则取消 @return 返回数量 */ quickConvertfunction quickConvert(IERC20Token[] _path, uint256 _amount, uint256 _minReturn) public payable validConversionPath returns  { return quickConvertPrioritized(_path, _amount, _minReturn, 0x0, 0x0, 0x0, 0x0, 0x0); }/** @dev 通过之前定义的转换路径来转换代币 注意:当从ERC20代币进行转换,需要提前设置补贴 @param _path 转换路径 @param _amount 转换的数量 @param _minReturn 限制转换的结果需要高于minReturn,否则取消 @param _block 如果当前的区块超过了参数,则取消 @param _nonce 发送者地址的nonce @param _v 通过交易签名提取 @param _r 通过交易签名提取 @param _s 通过交易签名提取 @return 返回数量 */ function quickConvertPrioritized(IERC20Token[] _path, uint256 _amount, uint256 _minReturn, uint256 _block, uint256 _nonce, uint8 _v, bytes32 _r, bytes32 _s) public payable validConversionPath returns  { IERC20Token fromToken = _path[0]; IBancorQuickConverter quickConverter = extensions.quickConverter(); // 我们需要从调用者向快速转换着把源代币转化 // 因此他能基于调用者进行转换 if (msg.value == 0) { // 如果不是ETH,把源代币发给快速调用者 // 如果是智能代币,不需要补贴 —— 销毁代币,然后发给快速转换者 if (fromToken == token) { token.destroy(msg.sender, _amount); // 销毁调用者的_amount代币 token.issue(quickConverter, _amount); // 把_amount的新代币发给快速转换者 } else { // 否则,我们假设有了补贴,发给快速转换者 assert(fromToken.transferFrom(msg.sender, quickConverter, _amount)); } } // 执行转换,把ETH转回 return quickConverter.convertForPrioritized.value(msg.value)(_path, _amount, _minReturn, msg.sender, _block, _nonce, _v, _r, _s); }

1,没有对手风险,所有的交易都是人机交易,买家不需要去找卖家,卖家不需要去找买家,交易信息公开透明。2,不同于中心化交易所的撮合定价,BANCOR协议的定价是根据真实供需公式定价公开透明可预测;3,没有竞价这个环节,不依赖流动性。刷单,刷交易量,刷净流入,净流出等操作都是无意义的。

  • ** function change**(IERC20Token _fromToken, IERC20Token
    _toToken, uint256 _amount, uint256 _minReturn) public returns
  • 功能: 将一定数量的_fromToken 转换为
    _toToken。弃用了,向后兼容。设计思路和源码结构挺好的,我画了流程图。
  • 流程图:澳门新葡亰官网登录 11BANCOR算法-change函数1.png澳门新葡亰官网登录 12BANCOR算法-change函数2.png
  • 代码:

澳门新葡亰官网登录 13

1 轻松创建 TokenBancor 使创建数字资产变得更容易,解放用户生成 Token
的巨大潜力。这些token
还提供便宜的访问服务,这些服务之前都是很昂贵的,或者其他方式无法访问的。2
模块化工具包Bancor
协议建立了唯一的标准从而使多种应用场景变得可能。由于智能代币能够将其他智能代币作为储备,它们可以被用来作为新的金融,银行或其他货币解决方案的模块,这些模块能够向它们自己乃至整个生态系统传递价值。3
嵌套估值通过在储备中持有一个预先存在的代币,智能代币与相关资产有一个预先的估值。因此,由于与这些预先储备的代币的联系,智能代币的建立,或直接或间接的与更大的价值相连接(这些预先存在的代币所代表的价值)。生态系统的长期演变是开放的,对于
Bancor 协议来说,网络可能会设定它们对投机或波动性的偏好。4
互联的框架通过帮助一些非常小的实体和网络在无须牺牲个体独特性的前提下共享和交换资源,智能代币使它们连接成一个更大的网络。

既然是过期代码,源代码就不放了。

澳门新葡亰官网登录 14

  • function getReturn(IERC20Token _fromToken, IERC20Token
    _toToken, uint256 _amount) public view returns

  • 功能:返回从一个代币转换为另一个代币的预期数量

  • 流程图:

    澳门新葡亰官网登录 15getReturn

1
连续流动性用户总能通过智能合约在网络中直接购买或出售代币,即便市场中只有很少或者没有其他买家或卖家。因为价格会根据兑换规模进行调整,所以总可以使用特定价格来兑换代币。Bancor
协议有效地使得流动性与交易量脱钩。2
没有内置手续费默认情况下,智能代币不会对它们执行的兑换收取费用。用户承担的唯一费用是处理下层区块链易所需的费用(例如,以太坊的
gas)。虽然智能代币的发行者可能为通过他们的特定智能代币进行的兑换设定可选的使用费。Bancor
协议不会为了获取运营利润而收取兑换费用,而是从代币网络的扩展以及用户数量的增长中获利。3
可调整的价格敏感度大量连接器余额和高权重的带来的影响,是使得智能代币价格对大宗交易导致的短期投机和价格波动更不敏感。例如,一个
CW 为 10%的智能代币,相当于交易所里一个占代币市值
10%的订单。这种灵敏度可以通过 CW
和连接器余额进行调整,以实现特定智能代币的预期配置。4 没有价差Bancor
公式在处理买单和卖单时使用同样的价格计算方法。这与传统交易所不同,传统交易所的买入价格总是低于卖出价格。买卖价差,即所谓的价差,是传统的做市商赚取利润的原因。如上所述,Bancor
协议不会为了运营而获得这种利润,另外为了鼓励采用该网络,可能会引入去中心化的价差,从而使所有参与者受益。5
价格可预测智能代币的价格算法是完全透明的,允许用户在执行兑换之前预先计算他们想要兑换的有效价格。这与传统的以订单为基础的交易所形成了鲜明对比,在传统交易所,大量订单可能导致价格不可预测地下滑至明显不同的水平。6
兼容 ERC20智能代币是与 ERC20
兼容的代币(尽管具备额外的功能),它们与现有的代币应用程序(如钱包或
DApp)无缝集成,因为它们符合流行的 ERC20 代币标准。此外,任何现有的
ERC20 标准代币都可以通过带有连接器的智能代币连接到Bancor 网络,这使得
Bancor 协议向后兼容现有的 ERC20 代币。

澳门新葡亰官网登录 16getPurchaseReturn澳门新葡亰官网登录 17getSaleReturn

澳门新葡亰官网登录 18

  • 源码:

5.3.2.1 单点失效对于 Bancor
协议建立的去中心化交易所,都是用代币合约来处理交易。虽然说明面上是去中心化交易所,但是需要在合约中设立超级管理员权限。当有账户存在超级管理员权限时,整个代币生态极容易发生单点失效。超级管理员权限是把双刃剑。在
Bancor
事件中,黑客利用了管理员权限盗取代币,而项目方也正利用了管理员权限来降低损失。不过我们认为,开发者依然可以通过良好的代码设计来降低代币和协议合约对管理员的依赖。5.3.2.2
牺牲交易深度Bancor
协议的问题是价格曲线调节参数完全受项目方控制,参与而且鼓励价格投机,越早买入的人越容易获利。买盘能够推高价格,同时买盘也会降低价格,一旦曲线上升停滞容易发生「踩踏」造成较大的波动。所谓牺牲深度带来流动性。5.3.2.5
参数被操控问题Bancor 算法根据参数 CW
的不同,以及构造关系不同,会产生不同的数学图形,或杠杆效果。比如常见的四类图形,如
3.2.2 节 4 张图所示。市场对价格变化的预期几乎完全基于
CW,因为它决定了价格曲线。那么如果项目中途改变 CW 参数呢?RAM 和 FIBOS
项目都发生过这一的情况,只不过一个是简单粗暴,一个是有其他参数配合的「合理解释」的。这类风险也是目前
Bancor 协议投资者面临的最大风险。

澳门新葡亰官网登录 19澳门新葡亰官网登录 20澳门新葡亰官网登录 21

/** @dev 返回从一个代币转换为另一个代币的预期数量 @param _fromToken ERC20 被转换的代币 @param _toToken ERC20 转换成的代币 @param _amount 转换的数量 @return 与其转换的数量 */ function getReturn(IERC20Token _fromToken, IERC20Token _toToken, uint256 _amount) public view returns  { require(_fromToken != _toToken); // 验证输入 // 基于当前代币转换 if (_toToken == token) return getPurchaseReturn(_fromToken, _amount); else if (_fromToken == token) return getSaleReturn(_toToken, _amount); // 在两个连接器之间转换 uint256 purchaseReturnAmount = getPurchaseReturn(_fromToken, _amount); return getSaleReturn(_toToken, purchaseReturnAmount, safeAdd(token.totalSupply(), purchaseReturnAmount)); }/** @dev 返回通过一个连接器代币购买代币的预期结果 @param _connectorToken 连接器代币协约地址 @param _depositAmount 买入的数量 @return 预期的数量 */ function getPurchaseReturn(IERC20Token _connectorToken, uint256 _depositAmount) public view active validConnector(_connectorToken) returns  { Connector storage connector = connectors[_connectorToken]; require(connector.isPurchaseEnabled); // validate input uint256 tokenSupply = token.totalSupply(); uint256 connectorBalance = getConnectorBalance(_connectorToken); uint256 amount = extensions.formula().calculatePurchaseReturn(tokenSupply, connectorBalance, connector.weight, _depositAmount); // 扣除费用 uint256 feeAmount = getConversionFeeAmount; return safeSub(amount, feeAmount); }/** @dev 返回通过一个连接器代币卖出代币的预期结果 @param _connectorToken 连接器代币协约地址 @param _sellAmount 卖出的数量 @return 预期得到的数量 */ function getSaleReturn(IERC20Token _connectorToken, uint256 _sellAmount) public view returns  { return getSaleReturn(_connectorToken, _sellAmount, token.totalSupply; }/** @dev 工具,基于一个总供应量,返回基于一个连接器代币来卖掉代币的期待返回 @param _connectorToken 连接器代币协议地址 @param _sellAmount 销售的数量 @param _totalSupply 设置总供应量 @return 返回的数量 */ function getSaleReturn(IERC20Token _connectorToken, uint256 _sellAmount, uint256 _totalSupply) private view active validConnector(_connectorToken) greaterThanZero(_totalSupply) returns  { Connector storage connector = connectors[_connectorToken]; uint256 connectorBalance = getConnectorBalance(_connectorToken); uint256 amount = extensions.formula().calculateSaleReturn(_totalSupply, connectorBalance, connector.weight, _sellAmount); // 从返回的数量中剪掉费用 uint256 feeAmount = getConversionFeeAmount; return safeSub(amount, feeAmount); }

4.1
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。

上述代码完成了智能代币和连接代币转化的关系,但是没有涉及核心互换及计算代码,而是通过interface类的方式进行隔离。这个在另外一个课程进行讲解。

澳门新葡亰官网登录 22澳门新葡亰官网登录 23

从白皮书,算法公式验证到代码实现,辉哥从技术穿刺的角度讲透了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的系列知识分享,列表如下:Bancor协议:通过智能合约为加密货币提供持续流动性以实例形式深入浅出讲透BANCOR算法第二十四课
基于以太坊的交易所BANCOR算法实现-转换算法框架第二十五课
如何开发自己的BANCOR去中心化交易平台?辉哥整理了BANCOR的系列知识分享,列表如下:Bancor协议:通过智能合约为加密货币提供持续流动性以实例形式深入浅出讲透BANCOR算法第二十四课基于以太坊的交易所BANCOR算法实现-转换算法框架第二十五课如何开发自己的BANCOR去中心化交易平台?第二十七课如何从BANCOR.NETWORK去中心化交易所兑换ENJIN通证

澳门新葡亰官网登录 24

如有需要的同学下载测试工程的可加入知识星球下载。

Token卖出计算公式:ETH_Return = Balance *(1 – (1 – Token_Paid /
Supply)^
举例:在Bob的那笔交易完成后,AToken的发行总量为2000个,储备金余额为1000个ETH,CW维持不变、仍然为0.5,那么通过公式可以计算当前的报价为1个ETH兑换1个AToken;现在Alice想卖掉1000个AToken,带入公式:ETH_Return
= 1000 *(1 – (1 – 1000 / 2000)^ = 750即Alice
卖掉了1000个AToken,获得了750个ETH,本次购买的平均价格为0.75个ETH兑换1个AToken。因为Bob的购买行为推高了AToken的报价,而Alice是在Bob的购买行为之后卖掉了AToken,所以Alice卖到了相对较高的价位。假如没有Bob的购买行为,回到AToken的供应量为1000的那个时候,Alice卖掉全部的AToken,也只能获得250个ETH。

澳门新葡亰官网登录 25

澳门新葡亰官网登录 26澳门新葡亰官网登录 27网址:
)

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

澳门新葡亰官网登录 28澳门新葡亰官网登录 29

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

澳门新葡亰官网登录 30澳门新葡亰官网登录 31

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

澳门新葡亰官网登录 32

省略运行部分。

澳门新葡亰官网登录 33参考记录文章:
基于以太坊的交易所BANCOR算法实现-转换算法框架
如何开发自己的BANCOR去中心化交易平台?
如何从BANCOR交易所兑换ENJIN通证)

澳门新葡亰官网登录,本次活动照片:

澳门新葡亰官网登录 34澳门新葡亰官网登录 35

本次实录纪要由ELLA小姐姐记录,转发务必注明出处及本段信息。

1)题目:【区块链技术工坊23期】工业互联网领域的边缘计算与区块链实践

2)议题:1) 智能制造与工业互联网场景简介简介。2)
区块链技术在工业互联网领域的作用。3)
基于边缘计算设计思想实现BaaS服务能力。4) 测试床场景中的实际应用

3)嘉宾:

澳门新葡亰官网登录 36郝振亚,亿喆网络技术总监,13年IT经验,参与工信部区块链参考架构草案和评审,区块链技术白皮书编写。

4)时间/地点:2018-11-14 18:30 / 上海徐汇区龙华中路596号

**5)活动流程

澳门新葡亰官网登录 37

标签:, , , , , , , , ,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

相关文章

网站地图xml地图