내 계정은 전체 토큰을 가지고 있는 계정이다
transfer() 함수에는 timeLock 제한이 있어서 10년이 지나야 실행 가능하니 다른 방법으로 전송할 방법을 찾아야한다.
player 주소의 토큰 잔액을 0으로 만들어라
pragma solidity ^0.8.0;
import "openzeppelin-contracts-08/token/ERC20/ERC20.sol";
contract NaughtCoin is ERC20 {
// string public constant name = 'NaughtCoin';
// string public constant symbol = '0x0';
// uint public constant decimals = 18;
uint256 public timeLock = block.timestamp + 10 * 365 days;
uint256 public INITIAL_SUPPLY;
address public player;
constructor(address _player) ERC20("NaughtCoin", "0x0") {
player = _player;
INITIAL_SUPPLY = 1000000 * (10 ** uint256(decimals()));
// _totalSupply = INITIAL_SUPPLY;
// _balances[player] = INITIAL_SUPPLY;
_mint(player, INITIAL_SUPPLY);
emit Transfer(address(0), player, INITIAL_SUPPLY);
}
function transfer(address _to, uint256 _value) public override lockTokens returns (bool) {
super.transfer(_to, _value);
}
// Prevent the initial owner from transferring tokens until the timelock has passed
modifier lockTokens() {
if (msg.sender == player) {
require(block.timestamp > timeLock);
_;
} else {
_;
}
}
}
uint256 public timeLock = block.timestamp + 10 * 365 days;
timeLock이 block.timestamp에 10년을 곱한 값이 들어가고
modifier lockTokens() {
if (msg.sender == player) {
require(block.timestamp > timeLock);
_;
} else {
_;
}
}
require(block.timestamp > timeLock); 부분을 살펴보니 컨트랙트 배포 후 10년이 지나면 문제가 풀릴거다!!
→ 네 말도 안되는 문제 풀이 과정입니다.
modifier lockTokens() {
if (msg.sender == player) {
require(block.timestamp > timeLock);
_;
} else {
_;
}
}
player 의 값을 조회해보니 나의 EOA 주소가 저장되어 있다.