web3 7.7.0__py3-none-any.whl → 7.8.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -69,6 +69,23 @@ class SubscriptionManager:
69
69
  def _remove_subscription(self, subscription: EthSubscription[Any]) -> None:
70
70
  self._subscription_container.remove_subscription(subscription)
71
71
 
72
+ def _validate_and_normalize_label(self, subscription: EthSubscription[Any]) -> None:
73
+ if subscription.label == subscription._default_label:
74
+ # if no custom label was provided, generate a unique label
75
+ i = 2
76
+ while self.get_by_label(subscription._label) is not None:
77
+ subscription._label = f"{subscription._default_label}#{i}"
78
+ i += 1
79
+ else:
80
+ if (
81
+ subscription._label
82
+ in self._subscription_container.subscriptions_by_label
83
+ ):
84
+ raise Web3ValueError(
85
+ "Subscription label already exists. Subscriptions must have unique "
86
+ f"labels.\n label: {subscription._label}"
87
+ )
88
+
72
89
  @property
73
90
  def subscriptions(self) -> List[EthSubscription[Any]]:
74
91
  return self._subscription_container.subscriptions
@@ -100,16 +117,8 @@ class SubscriptionManager:
100
117
  :return:
101
118
  """
102
119
  if isinstance(subscriptions, EthSubscription):
103
- if (
104
- subscriptions.label
105
- in self._subscription_container.subscriptions_by_label
106
- ):
107
- raise Web3ValueError(
108
- "Subscription label already exists. Subscriptions must have "
109
- f"unique labels.\n label: {subscriptions.label}"
110
- )
111
-
112
120
  subscriptions.manager = self
121
+ self._validate_and_normalize_label(subscriptions)
113
122
  sub_id = await self._w3.eth._subscribe(*subscriptions.subscription_params)
114
123
  subscriptions._id = sub_id
115
124
  self._add_subscription(subscriptions)
@@ -124,34 +133,88 @@ class SubscriptionManager:
124
133
 
125
134
  sub_ids: List[HexStr] = []
126
135
  for sub in subscriptions:
127
- await self.subscribe(sub)
136
+ sub_ids.append(await self.subscribe(sub))
128
137
  return sub_ids
129
138
  raise Web3TypeError("Expected a Subscription or a sequence of Subscriptions.")
130
139
 
131
- async def unsubscribe(self, subscription: EthSubscription[Any]) -> bool:
140
+ @overload
141
+ async def unsubscribe(self, subscriptions: EthSubscription[Any]) -> bool:
142
+ ...
143
+
144
+ @overload
145
+ async def unsubscribe(self, subscriptions: HexStr) -> bool:
146
+ ...
147
+
148
+ @overload
149
+ async def unsubscribe(
150
+ self,
151
+ subscriptions: Sequence[Union[EthSubscription[Any], HexStr]],
152
+ ) -> bool:
153
+ ...
154
+
155
+ async def unsubscribe(
156
+ self,
157
+ subscriptions: Union[
158
+ EthSubscription[Any],
159
+ HexStr,
160
+ Sequence[Union[EthSubscription[Any], HexStr]],
161
+ ],
162
+ ) -> bool:
132
163
  """
133
- Used to unsubscribe from a subscription.
164
+ Used to unsubscribe from one or multiple subscriptions.
134
165
 
135
- :param subscription: The subscription to unsubscribe from.
136
- :type subscription: EthSubscription
137
- :return: ``True`` if unsubscribing was successful, ``False`` otherwise.
166
+ :param subscriptions: The subscription(s) to unsubscribe from.
167
+ :type subscriptions: Union[EthSubscription, Sequence[EthSubscription], HexStr,
168
+ Sequence[HexStr]]
169
+ :return: ``True`` if unsubscribing to all was successful, ``False`` otherwise
170
+ with a warning.
138
171
  :rtype: bool
139
172
  """
140
- if subscription not in self.subscriptions:
141
- raise Web3ValueError(
142
- "Subscription not found or is not being managed by the subscription "
143
- f"manager.\n label: {subscription.label}\n id: {subscription._id}"
144
- )
145
- if await self._w3.eth._unsubscribe(subscription.id):
146
- self._remove_subscription(subscription)
147
- self.logger.info(
148
- "Successfully unsubscribed from subscription:\n "
149
- f"label: {subscription.label}\n id: {subscription.id}"
150
- )
151
- if len(self._subscription_container.handler_subscriptions) == 0:
152
- queue = self._provider._request_processor._handler_subscription_queue
153
- await queue.put(SubscriptionProcessingFinished())
154
- return True
173
+ if isinstance(subscriptions, EthSubscription) or isinstance(subscriptions, str):
174
+ if isinstance(subscriptions, str):
175
+ subscription_id = subscriptions
176
+ subscriptions = self.get_by_id(subscription_id)
177
+ if subscriptions is None:
178
+ raise Web3ValueError(
179
+ "Subscription not found or is not being managed by the "
180
+ f"subscription manager.\n id: {subscription_id}"
181
+ )
182
+
183
+ if subscriptions not in self.subscriptions:
184
+ raise Web3ValueError(
185
+ "Subscription not found or is not being managed by the "
186
+ "subscription manager.\n "
187
+ f"label: {subscriptions.label}\n id: {subscriptions._id}"
188
+ )
189
+
190
+ if await self._w3.eth._unsubscribe(subscriptions.id):
191
+ self._remove_subscription(subscriptions)
192
+ self.logger.info(
193
+ "Successfully unsubscribed from subscription:\n "
194
+ f"label: {subscriptions.label}\n id: {subscriptions.id}"
195
+ )
196
+
197
+ if len(self._subscription_container.handler_subscriptions) == 0:
198
+ queue = (
199
+ self._provider._request_processor._handler_subscription_queue
200
+ )
201
+ await queue.put(SubscriptionProcessingFinished())
202
+ return True
203
+
204
+ elif isinstance(subscriptions, Sequence):
205
+ if len(subscriptions) == 0:
206
+ raise Web3ValueError("No subscriptions provided.")
207
+
208
+ unsubscribed: List[bool] = []
209
+ for sub in subscriptions:
210
+ if isinstance(sub, str):
211
+ sub = HexStr(sub)
212
+ unsubscribed.append(await self.unsubscribe(sub))
213
+ return all(unsubscribed)
214
+
215
+ self.logger.warning(
216
+ f"Failed to unsubscribe from subscription\n subscription={subscriptions}"
217
+ )
155
218
  return False
156
219
 
157
220
  async def unsubscribe_all(self) -> bool:
@@ -186,15 +249,15 @@ class SubscriptionManager:
186
249
  :type run_forever: bool
187
250
  :return: None
188
251
  """
189
- if not self._subscription_container.handler_subscriptions:
252
+ if not self._subscription_container.handler_subscriptions and not run_forever:
190
253
  self.logger.warning(
191
254
  "No handler subscriptions found. Subscription handler did not run."
192
255
  )
193
256
  return
194
257
 
195
258
  queue = self._provider._request_processor._handler_subscription_queue
196
- try:
197
- while run_forever or self._subscription_container.handler_subscriptions:
259
+ while run_forever or self._subscription_container.handler_subscriptions:
260
+ try:
198
261
  response = cast(RPCResponse, await queue.get())
199
262
  formatted_sub_response = cast(
200
263
  FormattedEthSubscriptionResponse,
@@ -216,18 +279,20 @@ class SubscriptionManager:
216
279
  **sub._handler_context,
217
280
  )
218
281
  )
219
- except SubscriptionProcessingFinished:
220
- self.logger.info(
221
- "All handler subscriptions have been unsubscribed from. "
222
- "Stopping subscription handling."
223
- )
224
- except TaskNotRunning:
225
- await asyncio.sleep(0)
226
- self._provider._handle_listener_task_exceptions()
227
- self.logger.error(
228
- "Message listener background task for the provider has stopped "
229
- "unexpectedly. Stopping subscription handling."
230
- )
282
+ except SubscriptionProcessingFinished:
283
+ if not run_forever:
284
+ self.logger.info(
285
+ "All handler subscriptions have been unsubscribed from. "
286
+ "Stopping subscription handling."
287
+ )
288
+ break
289
+ except TaskNotRunning:
290
+ await asyncio.sleep(0)
291
+ self._provider._handle_listener_task_exceptions()
292
+ self.logger.error(
293
+ "Message listener background task for the provider has stopped "
294
+ "unexpectedly. Stopping subscription handling."
295
+ )
231
296
 
232
297
  # no active handler subscriptions, clear the handler subscription queue
233
298
  self._provider._request_processor._reset_handler_subscription_queue()
@@ -168,15 +168,20 @@ class AsyncHTTPProvider(AsyncJSONBaseProvider):
168
168
 
169
169
  async def make_batch_request(
170
170
  self, batch_requests: List[Tuple[RPCEndpoint, Any]]
171
- ) -> List[RPCResponse]:
171
+ ) -> Union[List[RPCResponse], RPCResponse]:
172
172
  self.logger.debug(f"Making batch request HTTP - uri: `{self.endpoint_uri}`")
173
173
  request_data = self.encode_batch_rpc_request(batch_requests)
174
174
  raw_response = await self._request_session_manager.async_make_post_request(
175
175
  self.endpoint_uri, request_data, **self.get_request_kwargs()
176
176
  )
177
177
  self.logger.debug("Received batch response HTTP.")
178
- responses_list = cast(List[RPCResponse], self.decode_rpc_response(raw_response))
179
- return sort_batch_response_by_response_ids(responses_list)
178
+ response = self.decode_rpc_response(raw_response)
179
+ if not isinstance(response, list):
180
+ # RPC errors return only one response with the error object
181
+ return response
182
+ return sort_batch_response_by_response_ids(
183
+ cast(List[RPCResponse], sort_batch_response_by_response_ids(response))
184
+ )
180
185
 
181
186
  async def disconnect(self) -> None:
182
187
  cache = self._request_session_manager.session_cache
web3/providers/rpc/rpc.py CHANGED
@@ -176,12 +176,17 @@ class HTTPProvider(JSONBaseProvider):
176
176
 
177
177
  def make_batch_request(
178
178
  self, batch_requests: List[Tuple[RPCEndpoint, Any]]
179
- ) -> List[RPCResponse]:
179
+ ) -> Union[List[RPCResponse], RPCResponse]:
180
180
  self.logger.debug(f"Making batch request HTTP, uri: `{self.endpoint_uri}`")
181
181
  request_data = self.encode_batch_rpc_request(batch_requests)
182
182
  raw_response = self._request_session_manager.make_post_request(
183
183
  self.endpoint_uri, request_data, **self.get_request_kwargs()
184
184
  )
185
185
  self.logger.debug("Received batch response HTTP.")
186
- responses_list = cast(List[RPCResponse], self.decode_rpc_response(raw_response))
187
- return sort_batch_response_by_response_ids(responses_list)
186
+ response = self.decode_rpc_response(raw_response)
187
+ if not isinstance(response, list):
188
+ # RPC errors return only one response with the error object
189
+ return response
190
+ return sort_batch_response_by_response_ids(
191
+ cast(List[RPCResponse], sort_batch_response_by_response_ids(response))
192
+ )
web3/types.py CHANGED
@@ -36,13 +36,9 @@ from web3._utils.compat import (
36
36
  )
37
37
 
38
38
  if TYPE_CHECKING:
39
- from web3.contract.async_contract import ( # noqa: F401
40
- AsyncContractEvent,
41
- AsyncContractFunction,
42
- )
43
- from web3.contract.contract import ( # noqa: F401
44
- ContractEvent,
45
- ContractFunction,
39
+ from web3.contract.base_contract import (
40
+ BaseContractEvent,
41
+ BaseContractFunction,
46
42
  )
47
43
  from web3.main import ( # noqa: F401
48
44
  AsyncWeb3,
@@ -301,10 +297,13 @@ class CreateAccessListResponse(TypedDict):
301
297
 
302
298
 
303
299
  MakeRequestFn = Callable[[RPCEndpoint, Any], RPCResponse]
304
- MakeBatchRequestFn = Callable[[List[Tuple[RPCEndpoint, Any]]], List[RPCResponse]]
300
+ MakeBatchRequestFn = Callable[
301
+ [List[Tuple[RPCEndpoint, Any]]], Union[List[RPCResponse], RPCResponse]
302
+ ]
305
303
  AsyncMakeRequestFn = Callable[[RPCEndpoint, Any], Coroutine[Any, Any, RPCResponse]]
306
304
  AsyncMakeBatchRequestFn = Callable[
307
- [List[Tuple[RPCEndpoint, Any]]], Coroutine[Any, Any, List[RPCResponse]]
305
+ [List[Tuple[RPCEndpoint, Any]]],
306
+ Coroutine[Any, Any, Union[List[RPCResponse], RPCResponse]],
308
307
  ]
309
308
 
310
309
 
@@ -581,8 +580,8 @@ class GethWallet(TypedDict):
581
580
 
582
581
  # Contract types
583
582
 
584
- TContractFn = TypeVar("TContractFn", "ContractFunction", "AsyncContractFunction")
585
- TContractEvent = TypeVar("TContractEvent", "ContractEvent", "AsyncContractEvent")
583
+ TContractFn = TypeVar("TContractFn", bound="BaseContractFunction")
584
+ TContractEvent = TypeVar("TContractEvent", bound="BaseContractEvent")
586
585
 
587
586
 
588
587
  # Tracing types
@@ -114,6 +114,10 @@ class EthSubscription(Generic[TSubscriptionResult]):
114
114
  self._label = label
115
115
  self.handler_call_count = 0
116
116
 
117
+ @property
118
+ def _default_label(self) -> str:
119
+ return f"{self.__class__.__name__}{self.subscription_params}"
120
+
117
121
  @classmethod
118
122
  def _create_type_aware_subscription(
119
123
  cls,
@@ -170,7 +174,7 @@ class EthSubscription(Generic[TSubscriptionResult]):
170
174
  @property
171
175
  def label(self) -> str:
172
176
  if not self._label:
173
- self._label = f"{self.__class__.__name__}{self.subscription_params}"
177
+ self._label = self._default_label
174
178
  return self._label
175
179
 
176
180
  @property
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2016-2024 The Ethereum Foundation
3
+ Copyright (c) 2016-2025 The Ethereum Foundation
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: web3
3
- Version: 7.7.0
3
+ Version: 7.8.0
4
4
  Summary: web3: A Python library for interacting with Ethereum
5
5
  Home-page: https://github.com/ethereum/web3.py
6
6
  Author: The Ethereum Foundation
@@ -1,31 +1,31 @@
1
1
  ens/__init__.py,sha256=BtOyGF_JrIpWFTr_T1GCJuUtmZI-Qf-v560uzTWp18E,471
2
2
  ens/_normalization.py,sha256=t_abmu3z2QcTcX6gVaSfdUzz0_E5aGCPvuj0Hftd-Kg,16900
3
3
  ens/abis.py,sha256=0Ec_lqe7HBsVpQrID3ccFMhx8Vb7S0TGFbeuRdXhuCE,34745
4
- ens/async_ens.py,sha256=o-1m6dMC9Wcq9lXxJJ2UzcJZpMTeNBD82dnpvUFja3k,22669
4
+ ens/async_ens.py,sha256=_nXXutnTdJPomhP5VbROUhFnFu5rLkq4X72xWII-j84,22673
5
5
  ens/auto.py,sha256=w_E6Ua5ZmJVxfdii2aG5I_kQG5B9U5Y2qIFKVNhXo98,41
6
6
  ens/base_ens.py,sha256=zn3lIV5-vkBEvdOAIVkE78wwTdJx7VG_fXqQmLJ_j7w,3507
7
7
  ens/constants.py,sha256=XCO4Pntwdnw10K_AZ86V0cqcvdUoOkEZvRqoDdFPE_w,913
8
8
  ens/contract_data.py,sha256=CZa7Uxzq6rT-KonwHHM_wo-5ry0j1DMbikgEaP27Uy8,148602
9
- ens/ens.py,sha256=4LLQ_XDHhlPlG0-RGAErGZ9ltybg4yKyftdW84AeldE,21718
9
+ ens/ens.py,sha256=Es4dNXVhpHPTF1ZN17hmf6VIHb91fKVMCoVnFVo36ZA,21722
10
10
  ens/exceptions.py,sha256=FVnGiWkt1IcAATfSxoWz9hwrlVG_-WCpraTo8nSHCxA,2441
11
11
  ens/utils.py,sha256=Ro2-kcowwIgNExxNDQ1CpSFiGL9WSP_NCxp_qLzGWHw,8985
12
12
  ens/specs/nf.json,sha256=tPXKzdhgu9gqNi0UhKC1kzPqSBgy4yHm5TL19RQHBqU,49038
13
13
  ens/specs/normalization_spec.json,sha256=8mmjBj4OoYCn7pD4P7hqKP_qy6rpYzpyRinSH3CCP9M,3171499
14
14
  web3/__init__.py,sha256=P11QAEV_GYoZq9ij8gDzFx5tKzJY2aMXG-keg2Lg1xs,1277
15
15
  web3/constants.py,sha256=eQLRQVMFPbgpOjjkPTMHkY-syncJuO-sPX5UrCSRjzQ,564
16
- web3/datastructures.py,sha256=clLaeQ3n8bThC4l0ByTzkplOkfJSfokRMROdPaGUIek,11414
16
+ web3/datastructures.py,sha256=J5rdpnuS10pKUfPYqcoorkDw-aHHZNrdiW-Bh7dVDwI,11514
17
17
  web3/exceptions.py,sha256=GMIrWTkYDR0jtvtdOlgl_s6fctTibW4Ytw4So5BY4uE,9584
18
18
  web3/geth.py,sha256=xVBZWSksBo2ipesAN9V5hzDc_te7kU8ueicFdvpkSO4,7370
19
19
  web3/logs.py,sha256=ROs-mDMH_ZOecE7hfbWA5yp27G38FbLjX4lO_WtlZxQ,198
20
20
  web3/main.py,sha256=eVdSh7m_iBMf3au0Aj49TZ7NSaRbN1Ccsng9Fuu8dME,16162
21
- web3/manager.py,sha256=lbMe9ZJRe3LJjXice1yNHMHyOEHIIqLtgPLDrZ5fzYc,25185
21
+ web3/manager.py,sha256=DudssLJqK8SC7_W1JzBKbEj8mqLEDJCMox_THB9C7II,26664
22
22
  web3/method.py,sha256=Q7EWTwI4TxqAbJ3mZrdvLc9wfV-8o8sOzS_pbsRgAP0,8601
23
23
  web3/module.py,sha256=CDlnDrrWzkCJtd3gzHZ972l-6En6IyFEWwB7TXkHHLM,5617
24
24
  web3/net.py,sha256=Y3vPzHWVFkfHEZoJxjDOt4tp5ERmZrMuyi4ZFOLmIeA,1562
25
25
  web3/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
26
26
  web3/testing.py,sha256=Ury_-7XSstJ8bkCfdGEi4Cr76QzSfW7v_zfPlDlLJj0,923
27
27
  web3/tracing.py,sha256=ZcOam7t-uEZXyui6Cndv6RYeCZP5jh1TBn2hG8sv17Q,3098
28
- web3/types.py,sha256=Nkck9FvREuCvhAeg0OyQv2zg1YTAXNWcvgMyFnWLNi4,13975
28
+ web3/types.py,sha256=PFbVpEUAQhs6tgbolFGfuzXz7nfh7np6fekOgxU303c,13872
29
29
  web3/_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
30
30
  web3/_utils/abi.py,sha256=Y0vIFLEKwiMTdedxRPxVMQ1l-GbRRJia1AP1DqLBvjU,27430
31
31
  web3/_utils/abi_element_identifiers.py,sha256=m305lsvUZk-jkPixT0IJd9P5sXqMvmwlwlLeBgEAnBQ,55
@@ -40,12 +40,12 @@ web3/_utils/empty.py,sha256=ccgxFk5qm2x2ZeD8b17wX5cCAJPkPFuHrNQNMDslytY,132
40
40
  web3/_utils/encoding.py,sha256=yS3awPQshfqMqEgiZWWU2AG8Kq_mrCH9VwHvlMhrGw4,9282
41
41
  web3/_utils/ens.py,sha256=2BvzfegBkR7vH3Fq7lo_LsgfT912Zj-mR8eUt6o_lBA,2434
42
42
  web3/_utils/error_formatters_utils.py,sha256=uRXm6P6z4cUTTlQRLFLtuC3FYOjR0lrIlQToR5f_gzI,6868
43
- web3/_utils/events.py,sha256=sVAXWUMmWKwYguWzk_jqra3rI6NZ55T3XfDp4_aDa-8,17044
43
+ web3/_utils/events.py,sha256=eZEUDImd4-s0wQxdzHn5llYoTwMaKQpakoccoU85_R0,17036
44
44
  web3/_utils/fee_utils.py,sha256=MFt27R9E3qFP-Hf87-Lzv0JAiuYRE_qqafyTmzctAYA,2145
45
45
  web3/_utils/filters.py,sha256=1WX2Vgmat8QKj0WNm_GoRcVp4iJ0BhaIpM_RbcZlBzs,11860
46
46
  web3/_utils/formatters.py,sha256=RfRZU0aXC99s6OoLMY7D-fcYJyVAYBEwdbw-JIDjbZE,3067
47
47
  web3/_utils/http.py,sha256=2R3UOeZmwiQGc3ladf78R9AnufbGaTXAntqf-ZQlZPI,230
48
- web3/_utils/http_session_manager.py,sha256=oc4PTIQAFu2jBxa1OJqPajNxsan95U2JId7J_RFWdXY,11928
48
+ web3/_utils/http_session_manager.py,sha256=8nfXMPlOpZ2rMuo-aR46BxzMGrERAmHLshNC9qxEvuA,12591
49
49
  web3/_utils/hypothesis.py,sha256=4Cm4iOWv-uP9irg_Pv63kYNDYUAGhnUH6fOPWRw3A0g,209
50
50
  web3/_utils/math.py,sha256=4oU5YdbQBXElxK00CxmUZ94ApXFu9QT_TrO0Kho1HTs,1083
51
51
  web3/_utils/method_formatters.py,sha256=a9VxHy9KnraxT7EddFd_CIS82SIOXKoZ_SmdxGE4K-Y,36902
@@ -89,25 +89,25 @@ web3/_utils/contract_sources/contract_data/storage_contract.py,sha256=fZ-4ho-fbV
89
89
  web3/_utils/contract_sources/contract_data/string_contract.py,sha256=fJHQg_CxzOt7Ojp5Af067M46tyY6CARkzycS0fL6reQ,11228
90
90
  web3/_utils/contract_sources/contract_data/tuple_contracts.py,sha256=PPzVF67kRpeNLXGjUGjpIowGyD3F6fMzqYLuOwXRZbE,23176
91
91
  web3/_utils/module_testing/__init__.py,sha256=Xr_S46cjr0mypD_Y4ZbeF1EJ-XWfNxWUks5ykhzN10c,485
92
- web3/_utils/module_testing/eth_module.py,sha256=_6pTHSKt3IzWdFe8gYGC1Hv56VJaVXaaRYouv-BM4hQ,187454
92
+ web3/_utils/module_testing/eth_module.py,sha256=63jLDwrFMTEl6bPiWVkeW7vQI86JxNMtD1OF1r_hs90,187535
93
93
  web3/_utils/module_testing/go_ethereum_admin_module.py,sha256=_c-6SyzZkfAJ-7ySXUpw9FEr4cg-ShRdAGSAHWanCtY,3406
94
94
  web3/_utils/module_testing/go_ethereum_debug_module.py,sha256=BP1UjK-5ewkYMilvW9jtZX5Mc9BGh3QlJWPXqDNWizU,4144
95
95
  web3/_utils/module_testing/go_ethereum_txpool_module.py,sha256=5f8XL8-2x3keyGRaITxMQYl9oQzjgqGn8zobB-j9BPs,1176
96
- web3/_utils/module_testing/module_testing_utils.py,sha256=TiGZNipE1uBRKagnrxmID8coBuNjoy-XNSL2ZWWITks,7303
96
+ web3/_utils/module_testing/module_testing_utils.py,sha256=9NfSislx36DWe9IcK-IYZHzMDNp9JKcOJjJ7jIW_wrU,5969
97
97
  web3/_utils/module_testing/net_module.py,sha256=ifUTC-5fTcQbwpm0X09OdD5RSPnn00T8klFeYe8tTm4,1272
98
- web3/_utils/module_testing/persistent_connection_provider.py,sha256=cmwgngYi-2zKPRljUOY-QG_Ra_T9vDMzHVa68HFKMn0,29247
98
+ web3/_utils/module_testing/persistent_connection_provider.py,sha256=rmPrXpmaOz7B2cIMyG0pEO5l8hevxLpfu474zykRCug,30603
99
99
  web3/_utils/module_testing/utils.py,sha256=bvF57wKVbfnXGRM4kqEZpysPrr9LvAQy-E-huk1HpxM,13561
100
100
  web3/_utils/module_testing/web3_module.py,sha256=7c6penGbHn381fPTYY6DsXKv56xGQpYkHljOsr2gbaw,25413
101
101
  web3/auto/__init__.py,sha256=ZbzAiCZMdt_tCTTPvH6t8NCVNroKKkt7TSVBBNR74Is,44
102
102
  web3/auto/gethdev.py,sha256=MuWD2gxv0xDv_SzPsp9mSkS1oG4P54xFK83qw9NvswA,438
103
103
  web3/beacon/__init__.py,sha256=Ac6YiNgU8D8Ynnh5RwSCx2NwPyjnpFjpXeHuSssFbaU,113
104
- web3/beacon/api_endpoints.py,sha256=0mHrYFYAWHfF9OGzrFdg012L_ocU2nGDXUTU1isOo7o,2272
105
- web3/beacon/async_beacon.py,sha256=CPzvyZnMibSYsoIJVrjd3XvZ9aB0bgQRtCP0X0Ekp0o,8156
106
- web3/beacon/beacon.py,sha256=tPA9ABPm6MyzbzutiphkhFzOAxLresmftG5UjWkuNyY,7236
104
+ web3/beacon/api_endpoints.py,sha256=rkoy4d6igjgHbI0HSE9FEdZSYw94KhPz1gGaPdEjMCg,2632
105
+ web3/beacon/async_beacon.py,sha256=CWchRZANN57174sWz90177eMz0kfQPROQlBLGWNxqs8,9763
106
+ web3/beacon/beacon.py,sha256=awL60kk7syulb2tuwkOFnkS1eki_tZxAk4p34LGPGho,8707
107
107
  web3/contract/__init__.py,sha256=qeZRtTw9xriwoD82w6vePDuPBZ35-CMVdkzViBSH3Qs,293
108
- web3/contract/async_contract.py,sha256=VOh1CbOKQicpgGxtppZMGCLzI9zkOK6tg-hH6f1oP7Q,28123
109
- web3/contract/base_contract.py,sha256=KeIf1eowua36dLuEpi2xnt6Bqh3eH2BuNJGtB8wa7j8,47021
110
- web3/contract/contract.py,sha256=ShsgOBYaQdCw6GwlgmjYWLXd9i_6hwDVyzzmkYBXOVc,28092
108
+ web3/contract/async_contract.py,sha256=yjfsQyEzx7M_93TsURg1IXHg8qnmfyAn-MezBWm6owA,20534
109
+ web3/contract/base_contract.py,sha256=vQVcne9luQ35eBheRh1Jc_jXOp2uDxIotKK9O1EQjQY,54371
110
+ web3/contract/contract.py,sha256=-TJJMjwybZmQo8-DtGhrjIr7TwVXFoiIsdMan1NFgQY,20562
111
111
  web3/contract/utils.py,sha256=mrW3WIxki6EJ1kNqyGp20SMJIu4GqAzOFgMuzpsHB2M,19363
112
112
  web3/eth/__init__.py,sha256=qDLxOcHHIzzPD7xzwy6Wcs0lLPQieB7WN0Ax25ctit8,197
113
113
  web3/eth/async_eth.py,sha256=Wqm03xSbSmPDxar3echSZGpiexTNk6yjeAaHKn971A8,24138
@@ -118,7 +118,7 @@ web3/gas_strategies/rpc.py,sha256=3Va-32jdmHkX7tzQCmh17ms2D6te5zZcqHP1326BdpY,35
118
118
  web3/gas_strategies/time_based.py,sha256=oGk6nBUD4iMC8wl1vzf-nhURaqyPWYdPvNU0C3RIs8g,9071
119
119
  web3/middleware/__init__.py,sha256=fSmPCYJOO8Qp5p-Vm_Z4XPJATu2qN7KJRypYNSO6_uM,2830
120
120
  web3/middleware/attrdict.py,sha256=tIoMEZ3BkmEafnwitGY70o0GS9ShfwReDMxkHuvcOwI,2092
121
- web3/middleware/base.py,sha256=aHBUWc5pSohLUZ7zcCgrVqp_H_1PTqh31x2n6vWqzuY,5376
121
+ web3/middleware/base.py,sha256=jUY19tw6iiJenDprYqkTeIESd8qPcTvNALP3Vhp86qk,5728
122
122
  web3/middleware/buffered_gas_estimate.py,sha256=EmxUd-uO959UVroPsPKkl7oDa8Tw6N8BQLB6Urng5Eo,1647
123
123
  web3/middleware/filter.py,sha256=I09sSE_q_dhWX5_24KVWhVXZNevwViI7wucJBP4TZl4,22221
124
124
  web3/middleware/formatting.py,sha256=hqe5XQE1n5Fmj6riJp7i3oIoZkd-4ChQc7UK8f3HB6I,7567
@@ -130,9 +130,9 @@ web3/middleware/signing.py,sha256=1DOYxpmCra-Qq5r42237q3b54uDO-QHjMVMulxVpLVQ,58
130
130
  web3/middleware/stalecheck.py,sha256=oWRA69BGIbNGjHSnUVOBnoxOYJZYjzRzlqqL5RRlnzk,2680
131
131
  web3/middleware/validation.py,sha256=QxActrJk_zsXXiwpadP2MUjZBS5E50OJOtUwVrm9XVo,4280
132
132
  web3/providers/__init__.py,sha256=YkcSzE9AubvSp-UfvJjyCrdepvziysbqeq2LT0ImDoc,936
133
- web3/providers/async_base.py,sha256=A-irjLM6aogj1B1YLM4_wz35iuqr91k_FJ7nD82qv9I,7625
133
+ web3/providers/async_base.py,sha256=4u1okZDig5jEcmYtRwod13RpEafUAx-ZNdRy4JI-rWE,7687
134
134
  web3/providers/auto.py,sha256=Zx3CHKoRkmiw3Jte2BLNPiJAFd8rDXNGfA3XtxZvHgc,3465
135
- web3/providers/base.py,sha256=4bJTniP-k4FmF23gBUq6YSQkC04qc5LgH6HoJ38a_xE,6380
135
+ web3/providers/base.py,sha256=2morKtz6l_XuMQ8gt9eNtC0r64JnsIzFrUHlJQQ7F7Y,6440
136
136
  web3/providers/ipc.py,sha256=19jm5e-mytwx_s-s8hGMCK9sfOCgwwr_1hHcHQyB_7o,6514
137
137
  web3/providers/legacy_websocket.py,sha256=goS-ww86ijftbYs7QiqvrZZFycHBd5BD6U18yVQ7lF8,4767
138
138
  web3/providers/eth_tester/__init__.py,sha256=UggyBQdeAyjy1awATW1933jkJcpqqaUYUQEFAQnA2o0,163
@@ -143,14 +143,14 @@ web3/providers/persistent/__init__.py,sha256=X7tFKJL5BXSwciq5_bRwGRB6bfdWBkIPPWM
143
143
  web3/providers/persistent/async_ipc.py,sha256=dlySmRkVsKWOjb2w08n38PTcoI5MtviwqsRxq3YUg6M,5006
144
144
  web3/providers/persistent/persistent.py,sha256=fMVeS-BQ42C8XDH7G_N4WWdlUInmNhnU2S8UBfqcKeI,15072
145
145
  web3/providers/persistent/persistent_connection.py,sha256=NxxS-KeJhV07agg8CtJvmE-Ff-wLggQYpz4gdgVRDNU,3011
146
- web3/providers/persistent/request_processor.py,sha256=JLVDc75E9U1s7DA9coqxDRMtYthWHS5D-cpxxH1Gmnc,14390
146
+ web3/providers/persistent/request_processor.py,sha256=MEfPM5nezjvXS8KMpH65JEIP7qNZ4uf56CcbN-4Hhr0,14712
147
147
  web3/providers/persistent/subscription_container.py,sha256=yd5pjjz_YnRLuUoxZUxt29Md1VUTemdUIBq8PCJre6Y,1734
148
- web3/providers/persistent/subscription_manager.py,sha256=N7XMhscjD5-gQT4begUlwDizrloXL6uGYIIzi_eo-jA,8810
148
+ web3/providers/persistent/subscription_manager.py,sha256=rH3oIWdj_pbIfjdMwwigy-4IFMbX2u_SEjPIPWJY84I,11265
149
149
  web3/providers/persistent/utils.py,sha256=gfY7w1HB8xuE7OujSrbwWYjQuQ8nzRBoxoL8ESinqWM,1140
150
150
  web3/providers/persistent/websocket.py,sha256=d-IZNPfT6RGChTLDjHR4dH2y02U9KJoWpZlfxpiG1so,4353
151
151
  web3/providers/rpc/__init__.py,sha256=mObsuwjr7xyHnnRlwzsmbp2JgZdn2NXSSctvpye4AuQ,149
152
- web3/providers/rpc/async_rpc.py,sha256=lhLiTi3zX6nzAO7T6TsF3-u_d6GmVTe5cuhw4OZb7zw,6104
153
- web3/providers/rpc/rpc.py,sha256=3gV7IhpBbaHv8VdoBs7AV4oWtGthoA5pGa35twhaynw,5865
152
+ web3/providers/rpc/async_rpc.py,sha256=r8OYrCh0MoUUBwRLT8rLo98cjziLs1E782vCEzFzGVc,6314
153
+ web3/providers/rpc/rpc.py,sha256=qb17d1rocm1xOV7Pcqye9lQqFfbWmRnB6W-m1E1mB5A,6075
154
154
  web3/providers/rpc/utils.py,sha256=_mtoZMMIoZpPA8J8U5DfRxaNQmi8bw0ZVUiqn1Nz4co,2154
155
155
  web3/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
156
156
  web3/scripts/install_pre_releases.py,sha256=uVxsZk239640yxiqlPhfXxZKSsh3858pURKppi9kM5U,821
@@ -163,9 +163,9 @@ web3/utils/address.py,sha256=nzPLiWWCG9BqstDeDOcDwEpteJ8im6ywjLHKpd5akhw,1186
163
163
  web3/utils/async_exception_handling.py,sha256=OoKbLNwWcY9dxLCbOfxcQPSB1OxWraNqcw8V0ZX-JaQ,3173
164
164
  web3/utils/caching.py,sha256=Rkt5IN8A7YBZYXlCRaWa64FiDhTXsxzTGGQdGBB4Nzw,2514
165
165
  web3/utils/exception_handling.py,sha256=n-MtO5LNzJDVzHTzO6olzfb2_qEVtVRvink0ixswg-Y,2917
166
- web3/utils/subscriptions.py,sha256=IDjk08ZQM6cOI3MdFN-d27m90Ml_P0GQcWMKRfUiRzg,8491
167
- web3-7.7.0.dist-info/LICENSE,sha256=ScEyLx1vWrB0ybKiZKKTXm5QhVksHCEUtTp4lwYV45I,1095
168
- web3-7.7.0.dist-info/METADATA,sha256=Tn2QT-_nIcEicSSuwLEfGdo4ZvohbuWaa69CN4-vCKQ,5541
169
- web3-7.7.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
170
- web3-7.7.0.dist-info/top_level.txt,sha256=iwupuJh7wgypXrpk_awszyri3TahRr5vxSphNyvt1bU,9
171
- web3-7.7.0.dist-info/RECORD,,
166
+ web3/utils/subscriptions.py,sha256=iqlIK5xXM3XY6wEJQiovxrtKRvqpXmjhkPmrm15FnB8,8578
167
+ web3-7.8.0.dist-info/LICENSE,sha256=ENGC4gSn0kYaC_mlaXOEwCKmA6W7Z9MeSemc5O2k-h0,1095
168
+ web3-7.8.0.dist-info/METADATA,sha256=xcLoefR42JzPL3xkAnJiSFGGbAAK3jY6GaVBkVLNVoA,5541
169
+ web3-7.8.0.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
170
+ web3-7.8.0.dist-info/top_level.txt,sha256=iwupuJh7wgypXrpk_awszyri3TahRr5vxSphNyvt1bU,9
171
+ web3-7.8.0.dist-info/RECORD,,
File without changes