Guest User

Untitled

a guest
Oct 19th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.40 KB | None | 0 0
  1. pragma solidity ^0.4.11;
  2.  
  3.  
  4. contract BackwardsCompatibleApprove {
  5.  
  6. struct Allowance {
  7. uint amount;
  8. bool used;
  9. }
  10.  
  11. mapping(address => mapping(address => Allowance)) allowed;
  12. mapping(address => uint256) balances;
  13.  
  14. function approve(address _spender, uint _value) public returns (bool success) {
  15. if(allowed[msg.sender][_spender].used){
  16. allowed[msg.sender][_spender].amount = 0;
  17. allowed[msg.sender][_spender].used=false;
  18. Approval(msg.sender,_spender,0);
  19. return false;
  20. } else {
  21. allowed[msg.sender][_spender].amount=_value;
  22. Approval(msg.sender,_spender,_value);
  23. return true;
  24. }
  25. }
  26.  
  27. function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
  28. require(_to != address(0));
  29. require(_value <= balances[_from]);
  30. require(_value <= allowed[_from][msg.sender].amount);
  31.  
  32. balances[_from] -= _value;
  33. balances[_to] += _value;
  34. allowed[_from][msg.sender].amount -= _value;
  35.  
  36. if(_value > 0){
  37. allowed[_from][msg.sender].used = true;
  38. }
  39.  
  40. Transfer(_from, _to, _value);
  41. return true;
  42. }
  43.  
  44. event Transfer(address indexed _from, address indexed _to, uint _value);
  45. event Approval(address indexed _owner, address indexed _spender, uint _value);
  46.  
  47. }
Add Comment
Please, Sign In to add comment