prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Solidity Compatible ERC20 broken
  The [Solidity compatible ERC20 token](https://github.com/ethereum/vyper/blob/master/examples/tokens/ERC20_solidity_compatible/ERC20.v.py) no longer compiles, since it was not updated after the removal of separate uint256 math functions. This is a super easy fix. I can do it later in the week if no one gets to it before then. 
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `examples/tokens/ERC20_solidity_compatible/ERC20.v.py`
  Content:
  ```
  1 # Solidity-Compatible EIP20/ERC20 Token
  2 # Implements https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
  3 # Author: Phil Daian
  4 
  5 # The use of the uint256 datatype as in this token is not
  6 # recommended, as it can pose security risks.
  7 
  8 # This token is intended as a proof of concept towards
  9 # language interoperability and not for production use.
  10 
  11 # Events issued by the contract
  12 Transfer: event({_from: indexed(address), _to: indexed(address), _value: uint256})
  13 Approval: event({_owner: indexed(address), _spender: indexed(address), _value: uint256})
  14 
  15 balances: uint256[address]
  16 allowances: (uint256[address])[address]
  17 num_issued: uint256
  18 
  19 @public
  20 @payable
  21 def deposit():
  22     _value: uint256 = convert(msg.value, 'uint256')
  23     _sender: address = msg.sender
  24     self.balances[_sender] = uint256_add(self.balances[_sender], _value)
  25     self.num_issued = uint256_add(self.num_issued, _value)
  26     # Fire deposit event as transfer from 0x0
  27     log.Transfer(0x0000000000000000000000000000000000000000, _sender, _value)
  28 
  29 @public
  30 def withdraw(_value : uint256) -> bool:
  31     _sender: address = msg.sender
  32     # Make sure sufficient funds are present, op will not underflow supply
  33     # implicitly through overflow protection
  34     self.balances[_sender] = uint256_sub(self.balances[_sender], _value)
  35     self.num_issued = uint256_sub(self.num_issued, _value)
  36     send(_sender, as_wei_value(convert(_value, 'int128'), 'wei'))
  37     # Fire withdraw event as transfer to 0x0
  38     log.Transfer(_sender, 0x0000000000000000000000000000000000000000, _value)
  39     return true
  40 
  41 @public
  42 @constant
  43 def totalSupply() -> uint256:
  44     return self.num_issued
  45 
  46 @public
  47 @constant
  48 def balanceOf(_owner : address) -> uint256:
  49     return self.balances[_owner]
  50 
  51 @public
  52 def transfer(_to : address, _value : uint256) -> bool:
  53     _sender: address = msg.sender
  54     # Make sure sufficient funds are present implicitly through overflow protection
  55     self.balances[_sender] = uint256_sub(self.balances[_sender], _value)
  56     self.balances[_to] = uint256_add(self.balances[_to], _value)
  57     # Fire transfer event
  58     log.Transfer(_sender, _to, _value)
  59     return true
  60 
  61 @public
  62 def transferFrom(_from : address, _to : address, _value : uint256) -> bool:
  63     _sender: address = msg.sender
  64     allowance: uint256 = self.allowances[_from][_sender]
  65     # Make sure sufficient funds/allowance are present implicitly through overflow protection
  66     self.balances[_from] = uint256_sub(self.balances[_from], _value)
  67     self.balances[_to] = uint256_add(self.balances[_to], _value)
  68     self.allowances[_from][_sender] = uint256_sub(allowance, _value)
  69     # Fire transfer event
  70     log.Transfer(_from, _to, _value)
  71     return true
  72 
  73 @public
  74 def approve(_spender : address, _value : uint256) -> bool:
  75     _sender: address = msg.sender
  76     self.allowances[_sender][_spender] = _value
  77     # Fire approval event
  78     log.Approval(_sender, _spender, _value)
  79     return true
  80 
  81 @public
  82 @constant
  83 def allowance(_owner : address, _spender : address) -> uint256:
  84     return self.allowances[_owner][_spender]
  85 
  86
  ```
  --- END FILES ---
  
  Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.
  
  Here is an example:
  
  ```diff
  diff --git a/examples/server_async.py b/examples/server_async.py
  --- a/examples/server_async.py
  +++ b/examples/server_async.py
  @@ -313,4 +313,4 @@
   
   
   if __name__ == "__main__":
  -    asyncio.run(run_async_server("."), debug=True)
  +    asyncio.run(run_async_server(), debug=True)
  diff --git a/examples/server_sync.py b/examples/server_sync.py
  --- a/examples/server_sync.py
  +++ b/examples/server_sync.py
  @@ -313,5 +313,5 @@
   
   
   if __name__ == "__main__":
  -    server = run_sync_server(".")
  +    server = run_sync_server()
       server.shutdown()
  
  ```
  
golden_diff: diff --git a/examples/tokens/ERC20_solidity_compatible/ERC20.v.py b/examples/tokens/ERC20_solidity_compatible/ERC20.v.py
  --- a/examples/tokens/ERC20_solidity_compatible/ERC20.v.py
  +++ b/examples/tokens/ERC20_solidity_compatible/ERC20.v.py
  @@ -21,8 +21,8 @@
   def deposit():
       _value: uint256 = convert(msg.value, 'uint256')
       _sender: address = msg.sender
  -    self.balances[_sender] = uint256_add(self.balances[_sender], _value)
  -    self.num_issued = uint256_add(self.num_issued, _value)
  +    self.balances[_sender] = self.balances[_sender] + _value
  +    self.num_issued = self.num_issued + _value
       # Fire deposit event as transfer from 0x0
       log.Transfer(0x0000000000000000000000000000000000000000, _sender, _value)
   
  @@ -31,12 +31,12 @@
       _sender: address = msg.sender
       # Make sure sufficient funds are present, op will not underflow supply
       # implicitly through overflow protection
  -    self.balances[_sender] = uint256_sub(self.balances[_sender], _value)
  -    self.num_issued = uint256_sub(self.num_issued, _value)
  +    self.balances[_sender] = self.balances[_sender] - _value
  +    self.num_issued = self.num_issued - _value
       send(_sender, as_wei_value(convert(_value, 'int128'), 'wei'))
       # Fire withdraw event as transfer to 0x0
       log.Transfer(_sender, 0x0000000000000000000000000000000000000000, _value)
  -    return true
  +    return True
   
   @public
   @constant
  @@ -52,23 +52,23 @@
   def transfer(_to : address, _value : uint256) -> bool:
       _sender: address = msg.sender
       # Make sure sufficient funds are present implicitly through overflow protection
  -    self.balances[_sender] = uint256_sub(self.balances[_sender], _value)
  -    self.balances[_to] = uint256_add(self.balances[_to], _value)
  +    self.balances[_sender] = self.balances[_sender] - _value
  +    self.balances[_to] = self.balances[_to] + _value
       # Fire transfer event
       log.Transfer(_sender, _to, _value)
  -    return true
  +    return True
   
   @public
   def transferFrom(_from : address, _to : address, _value : uint256) -> bool:
       _sender: address = msg.sender
       allowance: uint256 = self.allowances[_from][_sender]
       # Make sure sufficient funds/allowance are present implicitly through overflow protection
  -    self.balances[_from] = uint256_sub(self.balances[_from], _value)
  -    self.balances[_to] = uint256_add(self.balances[_to], _value)
  -    self.allowances[_from][_sender] = uint256_sub(allowance, _value)
  +    self.balances[_from] = self.balances[_from] - _value
  +    self.balances[_to] = self.balances[_to] + _value
  +    self.allowances[_from][_sender] = allowance - _value
       # Fire transfer event
       log.Transfer(_from, _to, _value)
  -    return true
  +    return True
   
   @public
   def approve(_spender : address, _value : uint256) -> bool:
  @@ -76,7 +76,7 @@
       self.allowances[_sender][_spender] = _value
       # Fire approval event
       log.Approval(_sender, _spender, _value)
  -    return true
  +    return True
   
   @public
   @constant
  
verification_info: {"golden_diff": "diff --git a/examples/tokens/ERC20_solidity_compatible/ERC20.v.py b/examples/tokens/ERC20_solidity_compatible/ERC20.v.py\n--- a/examples/tokens/ERC20_solidity_compatible/ERC20.v.py\n+++ b/examples/tokens/ERC20_solidity_compatible/ERC20.v.py\n@@ -21,8 +21,8 @@\n def deposit():\n     _value: uint256 = convert(msg.value, 'uint256')\n     _sender: address = msg.sender\n-    self.balances[_sender] = uint256_add(self.balances[_sender], _value)\n-    self.num_issued = uint256_add(self.num_issued, _value)\n+    self.balances[_sender] = self.balances[_sender] + _value\n+    self.num_issued = self.num_issued + _value\n     # Fire deposit event as transfer from 0x0\n     log.Transfer(0x0000000000000000000000000000000000000000, _sender, _value)\n \n@@ -31,12 +31,12 @@\n     _sender: address = msg.sender\n     # Make sure sufficient funds are present, op will not underflow supply\n     # implicitly through overflow protection\n-    self.balances[_sender] = uint256_sub(self.balances[_sender], _value)\n-    self.num_issued = uint256_sub(self.num_issued, _value)\n+    self.balances[_sender] = self.balances[_sender] - _value\n+    self.num_issued = self.num_issued - _value\n     send(_sender, as_wei_value(convert(_value, 'int128'), 'wei'))\n     # Fire withdraw event as transfer to 0x0\n     log.Transfer(_sender, 0x0000000000000000000000000000000000000000, _value)\n-    return true\n+    return True\n \n @public\n @constant\n@@ -52,23 +52,23 @@\n def transfer(_to : address, _value : uint256) -> bool:\n     _sender: address = msg.sender\n     # Make sure sufficient funds are present implicitly through overflow protection\n-    self.balances[_sender] = uint256_sub(self.balances[_sender], _value)\n-    self.balances[_to] = uint256_add(self.balances[_to], _value)\n+    self.balances[_sender] = self.balances[_sender] - _value\n+    self.balances[_to] = self.balances[_to] + _value\n     # Fire transfer event\n     log.Transfer(_sender, _to, _value)\n-    return true\n+    return True\n \n @public\n def transferFrom(_from : address, _to : address, _value : uint256) -> bool:\n     _sender: address = msg.sender\n     allowance: uint256 = self.allowances[_from][_sender]\n     # Make sure sufficient funds/allowance are present implicitly through overflow protection\n-    self.balances[_from] = uint256_sub(self.balances[_from], _value)\n-    self.balances[_to] = uint256_add(self.balances[_to], _value)\n-    self.allowances[_from][_sender] = uint256_sub(allowance, _value)\n+    self.balances[_from] = self.balances[_from] - _value\n+    self.balances[_to] = self.balances[_to] + _value\n+    self.allowances[_from][_sender] = allowance - _value\n     # Fire transfer event\n     log.Transfer(_from, _to, _value)\n-    return true\n+    return True\n \n @public\n def approve(_spender : address, _value : uint256) -> bool:\n@@ -76,7 +76,7 @@\n     self.allowances[_sender][_spender] = _value\n     # Fire approval event\n     log.Approval(_sender, _spender, _value)\n-    return true\n+    return True\n \n @public\n @constant\n", "issue": "Solidity Compatible ERC20 broken\nThe [Solidity compatible ERC20 token](https://github.com/ethereum/vyper/blob/master/examples/tokens/ERC20_solidity_compatible/ERC20.v.py) no longer compiles, since it was not updated after the removal of separate uint256 math functions. This is a super easy fix. I can do it later in the week if no one gets to it before then. \n", "before_files": [{"content": "# Solidity-Compatible EIP20/ERC20 Token\n# Implements https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md\n# Author: Phil Daian\n\n# The use of the uint256 datatype as in this token is not\n# recommended, as it can pose security risks.\n\n# This token is intended as a proof of concept towards\n# language interoperability and not for production use.\n\n# Events issued by the contract\nTransfer: event({_from: indexed(address), _to: indexed(address), _value: uint256})\nApproval: event({_owner: indexed(address), _spender: indexed(address), _value: uint256})\n\nbalances: uint256[address]\nallowances: (uint256[address])[address]\nnum_issued: uint256\n\n@public\n@payable\ndef deposit():\n    _value: uint256 = convert(msg.value, 'uint256')\n    _sender: address = msg.sender\n    self.balances[_sender] = uint256_add(self.balances[_sender], _value)\n    self.num_issued = uint256_add(self.num_issued, _value)\n    # Fire deposit event as transfer from 0x0\n    log.Transfer(0x0000000000000000000000000000000000000000, _sender, _value)\n\n@public\ndef withdraw(_value : uint256) -> bool:\n    _sender: address = msg.sender\n    # Make sure sufficient funds are present, op will not underflow supply\n    # implicitly through overflow protection\n    self.balances[_sender] = uint256_sub(self.balances[_sender], _value)\n    self.num_issued = uint256_sub(self.num_issued, _value)\n    send(_sender, as_wei_value(convert(_value, 'int128'), 'wei'))\n    # Fire withdraw event as transfer to 0x0\n    log.Transfer(_sender, 0x0000000000000000000000000000000000000000, _value)\n    return true\n\n@public\n@constant\ndef totalSupply() -> uint256:\n    return self.num_issued\n\n@public\n@constant\ndef balanceOf(_owner : address) -> uint256:\n    return self.balances[_owner]\n\n@public\ndef transfer(_to : address, _value : uint256) -> bool:\n    _sender: address = msg.sender\n    # Make sure sufficient funds are present implicitly through overflow protection\n    self.balances[_sender] = uint256_sub(self.balances[_sender], _value)\n    self.balances[_to] = uint256_add(self.balances[_to], _value)\n    # Fire transfer event\n    log.Transfer(_sender, _to, _value)\n    return true\n\n@public\ndef transferFrom(_from : address, _to : address, _value : uint256) -> bool:\n    _sender: address = msg.sender\n    allowance: uint256 = self.allowances[_from][_sender]\n    # Make sure sufficient funds/allowance are present implicitly through overflow protection\n    self.balances[_from] = uint256_sub(self.balances[_from], _value)\n    self.balances[_to] = uint256_add(self.balances[_to], _value)\n    self.allowances[_from][_sender] = uint256_sub(allowance, _value)\n    # Fire transfer event\n    log.Transfer(_from, _to, _value)\n    return true\n\n@public\ndef approve(_spender : address, _value : uint256) -> bool:\n    _sender: address = msg.sender\n    self.allowances[_sender][_spender] = _value\n    # Fire approval event\n    log.Approval(_sender, _spender, _value)\n    return true\n\n@public\n@constant\ndef allowance(_owner : address, _spender : address) -> uint256:\n    return self.allowances[_owner][_spender]\n\n", "path": "examples/tokens/ERC20_solidity_compatible/ERC20.v.py"}], "after_files": [{"content": "# Solidity-Compatible EIP20/ERC20 Token\n# Implements https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md\n# Author: Phil Daian\n\n# The use of the uint256 datatype as in this token is not\n# recommended, as it can pose security risks.\n\n# This token is intended as a proof of concept towards\n# language interoperability and not for production use.\n\n# Events issued by the contract\nTransfer: event({_from: indexed(address), _to: indexed(address), _value: uint256})\nApproval: event({_owner: indexed(address), _spender: indexed(address), _value: uint256})\n\nbalances: uint256[address]\nallowances: (uint256[address])[address]\nnum_issued: uint256\n\n@public\n@payable\ndef deposit():\n    _value: uint256 = convert(msg.value, 'uint256')\n    _sender: address = msg.sender\n    self.balances[_sender] = self.balances[_sender] + _value\n    self.num_issued = self.num_issued + _value\n    # Fire deposit event as transfer from 0x0\n    log.Transfer(0x0000000000000000000000000000000000000000, _sender, _value)\n\n@public\ndef withdraw(_value : uint256) -> bool:\n    _sender: address = msg.sender\n    # Make sure sufficient funds are present, op will not underflow supply\n    # implicitly through overflow protection\n    self.balances[_sender] = self.balances[_sender] - _value\n    self.num_issued = self.num_issued - _value\n    send(_sender, as_wei_value(convert(_value, 'int128'), 'wei'))\n    # Fire withdraw event as transfer to 0x0\n    log.Transfer(_sender, 0x0000000000000000000000000000000000000000, _value)\n    return True\n\n@public\n@constant\ndef totalSupply() -> uint256:\n    return self.num_issued\n\n@public\n@constant\ndef balanceOf(_owner : address) -> uint256:\n    return self.balances[_owner]\n\n@public\ndef transfer(_to : address, _value : uint256) -> bool:\n    _sender: address = msg.sender\n    # Make sure sufficient funds are present implicitly through overflow protection\n    self.balances[_sender] = self.balances[_sender] - _value\n    self.balances[_to] = self.balances[_to] + _value\n    # Fire transfer event\n    log.Transfer(_sender, _to, _value)\n    return True\n\n@public\ndef transferFrom(_from : address, _to : address, _value : uint256) -> bool:\n    _sender: address = msg.sender\n    allowance: uint256 = self.allowances[_from][_sender]\n    # Make sure sufficient funds/allowance are present implicitly through overflow protection\n    self.balances[_from] = self.balances[_from] - _value\n    self.balances[_to] = self.balances[_to] + _value\n    self.allowances[_from][_sender] = allowance - _value\n    # Fire transfer event\n    log.Transfer(_from, _to, _value)\n    return True\n\n@public\ndef approve(_spender : address, _value : uint256) -> bool:\n    _sender: address = msg.sender\n    self.allowances[_sender][_spender] = _value\n    # Fire approval event\n    log.Approval(_sender, _spender, _value)\n    return True\n\n@public\n@constant\ndef allowance(_owner : address, _spender : address) -> uint256:\n    return self.allowances[_owner][_spender]\n\n", "path": "examples/tokens/ERC20_solidity_compatible/ERC20.v.py"}]}