faster-eth-abi 5.2.9__cp312-cp312-win_amd64.whl → 5.2.10__cp312-cp312-win_amd64.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.

Potentially problematic release.


This version of faster-eth-abi might be problematic. Click here for more details.

Binary file
@@ -10,6 +10,7 @@ from faster_eth_utils import (
10
10
 
11
11
  from faster_eth_abi.exceptions import (
12
12
  InsufficientDataBytes,
13
+ NonEmptyPaddingBytes,
13
14
  )
14
15
  from faster_eth_abi.io import (
15
16
  BytesIO,
@@ -26,6 +27,7 @@ if TYPE_CHECKING:
26
27
  )
27
28
 
28
29
 
30
+ # Helpers
29
31
  def decode_uint_256(stream: ContextFramesBytesIO) -> int:
30
32
  """
31
33
  This function is a faster version of decode_uint_256 in decoding.py.
@@ -39,6 +41,10 @@ def decode_uint_256(stream: ContextFramesBytesIO) -> int:
39
41
  raise InsufficientDataBytes(f"Tried to read 32 bytes, only got {len(data)} bytes.")
40
42
 
41
43
 
44
+ def get_value_byte_size(decoder: "FixedByteSizeDecoder") -> int:
45
+ return decoder.value_bit_size // 8
46
+
47
+
42
48
  # HeadTailDecoder
43
49
  def decode_head_tail(self: "HeadTailDecoder", stream: ContextFramesBytesIO) -> Any:
44
50
  # Decode the offset and move the stream cursor forward 32 bytes
@@ -107,3 +113,43 @@ def read_fixed_byte_size_data_from_stream(
107
113
  raise InsufficientDataBytes(
108
114
  f"Tried to read {data_byte_size} bytes, only got {len(data)} bytes."
109
115
  )
116
+
117
+
118
+ def split_data_and_padding_fixed_byte_size(
119
+ self: "FixedByteSizeDecoder",
120
+ raw_data: bytes,
121
+ ) -> Tuple[bytes, bytes]:
122
+ value_byte_size = get_value_byte_size(self)
123
+ padding_size = self.data_byte_size - value_byte_size
124
+
125
+ if self.is_big_endian:
126
+ if padding_size == 0:
127
+ return raw_data, b""
128
+ padding_bytes = raw_data[:padding_size]
129
+ data = raw_data[padding_size:]
130
+ else:
131
+ data = raw_data[:value_byte_size]
132
+ padding_bytes = raw_data[value_byte_size:]
133
+
134
+ return data, padding_bytes
135
+
136
+
137
+ def validate_padding_bytes_fixed_byte_size(
138
+ self: "FixedByteSizeDecoder",
139
+ value: Any,
140
+ padding_bytes: bytes,
141
+ ) -> None:
142
+ value_byte_size = get_value_byte_size(self)
143
+ padding_size = self.data_byte_size - value_byte_size
144
+
145
+ if padding_bytes != b"\x00" * padding_size:
146
+ raise NonEmptyPaddingBytes(f"Padding bytes were not empty: {padding_bytes!r}")
147
+
148
+
149
+ # BooleanDecoder
150
+ def decoder_fn_boolean(data: bytes) -> bool:
151
+ if data == b"\x00":
152
+ return False
153
+ elif data == b"\x01":
154
+ return True
155
+ raise NonEmptyPaddingBytes(f"Boolean must be either 0x0 or 0x1. Got: {data!r}")
@@ -1,6 +1,3 @@
1
- from itertools import (
2
- accumulate,
3
- )
4
1
  from typing import (
5
2
  TYPE_CHECKING,
6
3
  Any,
@@ -35,7 +32,12 @@ def encode_tuple(
35
32
  tail_chunks.append(b"")
36
33
 
37
34
  head_length = sum(32 if item is None else len(item) for item in raw_head_chunks)
38
- tail_offsets = (0, *accumulate(len(item) for item in tail_chunks[:-1]))
35
+ tail_offsets = [0]
36
+ total_offset = 0
37
+ for item in tail_chunks[:-1]:
38
+ total_offset += len(item)
39
+ tail_offsets.append(total_offset)
40
+
39
41
  head_chunks = tuple(
40
42
  encode_uint_256(head_length + offset) if chunk is None else chunk
41
43
  for chunk, offset in zip(raw_head_chunks, tail_offsets)
@@ -77,7 +79,12 @@ def encode_elements(item_encoder: "BaseEncoder", value: Sequence[Any]) -> bytes:
77
79
  return b"".join(tail_chunks)
78
80
 
79
81
  head_length = 32 * len(value)
80
- tail_offsets = (0, *accumulate(len(item) for item in tail_chunks[:-1]))
82
+ tail_offsets = [0]
83
+ total_offset = 0
84
+ for item in tail_chunks[:-1]:
85
+ total_offset += len(item)
86
+ tail_offsets.append(total_offset)
87
+
81
88
  head_chunks = tuple(
82
89
  encode_uint_256(head_length + offset) for offset in tail_offsets
83
90
  )
Binary file
@@ -19,7 +19,11 @@ from faster_eth_abi._decoding import (
19
19
  decode_head_tail,
20
20
  decode_sized_array,
21
21
  decode_tuple,
22
+ decoder_fn_boolean,
23
+ get_value_byte_size,
22
24
  read_fixed_byte_size_data_from_stream,
25
+ split_data_and_padding_fixed_byte_size,
26
+ validate_padding_bytes_fixed_byte_size,
23
27
  )
24
28
  from faster_eth_abi.base import (
25
29
  BaseCoder,
@@ -303,29 +307,14 @@ class FixedByteSizeDecoder(SingleDecoder):
303
307
  return read_fixed_byte_size_data_from_stream(self, stream)
304
308
 
305
309
  def split_data_and_padding(self, raw_data: bytes) -> Tuple[bytes, bytes]:
306
- value_byte_size = self._get_value_byte_size()
307
- padding_size = self.data_byte_size - value_byte_size
308
-
309
- if self.is_big_endian:
310
- padding_bytes = raw_data[:padding_size]
311
- data = raw_data[padding_size:]
312
- else:
313
- data = raw_data[:value_byte_size]
314
- padding_bytes = raw_data[value_byte_size:]
315
-
316
- return data, padding_bytes
310
+ return split_data_and_padding_fixed_byte_size(self, raw_data)
317
311
 
318
312
  def validate_padding_bytes(self, value: Any, padding_bytes: bytes) -> None:
319
- value_byte_size = self._get_value_byte_size()
320
- padding_size = self.data_byte_size - value_byte_size
321
-
322
- if padding_bytes != b"\x00" * padding_size:
323
- raise NonEmptyPaddingBytes(
324
- f"Padding bytes were not empty: {padding_bytes!r}"
325
- )
313
+ validate_padding_bytes_fixed_byte_size(self, value, padding_bytes)
326
314
 
327
315
  def _get_value_byte_size(self) -> int:
328
- return self.value_bit_size // 8
316
+ # This is unused, but it is kept in to preserve the eth-abi api
317
+ return get_value_byte_size(self)
329
318
 
330
319
 
331
320
  class Fixed32ByteSizeDecoder(FixedByteSizeDecoder):
@@ -336,16 +325,7 @@ class BooleanDecoder(Fixed32ByteSizeDecoder):
336
325
  value_bit_size = 8
337
326
  is_big_endian = True
338
327
 
339
- @staticmethod
340
- def decoder_fn(data: bytes) -> bool:
341
- if data == b"\x00":
342
- return False
343
- elif data == b"\x01":
344
- return True
345
- else:
346
- raise NonEmptyPaddingBytes(
347
- f"Boolean must be either 0x0 or 0x1. Got: {data!r}"
348
- )
328
+ decoder_fn = staticmethod(decoder_fn_boolean)
349
329
 
350
330
  @parse_type_str("bool")
351
331
  def from_type_str(cls, abi_type, registry):
@@ -392,7 +372,7 @@ class SignedIntegerDecoder(Fixed32ByteSizeDecoder):
392
372
  return value
393
373
 
394
374
  def validate_padding_bytes(self, value: Any, padding_bytes: bytes) -> None:
395
- value_byte_size = self._get_value_byte_size()
375
+ value_byte_size = get_value_byte_size(self)
396
376
  padding_size = self.data_byte_size - value_byte_size
397
377
 
398
378
  if value >= 0:
@@ -471,7 +451,7 @@ class SignedFixedDecoder(BaseFixedDecoder):
471
451
  return decimal_value
472
452
 
473
453
  def validate_padding_bytes(self, value: Any, padding_bytes: bytes) -> None:
474
- value_byte_size = self._get_value_byte_size()
454
+ value_byte_size = get_value_byte_size(self)
475
455
  padding_size = self.data_byte_size - value_byte_size
476
456
 
477
457
  if value >= 0:
Binary file
@@ -1,6 +1,7 @@
1
1
  import decimal
2
2
  from typing import (
3
3
  Callable,
4
+ Dict,
4
5
  Final,
5
6
  Tuple,
6
7
  )
@@ -8,6 +9,7 @@ from typing import (
8
9
  ABI_DECIMAL_PREC: Final = 999
9
10
 
10
11
  abi_decimal_context: Final = decimal.Context(prec=ABI_DECIMAL_PREC)
12
+ decimal_localcontext: Final = decimal.localcontext
11
13
 
12
14
  ZERO: Final = decimal.Decimal(0)
13
15
  TEN: Final = decimal.Decimal(10)
@@ -16,47 +18,76 @@ Decimal: Final = decimal.Decimal
16
18
 
17
19
 
18
20
  def ceil32(x: int) -> int:
19
- return x if x % 32 == 0 else x + 32 - (x % 32)
21
+ remainder = x % 32
22
+ return x if remainder == 0 else x + 32 - remainder
23
+
24
+
25
+ _unsigned_integer_bounds_cache: Final[Dict[int, Tuple[int, int]]] = {}
20
26
 
21
27
 
22
28
  def compute_unsigned_integer_bounds(num_bits: int) -> Tuple[int, int]:
23
- return (
24
- 0,
25
- 2**num_bits - 1,
26
- )
29
+ bounds = _unsigned_integer_bounds_cache.get(num_bits)
30
+ if bounds is None:
31
+ bounds = 0, 2**num_bits - 1
32
+ _unsigned_integer_bounds_cache[num_bits] = bounds
33
+ return bounds
34
+
35
+
36
+ _signed_integer_bounds_cache: Final[Dict[int, Tuple[int, int]]] = {}
27
37
 
28
38
 
29
39
  def compute_signed_integer_bounds(num_bits: int) -> Tuple[int, int]:
30
- return (
31
- -1 * 2 ** (num_bits - 1),
32
- 2 ** (num_bits - 1) - 1,
33
- )
40
+ bounds = _signed_integer_bounds_cache.get(num_bits)
41
+ if bounds is None:
42
+ overflow_at = 2 ** (num_bits - 1)
43
+ min_value = -overflow_at
44
+ max_value = overflow_at - 1
45
+ bounds = min_value, max_value
46
+ _signed_integer_bounds_cache[num_bits] = bounds
47
+ return bounds
48
+
49
+
50
+ _unsigned_fixed_bounds_cache: Final[Dict[Tuple[int, int], decimal.Decimal]] = {}
34
51
 
35
52
 
36
53
  def compute_unsigned_fixed_bounds(
37
54
  num_bits: int,
38
55
  frac_places: int,
39
56
  ) -> Tuple[decimal.Decimal, decimal.Decimal]:
40
- int_upper = compute_unsigned_integer_bounds(num_bits)[1]
57
+ upper = _unsigned_fixed_bounds_cache.get((num_bits, frac_places))
58
+ if upper is None:
59
+ int_upper = 2**num_bits - 1
60
+
61
+ with decimal_localcontext(abi_decimal_context):
62
+ upper = Decimal(int_upper) * TEN**-frac_places
41
63
 
42
- with decimal.localcontext(abi_decimal_context):
43
- upper = Decimal(int_upper) * TEN**-frac_places
64
+ _unsigned_fixed_bounds_cache[(num_bits, frac_places)] = upper
44
65
 
45
66
  return ZERO, upper
46
67
 
47
68
 
69
+ _signed_fixed_bounds_cache: Final[
70
+ Dict[Tuple[int, int], Tuple[decimal.Decimal, decimal.Decimal]]
71
+ ] = {}
72
+
73
+
48
74
  def compute_signed_fixed_bounds(
49
75
  num_bits: int,
50
76
  frac_places: int,
51
77
  ) -> Tuple[decimal.Decimal, decimal.Decimal]:
52
- int_lower, int_upper = compute_signed_integer_bounds(num_bits)
78
+ bounds = _signed_fixed_bounds_cache.get((num_bits, frac_places))
79
+ if bounds is None:
80
+ int_lower, int_upper = compute_signed_integer_bounds(num_bits)
81
+
82
+ with decimal_localcontext(abi_decimal_context):
83
+ exp = TEN**-frac_places
84
+ lower = Decimal(int_lower) * exp
85
+ upper = Decimal(int_upper) * exp
53
86
 
54
- with decimal.localcontext(abi_decimal_context):
55
- exp = TEN**-frac_places
56
- lower = Decimal(int_lower) * exp
57
- upper = Decimal(int_upper) * exp
87
+ bounds = lower, upper
88
+ _signed_fixed_bounds_cache[(num_bits, frac_places)] = bounds
58
89
 
59
- return lower, upper
90
+ return bounds
60
91
 
61
92
 
62
93
  def scale_places(places: int) -> Callable[[decimal.Decimal], decimal.Decimal]:
@@ -70,11 +101,11 @@ def scale_places(places: int) -> Callable[[decimal.Decimal], decimal.Decimal]:
70
101
  f"of type {type(places)}.",
71
102
  )
72
103
 
73
- with decimal.localcontext(abi_decimal_context):
104
+ with decimal_localcontext(abi_decimal_context):
74
105
  scaling_factor = TEN**-places
75
106
 
76
107
  def f(x: decimal.Decimal) -> decimal.Decimal:
77
- with decimal.localcontext(abi_decimal_context):
108
+ with decimal_localcontext(abi_decimal_context):
78
109
  return x * scaling_factor
79
110
 
80
111
  places_repr = f"Eneg{places}" if places > 0 else f"Epos{-places}"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: faster_eth_abi
3
- Version: 5.2.9
3
+ Version: 5.2.10
4
4
  Summary: A faster fork of eth_abi: Python utilities for working with Ethereum ABI definitions, especially encoding and decoding. Implemented in C.
5
5
  Home-page: https://github.com/BobTheBuidler/faster-eth-abi
6
6
  Author: The Ethereum Foundation
@@ -0,0 +1,44 @@
1
+ 76f9a3652d4d2667c55c__mypyc.cp312-win_amd64.pyd,sha256=O2p5jK5k-ROHGLUh0mlvllwl_NZ-iiijl83oUoBXv9E,168960
2
+ faster_eth_abi/__init__.py,sha256=JpTfPTiusUGMmX8sEsGAxvILxFbvhh3MEyfiKOd5o9g,217
3
+ faster_eth_abi/_codec.cp312-win_amd64.pyd,sha256=kA_yidXODCRxKpaZw0Xst3CAdyq-cvpxP4yksEmu3bo,10752
4
+ faster_eth_abi/_codec.py,sha256=fLRvqvrD8F38U4m1wZztvx-7JJbZaPikwXS5u9BzY14,2509
5
+ faster_eth_abi/_decoding.cp312-win_amd64.pyd,sha256=kVh8i4fMTMGQasHcm5lQ_Ds7CKkFvcWF2W5krYSN0JM,10752
6
+ faster_eth_abi/_decoding.py,sha256=06ddzblp834cZ_6SA5Q3J3_XnQTa0gmWeM4gYRxrcSk,4555
7
+ faster_eth_abi/_encoding.cp312-win_amd64.pyd,sha256=FvThOPbG1ntQ4bKg3nzepskQ0VeaNKFYdrA_KkngzlM,10752
8
+ faster_eth_abi/_encoding.py,sha256=rsZihtFUqYu80ANOsxP9QwpFJDH73VBVJSzOrllBm2k,3340
9
+ faster_eth_abi/abi.cp312-win_amd64.pyd,sha256=3RTDnZX5cNSapHi3OL634aBG_c111Xw8mcDfJ55_ZxI,10752
10
+ faster_eth_abi/abi.py,sha256=-t9OVBSCxy6SuWpCu3cxHrCqkx8_svPIRb0MSFXEl5Q,383
11
+ faster_eth_abi/base.py,sha256=y4IXpQJWGfUISl3xjCO420Grxido3tE2ebPV2rK-DvM,1229
12
+ faster_eth_abi/codec.py,sha256=e1uO8BJrXRn0Ih70eUa5qipD2wcg2aZSR4fyVuGpFoY,4580
13
+ faster_eth_abi/constants.cp312-win_amd64.pyd,sha256=OPMHQbXzZ0zGlEwKAB6yz0zDvFprrty8X7FJNNRiRks,10752
14
+ faster_eth_abi/constants.py,sha256=q3FGynS-Eb78cnrL6mBoAvTDz16PF3tW2OylTMd6ajs,114
15
+ faster_eth_abi/decoding.py,sha256=7zOcSLdiQhAJWnCOSAdFg2AtSMoj8ZdN2IYE_aZKHQU,17028
16
+ faster_eth_abi/encoding.py,sha256=P1svhYylcZa55cQ9LPj6jV8iJVLSL_c5SIZT1Umol58,19679
17
+ faster_eth_abi/exceptions.py,sha256=KzNYRc9t0CvlkveozWvLeo1WC_GarcBkwzV67aY_5yI,3067
18
+ faster_eth_abi/from_type_str.cp312-win_amd64.pyd,sha256=W1EXXSz2-RAxccXRcwQP8PNnKWAJypC1ZnE9pXQQpq8,10752
19
+ faster_eth_abi/from_type_str.py,sha256=WLRP3OIyrJORgloX-7V0x2KdrZj0kLay-J9I8f-H36s,4446
20
+ faster_eth_abi/grammar.py,sha256=lhEmp3ZwMTzm1-jJiMUVD4zrBgU4MEZCRiND4WxfOes,13839
21
+ faster_eth_abi/io.py,sha256=E_QX7aYAjGYnkNAZmJMmSmx1lqvl_FDNmMFruTi9UX4,3831
22
+ faster_eth_abi/packed.cp312-win_amd64.pyd,sha256=8_rot6saH8Zi8QRlazkQzL0LIl7izAYTygkxLqYyY3k,10752
23
+ faster_eth_abi/packed.py,sha256=RZ2chvsx9_AL9OxY1ixHTsaUJHaR_tmrNdViOIp-xSg,316
24
+ faster_eth_abi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
+ faster_eth_abi/registry.py,sha256=gU5-k_1eYUjs7-NAKoH9nncCJ36tZZHM5ZXvwmXt0cw,21192
26
+ faster_eth_abi/tools/__init__.cp312-win_amd64.pyd,sha256=s6gIPNEXT43-XfndRA9brzKRZYkb_j9r9rtzhXAwR-0,10752
27
+ faster_eth_abi/tools/__init__.py,sha256=jxyQnb34ldRjCTYi3Ajb5h5QlFQ6ODfKQNhOCVwR7Ao,54
28
+ faster_eth_abi/tools/_strategies.cp312-win_amd64.pyd,sha256=OoziJF-7BRQkFYk5kyUoq1ht4VZdcVFS8MLAOy-R3n4,10752
29
+ faster_eth_abi/tools/_strategies.py,sha256=HCFdQFLa84SMf7Deui2-szTH34hxTfc0Rog_kmpTg_w,6197
30
+ faster_eth_abi/utils/__init__.cp312-win_amd64.pyd,sha256=SSsvFGGCzU2MCvklVNIoz2GwoYnvwXT_wVUFCOs5lmM,10752
31
+ faster_eth_abi/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
+ faster_eth_abi/utils/numeric.cp312-win_amd64.pyd,sha256=m6IsYWZkAE9b8OHlcCZ7zuM6JB-0HrE5A17Dya7MdHQ,10752
33
+ faster_eth_abi/utils/numeric.py,sha256=saAVL12dfDrMXZeao3u2jar-U2y57YKVUqF6VOzoLxs,3395
34
+ faster_eth_abi/utils/padding.cp312-win_amd64.pyd,sha256=cQO4Bkb1q4W5z5V0iMo8ORJZEepPTM14LSiXJ4g6cas,10752
35
+ faster_eth_abi/utils/padding.py,sha256=k6dkOiQ3k0OhQUZ6blCiL1VOQVYGyynucafbySjcFfY,515
36
+ faster_eth_abi/utils/string.cp312-win_amd64.pyd,sha256=jnAb7fU7QBRCjytTdAztKQBM3_73t1UMbH3YNXja224,10752
37
+ faster_eth_abi/utils/string.py,sha256=wYcvWof4kuitrGGSe_NOduQaxE4HHYmpraCPXKcZxMs,455
38
+ faster_eth_abi/utils/validation.cp312-win_amd64.pyd,sha256=BoHoLCGaUyWM33u1O_57Wx1IeIn2NLX-pf0Fj9rlkjM,10752
39
+ faster_eth_abi/utils/validation.py,sha256=9veO7wyQsmcFgeaGrsKdSifjV1gaXfTDDKAt1EbKHYY,539
40
+ faster_eth_abi-5.2.10.dist-info/licenses/LICENSE,sha256=Q1lDDWXR057JL2Y7HTAwclCF32_LCloN4sGUkXO1YeI,1127
41
+ faster_eth_abi-5.2.10.dist-info/METADATA,sha256=3Fa7x64NATEJZqCSbkEInZ9LqpR2h52CZKVSQoIcdsc,5499
42
+ faster_eth_abi-5.2.10.dist-info/WHEEL,sha256=8UP9x9puWI0P1V_d7K2oMTBqfeLNm21CTzZ_Ptr0NXU,101
43
+ faster_eth_abi-5.2.10.dist-info/top_level.txt,sha256=CO2FQwf61aFzjYze7Wywa5KQdJ6bbLkzDoGEjDF2g9o,43
44
+ faster_eth_abi-5.2.10.dist-info/RECORD,,
@@ -1,44 +0,0 @@
1
- 76f9a3652d4d2667c55c__mypyc.cp312-win_amd64.pyd,sha256=KHfczz-MLs0M-Po0bvP9Gplw7Ex_mOb9zokGY9C1LHg,159232
2
- faster_eth_abi/__init__.py,sha256=JpTfPTiusUGMmX8sEsGAxvILxFbvhh3MEyfiKOd5o9g,217
3
- faster_eth_abi/_codec.cp312-win_amd64.pyd,sha256=wNfcy9vcXR2NgLmZdP4513YmXJYhph2KHcsgKYWaWLM,10752
4
- faster_eth_abi/_codec.py,sha256=fLRvqvrD8F38U4m1wZztvx-7JJbZaPikwXS5u9BzY14,2509
5
- faster_eth_abi/_decoding.cp312-win_amd64.pyd,sha256=2LCP3-oC_GlFxiuC8rhKjDFmfhbBgR8Vwjr6oJzFqRk,10752
6
- faster_eth_abi/_decoding.py,sha256=GeXe2OaAmojlnGbw3CmSzKK9k5g0QLLn_Qesz7y98X0,3208
7
- faster_eth_abi/_encoding.cp312-win_amd64.pyd,sha256=gE-QasKFsCG8vIDicO-Mi5nVZ3HBLu_e15wGl1UBMlg,10752
8
- faster_eth_abi/_encoding.py,sha256=157A_MltVLCEwBmD7SB8UaKXkAOtIKC5MVupk6dk_yA,3217
9
- faster_eth_abi/abi.cp312-win_amd64.pyd,sha256=XBS14OWLj4c99WbAY9rPiZv-Hu2f1lyKdrchLpWDo7M,10752
10
- faster_eth_abi/abi.py,sha256=-t9OVBSCxy6SuWpCu3cxHrCqkx8_svPIRb0MSFXEl5Q,383
11
- faster_eth_abi/base.py,sha256=y4IXpQJWGfUISl3xjCO420Grxido3tE2ebPV2rK-DvM,1229
12
- faster_eth_abi/codec.py,sha256=e1uO8BJrXRn0Ih70eUa5qipD2wcg2aZSR4fyVuGpFoY,4580
13
- faster_eth_abi/constants.cp312-win_amd64.pyd,sha256=ce1WIlcCTCAR5B8WauGaUA8zNRkqGqZgOtpSreXDZbI,10752
14
- faster_eth_abi/constants.py,sha256=q3FGynS-Eb78cnrL6mBoAvTDz16PF3tW2OylTMd6ajs,114
15
- faster_eth_abi/decoding.py,sha256=LUyG3EO6K4O6u1020FVMNEB80TwW2aHy6gInHoW5qy8,17632
16
- faster_eth_abi/encoding.py,sha256=P1svhYylcZa55cQ9LPj6jV8iJVLSL_c5SIZT1Umol58,19679
17
- faster_eth_abi/exceptions.py,sha256=KzNYRc9t0CvlkveozWvLeo1WC_GarcBkwzV67aY_5yI,3067
18
- faster_eth_abi/from_type_str.cp312-win_amd64.pyd,sha256=iEtM8DCMspEHJdPO5yw1QUW-cAyLpoZmONTGkwbl634,10752
19
- faster_eth_abi/from_type_str.py,sha256=WLRP3OIyrJORgloX-7V0x2KdrZj0kLay-J9I8f-H36s,4446
20
- faster_eth_abi/grammar.py,sha256=lhEmp3ZwMTzm1-jJiMUVD4zrBgU4MEZCRiND4WxfOes,13839
21
- faster_eth_abi/io.py,sha256=E_QX7aYAjGYnkNAZmJMmSmx1lqvl_FDNmMFruTi9UX4,3831
22
- faster_eth_abi/packed.cp312-win_amd64.pyd,sha256=RJ2XQ-0MIEbC4E4TOD8Ji2nk1pss38uIKaEdBKaIft8,10752
23
- faster_eth_abi/packed.py,sha256=RZ2chvsx9_AL9OxY1ixHTsaUJHaR_tmrNdViOIp-xSg,316
24
- faster_eth_abi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
25
- faster_eth_abi/registry.py,sha256=gU5-k_1eYUjs7-NAKoH9nncCJ36tZZHM5ZXvwmXt0cw,21192
26
- faster_eth_abi/tools/__init__.cp312-win_amd64.pyd,sha256=HJyGO77Y4DTA6WjboAQKzXx9h4AnkMc8glv9ACt-FzA,10752
27
- faster_eth_abi/tools/__init__.py,sha256=jxyQnb34ldRjCTYi3Ajb5h5QlFQ6ODfKQNhOCVwR7Ao,54
28
- faster_eth_abi/tools/_strategies.cp312-win_amd64.pyd,sha256=bFKof_J_5lN0dyoJ5YvxPnEgJNvA-dTbgz31bxVqPSg,10752
29
- faster_eth_abi/tools/_strategies.py,sha256=HCFdQFLa84SMf7Deui2-szTH34hxTfc0Rog_kmpTg_w,6197
30
- faster_eth_abi/utils/__init__.cp312-win_amd64.pyd,sha256=GkfKrpcfndpeCmdLq5JeA1kJYnPXYy0STOEGmclIN2s,10752
31
- faster_eth_abi/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
32
- faster_eth_abi/utils/numeric.cp312-win_amd64.pyd,sha256=3UykQVauqsKsf5moaQ8zgHHJ2MwuUCWIFFxw82ahjsk,10752
33
- faster_eth_abi/utils/numeric.py,sha256=hNGble1NA99_5hrAOnH0ZakCuHc6PFMC1p0olmpo_vM,2232
34
- faster_eth_abi/utils/padding.cp312-win_amd64.pyd,sha256=GtRhSWNDw-kNP_oVrFLSeQGBVQ71TmckeNHNJze_fTs,10752
35
- faster_eth_abi/utils/padding.py,sha256=k6dkOiQ3k0OhQUZ6blCiL1VOQVYGyynucafbySjcFfY,515
36
- faster_eth_abi/utils/string.cp312-win_amd64.pyd,sha256=r0CLXCtLkVEoTI_1lcQL9kq1qnuv8dclLgIR_2NWcJQ,10752
37
- faster_eth_abi/utils/string.py,sha256=wYcvWof4kuitrGGSe_NOduQaxE4HHYmpraCPXKcZxMs,455
38
- faster_eth_abi/utils/validation.cp312-win_amd64.pyd,sha256=gdewLz8PGDwOpVuKedHmC6f8wt2gB7PPzrnhIdPY2LQ,10752
39
- faster_eth_abi/utils/validation.py,sha256=9veO7wyQsmcFgeaGrsKdSifjV1gaXfTDDKAt1EbKHYY,539
40
- faster_eth_abi-5.2.9.dist-info/licenses/LICENSE,sha256=Q1lDDWXR057JL2Y7HTAwclCF32_LCloN4sGUkXO1YeI,1127
41
- faster_eth_abi-5.2.9.dist-info/METADATA,sha256=KDOT00QI4vuhhmIEyht-d1iYsmyvKLtq9xwMBQqxhzg,5498
42
- faster_eth_abi-5.2.9.dist-info/WHEEL,sha256=8UP9x9puWI0P1V_d7K2oMTBqfeLNm21CTzZ_Ptr0NXU,101
43
- faster_eth_abi-5.2.9.dist-info/top_level.txt,sha256=CO2FQwf61aFzjYze7Wywa5KQdJ6bbLkzDoGEjDF2g9o,43
44
- faster_eth_abi-5.2.9.dist-info/RECORD,,