近期Beosin安全团队研究发现,通缩代币引起的安全事件依然频发,造成众多项目方资金的损失,因此,Beosin安全团队准备了这篇详解通缩代币的文章,与大家分享。
本文将对通缩代币与pair结合过程中容易出现的问题以及历史发生的真实通缩代币安全事件两个方面进行介绍,通过本文,我们将彻底搞清楚通缩代币是什么意思以及通缩代币发生安全问题所涉及的原理,使我们在之后的项目中避坑。
过程详情图
TRX单日销毁量达到近期平均通缩水平的3倍:据官方消息,2023年2月6日,TRX单日销毁量达23,930,392枚,通缩18,983,561枚,达到近期平均通缩水平的3倍。截至目前,TRX总销毁量达14,962,704,934枚,总供应量已降至91,736,499,457枚。
当前,波场TRON账户总数突破1.41亿,交易总数突破48亿,总质押量(TVL)突破113亿美元,已成为当下最活跃的区块链之一。随着波场TRON网络交易、账户的增加,以及DApp生态的持续扩大,TRX销毁量多次迎来阶段高峰。[2023/2/8 11:54:29]
销毁问题
该问题主要出现在使用“映射”机制的通缩代币中,这种代币的机制是存在两种代币余额存储变量,分别为tOwned和rOwned,而tOwned存储的是实际代币数量,rOwned存储的是通过currentRate变量放大映射之后的值。
以太坊自合并以来供应量实现通缩超6,408枚ETH,创历史新高:2月2日消息,据ultrasound.money数据显示,以太坊自合并以来,流通供应量实现通缩减少6,406.08枚 ETH,通缩数量创历史新高。[2023/2/2 11:42:30]
rOwned的作用是什么呢?在文章开始说过,通缩代币能激励用户持有代币,这种激励目的使用的方式便是对交易者扣除rOwned值,同时扣除rTotal,这样其他用户rOwned所占rTotal的比例就会被动增加,实现被动收益。
用户查询余额的方式有两种情况,一种是除外地址,直接返回tOwned的值,另一种是非除外地址,返回rOwned/currentRate,而currentRate计算方式为rTotal/tTotal。如果有办法使得rTotal减小,那么用户查询出的实际余额将变大,而如果pair查询余额变大,则可以通过skim函数将多余的代币转移出去。
ARK基金创始人:通缩是比通胀更大的风险:11月24日消息,ARK基金创始人Cathie?Wood重申,通缩是比通胀更大的风险。(金十)[2021/11/24 7:07:37]
而该类通缩代币存在一个deliver()函数,非除外地址可调用,该函数会将调用者的rOwned销毁,并销毁相同数量的_rTotal,使得所有非除外地址的余额查询增加,pair如果非除外的话,便可使用上述方式套利攻击。
3通缩代币相关安全事件剖析
AES安全事件
北京时间2023年1月30日,Beosin旗下BeosinEagleEye安全风险监控、预警与阻断平台监测到,AES遭受到黑客攻击,该项目便存在上述的Skim问题。
AES-USDTpair合约有一个skim函数,该函数可以强制平衡pair的供应量,将多余资金发送给指定地址。
声音 | Mark Yusko创始人:比特币是解决“通缩死亡螺旋”的良方:对于美联储降息,美元持续疲软,Morgan Creek创始人、首席执行官兼首席投资官Mark Yusko表示,在市场动荡期间,对避险资产的需求通常会上升。目前的情况被Yusko称为“通缩死亡螺旋”,它可能使比特币成为一种典型的避险工具,即便这种加密货币处于不温不火的状态。Yusko进一步指出,比特币是解决所有这些问题的良方。(ambcrypto)[2019/10/7]
攻击者在本次攻击过程中,首先向pair里面直接转入了部分AES代币,导致供应量不平衡,从而攻击者调用skim函数时,会将多余的这部分代币转到攻击者指定地址,而攻击者在此处指定了pair合约为接收地址,使得多余的AES又发送到了pair合约,导致强制平衡之后pair合约依然处于不平衡状态,攻击者便可重复调用强制平衡函数,而AES发送过程会调用到AES合约的transfer函数,如下图。
声音 | Thomas Lee:比特币的通缩经济模型或促使其价格上涨:Fundstrat Global Advisers联合创始人Thomas Lee发推文表示,降息=比特币上涨,这看似古怪却持续发生。其认为这是比特币通缩经济模型产生的结果。[2019/8/8]
另外一点,当调用AES代币合约的transfer函数时,若发送者为合约设置的pair合约时,会将一部分费用记录在swapFeeTotal之中,在最后的时候可以统一调用distributeFee函数将swapFeeTotal记录的费用从pair中转出,这里相比上述的过程,攻击者可以不用做sync函数调用操作,而是在最后将费用转移出去之后调用一次sync函数即可。
攻击者经过反复的强制平衡操作,费用记录变得异常大,基本接近pair的总余额,最后攻击者调用distributeFee函数将pair里面的AES转出,pair的AES余额变得非常少,导致攻击者利用少量AES兑换了大量的USDT。
BevoToken安全事件
北京时间2023年1月30日,Beosin旗下BeosinEagleEye安全风险监控、预警与阻断平台监测到,BevoToken遭受到闪电贷攻击,该项目便是上面所说的“映射”机制通缩代币。
由于BevoToken合约的balanceOf函数并非ERC20标准的函数,该函数在经过一些计算处理后再返回余额,而转账或其他操作可能使前后计算返回的余额不一致,当攻击者在swap操作前后可凭借这个问题来操控pair合约的余额,从而skim出多余的代币。
攻击者首先在pancake贷出192.5个BNB,之后换成约302,877个BEVO代币,再调用被攻击合约的deliver函数,此时_rTotal的值减小,_rTotal的值减小会导致_getRate中计算的值偏小,此时balanceOf返回的余额则会偏大,导致攻击者能skim出多余的BEVO。
之后,攻击者再将skim出的代币进行deliver,此时_rTotal的值已经很小了,在进行_getRate计算时,会减去除外地址的rOwned,此值固定且被攻击者在之前通过burn异常放大的,在最开始_rTotal正常的时候,减去该值对结果的影响不大,但是现在_rTotal被攻击者操控得异常小,再减去这个异常放大的固定值后,对结果产生了巨大的影响,第一次deliver导致pair计算结果偏大3倍,而第二次deliver之后,pair计算结果则偏大了数百倍,这也是为什么攻击者获得的代币要比自己销毁的代币多得多的原因。
4Beosin总结
通缩项目在业务设计的时候一定要考虑到与pair交互的情况,自身的通缩机制是否会对pair产生影响。我们也建议相关项目上线前寻找专业的安全审计机构进行全面的代码以及业务的安全审计工作。
作者:追一科技 来源:机器之心 本文全方位地介绍了ChatGPT的能力特征、发展历程以及OpenAI一路走来所坚守的技术路线,并对ChatGPT出现之后NLP领域的范式转换进行了展望.
随着大规模采用和市场越来越成熟,加密货币指数将获得更多关注。上周,Alongside指数协议宣布由A16z牵头、Coinbase加入的1100万美元种子融资.
1.金色观察|Blur飞轮是如何启动的Blur创始人博文公开方法论2023年2月22日,Blur创始人公开自己身份,其名为TieshunRoquerre.
2月28日,YugaLabs宣布将于本周晚些时候基于Ordinal协议在比特币区块链上推出NFT系列TwelveFold,该系列将包含300件限量版生成艺术作品.
DeFi数据 1、DeFi代币总市值:518.31亿美元 DeFi总市值及前十代币数据来源:coingecko2、过去24小时去中心化交易所的交易量38.
从今年1月开始,国内的数藏市场刮起了“域名热”,一些数字藏品平台轮番上线“数字身份”板块,效法区块链公链网络以太坊上的ENS等域名系统,卖起数藏版“Web3域名”.