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()

```

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

{"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"}]}