Wault Finance 攻击学习

本文分析了一种智能合约攻击策略,涉及WUSDMaster合约的stake和redeem函数。攻击者通过借取wusd,先赎回usdt并获取wex,然后购买更多wex,再质押usdt获取wusd,利用价格上涨卖出wex,从而获利。此攻击利用了wex价格上升和质押赎回机制的差异。

合约代码:
WUSDMaster:https://bscscan.com/address/0xa79fe386b88fbee6e492eeb76ec48517d1ec759a#code
攻击交易:
https://bscscan.com/tx/0x31262f15a5b82999bf8d9d0f7e58dcb1656108e6031a2797b612216a95e1670e

合约WUSDMaster中函数 stake将质押的usdt的10%用来购买wex代币,同时1:1生成wusd。

 function stake(uint256 amount) external nonReentrant {
        require(amount <= maxStakeAmount, 'amount too high');
        usdt.safeTransferFrom(msg.sender, address(this), amount);
        if(feePermille > 0) {
            uint256 feeAmount = amount * feePermille / 1000;
            usdt.safeTransfer(treasury, feeAmount);
            amount = amount - feeAmount;
        }
        uint256 wexAmount = amount * wexPermille / 1000;
        usdt.approve(address(wswapRouter), wexAmount);
        wswapRouter.swapExactTokensForTokensSupportingFeeOnTransferTokens(
            wexAmount,
            0,
            swapPath,
            address(this),
            block.timestamp
        );
        wusd.mint(msg.sender, amount);
        
        emit Stake(msg.sender, amount);
    }

在函数redeem中,返回质押的89.3%的usdt。以及WUSDMaster合约内百分比的wex代币.

function redeem(uint256 amount) external nonReentrant {
        uint256 usdtTransferAmount = amount * (1000 - wexPermille - treasuryPermille) / 1000;
        uint256 usdtTreasuryAmount = amount * treasuryPermille / 1000;
        uint256 wexTransferAmount = wex.balanceOf(address(this)) * amount / wusd.totalSupply();
        wusd.burn(msg.sender, amount);
        usdt.safeTransfer(treasury, usdtTreasuryAmount);
        usdt.safeTransfer(msg.sender, usdtTransferAmount);
        wex.safeTransfer(msg.sender, wexTransferAmount);
        
        emit Redeem(msg.sender, amount);
    }

(理想情况下)如果wex价值在历史中一直上升同时有人在不断的stake,同时没有人redeem,攻击者通过质押后提取,用10.7%usdt购买wex,(wex的价格为历史的平均价格,)再卖出wex,攻击者就能盈利。但是质押后赎回会因为wusd.totalSupply()的增加分到wex数量变少,如果能借取wusd。先赎回再质押,就能花费相同的usdt获得更多的wex,同时因为质押会提高wex的价格.所以提前购买大量的wex,再质押提升价格后再卖出wex,就能再获得更多的usdt。


攻击者攻击流程:

  1. 借取wusd 赎回usdt ,
  2. 获得usdt 及wex
  3. 使用usdt购买wex
  4. 质押usdt 获得wusd
  5. 卖出wex返还wusd
基于NSGA-III算法求解微电网多目标优化调度研究(Matlab代码实现)内容概要:本文主要介绍基于NSGA-III算法求解微电网多目标优化调度的研究,并提供了完整的Matlab代码实现。研究聚焦于微电网系统中多个相互冲突的目标(如运行成本最小化、碳排放最低、可再生能源利用率最大化等)之间的权衡优化问题,采用NSGA-III(非支配排序遗传算法III)这一先进的多目标进化算法进行求解。文中详细阐述了微电网的数学模型构建、多目标优化问题的定义、NSGA-III算法的核心机制及其在该问题上的具体应用流程,并通过仿真案例验证了算法的有效性和优越性。此外,文档还提及该资源属于一个更广泛的MATLAB仿真辅导服务体系,涵盖智能优化、机器学习、电力系统等多个科研领域。; 适合人群:具备一定电力系统基础知识和Matlab编程能力的研究生、科研人员及工程技术人员。; 使用场景及目标:①学习和掌握NSGA-III等先进多目标优化算法的原理与实现;②研究微电网能量管理、多目标优化调度策略;③获取可用于科研或课程设计的Matlab代码参考,快速搭建仿真模型。; 阅读建议:此资源以算法实现为核心,建议读者在学习时结合代码与理论背景,深入理解目标函数的设计、约束条件的处理以及NSGA-III算法参数的设置。同时,可利用文中提供的网盘链接获取更多相关资源,进行横向对比和扩展研究。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值