prompt: We are currently solving the following issue within our repository. Here is the issue text:
  --- BEGIN ISSUE ---
  Missing @view decorator for interface ERC20Detailed.py
  ### Version Information
  * vyper Version (output of `vyper --version`): 0.3.3
  * OS: linux
  * Python Version (output of `python --version`): Python 3.9.5
  ### What's your issue about?
  **Issue**
  Error using `ERC20Detailed.py` as an interface to a vyper class. Trying to compile the following snippet produces the following error.
  ```
  # @version 0.3.3
  
  from vyper.interfaces import ERC20Detailed
  
  @view
  @external
  def getSymbol() -> String[32]:
      return ERC20Detailed(0x5f3b5DfEb7B28CDbD7FAba78963EE202a494e2A2).symbol()
  ```
  **Error**
  ```
  vyper.exceptions.StateAccessViolation: May not call state modifying function 'symbol' within a constant
  function.vyper.exceptions.StateAccessViolation: May not call state modifying function 'symbol' within a constant function.
  ```
  **Reason**
  This issue occurs because `ERC20Detailed.py` does not contain `@view` decorator for its interfaces
  ### How can it be fixed?
  Adding `@view` decorator to interface under `vyper.builtin_interfaces.ERC20Detailed.py`
  ```
  @external
  @view
  def name() -> String[1]:
      pass
      
  @external
  @view
  def symbol() -> String[1]:
      pass
      
  @external
  @view
  def decimals() -> uint8:
      pass
  ```
  **Why?**
  Running `vyper -f interface examples/tokens/ERC20.vy` generates the following
  ```
  ...
  @view
  @external
  def name() -> String[32]:
      pass
      
  @view
  @external
  def symbol() -> String[32]:
      pass
      
  @view
  @external
  def decimals() -> uint8:
      pass
  ...
  ```
  
  Adding `@view` decorator to `vyper.builtin_interfaces.ERC20Detailed.py` would make interface consistent.
  
  --- END ISSUE ---
  
  Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
  --- BEGIN FILES ---
  Path: `vyper/builtin_interfaces/ERC20Detailed.py`
  Content:
  ```
  1 """
  2 NOTE: interface uses `String[1]` where 1 is the lower bound of the string returned by the function.
  3     For end-users this means they can't use `implements: ERC20Detailed` unless their implementation
  4     uses a value n >= 1. Regardless this is fine as one can't do String[0] where n == 0.
  5 """
  6 
  7 interface_code = """
  8 @external
  9 def name() -> String[1]:
  10     pass
  11 
  12 @external
  13 def symbol() -> String[1]:
  14     pass
  15 
  16 @external
  17 def decimals() -> uint8:
  18     pass
  19 """
  20
  ```
  --- 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/vyper/builtin_interfaces/ERC20Detailed.py b/vyper/builtin_interfaces/ERC20Detailed.py
  --- a/vyper/builtin_interfaces/ERC20Detailed.py
  +++ b/vyper/builtin_interfaces/ERC20Detailed.py
  @@ -5,14 +5,17 @@
   """
   
   interface_code = """
  +@view
   @external
   def name() -> String[1]:
       pass
   
  +@view
   @external
   def symbol() -> String[1]:
       pass
   
  +@view
   @external
   def decimals() -> uint8:
       pass
  
verification_info: {"golden_diff": "diff --git a/vyper/builtin_interfaces/ERC20Detailed.py b/vyper/builtin_interfaces/ERC20Detailed.py\n--- a/vyper/builtin_interfaces/ERC20Detailed.py\n+++ b/vyper/builtin_interfaces/ERC20Detailed.py\n@@ -5,14 +5,17 @@\n \"\"\"\n \n interface_code = \"\"\"\n+@view\n @external\n def name() -> String[1]:\n     pass\n \n+@view\n @external\n def symbol() -> String[1]:\n     pass\n \n+@view\n @external\n def decimals() -> uint8:\n     pass\n", "issue": "Missing @view decorator for interface ERC20Detailed.py\n### Version Information\r\n* vyper Version (output of `vyper --version`): 0.3.3\r\n* OS: linux\r\n* Python Version (output of `python --version`): Python 3.9.5\r\n### What's your issue about?\r\n**Issue**\r\nError using `ERC20Detailed.py` as an interface to a vyper class. Trying to compile the following snippet produces the following error.\r\n```\r\n# @version 0.3.3\r\n\r\nfrom vyper.interfaces import ERC20Detailed\r\n\r\n@view\r\n@external\r\ndef getSymbol() -> String[32]:\r\n    return ERC20Detailed(0x5f3b5DfEb7B28CDbD7FAba78963EE202a494e2A2).symbol()\r\n```\r\n**Error**\r\n```\r\nvyper.exceptions.StateAccessViolation: May not call state modifying function 'symbol' within a constant\r\nfunction.vyper.exceptions.StateAccessViolation: May not call state modifying function 'symbol' within a constant function.\r\n```\r\n**Reason**\r\nThis issue occurs because `ERC20Detailed.py` does not contain `@view` decorator for its interfaces\r\n### How can it be fixed?\r\nAdding `@view` decorator to interface under `vyper.builtin_interfaces.ERC20Detailed.py`\r\n```\r\n@external\r\n@view\r\ndef name() -> String[1]:\r\n    pass\r\n    \r\n@external\r\n@view\r\ndef symbol() -> String[1]:\r\n    pass\r\n    \r\n@external\r\n@view\r\ndef decimals() -> uint8:\r\n    pass\r\n```\r\n**Why?**\r\nRunning `vyper -f interface examples/tokens/ERC20.vy` generates the following\r\n```\r\n...\r\n@view\r\n@external\r\ndef name() -> String[32]:\r\n    pass\r\n    \r\n@view\r\n@external\r\ndef symbol() -> String[32]:\r\n    pass\r\n    \r\n@view\r\n@external\r\ndef decimals() -> uint8:\r\n    pass\r\n...\r\n```\r\n\r\nAdding `@view` decorator to `vyper.builtin_interfaces.ERC20Detailed.py` would make interface consistent.\n", "before_files": [{"content": "\"\"\"\nNOTE: interface uses `String[1]` where 1 is the lower bound of the string returned by the function.\n    For end-users this means they can't use `implements: ERC20Detailed` unless their implementation\n    uses a value n >= 1. Regardless this is fine as one can't do String[0] where n == 0.\n\"\"\"\n\ninterface_code = \"\"\"\n@external\ndef name() -> String[1]:\n    pass\n\n@external\ndef symbol() -> String[1]:\n    pass\n\n@external\ndef decimals() -> uint8:\n    pass\n\"\"\"\n", "path": "vyper/builtin_interfaces/ERC20Detailed.py"}], "after_files": [{"content": "\"\"\"\nNOTE: interface uses `String[1]` where 1 is the lower bound of the string returned by the function.\n    For end-users this means they can't use `implements: ERC20Detailed` unless their implementation\n    uses a value n >= 1. Regardless this is fine as one can't do String[0] where n == 0.\n\"\"\"\n\ninterface_code = \"\"\"\n@view\n@external\ndef name() -> String[1]:\n    pass\n\n@view\n@external\ndef symbol() -> String[1]:\n    pass\n\n@view\n@external\ndef decimals() -> uint8:\n    pass\n\"\"\"\n", "path": "vyper/builtin_interfaces/ERC20Detailed.py"}]}