internlm/SWE-Fixer-Train-110K huggingface dataset:
Repository: ethereum/web3.py

Issue:
Remove `contract.eventFilter`
* Version: 4.6

### What was wrong?

contract.eventFilter was deprecated in v4, and can be removed in v5.


Discussion:

Resolving patch:
diff --git a/web3/contract.py b/web3/contract.py
--- a/web3/contract.py
+++ b/web3/contract.py
@@ -366,40 +366,6 @@ def encodeABI(cls, fn_name, args=None, kwargs=None, data=None):
 
         return encode_abi(cls.web3, fn_abi, fn_arguments, data)
 
-    @combomethod
-    @deprecated_for("contract.events.<event name>.createFilter")
-    def eventFilter(self, event_name, filter_params={}):
-        """
-        Create filter object that tracks events emitted by this contract.
-        :param event_name: the name of the event to track
-        :param filter_params: other parameters to limit the events
-        """
-        filter_meta_params = dict(filter_params)
-        argument_filters = filter_meta_params.pop('filter', {})
-
-        argument_filter_names = list(argument_filters.keys())
-        event_abi = self._find_matching_event_abi(
-            event_name,
-            argument_filter_names,
-        )
-
-        data_filter_set, event_filter_params = construct_event_filter_params(
-            event_abi,
-            contract_address=self.address,
-            argument_filters=argument_filters,
-            **filter_meta_params
-        )
-
-        log_data_extract_fn = functools.partial(get_event_data, event_abi)
-
-        log_filter = self.web3.eth.filter(event_filter_params)
-
-        log_filter.set_data_filters(data_filter_set)
-        log_filter.log_entry_formatter = log_data_extract_fn
-        log_filter.filter_params = event_filter_params
-
-        return log_filter
-
     @combomethod
     @deprecated_for("contract.functions.<method name>.estimateGas")
     def estimateGas(self, transaction=None):


Test patch:
diff --git a/tests/core/filtering/conftest.py b/tests/core/filtering/conftest.py
--- a/tests/core/filtering/conftest.py
+++ b/tests/core/filtering/conftest.py
@@ -133,23 +133,16 @@ def emitter_log_topics():
     return LogTopics
 
 
-def return_filter_by_api(
-        api_style=None,
+def return_filter(
         contract=None,
         args=[]):
-    if api_style == 'v3':
-        with pytest.deprecated_call():
-            return contract.eventFilter(*args)
-    elif api_style == 'v4':
         event_name = args[0]
         kwargs = apply_key_map({'filter': 'argument_filters'}, args[1])
         if 'fromBlock' not in kwargs:
             kwargs['fromBlock'] = 'latest'
         return contract.events[event_name].createFilter(**kwargs)
-    else:
-        raise ValueError("api_style must be 'v3 or v4'")
 
 
-@pytest.fixture(params=['v3', 'v4'])
+@pytest.fixture()
 def create_filter(request):
-    return functools.partial(return_filter_by_api, request.param)
+    return functools.partial(return_filter)
Repository: ethereum/web3.py

Issue:
Dissallow python 3.5.1
### What was wrong?

It looks like `typing.NewType` may not be available in python 3.5.1

https://github.com/ethereum/web3.py/issues/1091

### How can it be fixed?

Check what version `NewType` was added and restrict our python versions as declared in `setup.py` to be `>=` that version


Discussion:

Resolving patch:
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -81,7 +81,7 @@
         "pypiwin32>=223;platform_system=='Windows'",
     ],
     setup_requires=['setuptools-markdown'],
-    python_requires='>=3.5, <4',
+    python_requires='>=3.5.2, <4',
     extras_require=extras_require,
     py_modules=['web3', 'ens'],
     license="MIT",


Test patch:
Repository: ethereum/web3.py

Issue:
Backport 1094 to v4 branch
### What was wrong?

https://github.com/ethereum/web3.py/issues/1094#issuecomment-428259232 needs to be backported to the v4 branch.


Discussion:
Also, because of https://github.com/ethereum/web3.py/issues/1012#issuecomment-415183759 maybe we should require >=3.5.3

Resolving patch:
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -80,7 +80,7 @@
         "pypiwin32>=223;platform_system=='Windows'",
     ],
     setup_requires=['setuptools-markdown'],
-    python_requires='>=3.5, <4',
+    python_requires='>=3.5.3,<4',
     extras_require=extras_require,
     py_modules=['web3', 'ens'],
     license="MIT",


Test patch:
Repository: ethereum/web3.py

Issue:
Remove Python `collections` Deprecation warnings
* Python: 3.7 and below

### What was wrong?
Python 3.8 is changing the way imports from `collections` are being handled. The following Deprecation warning describes the issue: 
`DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated, and in 3.8 it will stop working`

### How can it be fixed?
Go through the codebase and swap out any `collections` imports for `collections.abc`


Discussion:
I would like to take this up.
Awesome, thank you!
Is the issue still takeable?
@dathbezumniy I'm not aware of a PR by @stringray55 but you might take a look before putting work into it.  Otherwise go for it.

Resolving patch:
diff --git a/web3/_utils/formatters.py b/web3/_utils/formatters.py
--- a/web3/_utils/formatters.py
+++ b/web3/_utils/formatters.py
@@ -1,4 +1,4 @@
-from collections import (
+from collections.abc import (
     Iterable,
     Mapping,
 )
diff --git a/web3/datastructures.py b/web3/datastructures.py
--- a/web3/datastructures.py
+++ b/web3/datastructures.py
@@ -1,8 +1,10 @@
 from collections import (
+    OrderedDict,
+)
+from collections.abc import (
     Hashable,
     Mapping,
     MutableMapping,
-    OrderedDict,
     Sequence,
 )
 


Test patch:
Repository: ethereum/web3.py

Issue:
IPCProvider argument type bug

### What was wrong?

IPCProvider correctly handles a `pathlib.Path` as its `ipc_path` argument, but the type annotation says it only accepts `str`.

### How can it be fixed?

Change it to `Union[str, Path]`



Discussion:

Resolving patch:
diff --git a/web3/providers/ipc.py b/web3/providers/ipc.py
--- a/web3/providers/ipc.py
+++ b/web3/providers/ipc.py
@@ -15,6 +15,7 @@
 from typing import (
     Any,
     Type,
+    Union,
 )
 
 from web3._utils.threads import (
@@ -203,7 +204,13 @@ class IPCProvider(JSONBaseProvider):
     logger = logging.getLogger("web3.providers.IPCProvider")
     _socket = None
 
-    def __init__(self, ipc_path: str=None, timeout: int=10, *args: Any, **kwargs: Any) -> None:
+    def __init__(
+        self,
+        ipc_path: Union[str, Path] = None,
+        timeout: int = 10,
+        *args: Any,
+        **kwargs: Any,
+    ) -> None:
         if ipc_path is None:
             self.ipc_path = get_default_ipc_path()
         elif isinstance(ipc_path, str) or isinstance(ipc_path, Path):


Test patch:
Repository: ethereum/web3.py

Issue:
Changed pypiwin32 to pywin32
### What was wrong?
pypiwin32 is just an empty package requiring pywin32, so this can just be required directly. As far as I know, pypiwin32 is only there for historical reasons.

Related to Issue #1721

### How was it fixed?
change it in setup.py

### Todo:
- [ ] Add entry to the [release notes](https://github.com/ethereum/web3.py/blob/master/newsfragments/README.md)

#### Cute Animal Picture

![Put a link to a cute animal picture inside the parenthesis-->](https://i.pinimg.com/originals/0d/3f/50/0d3f507974868a3be56d25424a7bf0a9.jpg)



Discussion:

Resolving patch:
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -82,7 +82,7 @@
         "jsonschema>=3.2.0,<4.0.0",
         "lru-dict>=1.1.6,<2.0.0",
         "protobuf>=3.10.0,<4",
-        "pypiwin32>=223;platform_system=='Windows'",
+        "pywin32>=223;platform_system=='Windows'",
         "requests>=2.16.0,<3.0.0",
         # remove typing_extensions after python_requires>=3.8, see web3._utils.compat
          "typing-extensions>=3.7.4.1,<4;python_version<'3.8'",


Test patch:
Repository: ethereum/web3.py

Issue:
Getting the block_number asynchronously is hacky
* Version: 5.16.0
* Python: 3.8.5

### What was wrong?

PR #1851 `Moving blockNumber -> block_number` replaced a function with a `@property`.

Since that peoperty does RPC under the hood, which blocks on the network, using a property here does not seem intuitive, but more importantly it makes it more difficult to get that information in a non-blocking way.

This is an issue when running this in a Thread, Process or Asyncio eventloop. In an asyncio process for example, one would have to do the following replacement:
```diff
- return await loop.run_in_executor(None, w3.eth.block_number)
+ return await loop.run_in_executor(None, getattr, (w3.eth, 'block_number'))
```

or alternatively to call the underlying method, which the underscore marks as private and best practices recommend against using:
```python
- return await loop.run_in_executor(None, w3.eth.block_number)
- return await loop.run_in_executor(None, w3.eth._block_number)
```

### How can it be fixed?

The underlying methods could be made public instead of private:
```diff
-    _block_number: Method[Callable[[], BlockNumber]] = Method(
+    get_block_number: Method[Callable[[], BlockNumber]] = Method(
        RPC.eth_blockNumber,
        mungers=None,
    )

    @property
    def block_number(self) -> BlockNumber:
-        return self._block_number()
+        return self.get_block_number()
```

Alternatively, an async API on web3 would be great, since parts of it already such as WebsocketProvider use asyncio under the hood.


Discussion:
@hoh thank you for the report! It's historically been a property, and I think it accidentally became a public method, but I don't have any problem moving it back to being a public method as well :thumbsup:

Resolving patch:
diff --git a/web3/eth.py b/web3/eth.py
--- a/web3/eth.py
+++ b/web3/eth.py
@@ -201,14 +201,14 @@ def gasPrice(self) -> Wei:
     def accounts(self) -> Tuple[ChecksumAddress]:
         return self.get_accounts()
 
-    _block_number: Method[Callable[[], BlockNumber]] = Method(
+    get_block_number: Method[Callable[[], BlockNumber]] = Method(
         RPC.eth_blockNumber,
         mungers=None,
     )
 
     @property
     def block_number(self) -> BlockNumber:
-        return self._block_number()
+        return self.get_block_number()
 
     @property
     def blockNumber(self) -> BlockNumber:


Test patch:
diff --git a/web3/_utils/module_testing/eth_module.py b/web3/_utils/module_testing/eth_module.py
--- a/web3/_utils/module_testing/eth_module.py
+++ b/web3/_utils/module_testing/eth_module.py
@@ -142,6 +142,11 @@ def test_eth_block_number(self, web3: "Web3") -> None:
         assert is_integer(block_number)
         assert block_number >= 0
 
+    def test_eth_get_block_number(self, web3: "Web3") -> None:
+        block_number = web3.eth.get_block_number()
+        assert is_integer(block_number)
+        assert block_number >= 0
+
     def test_eth_blockNumber(self, web3: "Web3") -> None:
         with pytest.warns(DeprecationWarning):
             block_number = web3.eth.blockNumber
Repository: ethereum/web3.py

Issue:
Redundant async/await in AsyncJSONBaseProvider serde methods
* Version: 5.20
* Python: 3.9.5
* OS: Linux

```
aiohttp==3.7.4.post0
web3==5.20
```


### What was wrong?

Serde methods internally do not await on any coroutines, so there is no reason to have them `async`

### How can it be fixed?

Remove `async/await` in those methods.



Discussion:

Resolving patch:
diff --git a/web3/providers/async_base.py b/web3/providers/async_base.py
--- a/web3/providers/async_base.py
+++ b/web3/providers/async_base.py
@@ -85,7 +85,7 @@ class AsyncJSONBaseProvider(AsyncBaseProvider):
     def __init__(self) -> None:
         self.request_counter = itertools.count()
 
-    async def encode_rpc_request(self, method: RPCEndpoint, params: Any) -> bytes:
+    def encode_rpc_request(self, method: RPCEndpoint, params: Any) -> bytes:
         rpc_dict = {
             "jsonrpc": "2.0",
             "method": method,
@@ -95,7 +95,7 @@ async def encode_rpc_request(self, method: RPCEndpoint, params: Any) -> bytes:
         encoded = FriendlyJsonSerde().json_encode(rpc_dict)
         return to_bytes(text=encoded)
 
-    async def decode_rpc_response(self, raw_response: bytes) -> RPCResponse:
+    def decode_rpc_response(self, raw_response: bytes) -> RPCResponse:
         text_response = to_text(raw_response)
         return cast(RPCResponse, FriendlyJsonSerde().json_decode(text_response))
 
diff --git a/web3/providers/async_rpc.py b/web3/providers/async_rpc.py
--- a/web3/providers/async_rpc.py
+++ b/web3/providers/async_rpc.py
@@ -69,13 +69,13 @@ def get_request_headers(self) -> Dict[str, str]:
     async def make_request(self, method: RPCEndpoint, params: Any) -> RPCResponse:
         self.logger.debug("Making request HTTP. URI: %s, Method: %s",
                           self.endpoint_uri, method)
-        request_data = await self.encode_rpc_request(method, params)
+        request_data = self.encode_rpc_request(method, params)
         raw_response = await async_make_post_request(
             self.endpoint_uri,
             request_data,
             **self.get_request_kwargs()
         )
-        response = await self.decode_rpc_response(raw_response)
+        response = self.decode_rpc_response(raw_response)
         self.logger.debug("Getting response HTTP. URI: %s, "
                           "Method: %s, Response: %s",
                           self.endpoint_uri, method, response)


Test patch:
Repository: ethereum/web3.py

Issue:
Using typing-extensions 4 with web3.py and python < 3.8
Hey guys,

This is question on typing-extensions package. In setup.py https://github.com/ethereum/web3.py/blob/74fbcd1761407ee37808173b089d8e44e537fb99/setup.py#L88-L89

you require <4 and python <3.8. From what I understand that is since these extensions you use have made it into stdlib's typing module from 3.8 and on.

But from what I see this requirement creates a probem for projects like ours which are still in python 3.7, use web3.py and want to use typing-extensions 4. Is there any reason for the < 4 requirement?


Discussion:

Resolving patch:
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -86,7 +86,7 @@
         "pywin32>=223;platform_system=='Windows'",
         "requests>=2.16.0,<3.0.0",
         # remove typing_extensions after python_requires>=3.8, see web3._utils.compat
-        "typing-extensions>=3.7.4.1,<4;python_version<'3.8'",
+        "typing-extensions>=3.7.4.1,<5;python_version<'3.8'",
         "websockets>=9.1,<10",
     ],
     python_requires='>=3.6,<4',


Test patch:
Repository: ethereum/web3.py

Issue:
dependency conflict with py-evm 0.5* series
* Version: 0.5.26
* Python: 3.10
* OS: linux

### What was wrong?

Current web3.py not compatible with py-evm `0.5*`. Below are the relevant lines from `pip install` output:

```
The conflict is caused by:
    py-evm 0.5.0a2 depends on eth-utils<3.0.0 and >=2.0.0
    web3 5.26.0 depends on eth-utils<2.0.0 and >=1.9.5
```


Discussion:

Resolving patch:
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -7,7 +7,7 @@
 
 extras_require = {
     'tester': [
-        "eth-tester[py-evm]==v0.6.0-beta.4",
+        "eth-tester[py-evm]==v0.6.0-beta.6",
         "py-geth>=3.7.0,<4",
     ],
     'linter': [
@@ -77,7 +77,7 @@
     install_requires=[
         "aiohttp>=3.7.4.post0,<4",
         "eth-abi>=2.0.0b6,<3.0.0",
-        "eth-account>=0.5.6,<0.6.0",
+        "eth-account>=0.5.7,<0.6.0",
         "eth-hash[pycryptodome]>=0.2.0,<1.0.0",
         "eth-typing>=2.0.0,<3.0.0",
         "eth-utils>=1.9.5,<2.0.0",


Test patch:
diff --git a/tests/integration/test_ethereum_tester.py b/tests/integration/test_ethereum_tester.py
--- a/tests/integration/test_ethereum_tester.py
+++ b/tests/integration/test_ethereum_tester.py
@@ -415,20 +415,6 @@ def test_eth_chainId(self, web3):
         assert is_integer(chain_id)
         assert chain_id == 61
 
-    @pytest.mark.xfail(raises=KeyError, reason="ethereum tester doesn't return 'to' key")
-    def test_eth_get_transaction_receipt_mined(self, web3, block_with_txn, mined_txn_hash):
-        super().test_eth_get_transaction_receipt_mined(web3, block_with_txn, mined_txn_hash)
-
-    @pytest.mark.xfail(raises=KeyError, reason="ethereum tester doesn't return 'to' key")
-    def test_eth_getTransactionReceipt_mined_deprecated(self, web3, block_with_txn, mined_txn_hash):
-        super().test_eth_getTransactionReceipt_mined_deprecated(web3,
-                                                                block_with_txn,
-                                                                mined_txn_hash)
-
-    @pytest.mark.xfail(raises=KeyError, reason="ethereum tester doesn't return 'to' key")
-    def test_eth_wait_for_transaction_receipt_mined(self, web3, block_with_txn, mined_txn_hash):
-        super().test_eth_wait_for_transaction_receipt_mined(web3, block_with_txn, mined_txn_hash)
-
     @disable_auto_mine
     def test_eth_wait_for_transaction_receipt_unmined(self,
                                                       eth_tester,
Repository: ethereum/web3.py

Issue:
Upgrade jsonschema to the latest 4.4
### What was wrong?

https://github.com/ethereum/web3.py/blob/16aff7e80a6bc089051c154b5079213317c27da8/setup.py#L86

I cannot combine `web3.py` with the latest `jsonschema` in a single app (without relying on ugly hacks)

### How can it be fixed?

Maybe just expand the range to `jsonschema>=3.2.0,<4.5` and let users test compatibility?

https://github.com/ethereum/web3.py/blob/16aff7e80a6bc089051c154b5079213317c27da8/docs/web3.pm.rst#L12

so the web3.py dev team shouldn't have to worry too much about maintaining compatibility 


Discussion:

Resolving patch:
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -82,7 +82,7 @@
         "eth-utils>=1.9.5,<2.0.0",
         "hexbytes>=0.1.0,<1.0.0",
         "ipfshttpclient==0.8.0a2",
-        "jsonschema>=3.2.0,<4.0.0",
+        "jsonschema>=3.2.0,<5",
         "lru-dict>=1.1.6,<2.0.0",
         "protobuf>=3.10.0,<4",
         "pywin32>=223;platform_system=='Windows'",


Test patch:
Repository: ethereum/web3.py

Issue:
Unexpected types for transaction fields
* Version: 5.29.1
* Python: 3.8
* OS: linux

### What was wrong?

Similar to #2482 

On mainnet:
```
>>> block = w3.eth.get_block(14764013, full_transactions=True)
>>> txn = block.transactions[0]
>>> print(txn.type)
"0x2"
>>> print(txn.chainId)
"0x1"
```
I expected an `int` for both, in this case `2` and `1`.

### How can it be fixed?

Add a couple field normalizers


Discussion:

Resolving patch:
diff --git a/web3/_utils/method_formatters.py b/web3/_utils/method_formatters.py
--- a/web3/_utils/method_formatters.py
+++ b/web3/_utils/method_formatters.py
@@ -169,6 +169,8 @@ def is_attrdict(val: Any) -> bool:
     'hash': to_hexbytes(32),
     'v': apply_formatter_if(is_not_null, to_integer_if_hex),
     'standardV': apply_formatter_if(is_not_null, to_integer_if_hex),
+    'type': apply_formatter_if(is_not_null, to_integer_if_hex),
+    'chainId': apply_formatter_if(is_not_null, to_integer_if_hex),
 }
 
 


Test patch:
diff --git a/tests/core/utilities/test_valid_transaction_params.py b/tests/core/utilities/test_valid_transaction_params.py
--- a/tests/core/utilities/test_valid_transaction_params.py
+++ b/tests/core/utilities/test_valid_transaction_params.py
@@ -55,7 +55,6 @@ def test_assert_valid_transaction_params_invalid_param():
 
 
 FULL_TXN_DICT = {
-    'chainId': 1,
     'type': '0x2',
     'from': '0x0',
     'to': '0x1',
Repository: ethereum/web3.py

Issue:
`getTransactionCount` fails with a block identifier using `web3[tester]`
* Version: 5.13.0
* Python: 3.7
* OS: osx

### What was wrong?

```python
import web3
import eth_tester

backend = eth_tester.PyEVMBackend()
w3 = web3.Web3(web3.Web3.EthereumTesterProvider(backend))

w3.eth.getTransactionCount(w3.eth.accounts[0], 0)
```

This code fails when it should succeed. It seems that `web3.py` automatically formats block references to hex numbers but `eth-tester` `get_nonce` expects it to be a number.

### How can it be fixed?

This could possibly be an `eth-tester` issue but I've added it here for coverage.



Discussion:
Two possible fixes:

One would be to accept hexadecimal block numbers on the `eth-tester` side https://github.com/ethereum/eth-tester/blob/171dce6074d6ee1b7dd6d97dbd0df397259d421d/eth_tester/main.py#L242.

Another would be to fix the formatting for `get_nonce` rpc calls on the `web3.py` side.
Thanks for the report @Pet3ris! I want to double check, but I think we'll want to fix this on the eth-tester side. 

Resolving patch:
diff --git a/web3/providers/eth_tester/middleware.py b/web3/providers/eth_tester/middleware.py
--- a/web3/providers/eth_tester/middleware.py
+++ b/web3/providers/eth_tester/middleware.py
@@ -66,10 +66,8 @@ def is_hexstr(value: Any) -> bool:
 
 
 to_integer_if_hex = apply_formatter_if(is_hexstr, hex_to_integer)
-
 is_not_named_block = complement(is_named_block)
 
-
 # --- Request Mapping --- #
 
 TRANSACTION_REQUEST_KEY_MAPPING = {
@@ -197,6 +195,10 @@ def is_hexstr(value: Any) -> bool:
     ),
     RPCEndpoint("eth_getFilterChanges"): apply_formatters_to_args(hex_to_integer),
     RPCEndpoint("eth_getFilterLogs"): apply_formatters_to_args(hex_to_integer),
+    RPCEndpoint("eth_getTransactionCount"): apply_formatters_to_args(
+        identity,
+        apply_formatter_if(is_not_named_block, to_integer_if_hex),
+    ),
     RPCEndpoint("eth_getBlockTransactionCountByNumber"): apply_formatters_to_args(
         apply_formatter_if(is_not_named_block, to_integer_if_hex),
     ),


Test patch:
diff --git a/tests/core/middleware/test_eth_tester_middleware.py b/tests/core/middleware/test_eth_tester_middleware.py
new file mode 100644
--- /dev/null
+++ b/tests/core/middleware/test_eth_tester_middleware.py
@@ -0,0 +1,7 @@
+import pytest
+
+
+@pytest.mark.parametrize("block_number", {0, "0x0", "earliest"})
+def test_get_transaction_count_formatters(w3, block_number):
+    tx_counts = w3.eth.get_transaction_count(w3.eth.accounts[-1], block_number)
+    assert tx_counts == 0
Repository: ethereum/web3.py

Issue:
protobuf dependency compatibility
* Python: 3.5
* OS: osx
* `import web3` output

```
ContextualVersionConflict
```

### What was wrong?

[protobuf](https://github.com/ethereum/web3.py/pull/1493) compatibility needs updating. Needed to downgrade protobuf to get it working. Version currently needs to be >4 but protobuf's latest version is 4.21.6

### How can it be fixed?

The newest version of protobuf should be compatible https://pypi.org/project/protobuf/



Discussion:
Currently running into the same issue with `web3==6.0.0b4` on an M1 Mac, web3 is requiring `protobuf==3.20.2` but I had to downgrade to `3.20.1` to avoid this import error:

```
File "/Users/ibis/.pyenv/versions/3.10.5/envs/import_test/lib/python3.10/site-packages/ethpm/_utils/ipfs.py", line 18, in <module>
    from google.protobuf.descriptor import (
  File "/Users/ibis/.pyenv/versions/3.10.5/envs/import_test/lib/python3.10/site-packages/google/protobuf/descriptor.py", line 47, in <module>
    from google.protobuf.pyext import _message
ImportError: dlopen(/Users/ibis/.pyenv/versions/3.10.5/envs/import_test/lib/python3.10/site-packages/google/protobuf/pyext/_message.cpython-310-darwin.so, 0x0002): symbol not found in flat namespace (__ZN6google8protobuf15FieldDescriptor12TypeOnceInitEPKS1_)
```
@clally1 @helloibis thanks for the heads up. I'm going to pin it to `3.20.1` for now until we can regenerate some of ethpm with 4.x

Resolving patch:
diff --git a/setup.py b/setup.py
--- a/setup.py
+++ b/setup.py
@@ -88,7 +88,7 @@
         "ipfshttpclient==0.8.0a2",
         "jsonschema>=3.2.0,<5",
         "lru-dict>=1.1.6,<2.0.0",
-        "protobuf>=3.10.0,<4",
+        "protobuf==3.19.4",
         "pywin32>=223;platform_system=='Windows'",
         "requests>=2.16.0,<3.0.0",
         # remove typing_extensions after python_requires>=3.8, see web3._utils.compat


Test patch: