从技术角度解析:为什么通缩机制的代币易受攻击_SWAP:totm币价格

概述

在区块链上具有通缩机制的代币最近经常受到攻击。本文将讨论并分析通缩机制代币受到攻击的原因,并给出相应的防御方案。

在代币中实现通缩机制通常有两种方式,一种是燃烧机制,另一种是反射机制。下面我们将分析这两种实现方式以及可能存在的问题。

燃烧机制

通常,具有燃烧机制的代币将在其_transfer函数中实现燃烧的逻辑。有时候会存在发送者承担手续费的情况。在这种情况下,接收方收到的代币数量不会发生变化,但发送方需要支付更多代币,因为其需要承担手续费。下面是一个简单的例子:

然后我们讨论这种情况下可能存在的风险。

中国银行业协会发起成立可信区块链推进计划银行业组:7月19日消息,可信区块链推进计划银行业组成立暨首次工作会近日在京召开,该组由中国银行业协会、中国信通院发起,联合国内多家银行业机构共同筹建,旨在围绕区块链在银行业的深入应用,通过开展区块链技术应用的研究和标准化,为银行业机构就区块链相关业务开展搭建沟通与合作的平台,为相关业务开展提供指引和参考,并降低相关风险,发挥沟通协调共建作用。[2021/7/19 1:01:51]

如果单看代币合约,我们会发现这种写法其实没有什么问题,但是区块链中有很多复杂的情况,需要我们考虑很多方面。

通常,为了让代币有价格,项目方会在Uniswap、Pancakeswap等去中心化交易所为代币添加流动性。

声音 | Darrell Duffie:数字货币很可能会颠覆银行业的商业模式:斯坦福大学商学院金融学教授Darrell Duffie预测,除非银行想出更快、更便宜的转账方式,否则在未来十年内,以各种形式出现的数字货币很可能颠覆该行业的商业模式。“未来即将到来,这将对那些没有参与该计划的传统银行造成很大的破坏。”这种颠覆不一定来自比特币之类的东西。它更有可能来自与美元或其他主要货币挂钩的稳定币。它也可能来自央行提供的数字货币——而且大多数央行都在考虑这种可能性。或者它可能来自科技公司,比如Facebook,他们想方设法绕过银行。(斯坦福大学商学院)[2019/10/25]

其中,在Uniswap中,有一个函数skim,它会将流动性池中两种代币的余额和储备金的差值转移给调用方,以平衡余额和储备金:

动态 | 意大利银行业协会通过区块链成功测试数据对账:意大利银行也协会(ABI)在一个区块链平台上成功地处理了一整年的本地银行活动的对账数据。该协会在10月12日发布的新闻稿中宣布了Spunta项目系统的成功测试。[2019/10/14]

此时发送方变成了流动性池,当调用_transfer时,流动性池中的代币将被部分销毁,导致代币价格部分上涨。

攻击者利用此特性将代币直接转入流动性池中,然后调用skim函数转出,然后多次重复此操作,导致流动性池中大量代币被燃烧,价格也随之飙升,最后卖出代币获利。

一个真实的攻击案例,winnerdoge(WDOGE):

原中央国家机关工委信息中心主任徐成涛:区块链的核心意义在于第一次能够从技术层面建立信任关系:中新网北京4月27日电 区块链与产业互联网融合应用60人论坛26日晚在北京落幕。原中央国家机关工委信息中心主任徐成涛认为,区块链的核心意义在于,人类有史以来第一次能够从技术层面建立信任关系。“相信区块链能推动我国的电子政务事业更上一层楼,期待越来越多的政务区块链应用案例在我国落地生根,为数字中国、智慧社会建设做出积极的贡献。”[2018/4/27]

在WDOGE合约的_transfer函数中,当block.timestamp>closingTime时,进入else循环。在代码第21行中,转账金额从发送方的余额中扣除,在代码第31行中,发送方又被燃烧了tokensToBurn数量的代币。攻击者利用这种手续费的机制,通过上述的攻击方式窃取流动性池中的所有价值代币(WBNB)。

反射机制

在反射机制中,用户每次交易都会收取手续费,用于奖励持有代币的用户,但不会触发转账,只是单纯修改一个系数。

在这个机制中,用户有两种类型的代币数量,tAmount和rAmount。tAmount为实际代币数量,rAmount为反映后的代币数量,比率为tTotal/rTotal,一般的代码实现如下:

反射机制的代币中一般有一个叫做deliver的函数,会销毁调用者的代币,降低rTotal的值,所以比率会增加,其他用户反射后的代币数量也会增加:

攻击者注意到这个函数,并用它来攻击相应的Uniswap的流动性池。

那他该如何进行利用呢?同样从Uniswap的skim函数开始:

Uniswap中reserve是储备金,与token.balanceOf(address(this))不同。

攻击者先调用deliver函数销毁自己的代币,导致rTotal的值减少,比率随之增加,所以反射后的代币的值也会增加,token.balanceOf(address(this))也会相应变大,与reserve的值出现了差距。

因此,攻击者可以通过调用skim函数转出数量为两者之间差值的代币从而进行获利。

一个真实的攻击案例,BEVONFTArtToken(BEVO):

而当代币合约中存在burn函数时,存在了另外一种相似的攻击手法:

当用户调用burn函数时,自己的代币会被销毁,同时tTotal的值会减少,所以比率会降低,对应的反射后的代币数量也会减少,所以在此时流动性池的代币的数量也会减少,从而代币的价格会上涨。

攻击者利用这个特性通过多次调用burn函数来减少tTotal的值,然后调用流动性池的sync函数同步reserve和balances。最后,流动性池中的代币大幅减少,价格飙升。然后攻击者出售代币以获取利润。

一个真实的攻击案例,SheepToken(SHEEP):

防御方案

通过解读针对燃烧机制和反射机制代币的攻击手法,不难发现攻击者攻击的核心点是操纵流动性池的价格,因此将流动性池的地址加入白名单,不涉及代币的销毁,不参与代币的反射机制,可以避免此类攻击。

总结

本文分析了通缩机制代币的两种实现机制以及针对这两种机制的攻击手段,最后给出了相应的解决方案。在编写合约时,项目方必须考虑代币与去中心化交易所结合的情况,以避免此类攻击。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

金宝趣谈

欧易交易所Probinex (PBX)_OBI:SynchroBitcoin

一、项目简介? Probinex是一个金融科技项目,介绍了金融市场通证化的解决方案,并与加密货币市场的爆炸性增长相统一。除此之外,他们还将以支付服务和投资机会的形式为市场带来创新.

[0:15ms0-3:7ms