// SPDX-License-Identifier: MIT
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;
uint 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) override public 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 {
_;
}
}
}
우리의 mission은 player에 있는 token을 0으로 만들어야 한다.
이 문제는 ERC20 Token에 관한 문제이다. ERC20에 대해 지식이 부족하다면 빨리 공부하고 오자!! ☞ 여기여기
[BlockChain] ERC20
안뇽안뇽~~ 오랜만이야 나는 rhenus라고 해!! 다들 반갑구 ㅎㅎ 요즘 나는 blockchain에 푹 빠져 있어서 공부하면서 여러 가지 지식을 블로그를 통해 정리하려고 해 그래서 오늘!!!! 주제는 무엇이냐
rhenus9911.tistory.com
Token의 총 발행량은 1,000,000,000,000,000,000,000,000개이다.
그리고 내가 가지고 있는 Token도 1,000,000,000,000,000,000,000,000개이다. 그런데 Token을 출금하려면 10년을 기다려야 한다.
출금을 하려면 approve() 함수와 transferFrom()을 사용하면 된다. 직접 출금할 수 없다면 다른 계좌에 승인을 해주고 그 계좌에서 출금하면 바로 할 수 있다.
그리고 lockTokens modifier가 transfer에 밖에 안 걸려 있으니 transferFrom으로 할 수 있다.
그럼 출금에 대해 승인을 해줘야 한다.
token에 1e24 넣고 출금할 계좌를 설정한다.
그리고 approve로 player한테 1e24를 출금할 수 있도록 승인해 준다.
allowance를 확인해 보면 1e24 코인이 확인된다.