SimpleToken 을 생성하여 0.001 이더가 넣은 후 해당 토큰 계약 주소를 잃어버렸다.
잃어버린 계약 주소에서 0.001 이더를 회수하거나 제거하라.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Recovery {
//generate tokens
function generateToken(string memory _name, uint256 _initialSupply) public {
new SimpleToken(_name, msg.sender, _initialSupply);
}
}
contract SimpleToken {
string public name;
mapping(address => uint256) public balances;
// constructor
constructor(string memory _name, address _creator, uint256 _initialSupply) {
name = _name;
balances[_creator] = _initialSupply;
}
// collect ether in return for tokens
receive() external payable {
balances[msg.sender] = msg.value * 10;
}
// allow transfers of tokens
function transfer(address _to, uint256 _amount) public {
require(balances[msg.sender] >= _amount);
balances[msg.sender] = balances[msg.sender] - _amount;
balances[_to] = _amount;
}
// clean up after ourselves
function destroy(address payable _to) public {
selfdestruct(_to);
}
}
Recovery contract의 주소는 문제에서 제공해주지만, SimpleToken contract의 주소는 어느 곳에서도 발견할 수 없다.
→ 그러므로 일단 SimpleToken contract의 주소부터 찾자

Recovery contract 주소를 검색하여 Internal Transactions(EVM 내부 트랜잭션) 을 클릭ㄱㄱ

이런식으로 2가지 내부 트랜잭션이 보인다
generateToken() 을 호출하여 SimpleToken contract 가 배포될 때 생긴 트랜잭션여기서 위에 있는 트랜잭션의 To 부분에 Contract Creation 을 클릭하면