1. library Balances {
    2. function send(mapping(address => uint256) storage balances, address from, address to, uint amount) internal {
    3. require(balances[from] >= amount);
    4. require(balances[to] + amount >= balances[to]);
    5. balances[from] -= amount;
    6. balances[to] += amount;
    7. }
    8. }
    9. contract Token {
    10. mapping(address => uint256) balances;
    11. using Balances for *;
    12. mapping(address => mapping (address => uint256)) allowed;
    13. event Transfer(address from, address to, uint amount);
    14. event Approval(address owner, address spender, uint amount);
    15. function balanceOf(address tokenOwner) public constant returns (uint balance) {
    16. return balances[tokenOwner];
    17. }
    18. function transfer(address to, uint amount) public returns (bool success) {
    19. balances.send(msg.sender, to, amount);
    20. emit Transfer(msg.sender, to, amount);
    21. return true;
    22. }
    23. function transferFrom(address from, address to, uint amount) public returns (bool success) {
    24. require(allowed[from][msg.sender] >= amount);
    25. allowed[from][msg.sender] -= amount;
    26. balances.send(from, to, amount);
    27. emit Transfer(from, to, amount);
    28. return true;
    29. }
    30. function approve(address spender, uint tokens) public returns (bool success) {
    31. require(allowed[msg.sender][spender] == 0, "");
    32. allowed[msg.sender][spender] = tokens;
    33. emit Approval(msg.sender, spender, tokens);
    34. return true;
    35. }
    36. }