pancakePair中的修饰器lock在什么情况下生效?

uint private unlocked = 1;
modifier lock() {
    require(unlocked == 1, 'Pancake: LOCKED');
    unlocked = 0;
    _;
    unlocked = 1;
}

evm不是不具备并发性吗?所有的交易都按队列打包,交易所中用户添加流动性或兑换时候,在router合约进行转账,在交易对合约进行更新数据,本质不是同一笔交易吗?为什么会担心出现多个用户通知转账给交易合约的情况?

有大牛帮忙解答下吗?

请先 登录 后评论

最佳答案 2022-08-03 14:22

你的思路是对的..每一笔交易都是队列的方式进行的

你说有没有一种情况, 就是在交易对合约中 有一个 swap() 接口..这个接口的最后一个参数是一个可执行的bytes(用来做闪电贷的)...如果这个bytes calldata 指向的是我自己写的一个合约接口..接口里面又实现了再次进入交易对的swap方法..那么就可以实现重入问题...而且swap()的这个交易接口...是先转币给用户(因为要实现闪电贷)...最后在检查用户是不是转进来的对应的代币.. 所以swap中的lock 在正常交易的场景下貌似没有任何作用..但是为了避免 最后一个 data 参数 "闪电贷" 所带来的重入危险..

请先 登录 后评论

其它 1 个回答

  • 2 关注
  • 0 收藏,205 浏览
  • yunlong 提出于 2022-08-03 09:47