Advertisement
Guest User

Untitled

a guest
Oct 18th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.90 KB | None | 0 0
  1. pragma solidity ^0.4.24;
  2. contract ERC20 {
  3. mapping(address => uint256) public balances;
  4. mapping(address => mapping (address => uint256)) public allowed;
  5. string public name;
  6. string public symbol;
  7. uint8 public decimals;
  8. uint256 public totalSupply;
  9. uint256 private constant MAX_UINT256 = 2**256 -1 ;
  10. event Transfer(address indexed from, address indexed to, uint tokens);
  11. event Approval(address indexed tokenOwner, address indexed spender, uint tokens);
  12. event Burn(address indexed burner, uint256 value);
  13. constructor(
  14. uint256 _initialAmount,
  15. string _tokenName,
  16. uint8 _decimalUnits,
  17. string _tokenSymbol
  18. ) public {
  19. balances[msg.sender] = _initialAmount;
  20. totalSupply = _initialAmount;
  21. name = _tokenName;
  22. decimals = _decimalUnits;
  23. symbol = _tokenSymbol;
  24. }
  25. function transfer(
  26. address _to,
  27. uint256 _value
  28. ) public returns (bool) {
  29. require(balances[msg.sender] >= _value);
  30. require(msg.sender == _to || balances[_to] <= MAX_UINT256 - _value);
  31. balances[msg.sender] -= _value;
  32. balances[_to] += _value;
  33. emit Transfer(msg.sender, _to, _value);
  34. return true;
  35. }
  36. function name() public view returns (string){
  37. return name;
  38. }
  39. function symbol() public view returns (string){
  40. return symbol;
  41. }
  42. function decimals() public view returns (uint8){
  43. return decimals;
  44. }
  45. function totalSupply() public view returns (uint256){
  46. return totalSupply;
  47. }
  48. function transferFrom(
  49. address _from,
  50. address _to,
  51. uint256 _value
  52. ) public returns (bool) {
  53. uint256 allowance = allowed[_from][msg.sender];
  54. require(balances[_from] >= _value);
  55. require(_from == _to || balances[_to] <= MAX_UINT256 -_value);
  56. require(allowance >= _value);
  57. balances[_from] -= _value;
  58. balances[_to] += _value;
  59. if (allowance < MAX_UINT256) {
  60. allowed[_from][msg.sender] -= _value;
  61. }
  62. emit Transfer(_from, _to, _value);
  63. return true;
  64. }
  65. function balanceOf(
  66. address _owner
  67. ) public view returns (uint256) {
  68. return balances[_owner];
  69. }
  70. function approve(
  71. address _spender,
  72. uint256 _value
  73. ) public returns (bool) {
  74. allowed[msg.sender][_spender] = _value;
  75. emit Approval(msg.sender, _spender, _value);
  76. return true;
  77. }
  78. function allowance(
  79. address _owner,
  80. address _spender
  81. ) public view returns (uint256) {
  82. return allowed[_owner][_spender];
  83. }
  84. function burn(
  85. uint256 _value
  86. ) public {
  87. require(_value <= balances[msg.sender]);
  88. require(_value <= totalSupply);
  89. balances[msg.sender] -= _value;
  90. totalSupply -= _value;
  91. emit Burn(msg.sender, _value);
  92. emit Transfer(msg.sender, 0, _value);
  93. }
  94. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement