相关文章:
Rust智能合约养成日记合约状态数据定义与方法实现
Rust智能合约养成日记编写Rust智能合约单元测试
Rust智能合约养成日记Rust智能合约部署,函数调用及Explorer的使用
Rust智能合约养成日记Rust智能合约整数溢出
这一期中我们将向大家展示Rust合约中重入攻击,并提供给开发者相应的建议。本文中的相关代码,已上传至BlockSec的Github上,读者可以自行下载:https://github
...}
在合约B中,withdraw函数开头处的assert!(self
self
...}由于上一次进入withdraw以来,victim合约中的attacker_balance还没有更新,所以还是100,因此此时仍旧可以通过assert!(self
};}
此时的执行效果如下:
$nodeTriple_Contracts_Reentrancy
}Victim::attacker_balance:40FT_Token::attacker_balance:60FT_Token::victim_balance:140
可见由于此时的Victim合约在withdraw的时候事先更新了用户的余额,在调用外部的FungibleToken实施转账。因此当第二次重入了withdraw的时候,Victim合约中保存的attacker_balance已经更新为40,因此将无法通过assert!(self
}Victim::attacker_balance:40FT_Token::attacker_balance:60FT_Token::victim_balance:140
可见限制跨合约函数调用时的GasLimit也能起到防止重入攻击的效果。
本期总结和预告
这一期我们讲述了rust智能合约中的整数溢出问题,同时给出了建议,在书写代码时尽量先更新状态,再执行转账操作,并且设定合适的gas值,可以有效抵御重入攻击,下一期我们将讲述rust智能合约中的DoS问题,敬请关注。
标签:USTANCbalanceALAustc币重新与美元挂钩吗Sheesha FinanceBalance.FinanceVALAS币
如何通过Forex交易赚钱 什么是Forex交易? Forex交易是如何进行的?在Forex市场,你购买或是卖出货币。在Forex市场进行交易是很简单的,其中的原理和在其他金融市场进行交易类似.
在这篇文章中,来自UnstoppableFinance的特邀作者PatrickHansen讨论了欧盟在网络时代的斗争.
致各位关注《产业区块链·正当时》榜单活动的企业、粉丝朋友们:欧洲首只现货比特币ETF自8月中旬上市以来已吸引超过100万美元资金:金色财经报道.
“波卡知识图谱”是我们针对波卡从零到一的入门级文章,我们尝试从波卡最基础的部分讲起,为大家提供全方位了解波卡的内容,当然这是一项巨大的工程,也充满了挑战.
作者:@bitouq 编辑:DeFi之道 今天总结一个看似没有那么热,但是蛮有意思的一个生态#BOBA,这么一个自带“波霸”meme的生态,引出一些对L2赛道的思考.
引言 在一堆不同的项目中,我们需要允许用户从EVM存入某种链下状态,该状态在链上表示为Merkle累加器。该Merkle树根据有效性证明或欺诈证明+同步假设进行更新.