-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDEATokenOld.sol
More file actions
80 lines (61 loc) · 3.01 KB
/
DEATokenOld.sol
File metadata and controls
80 lines (61 loc) · 3.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
//Be name
//si deus si dea
pragma solidity ^0.6.12;
import "https://github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/access/AccessControl.sol";
import "./ERC20.sol";
contract DEAToken is ERC20, AccessControl{
using SafeMath for uint256;
bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE");
bytes32 public constant BURNER_ROLE = keccak256("BURNER_ROLE");
bytes32 public constant REBASER_ROLE = keccak256("REBASER_ROLE");
uint256 public rebaseMultiplier = 1e18;
uint256 public scale = 1e18;
event Rebase(uint256 oldCoefficient, uint256 newCoefficient);
constructor() public ERC20("DEA", "DEA") {
_setupRole(DEFAULT_ADMIN_ROLE, msg.sender);
_mint(msg.sender, 166670e18);
}
function mint(address to, uint256 amount) public {
require(hasRole(MINTER_ROLE, msg.sender), "Caller is not a minter");
_mint(to, amount.mul(scale).div(rebaseMultiplier));
}
function burn(address from, uint256 amount) public {
require(hasRole(BURNER_ROLE, msg.sender), "Caller is not a burner");
_burn(from, amount.mul(scale).div(rebaseMultiplier));
}
function rebase(uint256 _rebaseMultiplier) public {
require(hasRole(REBASER_ROLE, msg.sender), "Caller is not a rebaser");
emit Rebase(rebaseMultiplier, _rebaseMultiplier);
rebaseMultiplier = _rebaseMultiplier;
}
function totalSupply() public view override returns (uint256){
return super.totalSupply().mul(rebaseMultiplier).div(scale);
}
function balanceOf(address account) public view override returns (uint256){
return super.balanceOf(account).mul(rebaseMultiplier).div(scale);
}
function allowance(address owner, address spender) public view override returns (uint256){
return super.allowance(owner, spender);
}
function approve(address spender, uint256 amount) public override returns (bool){
return super.approve(spender, amount);
}
function increaseAllowance(address spender, uint256 addedValue) public override returns (bool) {
return super.increaseAllowance(spender, addedValue);
}
function decreaseAllowance(address spender, uint256 subtractedValue) public override returns (bool) {
return super.decreaseAllowance(spender, subtractedValue);
}
function transferFrom(address sender, address recipient, uint256 amount) public override returns (bool) {
_transfer(sender, recipient, amount.mul(scale).div(rebaseMultiplier));
_approve(sender, _msgSender(), allowance(sender, _msgSender()).sub(amount, "ERC20: transfer amount exceeds allowance"));
return true;
}
function transfer(address recipient, uint256 amount) public override returns (bool) {
return super.transfer(recipient, amount.mul(scale).div(rebaseMultiplier));
}
function _beforeTokenTransfer(address from, address to, uint256 value) internal virtual override {
emit Transfer(from, to, value.mul(rebaseMultiplier).div(scale));
}
}
//Dar panah khoda