Advertisement
Guest User

Untitled

a guest
Oct 21st, 2019
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.11 KB | None | 0 0
  1. pragma solidity 0.5.11;
  2.  
  3. contract FooToken {
  4. uint256 private _totalSupply;
  5. mapping (address => uint256) public _balances;
  6. mapping (address => mapping (address => uint256)) private _allowances;
  7.  
  8. event AssertionFailed(string message);
  9.  
  10. modifier transferEnsures(address _to) {
  11. uint256 oldSum = balanceOf(msg.sender) + balanceOf(_to);
  12.  
  13. _;
  14.  
  15. if (oldSum != balanceOf(msg.sender) + balanceOf(_to)) {
  16. emit AssertionFailed("postcondition of transfer failed");
  17. }
  18.  
  19. assert(oldSum == balanceOf(msg.sender) + balanceOf(_to));
  20. }
  21.  
  22. constructor() public {
  23. _totalSupply = 1000000;
  24. _balances[msg.sender] = 1000000;
  25. }
  26.  
  27. function totalSupply() external view returns (uint256) {
  28. return _totalSupply;
  29. }
  30.  
  31. function balanceOf(address _owner) public view returns (uint256) {
  32. return _balances[_owner];
  33. }
  34.  
  35. function allowance(address _owner, address _spender) external view returns (uint256) {
  36. return _allowances[_owner][_spender];
  37. }
  38.  
  39. function transfer(address _to, uint256 _value) transferEnsures(_to) public returns (bool) {
  40. address from = msg.sender;
  41. require(_value <= _balances[from]);
  42. uint256 newBalanceFrom = _balances[from] - _value;
  43. uint256 newBalanceTo = _balances[_to] + _value;
  44. _balances[from] = newBalanceFrom;
  45. _balances[_to] = newBalanceTo;
  46. emit Transfer(msg.sender, _to, _value);
  47. return true;
  48. }
  49.  
  50. function approve(address _spender, uint256 _value) external returns (bool) {
  51. address owner = msg.sender;
  52. _allowances[owner][_spender] = _value;
  53. emit Approval(owner, _spender, _value);
  54. return true;
  55. }
  56.  
  57. function transferFrom(address _from, address _to, uint256 _value) external returns (bool) {
  58. uint256 allowed = _allowances[_from][msg.sender];
  59. require(_value <= allowed);
  60. require(_value <= _balances[_from]);
  61. _balances[_from] -= _value;
  62. _balances[_to] += _value;
  63. _allowances[_from][msg.sender] -= _value;
  64. emit Transfer(_from, _to, _value);
  65. return true;
  66. }
  67.  
  68. event Transfer(address indexed _from, address indexed _to, uint256 _value);
  69. event Approval(address indexed _owner, address indexed _spender, uint256 _value);
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement