Guest User

Token

a guest
May 29th, 2021
884
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.05 KB | None | 0 0
  1. pragma solidity ^0.6.0;
  2.  
  3. interface IERC20 {
  4.  
  5. function totalSupply() external view returns (uint256);
  6. function balanceOf(address account) external view returns (uint256);
  7. function allowance(address owner, address spender) external view returns (uint256);
  8.  
  9. function transfer(address recipient, uint256 amount) external returns (bool);
  10. function approve(address spender, uint256 amount) external returns (bool);
  11. function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
  12.  
  13.  
  14. event Transfer(address indexed from, address indexed to, uint256 value);
  15. event Approval(address indexed owner, address indexed spender, uint256 value);
  16. }
  17.  
  18.  
  19. contract Token is IERC20 {
  20.  
  21. string public constant name = "NamaToken";
  22. string public constant symbol = "Symbol";
  23. uint8 public constant decimals = 18;
  24.  
  25.  
  26. event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
  27. event Transfer(address indexed from, address indexed to, uint tokens);
  28.  
  29.  
  30. mapping(address => uint256) balances;
  31.  
  32. mapping(address => mapping (address => uint256)) allowed;
  33.  
  34. uint256 totalSupply_;
  35.  
  36. using SafeMath for uint256;
  37.  
  38.  
  39. constructor(uint256 total) public {
  40. totalSupply_ = total;
  41. balances[msg.sender] = totalSupply_;
  42. }
  43.  
  44. function totalSupply() public override view returns (uint256) {
  45. return totalSupply_;
  46. }
  47.  
  48. function balanceOf(address tokenOwner) public override view returns (uint256) {
  49. return balances[tokenOwner];
  50. }
  51.  
  52. function transfer(address receiver, uint256 numTokens) public override returns (bool) {
  53. require(numTokens <= balances[msg.sender]);
  54. balances[msg.sender] = balances[msg.sender].sub(numTokens);
  55. balances[receiver] = balances[receiver].add(numTokens);
  56. emit Transfer(msg.sender, receiver, numTokens);
  57. return true;
  58. }
  59.  
  60. function approve(address delegate, uint256 numTokens) public override returns (bool) {
  61. allowed[msg.sender][delegate] = numTokens;
  62. emit Approval(msg.sender, delegate, numTokens);
  63. return true;
  64. }
  65.  
  66. function allowance(address owner, address delegate) public override view returns (uint) {
  67. return allowed[owner][delegate];
  68. }
  69.  
  70. function transferFrom(address owner, address buyer, uint256 numTokens) public override returns (bool) {
  71. require(numTokens <= balances[owner]);
  72. require(numTokens <= allowed[owner][msg.sender]);
  73.  
  74. balances[owner] = balances[owner].sub(numTokens);
  75. allowed[owner][msg.sender] = allowed[owner][msg.sender].sub(numTokens);
  76. balances[buyer] = balances[buyer].add(numTokens);
  77. emit Transfer(owner, buyer, numTokens);
  78. return true;
  79. }
  80. }
  81.  
  82. library SafeMath {
  83. function sub(uint256 a, uint256 b) internal pure returns (uint256) {
  84. assert(b <= a);
  85. return a - b;
  86. }
  87.  
  88. function add(uint256 a, uint256 b) internal pure returns (uint256) {
  89. uint256 c = a + b;
  90. assert(c >= a);
  91. return c;
  92. }
  93. }
  94.  
Advertisement
Add Comment
Please, Sign In to add comment