uint private unlocked = 1;
modifier lock() {
require(unlocked == 1, 'Pancake: LOCKED');
unlocked = 0;
_;
unlocked = 1;
}
evm不是不具备并发性吗?所有的交易都按队列打包,交易所中用户添加流动性或兑换时候,在router合约进行转账,在交易对合约进行更新数据,本质不是同一笔交易吗?为什么会担心出现多个用户通知转账给交易合约的情况?
有大牛帮忙解答下吗?
你的思路是对的..每一笔交易都是队列的方式进行的
你说有没有一种情况, 就是在交易对合约中 有一个 swap() 接口..这个接口的最后一个参数是一个可执行的bytes(用来做闪电贷的)...如果这个bytes calldata 指向的是我自己写的一个合约接口..接口里面又实现了再次进入交易对的swap方法..那么就可以实现重入问题...而且swap()的这个交易接口...是先转币给用户(因为要实现闪电贷)...最后在检查用户是不是转进来的对应的代币.. 所以swap中的lock 在正常交易的场景下貌似没有任何作用..但是为了避免 最后一个 data 参数 "闪电贷" 所带来的重入危险..