solidity

21.07.23 Token Role

슈팅스타제제 2021. 7. 26. 19:52

✔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