下面我用一段简捷的代码说明可重入进攻是如何产生的(告诫,以下是代码请勿利用),下面是 Defi 应用最常见的逻辑,,deposit 函数用来存款,存款时会记录下用户的存款金额,withdraw 函数用来取款,取款在余额的基本上加上一个利率。
interface IToken {
}
在交互进程中,存在 3 个脚色,用户、Defi合约、Token合约, 用户存款和取款的时序图是这样的:
可重入进攻是怎么产生的? } address to,
}
bytes calldata data,
return true;
} }
}
function tokensToSend(
function deposit(uint256 amount) external {
uint256 amount,
function tokensReceived(
balances[msg.sender] = balance;
假如发送者和吸收者实现了ERC777的转账接口, 上面的存款挪用时序图就是这样的:
uint balance = balances[msg.sender] + amount;
if(token.transferFrom(msg.sender, this, amount)){
balances[msg.sender] = 0;
}
// 取回后余额配置为 0
mapping(address => uint) balances;周末两天Uniswap 和 Lendf.me 都产生了黑客进攻事件,都是Defi 应用与 ERC777 组合应用导致可重入裂痕,个中导致 Lendf.me 损失抵押资产千万美元。}
if (有发送者接话柄现) {
IToken token;
产生这样的工作,相信是所有从业者不肯意看到的,本文也无意针对Lendf.me,你们也是受害者,只是看到有人甩锅给 ERC777 ,不忍从
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。