블록체인

[이더넛] 레벨7 'Force' 풀기

orbing 2021. 8. 12. 22:03

[이더넛] 레벨7 'Force' 풀기

 

[목표]

타겟컨트랙트 'Force'의
잔고를 0 이상으로 만들어라.

 

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

contract Force {/*

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

*/}

 

Force 컨트랙트를 보면

이상한 고양이만 있고 아무것도 없습니다.

 

컨트랙트가 EOA를 통해

이더를 받으려면 

fallback function payable이 있어야

하는데 없습니다.

 

하지만

스마트컨트랙트를 하나 더 만들어서

selfdestruct 시켜 강제로

Force 컨트랙트로 입금되게 하면 가능합니다.

 

 

pragma solidity 0.8.6;

contract force_Deposit {
   
    constructor() payable {
    }
    
    function destroy() public  {
        selfdestruct(payable(0x1117C8c73376DBBFAe2D91Cf9e6BC3FBa39bB50a));
    }
}

 

스마트컨트랙트 force_Deposit에

1웨이를 넣어 배포했습니다.

 

그 다음 destroy 함수를 실행시켜서

Force 스마트컨트랙트에 강제로

1웨이를 입금시켰습니다.

 

 

destroy 함수를 실행 후

Force 스마트컨트랙트의 잔고가

1wei로 증가했습니다.

 

 

 

성공~!