✔DEFAULT_ADMIN_ROLE
MINTER_ROLE과 BURNER_ROLE의 권한을 하나로 합쳐서 DEFAULT_ADMIN_ROLE을 만든다.
ㅔ// SPDX-License-Identifier: MIT
pragma solidity >=0.4.22 <0.9.0;
//openzeppelin code 불러오기
import "@openzeppelin/contracts/access/AccessControl.sol";
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
//role을 주기 위한 source code 불러오기
import "@openzeppelin/contracts/access/Ownable.sol";
//Airdrop 기능을 위한 source code 불러오기
import "@openzeppelin/contracts/token/ERC20/utils/TokenTimelock.sol";
//Ownable 상속 추가
contract MyToken is ERC20, AccessControl, Ownable{
//정의한 MINTER_ROLE과 BURNER_ROLE 주석 처리!
constructor()ERC20("MyToken", "MTK"){
//바꾼 부분
_setupRole(DEFAULT_ADMIN_ROLE, msg.sender);
}
}
mint, burn 함수에서 위에서 추가한 DEFAULT_ADMIN_ROLE에 대한 onlyRole 조건을 추가해준다.
이 함수는 public 이라도 owner에 해당하는 msg.sender만 권한을 주므로써 require() 함수를 사용할 필요가 없다. 따라서 require()는 주석 처리해준다.
function mint(address to, uint256 amount) public onlyRole(DEFAULT_ADMIN_ROLE){
//require(hasRole(MINTER_ROLE, msg.sender), "Caller is not a minter");
_mint(to, amount);
}
function burn(address from, uint256 amount) public onlyRole(DEFAULT_ADMIN_ROLE){
//require(hasRole(BURNER_ROLE, msg.sender), "Caller is not a burner");
_burn(from, amount);
}
✔mintTimeLocked
이 함수는 releaseTime에 대한 정확한 입력값이 뭔지 모르겠고
address에 timelock 인자에 대한 값이 어떻게 다른지도 모르겠고
releaseTime의 기준이 UTC+0이라고 하면 metamask releaseTime 입력값을 뭐라고 넣어야 하는지도 모르겠어서
일단 보류한다.
function mintTimeLocked(address _to, uint256 _amount, uint256 _releaseTime) public onlyOwner returns(TokenTimelock){
TokenTimelock timelock = new TokenTimelock(this, _to, _releaseTime);
mint(address(timelock), _amount);
return timelock;
}
'solidity' 카테고리의 다른 글
21.07.28 diamond problem (0) | 2021.07.28 |
---|---|
21.07.27 ERC-20 Token Contract (0) | 2021.07.28 |
21.07.22 Mint & Burn Token (2) | 2021.07.24 |
21.07.15 import, inheritance, storage, memory (0) | 2021.07.16 |
21.07.15 mapping, msg.sender, require (0) | 2021.07.16 |