web3 7.0.0b3__py3-none-any.whl → 7.0.0b4__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.
- ens/_normalization.py +1 -3
- ens/async_ens.py +12 -9
- ens/contract_data.py +2 -2
- ens/ens.py +8 -5
- ens/exceptions.py +19 -27
- ens/specs/nf.json +1 -1
- ens/specs/normalization_spec.json +1 -1
- ens/utils.py +17 -10
- web3/__init__.py +2 -7
- web3/_utils/abi.py +30 -29
- web3/_utils/async_transactions.py +7 -4
- web3/_utils/blocks.py +6 -2
- web3/_utils/caching.py +7 -3
- web3/_utils/compat/__init__.py +0 -3
- web3/_utils/contract_sources/compile_contracts.py +1 -1
- web3/_utils/contracts.py +12 -12
- web3/_utils/datatypes.py +5 -1
- web3/_utils/decorators.py +6 -1
- web3/_utils/empty.py +1 -1
- web3/_utils/encoding.py +15 -10
- web3/_utils/error_formatters_utils.py +5 -3
- web3/_utils/events.py +20 -18
- web3/_utils/fee_utils.py +2 -4
- web3/_utils/filters.py +17 -12
- web3/_utils/formatters.py +2 -2
- web3/_utils/math.py +3 -2
- web3/_utils/method_formatters.py +24 -5
- web3/_utils/module.py +2 -1
- web3/_utils/module_testing/eth_module.py +62 -69
- web3/_utils/module_testing/go_ethereum_personal_module.py +1 -1
- web3/_utils/module_testing/module_testing_utils.py +1 -3
- web3/_utils/module_testing/utils.py +14 -7
- web3/_utils/normalizers.py +3 -3
- web3/_utils/request.py +4 -4
- web3/_utils/rpc_abi.py +5 -1
- web3/_utils/threads.py +8 -7
- web3/_utils/transactions.py +14 -12
- web3/_utils/type_conversion.py +5 -1
- web3/_utils/validation.py +12 -10
- web3/contract/async_contract.py +12 -7
- web3/contract/base_contract.py +50 -56
- web3/contract/contract.py +12 -6
- web3/contract/utils.py +11 -6
- web3/datastructures.py +22 -12
- web3/eth/async_eth.py +33 -28
- web3/eth/base_eth.py +7 -3
- web3/eth/eth.py +18 -13
- web3/exceptions.py +30 -59
- web3/gas_strategies/time_based.py +2 -4
- web3/geth.py +1 -3
- web3/main.py +6 -2
- web3/manager.py +7 -5
- web3/method.py +13 -5
- web3/middleware/base.py +4 -2
- web3/middleware/filter.py +27 -17
- web3/middleware/formatting.py +6 -3
- web3/middleware/names.py +4 -1
- web3/middleware/signing.py +6 -2
- web3/middleware/stalecheck.py +2 -1
- web3/providers/eth_tester/defaults.py +1 -1
- web3/providers/eth_tester/main.py +5 -4
- web3/providers/eth_tester/middleware.py +10 -1
- web3/providers/ipc.py +7 -3
- web3/providers/persistent/async_ipc.py +6 -7
- web3/providers/persistent/persistent.py +11 -1
- web3/providers/persistent/request_processor.py +7 -7
- web3/providers/persistent/websocket.py +3 -3
- web3/providers/rpc/async_rpc.py +23 -6
- web3/providers/rpc/rpc.py +27 -16
- web3/testing.py +4 -4
- web3/tools/benchmark/main.py +13 -9
- web3/tools/benchmark/utils.py +1 -1
- web3/tracing.py +9 -5
- web3/types.py +19 -22
- {web3-7.0.0b3.dist-info → web3-7.0.0b4.dist-info}/METADATA +13 -28
- {web3-7.0.0b3.dist-info → web3-7.0.0b4.dist-info}/RECORD +79 -79
- {web3-7.0.0b3.dist-info → web3-7.0.0b4.dist-info}/LICENSE +0 -0
- {web3-7.0.0b3.dist-info → web3-7.0.0b4.dist-info}/WHEEL +0 -0
- {web3-7.0.0b3.dist-info → web3-7.0.0b4.dist-info}/top_level.txt +0 -0
|
@@ -15,6 +15,9 @@ from web3._utils.caching import (
|
|
|
15
15
|
RequestInformation,
|
|
16
16
|
generate_cache_key,
|
|
17
17
|
)
|
|
18
|
+
from web3.exceptions import (
|
|
19
|
+
Web3ValueError,
|
|
20
|
+
)
|
|
18
21
|
from web3.types import (
|
|
19
22
|
RPCEndpoint,
|
|
20
23
|
RPCResponse,
|
|
@@ -136,9 +139,9 @@ class RequestProcessor:
|
|
|
136
139
|
) -> RequestInformation:
|
|
137
140
|
if "method" in response and response["method"] == "eth_subscription":
|
|
138
141
|
if "params" not in response:
|
|
139
|
-
raise
|
|
142
|
+
raise Web3ValueError("Subscription response must have params field")
|
|
140
143
|
if "subscription" not in response["params"]:
|
|
141
|
-
raise
|
|
144
|
+
raise Web3ValueError(
|
|
142
145
|
"Subscription response params must have subscription field"
|
|
143
146
|
)
|
|
144
147
|
|
|
@@ -266,7 +269,7 @@ class RequestProcessor:
|
|
|
266
269
|
)
|
|
267
270
|
else:
|
|
268
271
|
if not cache_key:
|
|
269
|
-
raise
|
|
272
|
+
raise Web3ValueError(
|
|
270
273
|
"Must provide cache key when popping a non-subscription response."
|
|
271
274
|
)
|
|
272
275
|
|
|
@@ -283,10 +286,7 @@ class RequestProcessor:
|
|
|
283
286
|
# request processor class methods
|
|
284
287
|
|
|
285
288
|
def clear_caches(self) -> None:
|
|
286
|
-
"""
|
|
287
|
-
Clear the request processor caches.
|
|
288
|
-
"""
|
|
289
|
-
|
|
289
|
+
"""Clear the request processor caches."""
|
|
290
290
|
self._request_information_cache.clear()
|
|
291
291
|
self._request_response_cache.clear()
|
|
292
292
|
self._subscription_response_queue = asyncio.Queue(
|
|
@@ -71,9 +71,9 @@ class WebSocketProvider(PersistentConnectionProvider):
|
|
|
71
71
|
# `PersistentConnectionProvider` kwargs can be passed through
|
|
72
72
|
**kwargs: Any,
|
|
73
73
|
) -> None:
|
|
74
|
-
self.endpoint_uri =
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
self.endpoint_uri = (
|
|
75
|
+
URI(endpoint_uri) if endpoint_uri is not None else get_default_endpoint()
|
|
76
|
+
)
|
|
77
77
|
|
|
78
78
|
if not any(
|
|
79
79
|
self.endpoint_uri.startswith(prefix)
|
web3/providers/rpc/async_rpc.py
CHANGED
|
@@ -20,6 +20,10 @@ from eth_utils import (
|
|
|
20
20
|
to_dict,
|
|
21
21
|
)
|
|
22
22
|
|
|
23
|
+
from web3._utils.empty import (
|
|
24
|
+
Empty,
|
|
25
|
+
empty,
|
|
26
|
+
)
|
|
23
27
|
from web3._utils.http import (
|
|
24
28
|
construct_user_agent,
|
|
25
29
|
)
|
|
@@ -54,9 +58,9 @@ class AsyncHTTPProvider(AsyncJSONBaseProvider):
|
|
|
54
58
|
self,
|
|
55
59
|
endpoint_uri: Optional[Union[URI, str]] = None,
|
|
56
60
|
request_kwargs: Optional[Any] = None,
|
|
57
|
-
exception_retry_configuration:
|
|
58
|
-
ExceptionRetryConfiguration
|
|
59
|
-
] =
|
|
61
|
+
exception_retry_configuration: Union[
|
|
62
|
+
ExceptionRetryConfiguration, Empty
|
|
63
|
+
] = empty,
|
|
60
64
|
) -> None:
|
|
61
65
|
if endpoint_uri is None:
|
|
62
66
|
self.endpoint_uri = get_default_http_endpoint()
|
|
@@ -64,7 +68,7 @@ class AsyncHTTPProvider(AsyncJSONBaseProvider):
|
|
|
64
68
|
self.endpoint_uri = URI(endpoint_uri)
|
|
65
69
|
|
|
66
70
|
self._request_kwargs = request_kwargs or {}
|
|
67
|
-
self.
|
|
71
|
+
self._exception_retry_configuration = exception_retry_configuration
|
|
68
72
|
|
|
69
73
|
super().__init__()
|
|
70
74
|
|
|
@@ -74,12 +78,25 @@ class AsyncHTTPProvider(AsyncJSONBaseProvider):
|
|
|
74
78
|
def __str__(self) -> str:
|
|
75
79
|
return f"RPC connection {self.endpoint_uri}"
|
|
76
80
|
|
|
81
|
+
@property
|
|
82
|
+
def exception_retry_configuration(self) -> ExceptionRetryConfiguration:
|
|
83
|
+
if isinstance(self._exception_retry_configuration, Empty):
|
|
84
|
+
self._exception_retry_configuration = ExceptionRetryConfiguration(
|
|
85
|
+
errors=(ClientError, TimeoutError)
|
|
86
|
+
)
|
|
87
|
+
return self._exception_retry_configuration
|
|
88
|
+
|
|
89
|
+
@exception_retry_configuration.setter
|
|
90
|
+
def exception_retry_configuration(
|
|
91
|
+
self, value: Union[ExceptionRetryConfiguration, Empty]
|
|
92
|
+
) -> None:
|
|
93
|
+
self._exception_retry_configuration = value
|
|
94
|
+
|
|
77
95
|
@to_dict
|
|
78
96
|
def get_request_kwargs(self) -> Iterable[Tuple[str, Any]]:
|
|
79
97
|
if "headers" not in self._request_kwargs:
|
|
80
98
|
yield "headers", self.get_request_headers()
|
|
81
|
-
|
|
82
|
-
yield key, value
|
|
99
|
+
yield from self._request_kwargs.items()
|
|
83
100
|
|
|
84
101
|
def get_request_headers(self) -> Dict[str, str]:
|
|
85
102
|
return {
|
web3/providers/rpc/rpc.py
CHANGED
|
@@ -18,6 +18,10 @@ from eth_utils import (
|
|
|
18
18
|
)
|
|
19
19
|
import requests
|
|
20
20
|
|
|
21
|
+
from web3._utils.empty import (
|
|
22
|
+
Empty,
|
|
23
|
+
empty,
|
|
24
|
+
)
|
|
21
25
|
from web3._utils.http import (
|
|
22
26
|
construct_user_agent,
|
|
23
27
|
)
|
|
@@ -51,26 +55,16 @@ if TYPE_CHECKING:
|
|
|
51
55
|
class HTTPProvider(JSONBaseProvider):
|
|
52
56
|
logger = logging.getLogger("web3.providers.HTTPProvider")
|
|
53
57
|
endpoint_uri = None
|
|
54
|
-
|
|
55
|
-
_request_args = None
|
|
56
58
|
_request_kwargs = None
|
|
57
59
|
|
|
58
|
-
exception_retry_configuration: Optional[ExceptionRetryConfiguration] = None
|
|
59
|
-
|
|
60
60
|
def __init__(
|
|
61
61
|
self,
|
|
62
62
|
endpoint_uri: Optional[Union[URI, str]] = None,
|
|
63
63
|
request_kwargs: Optional[Any] = None,
|
|
64
64
|
session: Optional[Any] = None,
|
|
65
|
-
exception_retry_configuration:
|
|
66
|
-
ExceptionRetryConfiguration
|
|
67
|
-
|
|
68
|
-
ConnectionError,
|
|
69
|
-
requests.HTTPError,
|
|
70
|
-
requests.Timeout,
|
|
71
|
-
)
|
|
72
|
-
)
|
|
73
|
-
),
|
|
65
|
+
exception_retry_configuration: Union[
|
|
66
|
+
ExceptionRetryConfiguration, Empty
|
|
67
|
+
] = empty,
|
|
74
68
|
) -> None:
|
|
75
69
|
if endpoint_uri is None:
|
|
76
70
|
self.endpoint_uri = get_default_http_endpoint()
|
|
@@ -78,7 +72,7 @@ class HTTPProvider(JSONBaseProvider):
|
|
|
78
72
|
self.endpoint_uri = URI(endpoint_uri)
|
|
79
73
|
|
|
80
74
|
self._request_kwargs = request_kwargs or {}
|
|
81
|
-
self.
|
|
75
|
+
self._exception_retry_configuration = exception_retry_configuration
|
|
82
76
|
|
|
83
77
|
if session:
|
|
84
78
|
cache_and_return_session(self.endpoint_uri, session)
|
|
@@ -88,12 +82,29 @@ class HTTPProvider(JSONBaseProvider):
|
|
|
88
82
|
def __str__(self) -> str:
|
|
89
83
|
return f"RPC connection {self.endpoint_uri}"
|
|
90
84
|
|
|
85
|
+
@property
|
|
86
|
+
def exception_retry_configuration(self) -> ExceptionRetryConfiguration:
|
|
87
|
+
if isinstance(self._exception_retry_configuration, Empty):
|
|
88
|
+
self._exception_retry_configuration = ExceptionRetryConfiguration(
|
|
89
|
+
errors=(
|
|
90
|
+
ConnectionError,
|
|
91
|
+
requests.HTTPError,
|
|
92
|
+
requests.Timeout,
|
|
93
|
+
)
|
|
94
|
+
)
|
|
95
|
+
return self._exception_retry_configuration
|
|
96
|
+
|
|
97
|
+
@exception_retry_configuration.setter
|
|
98
|
+
def exception_retry_configuration(
|
|
99
|
+
self, value: Union[ExceptionRetryConfiguration, Empty]
|
|
100
|
+
) -> None:
|
|
101
|
+
self._exception_retry_configuration = value
|
|
102
|
+
|
|
91
103
|
@to_dict
|
|
92
104
|
def get_request_kwargs(self) -> Iterable[Tuple[str, Any]]:
|
|
93
105
|
if "headers" not in self._request_kwargs:
|
|
94
106
|
yield "headers", self.get_request_headers()
|
|
95
|
-
|
|
96
|
-
yield key, value
|
|
107
|
+
yield from self._request_kwargs.items()
|
|
97
108
|
|
|
98
109
|
def get_request_headers(self) -> Dict[str, str]:
|
|
99
110
|
return {
|
web3/testing.py
CHANGED
|
@@ -12,21 +12,21 @@ from web3.module import (
|
|
|
12
12
|
|
|
13
13
|
class Testing(Module):
|
|
14
14
|
def timeTravel(self, timestamp: int) -> None:
|
|
15
|
-
|
|
15
|
+
self.w3.manager.request_blocking(RPC.testing_timeTravel, [timestamp])
|
|
16
16
|
|
|
17
17
|
def mine(self, num_blocks: int = 1) -> None:
|
|
18
|
-
|
|
18
|
+
self.w3.manager.request_blocking(RPC.evm_mine, [num_blocks])
|
|
19
19
|
|
|
20
20
|
def snapshot(self) -> int:
|
|
21
21
|
self.last_snapshot_idx = self.w3.manager.request_blocking(RPC.evm_snapshot, [])
|
|
22
22
|
return self.last_snapshot_idx
|
|
23
23
|
|
|
24
24
|
def reset(self) -> None:
|
|
25
|
-
|
|
25
|
+
self.w3.manager.request_blocking(RPC.evm_reset, [])
|
|
26
26
|
|
|
27
27
|
def revert(self, snapshot_idx: Optional[int] = None) -> None:
|
|
28
28
|
if snapshot_idx is None:
|
|
29
29
|
revert_target = self.last_snapshot_idx
|
|
30
30
|
else:
|
|
31
31
|
revert_target = snapshot_idx
|
|
32
|
-
|
|
32
|
+
self.w3.manager.request_blocking(RPC.evm_revert, [revert_target])
|
web3/tools/benchmark/main.py
CHANGED
|
@@ -120,20 +120,20 @@ def main(logger: logging.Logger, num_calls: int) -> None:
|
|
|
120
120
|
{
|
|
121
121
|
"name": "eth_gasPrice",
|
|
122
122
|
"params": {},
|
|
123
|
-
"exec": lambda: w3_http.eth.gas_price,
|
|
124
|
-
"async_exec": lambda: async_w3_http.eth.gas_price,
|
|
123
|
+
"exec": lambda w3_http=w3_http: w3_http.eth.gas_price,
|
|
124
|
+
"async_exec": lambda async_w3_http=async_w3_http: async_w3_http.eth.gas_price, # noqa: E501
|
|
125
125
|
},
|
|
126
126
|
{
|
|
127
127
|
"name": "eth_sendTransaction",
|
|
128
128
|
"params": {},
|
|
129
|
-
"exec": lambda: w3_http.eth.send_transaction(
|
|
129
|
+
"exec": lambda w3_http=w3_http, coinbase=coinbase: w3_http.eth.send_transaction( # noqa: E501
|
|
130
130
|
{
|
|
131
131
|
"to": "0xd3CdA913deB6f67967B99D67aCDFa1712C293601",
|
|
132
132
|
"from": coinbase,
|
|
133
133
|
"value": Wei(1),
|
|
134
134
|
}
|
|
135
135
|
),
|
|
136
|
-
"async_exec": lambda: async_w3_http.eth.send_transaction(
|
|
136
|
+
"async_exec": lambda async_w3_http=async_w3_http, async_coinbase=async_coinbase: async_w3_http.eth.send_transaction( # noqa: E501
|
|
137
137
|
{
|
|
138
138
|
"to": "0xd3CdA913deB6f67967B99D67aCDFa1712C293601",
|
|
139
139
|
"from": async_coinbase,
|
|
@@ -144,18 +144,22 @@ def main(logger: logging.Logger, num_calls: int) -> None:
|
|
|
144
144
|
{
|
|
145
145
|
"name": "eth_blockNumber",
|
|
146
146
|
"params": {},
|
|
147
|
-
"exec": lambda: w3_http.eth.block_number,
|
|
148
|
-
"async_exec": lambda: async_w3_http.eth.block_number,
|
|
147
|
+
"exec": lambda w3_http=w3_http: w3_http.eth.block_number,
|
|
148
|
+
"async_exec": lambda async_w3_http=async_w3_http: async_w3_http.eth.block_number, # noqa: E501
|
|
149
149
|
},
|
|
150
150
|
{
|
|
151
151
|
"name": "eth_getBlock",
|
|
152
152
|
"params": {},
|
|
153
|
-
"exec": lambda: w3_http.eth.get_block(1),
|
|
154
|
-
"async_exec": lambda: async_w3_http.eth.get_block(
|
|
153
|
+
"exec": lambda w3_http=w3_http: w3_http.eth.get_block(1),
|
|
154
|
+
"async_exec": lambda async_w3_http=async_w3_http: async_w3_http.eth.get_block( # noqa: E501
|
|
155
|
+
1
|
|
156
|
+
),
|
|
155
157
|
},
|
|
156
158
|
]
|
|
157
159
|
|
|
158
|
-
def benchmark(
|
|
160
|
+
def benchmark(
|
|
161
|
+
method: Dict[str, Any], loop: asyncio.AbstractEventLoop = loop
|
|
162
|
+
) -> None:
|
|
159
163
|
outcomes: Dict[str, Union[str, float]] = defaultdict(lambda: "N/A")
|
|
160
164
|
outcomes["name"] = method["name"]
|
|
161
165
|
outcomes["HTTPProvider"] = sync_benchmark(
|
web3/tools/benchmark/utils.py
CHANGED
|
@@ -17,7 +17,7 @@ def wait_for_socket(ipc_path: str, timeout: int = 30) -> None:
|
|
|
17
17
|
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
|
|
18
18
|
sock.connect(ipc_path)
|
|
19
19
|
sock.settimeout(timeout)
|
|
20
|
-
except
|
|
20
|
+
except OSError:
|
|
21
21
|
time.sleep(0.01)
|
|
22
22
|
else:
|
|
23
23
|
break
|
web3/tracing.py
CHANGED
|
@@ -53,10 +53,10 @@ class Tracing(Module):
|
|
|
53
53
|
self._default_block = value
|
|
54
54
|
|
|
55
55
|
def trace_replay_transaction_munger(
|
|
56
|
-
self,
|
|
57
|
-
block_identifier: Union[_Hash32, BlockIdentifier],
|
|
58
|
-
mode: TraceMode = ["trace"],
|
|
56
|
+
self, block_identifier: Union[_Hash32, BlockIdentifier], mode: TraceMode = None
|
|
59
57
|
) -> Tuple[Union[BlockIdentifier, _Hash32], TraceMode]:
|
|
58
|
+
if mode is None:
|
|
59
|
+
mode = ["trace"]
|
|
60
60
|
return (block_identifier, mode)
|
|
61
61
|
|
|
62
62
|
trace_replay_transaction: Method[Callable[..., BlockTrace]] = Method(
|
|
@@ -86,9 +86,11 @@ class Tracing(Module):
|
|
|
86
86
|
def trace_call_munger(
|
|
87
87
|
self,
|
|
88
88
|
transaction: TxParams,
|
|
89
|
-
mode: TraceMode =
|
|
89
|
+
mode: TraceMode = None,
|
|
90
90
|
block_identifier: Optional[BlockIdentifier] = None,
|
|
91
91
|
) -> Tuple[TxParams, TraceMode, BlockIdentifier]:
|
|
92
|
+
if mode is None:
|
|
93
|
+
mode = ["trace"]
|
|
92
94
|
if "from" not in transaction and is_checksum_address(
|
|
93
95
|
self.w3.eth.default_account
|
|
94
96
|
):
|
|
@@ -105,8 +107,10 @@ class Tracing(Module):
|
|
|
105
107
|
)
|
|
106
108
|
|
|
107
109
|
def trace_transactions_munger(
|
|
108
|
-
self, raw_transaction: HexStr, mode: TraceMode =
|
|
110
|
+
self, raw_transaction: HexStr, mode: TraceMode = None
|
|
109
111
|
) -> Tuple[HexStr, TraceMode]:
|
|
112
|
+
if mode is None:
|
|
113
|
+
mode = ["trace"]
|
|
110
114
|
return raw_transaction, mode
|
|
111
115
|
|
|
112
116
|
trace_raw_transaction: Method[Callable[..., BlockTrace]] = Method(
|
web3/types.py
CHANGED
|
@@ -5,10 +5,12 @@ from typing import (
|
|
|
5
5
|
Coroutine,
|
|
6
6
|
Dict,
|
|
7
7
|
List,
|
|
8
|
+
Literal,
|
|
8
9
|
NewType,
|
|
9
10
|
Optional,
|
|
10
11
|
Sequence,
|
|
11
12
|
Type,
|
|
13
|
+
TypedDict,
|
|
12
14
|
TypeVar,
|
|
13
15
|
Union,
|
|
14
16
|
)
|
|
@@ -25,9 +27,7 @@ from hexbytes import (
|
|
|
25
27
|
)
|
|
26
28
|
|
|
27
29
|
from web3._utils.compat import (
|
|
28
|
-
Literal,
|
|
29
30
|
NotRequired,
|
|
30
|
-
TypedDict,
|
|
31
31
|
)
|
|
32
32
|
from web3._utils.function_identifiers import (
|
|
33
33
|
FallbackFn,
|
|
@@ -165,6 +165,8 @@ TxData = TypedDict(
|
|
|
165
165
|
TxParams = TypedDict(
|
|
166
166
|
"TxParams",
|
|
167
167
|
{
|
|
168
|
+
"accessList": AccessList,
|
|
169
|
+
"blobVersionedHashes": Sequence[Union[str, HexStr, bytes, HexBytes]],
|
|
168
170
|
"chainId": int,
|
|
169
171
|
"data": Union[bytes, HexStr],
|
|
170
172
|
# addr or ens
|
|
@@ -172,6 +174,7 @@ TxParams = TypedDict(
|
|
|
172
174
|
"gas": int,
|
|
173
175
|
# legacy pricing
|
|
174
176
|
"gasPrice": Wei,
|
|
177
|
+
"maxFeePerBlobGas": Union[str, Wei],
|
|
175
178
|
# dynamic fee pricing
|
|
176
179
|
"maxFeePerGas": Union[str, Wei],
|
|
177
180
|
"maxPriorityFeePerGas": Union[str, Wei],
|
|
@@ -185,15 +188,11 @@ TxParams = TypedDict(
|
|
|
185
188
|
)
|
|
186
189
|
|
|
187
190
|
|
|
188
|
-
WithdrawalData
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
"address": ChecksumAddress,
|
|
194
|
-
"amount": Gwei,
|
|
195
|
-
},
|
|
196
|
-
)
|
|
191
|
+
class WithdrawalData(TypedDict):
|
|
192
|
+
index: int
|
|
193
|
+
validator_index: int
|
|
194
|
+
address: ChecksumAddress
|
|
195
|
+
amount: Gwei
|
|
197
196
|
|
|
198
197
|
|
|
199
198
|
class BlockData(TypedDict, total=False):
|
|
@@ -220,6 +219,9 @@ class BlockData(TypedDict, total=False):
|
|
|
220
219
|
uncles: Sequence[HexBytes]
|
|
221
220
|
withdrawals: Sequence[WithdrawalData]
|
|
222
221
|
withdrawalsRoot: HexBytes
|
|
222
|
+
parentBeaconBlockRoot: HexBytes
|
|
223
|
+
blobGasUsed: int
|
|
224
|
+
excessBlobGas: int
|
|
223
225
|
|
|
224
226
|
# ExtraDataToPOAMiddleware replaces extraData w/ proofOfAuthorityData
|
|
225
227
|
proofOfAuthorityData: HexBytes
|
|
@@ -340,17 +342,12 @@ class FeeHistory(TypedDict):
|
|
|
340
342
|
reward: List[List[Wei]]
|
|
341
343
|
|
|
342
344
|
|
|
343
|
-
StateOverrideParams =
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
"state": Optional[Dict[HexStr, HexStr]],
|
|
350
|
-
"stateDiff": Optional[Dict[HexStr, HexStr]],
|
|
351
|
-
},
|
|
352
|
-
total=False,
|
|
353
|
-
)
|
|
345
|
+
class StateOverrideParams(TypedDict, total=False):
|
|
346
|
+
balance: Optional[Wei]
|
|
347
|
+
nonce: Optional[int]
|
|
348
|
+
code: Optional[Union[bytes, HexStr]]
|
|
349
|
+
state: Optional[Dict[HexStr, HexStr]]
|
|
350
|
+
stateDiff: Optional[Dict[HexStr, HexStr]]
|
|
354
351
|
|
|
355
352
|
|
|
356
353
|
StateOverride = Dict[ChecksumAddress, StateOverrideParams]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: web3
|
|
3
|
-
Version: 7.0.
|
|
3
|
+
Version: 7.0.0b4
|
|
4
4
|
Summary: web3.py
|
|
5
5
|
Home-page: https://github.com/ethereum/web3.py
|
|
6
6
|
Author: The Ethereum Foundation
|
|
@@ -20,12 +20,12 @@ Requires-Python: >=3.8
|
|
|
20
20
|
Description-Content-Type: text/markdown
|
|
21
21
|
License-File: LICENSE
|
|
22
22
|
Requires-Dist: aiohttp >=3.7.4.post0
|
|
23
|
-
Requires-Dist: eth-abi >=
|
|
24
|
-
Requires-Dist: eth-account >=0.
|
|
23
|
+
Requires-Dist: eth-abi >=5.0.1
|
|
24
|
+
Requires-Dist: eth-account >=0.12.0
|
|
25
25
|
Requires-Dist: eth-hash[pycryptodome] >=0.5.1
|
|
26
|
-
Requires-Dist: eth-typing >=
|
|
26
|
+
Requires-Dist: eth-typing >=4.0.0
|
|
27
27
|
Requires-Dist: eth-utils >=4.0.0
|
|
28
|
-
Requires-Dist: hexbytes
|
|
28
|
+
Requires-Dist: hexbytes >=1.2.0
|
|
29
29
|
Requires-Dist: pydantic >=2.4.0
|
|
30
30
|
Requires-Dist: requests >=2.16.0
|
|
31
31
|
Requires-Dist: typing-extensions >=4.0.1
|
|
@@ -33,46 +33,31 @@ Requires-Dist: websockets >=10.0.0
|
|
|
33
33
|
Requires-Dist: pyunormalize >=15.0.0
|
|
34
34
|
Requires-Dist: pywin32 >=223 ; platform_system == "Windows"
|
|
35
35
|
Provides-Extra: dev
|
|
36
|
-
Requires-Dist: eth-tester[py-evm]
|
|
36
|
+
Requires-Dist: eth-tester[py-evm] <0.12.0b1,>=0.11.0b1 ; extra == 'dev'
|
|
37
37
|
Requires-Dist: py-geth >=4.1.0 ; extra == 'dev'
|
|
38
|
-
Requires-Dist: black >=22.1.0 ; extra == 'dev'
|
|
39
|
-
Requires-Dist: blocklint >=0.2.4 ; extra == 'dev'
|
|
40
|
-
Requires-Dist: flake8 ==3.8.3 ; extra == 'dev'
|
|
41
|
-
Requires-Dist: isort >=5.11.0 ; extra == 'dev'
|
|
42
|
-
Requires-Dist: mypy ==1.4.1 ; extra == 'dev'
|
|
43
|
-
Requires-Dist: types-setuptools >=57.4.4 ; extra == 'dev'
|
|
44
|
-
Requires-Dist: types-requests >=2.26.1 ; extra == 'dev'
|
|
45
38
|
Requires-Dist: sphinx >=5.3.0 ; extra == 'dev'
|
|
46
39
|
Requires-Dist: sphinx-rtd-theme >=1.0.0 ; extra == 'dev'
|
|
47
40
|
Requires-Dist: towncrier <22,>=21 ; extra == 'dev'
|
|
41
|
+
Requires-Dist: build >=0.9.0 ; extra == 'dev'
|
|
48
42
|
Requires-Dist: bumpversion ; extra == 'dev'
|
|
49
43
|
Requires-Dist: flaky >=3.7.0 ; extra == 'dev'
|
|
50
44
|
Requires-Dist: hypothesis >=3.31.2 ; extra == 'dev'
|
|
51
|
-
Requires-Dist:
|
|
45
|
+
Requires-Dist: pre-commit >=3.4.0 ; extra == 'dev'
|
|
52
46
|
Requires-Dist: pytest-asyncio <0.23,>=0.18.1 ; extra == 'dev'
|
|
53
47
|
Requires-Dist: pytest-mock >=1.10 ; extra == 'dev'
|
|
54
48
|
Requires-Dist: pytest-watch >=4.2 ; extra == 'dev'
|
|
55
49
|
Requires-Dist: pytest-xdist >=1.29 ; extra == 'dev'
|
|
50
|
+
Requires-Dist: pytest >=7.0.0 ; extra == 'dev'
|
|
56
51
|
Requires-Dist: setuptools >=38.6.0 ; extra == 'dev'
|
|
57
52
|
Requires-Dist: tox >=3.18.0 ; extra == 'dev'
|
|
58
53
|
Requires-Dist: tqdm >4.32 ; extra == 'dev'
|
|
59
54
|
Requires-Dist: twine >=1.13 ; extra == 'dev'
|
|
60
|
-
Requires-Dist: build >=0.9.0 ; extra == 'dev'
|
|
61
|
-
Requires-Dist: importlib-metadata <5.0 ; (python_version < "3.8") and extra == 'dev'
|
|
62
55
|
Provides-Extra: docs
|
|
63
56
|
Requires-Dist: sphinx >=5.3.0 ; extra == 'docs'
|
|
64
57
|
Requires-Dist: sphinx-rtd-theme >=1.0.0 ; extra == 'docs'
|
|
65
58
|
Requires-Dist: towncrier <22,>=21 ; extra == 'docs'
|
|
66
|
-
Provides-Extra: linter
|
|
67
|
-
Requires-Dist: black >=22.1.0 ; extra == 'linter'
|
|
68
|
-
Requires-Dist: blocklint >=0.2.4 ; extra == 'linter'
|
|
69
|
-
Requires-Dist: flake8 ==3.8.3 ; extra == 'linter'
|
|
70
|
-
Requires-Dist: isort >=5.11.0 ; extra == 'linter'
|
|
71
|
-
Requires-Dist: mypy ==1.4.1 ; extra == 'linter'
|
|
72
|
-
Requires-Dist: types-setuptools >=57.4.4 ; extra == 'linter'
|
|
73
|
-
Requires-Dist: types-requests >=2.26.1 ; extra == 'linter'
|
|
74
59
|
Provides-Extra: tester
|
|
75
|
-
Requires-Dist: eth-tester[py-evm]
|
|
60
|
+
Requires-Dist: eth-tester[py-evm] <0.12.0b1,>=0.11.0b1 ; extra == 'tester'
|
|
76
61
|
Requires-Dist: py-geth >=4.1.0 ; extra == 'tester'
|
|
77
62
|
|
|
78
63
|
# web3.py
|
|
@@ -83,9 +68,9 @@ Requires-Dist: py-geth >=4.1.0 ; extra == 'tester'
|
|
|
83
68
|
|
|
84
69
|
A Python library for interacting with Ethereum.
|
|
85
70
|
|
|
86
|
-
-
|
|
71
|
+
- Python 3.8+ support
|
|
87
72
|
|
|
88
|
-
|
|
73
|
+
______________________________________________________________________
|
|
89
74
|
|
|
90
75
|
## Quickstart
|
|
91
76
|
|
|
@@ -103,6 +88,6 @@ guidelines for [contributing](https://web3py.readthedocs.io/en/latest/contributi
|
|
|
103
88
|
then check out issues that are labeled
|
|
104
89
|
[Good First Issue](https://github.com/ethereum/web3.py/issues?q=is%3Aissue+is%3Aopen+label%3A%22Good+First+Issue%22).
|
|
105
90
|
|
|
106
|
-
|
|
91
|
+
______________________________________________________________________
|
|
107
92
|
|
|
108
93
|
#### Questions on implementation or usage? Join the conversation on [discord](https://discord.gg/GHryRvPB84).
|