coinex-api 0.0.12__py3-none-any.whl → 0.0.14__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.
- coinex/__init__.py +7 -0
- coinex/ccxt/__init__.py +101 -0
- coinex/ccxt/abstract/coinex.py +237 -0
- coinex/ccxt/async_support/__init__.py +80 -0
- coinex/ccxt/async_support/base/__init__.py +1 -0
- coinex/ccxt/async_support/base/exchange.py +2100 -0
- coinex/ccxt/async_support/base/throttler.py +50 -0
- coinex/ccxt/async_support/base/ws/__init__.py +38 -0
- coinex/ccxt/async_support/base/ws/aiohttp_client.py +147 -0
- coinex/ccxt/async_support/base/ws/cache.py +213 -0
- coinex/ccxt/async_support/base/ws/client.py +214 -0
- coinex/ccxt/async_support/base/ws/fast_client.py +97 -0
- coinex/ccxt/async_support/base/ws/functions.py +59 -0
- coinex/ccxt/async_support/base/ws/future.py +69 -0
- coinex/ccxt/async_support/base/ws/order_book.py +78 -0
- coinex/ccxt/async_support/base/ws/order_book_side.py +174 -0
- coinex/ccxt/async_support/coinex.py +5833 -0
- coinex/ccxt/base/__init__.py +27 -0
- coinex/ccxt/base/decimal_to_precision.py +174 -0
- coinex/ccxt/base/errors.py +267 -0
- coinex/ccxt/base/exchange.py +6769 -0
- coinex/ccxt/base/precise.py +297 -0
- coinex/ccxt/base/types.py +577 -0
- coinex/ccxt/coinex.py +5832 -0
- coinex/ccxt/pro/__init__.py +21 -0
- coinex/ccxt/pro/coinex.py +1366 -0
- coinex/ccxt/static_dependencies/README.md +1 -0
- coinex/ccxt/static_dependencies/__init__.py +1 -0
- coinex/ccxt/static_dependencies/ecdsa/__init__.py +14 -0
- coinex/ccxt/static_dependencies/ecdsa/_version.py +520 -0
- coinex/ccxt/static_dependencies/ecdsa/curves.py +56 -0
- coinex/ccxt/static_dependencies/ecdsa/der.py +221 -0
- coinex/ccxt/static_dependencies/ecdsa/ecdsa.py +310 -0
- coinex/ccxt/static_dependencies/ecdsa/ellipticcurve.py +197 -0
- coinex/ccxt/static_dependencies/ecdsa/keys.py +332 -0
- coinex/ccxt/static_dependencies/ecdsa/numbertheory.py +531 -0
- coinex/ccxt/static_dependencies/ecdsa/rfc6979.py +100 -0
- coinex/ccxt/static_dependencies/ecdsa/util.py +266 -0
- coinex/ccxt/static_dependencies/ethereum/__init__.py +7 -0
- coinex/ccxt/static_dependencies/ethereum/abi/__init__.py +16 -0
- coinex/ccxt/static_dependencies/ethereum/abi/abi.py +19 -0
- coinex/ccxt/static_dependencies/ethereum/abi/base.py +152 -0
- coinex/ccxt/static_dependencies/ethereum/abi/codec.py +217 -0
- coinex/ccxt/static_dependencies/ethereum/abi/constants.py +3 -0
- coinex/ccxt/static_dependencies/ethereum/abi/decoding.py +565 -0
- coinex/ccxt/static_dependencies/ethereum/abi/encoding.py +720 -0
- coinex/ccxt/static_dependencies/ethereum/abi/exceptions.py +139 -0
- coinex/ccxt/static_dependencies/ethereum/abi/grammar.py +443 -0
- coinex/ccxt/static_dependencies/ethereum/abi/packed.py +13 -0
- coinex/ccxt/static_dependencies/ethereum/abi/py.typed +0 -0
- coinex/ccxt/static_dependencies/ethereum/abi/registry.py +643 -0
- coinex/ccxt/static_dependencies/ethereum/abi/tools/__init__.py +3 -0
- coinex/ccxt/static_dependencies/ethereum/abi/tools/_strategies.py +230 -0
- coinex/ccxt/static_dependencies/ethereum/abi/utils/__init__.py +0 -0
- coinex/ccxt/static_dependencies/ethereum/abi/utils/numeric.py +83 -0
- coinex/ccxt/static_dependencies/ethereum/abi/utils/padding.py +27 -0
- coinex/ccxt/static_dependencies/ethereum/abi/utils/string.py +19 -0
- coinex/ccxt/static_dependencies/ethereum/account/__init__.py +3 -0
- coinex/ccxt/static_dependencies/ethereum/account/encode_typed_data/__init__.py +4 -0
- coinex/ccxt/static_dependencies/ethereum/account/encode_typed_data/encoding_and_hashing.py +239 -0
- coinex/ccxt/static_dependencies/ethereum/account/encode_typed_data/helpers.py +40 -0
- coinex/ccxt/static_dependencies/ethereum/account/messages.py +263 -0
- coinex/ccxt/static_dependencies/ethereum/account/py.typed +0 -0
- coinex/ccxt/static_dependencies/ethereum/hexbytes/__init__.py +5 -0
- coinex/ccxt/static_dependencies/ethereum/hexbytes/_utils.py +54 -0
- coinex/ccxt/static_dependencies/ethereum/hexbytes/main.py +65 -0
- coinex/ccxt/static_dependencies/ethereum/hexbytes/py.typed +0 -0
- coinex/ccxt/static_dependencies/ethereum/typing/__init__.py +63 -0
- coinex/ccxt/static_dependencies/ethereum/typing/abi.py +6 -0
- coinex/ccxt/static_dependencies/ethereum/typing/bls.py +7 -0
- coinex/ccxt/static_dependencies/ethereum/typing/discovery.py +5 -0
- coinex/ccxt/static_dependencies/ethereum/typing/encoding.py +7 -0
- coinex/ccxt/static_dependencies/ethereum/typing/enums.py +17 -0
- coinex/ccxt/static_dependencies/ethereum/typing/ethpm.py +9 -0
- coinex/ccxt/static_dependencies/ethereum/typing/evm.py +20 -0
- coinex/ccxt/static_dependencies/ethereum/typing/networks.py +1122 -0
- coinex/ccxt/static_dependencies/ethereum/typing/py.typed +0 -0
- coinex/ccxt/static_dependencies/ethereum/utils/__init__.py +115 -0
- coinex/ccxt/static_dependencies/ethereum/utils/abi.py +72 -0
- coinex/ccxt/static_dependencies/ethereum/utils/address.py +171 -0
- coinex/ccxt/static_dependencies/ethereum/utils/applicators.py +151 -0
- coinex/ccxt/static_dependencies/ethereum/utils/conversions.py +190 -0
- coinex/ccxt/static_dependencies/ethereum/utils/currency.py +107 -0
- coinex/ccxt/static_dependencies/ethereum/utils/curried/__init__.py +269 -0
- coinex/ccxt/static_dependencies/ethereum/utils/debug.py +20 -0
- coinex/ccxt/static_dependencies/ethereum/utils/decorators.py +132 -0
- coinex/ccxt/static_dependencies/ethereum/utils/encoding.py +6 -0
- coinex/ccxt/static_dependencies/ethereum/utils/exceptions.py +4 -0
- coinex/ccxt/static_dependencies/ethereum/utils/functional.py +75 -0
- coinex/ccxt/static_dependencies/ethereum/utils/hexadecimal.py +74 -0
- coinex/ccxt/static_dependencies/ethereum/utils/humanize.py +188 -0
- coinex/ccxt/static_dependencies/ethereum/utils/logging.py +159 -0
- coinex/ccxt/static_dependencies/ethereum/utils/module_loading.py +31 -0
- coinex/ccxt/static_dependencies/ethereum/utils/numeric.py +43 -0
- coinex/ccxt/static_dependencies/ethereum/utils/py.typed +0 -0
- coinex/ccxt/static_dependencies/ethereum/utils/toolz.py +76 -0
- coinex/ccxt/static_dependencies/ethereum/utils/types.py +54 -0
- coinex/ccxt/static_dependencies/ethereum/utils/typing/__init__.py +18 -0
- coinex/ccxt/static_dependencies/ethereum/utils/typing/misc.py +14 -0
- coinex/ccxt/static_dependencies/ethereum/utils/units.py +31 -0
- coinex/ccxt/static_dependencies/keccak/__init__.py +3 -0
- coinex/ccxt/static_dependencies/keccak/keccak.py +197 -0
- coinex/ccxt/static_dependencies/lark/__init__.py +38 -0
- coinex/ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
- coinex/ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
- coinex/ccxt/static_dependencies/lark/ast_utils.py +59 -0
- coinex/ccxt/static_dependencies/lark/common.py +86 -0
- coinex/ccxt/static_dependencies/lark/exceptions.py +292 -0
- coinex/ccxt/static_dependencies/lark/grammar.py +130 -0
- coinex/ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
- coinex/ccxt/static_dependencies/lark/grammars/common.lark +59 -0
- coinex/ccxt/static_dependencies/lark/grammars/lark.lark +62 -0
- coinex/ccxt/static_dependencies/lark/grammars/python.lark +302 -0
- coinex/ccxt/static_dependencies/lark/grammars/unicode.lark +7 -0
- coinex/ccxt/static_dependencies/lark/indenter.py +143 -0
- coinex/ccxt/static_dependencies/lark/lark.py +658 -0
- coinex/ccxt/static_dependencies/lark/lexer.py +678 -0
- coinex/ccxt/static_dependencies/lark/load_grammar.py +1428 -0
- coinex/ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
- coinex/ccxt/static_dependencies/lark/parser_frontends.py +257 -0
- coinex/ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
- coinex/ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
- coinex/ccxt/static_dependencies/lark/parsers/earley.py +314 -0
- coinex/ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
- coinex/ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
- coinex/ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
- coinex/ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
- coinex/ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
- coinex/ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
- coinex/ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
- coinex/ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
- coinex/ccxt/static_dependencies/lark/py.typed +0 -0
- coinex/ccxt/static_dependencies/lark/reconstruct.py +107 -0
- coinex/ccxt/static_dependencies/lark/tools/__init__.py +70 -0
- coinex/ccxt/static_dependencies/lark/tools/nearley.py +202 -0
- coinex/ccxt/static_dependencies/lark/tools/serialize.py +32 -0
- coinex/ccxt/static_dependencies/lark/tools/standalone.py +196 -0
- coinex/ccxt/static_dependencies/lark/tree.py +267 -0
- coinex/ccxt/static_dependencies/lark/tree_matcher.py +186 -0
- coinex/ccxt/static_dependencies/lark/tree_templates.py +180 -0
- coinex/ccxt/static_dependencies/lark/utils.py +343 -0
- coinex/ccxt/static_dependencies/lark/visitors.py +596 -0
- coinex/ccxt/static_dependencies/marshmallow/__init__.py +81 -0
- coinex/ccxt/static_dependencies/marshmallow/base.py +65 -0
- coinex/ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
- coinex/ccxt/static_dependencies/marshmallow/decorators.py +231 -0
- coinex/ccxt/static_dependencies/marshmallow/error_store.py +60 -0
- coinex/ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
- coinex/ccxt/static_dependencies/marshmallow/fields.py +2114 -0
- coinex/ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
- coinex/ccxt/static_dependencies/marshmallow/py.typed +0 -0
- coinex/ccxt/static_dependencies/marshmallow/schema.py +1228 -0
- coinex/ccxt/static_dependencies/marshmallow/types.py +12 -0
- coinex/ccxt/static_dependencies/marshmallow/utils.py +378 -0
- coinex/ccxt/static_dependencies/marshmallow/validate.py +678 -0
- coinex/ccxt/static_dependencies/marshmallow/warnings.py +2 -0
- coinex/ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
- coinex/ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
- coinex/ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
- coinex/ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
- coinex/ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
- coinex/ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
- coinex/ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
- coinex/ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
- coinex/ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
- coinex/ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
- coinex/ccxt/static_dependencies/msgpack/__init__.py +55 -0
- coinex/ccxt/static_dependencies/msgpack/_cmsgpack.pyx +11 -0
- coinex/ccxt/static_dependencies/msgpack/_packer.pyx +374 -0
- coinex/ccxt/static_dependencies/msgpack/_unpacker.pyx +547 -0
- coinex/ccxt/static_dependencies/msgpack/buff_converter.h +8 -0
- coinex/ccxt/static_dependencies/msgpack/exceptions.py +48 -0
- coinex/ccxt/static_dependencies/msgpack/ext.py +168 -0
- coinex/ccxt/static_dependencies/msgpack/fallback.py +951 -0
- coinex/ccxt/static_dependencies/msgpack/pack.h +89 -0
- coinex/ccxt/static_dependencies/msgpack/pack_template.h +820 -0
- coinex/ccxt/static_dependencies/msgpack/sysdep.h +194 -0
- coinex/ccxt/static_dependencies/msgpack/unpack.h +391 -0
- coinex/ccxt/static_dependencies/msgpack/unpack_define.h +95 -0
- coinex/ccxt/static_dependencies/msgpack/unpack_template.h +464 -0
- coinex/ccxt/static_dependencies/parsimonious/__init__.py +10 -0
- coinex/ccxt/static_dependencies/parsimonious/exceptions.py +105 -0
- coinex/ccxt/static_dependencies/parsimonious/expressions.py +479 -0
- coinex/ccxt/static_dependencies/parsimonious/grammar.py +487 -0
- coinex/ccxt/static_dependencies/parsimonious/nodes.py +325 -0
- coinex/ccxt/static_dependencies/parsimonious/utils.py +40 -0
- coinex/ccxt/static_dependencies/starknet/__init__.py +0 -0
- coinex/ccxt/static_dependencies/starknet/abi/v0/__init__.py +2 -0
- coinex/ccxt/static_dependencies/starknet/abi/v0/model.py +44 -0
- coinex/ccxt/static_dependencies/starknet/abi/v0/parser.py +216 -0
- coinex/ccxt/static_dependencies/starknet/abi/v0/schemas.py +72 -0
- coinex/ccxt/static_dependencies/starknet/abi/v0/shape.py +63 -0
- coinex/ccxt/static_dependencies/starknet/abi/v1/__init__.py +2 -0
- coinex/ccxt/static_dependencies/starknet/abi/v1/core_structures.json +14 -0
- coinex/ccxt/static_dependencies/starknet/abi/v1/model.py +39 -0
- coinex/ccxt/static_dependencies/starknet/abi/v1/parser.py +220 -0
- coinex/ccxt/static_dependencies/starknet/abi/v1/parser_transformer.py +179 -0
- coinex/ccxt/static_dependencies/starknet/abi/v1/schemas.py +66 -0
- coinex/ccxt/static_dependencies/starknet/abi/v1/shape.py +47 -0
- coinex/ccxt/static_dependencies/starknet/abi/v2/__init__.py +2 -0
- coinex/ccxt/static_dependencies/starknet/abi/v2/model.py +89 -0
- coinex/ccxt/static_dependencies/starknet/abi/v2/parser.py +293 -0
- coinex/ccxt/static_dependencies/starknet/abi/v2/parser_transformer.py +192 -0
- coinex/ccxt/static_dependencies/starknet/abi/v2/schemas.py +132 -0
- coinex/ccxt/static_dependencies/starknet/abi/v2/shape.py +107 -0
- coinex/ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
- coinex/ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
- coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
- coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
- coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
- coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
- coinex/ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
- coinex/ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
- coinex/ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
- coinex/ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
- coinex/ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
- coinex/ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
- coinex/ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
- coinex/ccxt/static_dependencies/starknet/common.py +15 -0
- coinex/ccxt/static_dependencies/starknet/constants.py +39 -0
- coinex/ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
- coinex/ccxt/static_dependencies/starknet/hash/address.py +79 -0
- coinex/ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
- coinex/ccxt/static_dependencies/starknet/hash/selector.py +16 -0
- coinex/ccxt/static_dependencies/starknet/hash/storage.py +12 -0
- coinex/ccxt/static_dependencies/starknet/hash/utils.py +78 -0
- coinex/ccxt/static_dependencies/starknet/models/__init__.py +0 -0
- coinex/ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
- coinex/ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
- coinex/ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
- coinex/ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
- coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
- coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
- coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
- coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
- coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
- coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
- coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
- coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
- coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
- coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
- coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
- coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
- coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
- coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
- coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
- coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
- coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
- coinex/ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
- coinex/ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
- coinex/ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
- coinex/ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
- coinex/ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
- coinex/ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
- coinex/ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
- coinex/ccxt/static_dependencies/starknet/utils/schema.py +13 -0
- coinex/ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
- coinex/ccxt/static_dependencies/starkware/__init__.py +0 -0
- coinex/ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
- coinex/ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
- coinex/ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
- coinex/ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
- coinex/ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
- coinex/ccxt/static_dependencies/sympy/__init__.py +0 -0
- coinex/ccxt/static_dependencies/sympy/core/__init__.py +0 -0
- coinex/ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
- coinex/ccxt/static_dependencies/sympy/external/__init__.py +0 -0
- coinex/ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
- coinex/ccxt/static_dependencies/sympy/external/importtools.py +187 -0
- coinex/ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
- coinex/ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
- coinex/ccxt/static_dependencies/toolz/__init__.py +26 -0
- coinex/ccxt/static_dependencies/toolz/_signatures.py +784 -0
- coinex/ccxt/static_dependencies/toolz/_version.py +520 -0
- coinex/ccxt/static_dependencies/toolz/compatibility.py +30 -0
- coinex/ccxt/static_dependencies/toolz/curried/__init__.py +101 -0
- coinex/ccxt/static_dependencies/toolz/curried/exceptions.py +22 -0
- coinex/ccxt/static_dependencies/toolz/curried/operator.py +22 -0
- coinex/ccxt/static_dependencies/toolz/dicttoolz.py +339 -0
- coinex/ccxt/static_dependencies/toolz/functoolz.py +1049 -0
- coinex/ccxt/static_dependencies/toolz/itertoolz.py +1057 -0
- coinex/ccxt/static_dependencies/toolz/recipes.py +46 -0
- coinex/ccxt/static_dependencies/toolz/utils.py +9 -0
- coinex/ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
- coinex/ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
- {coinex_api-0.0.12.dist-info → coinex_api-0.0.14.dist-info}/METADATA +1 -1
- coinex_api-0.0.14.dist-info/RECORD +288 -0
- coinex_api-0.0.12.dist-info/RECORD +0 -3
- {coinex_api-0.0.12.dist-info → coinex_api-0.0.14.dist-info}/WHEEL +0 -0
@@ -0,0 +1,643 @@
|
|
1
|
+
import abc
|
2
|
+
import copy
|
3
|
+
import functools
|
4
|
+
from typing import (
|
5
|
+
Any,
|
6
|
+
Callable,
|
7
|
+
Type,
|
8
|
+
Union,
|
9
|
+
)
|
10
|
+
|
11
|
+
from ..typing import (
|
12
|
+
abi,
|
13
|
+
)
|
14
|
+
|
15
|
+
from . import (
|
16
|
+
decoding,
|
17
|
+
encoding,
|
18
|
+
exceptions,
|
19
|
+
grammar,
|
20
|
+
)
|
21
|
+
from .base import (
|
22
|
+
BaseCoder,
|
23
|
+
)
|
24
|
+
from .exceptions import (
|
25
|
+
ABITypeError,
|
26
|
+
MultipleEntriesFound,
|
27
|
+
NoEntriesFound,
|
28
|
+
)
|
29
|
+
|
30
|
+
Lookup = Union[abi.TypeStr, Callable[[abi.TypeStr], bool]]
|
31
|
+
|
32
|
+
EncoderCallable = Callable[[Any], bytes]
|
33
|
+
DecoderCallable = Callable[[decoding.ContextFramesBytesIO], Any]
|
34
|
+
|
35
|
+
Encoder = Union[EncoderCallable, Type[encoding.BaseEncoder]]
|
36
|
+
Decoder = Union[DecoderCallable, Type[decoding.BaseDecoder]]
|
37
|
+
|
38
|
+
|
39
|
+
class Copyable(abc.ABC):
|
40
|
+
@abc.abstractmethod
|
41
|
+
def copy(self):
|
42
|
+
pass
|
43
|
+
|
44
|
+
def __copy__(self):
|
45
|
+
return self.copy()
|
46
|
+
|
47
|
+
def __deepcopy__(self, *args):
|
48
|
+
return self.copy()
|
49
|
+
|
50
|
+
|
51
|
+
class PredicateMapping(Copyable):
|
52
|
+
"""
|
53
|
+
Acts as a mapping from predicate functions to values. Values are retrieved
|
54
|
+
when their corresponding predicate matches a given input. Predicates can
|
55
|
+
also be labeled to facilitate removal from the mapping.
|
56
|
+
"""
|
57
|
+
|
58
|
+
def __init__(self, name):
|
59
|
+
self._name = name
|
60
|
+
self._values = {}
|
61
|
+
self._labeled_predicates = {}
|
62
|
+
|
63
|
+
def add(self, predicate, value, label=None):
|
64
|
+
if predicate in self._values:
|
65
|
+
raise ValueError(
|
66
|
+
"Matcher {} already exists in {}".format(
|
67
|
+
repr(predicate),
|
68
|
+
self._name,
|
69
|
+
)
|
70
|
+
)
|
71
|
+
|
72
|
+
if label is not None:
|
73
|
+
if label in self._labeled_predicates:
|
74
|
+
raise ValueError(
|
75
|
+
"Matcher {} with label '{}' already exists in {}".format(
|
76
|
+
repr(predicate),
|
77
|
+
label,
|
78
|
+
self._name,
|
79
|
+
),
|
80
|
+
)
|
81
|
+
|
82
|
+
self._labeled_predicates[label] = predicate
|
83
|
+
|
84
|
+
self._values[predicate] = value
|
85
|
+
|
86
|
+
def find(self, type_str):
|
87
|
+
results = tuple(
|
88
|
+
(predicate, value)
|
89
|
+
for predicate, value in self._values.items()
|
90
|
+
if predicate(type_str)
|
91
|
+
)
|
92
|
+
|
93
|
+
if len(results) == 0:
|
94
|
+
raise NoEntriesFound(
|
95
|
+
"No matching entries for '{}' in {}".format(
|
96
|
+
type_str,
|
97
|
+
self._name,
|
98
|
+
)
|
99
|
+
)
|
100
|
+
|
101
|
+
predicates, values = tuple(zip(*results))
|
102
|
+
|
103
|
+
if len(results) > 1:
|
104
|
+
predicate_reprs = ", ".join(map(repr, predicates))
|
105
|
+
raise MultipleEntriesFound(
|
106
|
+
f"Multiple matching entries for '{type_str}' in {self._name}: "
|
107
|
+
f"{predicate_reprs}. This occurs when two registrations match the "
|
108
|
+
"same type string. You may need to delete one of the "
|
109
|
+
"registrations or modify its matching behavior to ensure it "
|
110
|
+
'doesn\'t collide with other registrations. See the "Registry" '
|
111
|
+
"documentation for more information."
|
112
|
+
)
|
113
|
+
|
114
|
+
return values[0]
|
115
|
+
|
116
|
+
def remove_by_equality(self, predicate):
|
117
|
+
# Delete the predicate mapping to the previously stored value
|
118
|
+
try:
|
119
|
+
del self._values[predicate]
|
120
|
+
except KeyError:
|
121
|
+
raise KeyError(
|
122
|
+
"Matcher {} not found in {}".format(
|
123
|
+
repr(predicate),
|
124
|
+
self._name,
|
125
|
+
)
|
126
|
+
)
|
127
|
+
|
128
|
+
# Delete any label which refers to this predicate
|
129
|
+
try:
|
130
|
+
label = self._label_for_predicate(predicate)
|
131
|
+
except ValueError:
|
132
|
+
pass
|
133
|
+
else:
|
134
|
+
del self._labeled_predicates[label]
|
135
|
+
|
136
|
+
def _label_for_predicate(self, predicate):
|
137
|
+
# Both keys and values in `_labeled_predicates` are unique since the
|
138
|
+
# `add` method enforces this
|
139
|
+
for key, value in self._labeled_predicates.items():
|
140
|
+
if value is predicate:
|
141
|
+
return key
|
142
|
+
|
143
|
+
raise ValueError(
|
144
|
+
"Matcher {} not referred to by any label in {}".format(
|
145
|
+
repr(predicate),
|
146
|
+
self._name,
|
147
|
+
)
|
148
|
+
)
|
149
|
+
|
150
|
+
def remove_by_label(self, label):
|
151
|
+
try:
|
152
|
+
predicate = self._labeled_predicates[label]
|
153
|
+
except KeyError:
|
154
|
+
raise KeyError("Label '{}' not found in {}".format(label, self._name))
|
155
|
+
|
156
|
+
del self._labeled_predicates[label]
|
157
|
+
del self._values[predicate]
|
158
|
+
|
159
|
+
def remove(self, predicate_or_label):
|
160
|
+
if callable(predicate_or_label):
|
161
|
+
self.remove_by_equality(predicate_or_label)
|
162
|
+
elif isinstance(predicate_or_label, str):
|
163
|
+
self.remove_by_label(predicate_or_label)
|
164
|
+
else:
|
165
|
+
raise TypeError(
|
166
|
+
"Key to be removed must be callable or string: got {}".format(
|
167
|
+
type(predicate_or_label),
|
168
|
+
)
|
169
|
+
)
|
170
|
+
|
171
|
+
def copy(self):
|
172
|
+
cpy = type(self)(self._name)
|
173
|
+
|
174
|
+
cpy._values = copy.copy(self._values)
|
175
|
+
cpy._labeled_predicates = copy.copy(self._labeled_predicates)
|
176
|
+
|
177
|
+
return cpy
|
178
|
+
|
179
|
+
|
180
|
+
class Predicate:
|
181
|
+
"""
|
182
|
+
Represents a predicate function to be used for type matching in
|
183
|
+
``ABIRegistry``.
|
184
|
+
"""
|
185
|
+
|
186
|
+
__slots__ = tuple()
|
187
|
+
|
188
|
+
def __call__(self, *args, **kwargs): # pragma: no cover
|
189
|
+
raise NotImplementedError("Must implement `__call__`")
|
190
|
+
|
191
|
+
def __str__(self): # pragma: no cover
|
192
|
+
raise NotImplementedError("Must implement `__str__`")
|
193
|
+
|
194
|
+
def __repr__(self):
|
195
|
+
return "<{} {}>".format(type(self).__name__, self)
|
196
|
+
|
197
|
+
def __iter__(self):
|
198
|
+
for attr in self.__slots__:
|
199
|
+
yield getattr(self, attr)
|
200
|
+
|
201
|
+
def __hash__(self):
|
202
|
+
return hash(tuple(self))
|
203
|
+
|
204
|
+
def __eq__(self, other):
|
205
|
+
return type(self) is type(other) and tuple(self) == tuple(other)
|
206
|
+
|
207
|
+
|
208
|
+
class Equals(Predicate):
|
209
|
+
"""
|
210
|
+
A predicate that matches any input equal to `value`.
|
211
|
+
"""
|
212
|
+
|
213
|
+
__slots__ = ("value",)
|
214
|
+
|
215
|
+
def __init__(self, value):
|
216
|
+
self.value = value
|
217
|
+
|
218
|
+
def __call__(self, other):
|
219
|
+
return self.value == other
|
220
|
+
|
221
|
+
def __str__(self):
|
222
|
+
return "(== {})".format(repr(self.value))
|
223
|
+
|
224
|
+
|
225
|
+
class BaseEquals(Predicate):
|
226
|
+
"""
|
227
|
+
A predicate that matches a basic type string with a base component equal to
|
228
|
+
`value` and no array component. If `with_sub` is `True`, the type string
|
229
|
+
must have a sub component to match. If `with_sub` is `False`, the type
|
230
|
+
string must *not* have a sub component to match. If `with_sub` is None,
|
231
|
+
the type string's sub component is ignored.
|
232
|
+
"""
|
233
|
+
|
234
|
+
__slots__ = ("base", "with_sub")
|
235
|
+
|
236
|
+
def __init__(self, base, *, with_sub=None):
|
237
|
+
self.base = base
|
238
|
+
self.with_sub = with_sub
|
239
|
+
|
240
|
+
def __call__(self, type_str):
|
241
|
+
try:
|
242
|
+
abi_type = grammar.parse(type_str)
|
243
|
+
except exceptions.ParseError:
|
244
|
+
return False
|
245
|
+
|
246
|
+
if isinstance(abi_type, grammar.BasicType):
|
247
|
+
if abi_type.arrlist is not None:
|
248
|
+
return False
|
249
|
+
|
250
|
+
if self.with_sub is not None:
|
251
|
+
if self.with_sub and abi_type.sub is None:
|
252
|
+
return False
|
253
|
+
if not self.with_sub and abi_type.sub is not None:
|
254
|
+
return False
|
255
|
+
|
256
|
+
return abi_type.base == self.base
|
257
|
+
|
258
|
+
# We'd reach this point if `type_str` did not contain a basic type
|
259
|
+
# e.g. if it contained a tuple type
|
260
|
+
return False
|
261
|
+
|
262
|
+
def __str__(self):
|
263
|
+
return "(base == {}{})".format(
|
264
|
+
repr(self.base),
|
265
|
+
""
|
266
|
+
if self.with_sub is None
|
267
|
+
else (" and sub is not None" if self.with_sub else " and sub is None"),
|
268
|
+
)
|
269
|
+
|
270
|
+
|
271
|
+
def has_arrlist(type_str):
|
272
|
+
"""
|
273
|
+
A predicate that matches a type string with an array dimension list.
|
274
|
+
"""
|
275
|
+
try:
|
276
|
+
abi_type = grammar.parse(type_str)
|
277
|
+
except exceptions.ParseError:
|
278
|
+
return False
|
279
|
+
|
280
|
+
return abi_type.arrlist is not None
|
281
|
+
|
282
|
+
|
283
|
+
def is_base_tuple(type_str):
|
284
|
+
"""
|
285
|
+
A predicate that matches a tuple type with no array dimension list.
|
286
|
+
"""
|
287
|
+
try:
|
288
|
+
abi_type = grammar.parse(type_str)
|
289
|
+
except exceptions.ParseError:
|
290
|
+
return False
|
291
|
+
|
292
|
+
return isinstance(abi_type, grammar.TupleType) and abi_type.arrlist is None
|
293
|
+
|
294
|
+
|
295
|
+
def _clear_encoder_cache(old_method):
|
296
|
+
@functools.wraps(old_method)
|
297
|
+
def new_method(self, *args, **kwargs):
|
298
|
+
self.get_encoder.cache_clear()
|
299
|
+
return old_method(self, *args, **kwargs)
|
300
|
+
|
301
|
+
return new_method
|
302
|
+
|
303
|
+
|
304
|
+
def _clear_decoder_cache(old_method):
|
305
|
+
@functools.wraps(old_method)
|
306
|
+
def new_method(self, *args, **kwargs):
|
307
|
+
self.get_decoder.cache_clear()
|
308
|
+
return old_method(self, *args, **kwargs)
|
309
|
+
|
310
|
+
return new_method
|
311
|
+
|
312
|
+
|
313
|
+
class BaseRegistry:
|
314
|
+
@staticmethod
|
315
|
+
def _register(mapping, lookup, value, label=None):
|
316
|
+
if callable(lookup):
|
317
|
+
mapping.add(lookup, value, label)
|
318
|
+
return
|
319
|
+
|
320
|
+
if isinstance(lookup, str):
|
321
|
+
mapping.add(Equals(lookup), value, lookup)
|
322
|
+
return
|
323
|
+
|
324
|
+
raise TypeError(
|
325
|
+
"Lookup must be a callable or a value of type `str`: got {}".format(
|
326
|
+
repr(lookup),
|
327
|
+
)
|
328
|
+
)
|
329
|
+
|
330
|
+
@staticmethod
|
331
|
+
def _unregister(mapping, lookup_or_label):
|
332
|
+
if callable(lookup_or_label):
|
333
|
+
mapping.remove_by_equality(lookup_or_label)
|
334
|
+
return
|
335
|
+
|
336
|
+
if isinstance(lookup_or_label, str):
|
337
|
+
mapping.remove_by_label(lookup_or_label)
|
338
|
+
return
|
339
|
+
|
340
|
+
raise TypeError(
|
341
|
+
"Lookup/label must be a callable or a value of type `str`: got {}".format(
|
342
|
+
repr(lookup_or_label),
|
343
|
+
)
|
344
|
+
)
|
345
|
+
|
346
|
+
@staticmethod
|
347
|
+
def _get_registration(mapping, type_str):
|
348
|
+
try:
|
349
|
+
value = mapping.find(type_str)
|
350
|
+
except ValueError as e:
|
351
|
+
if "No matching" in e.args[0]:
|
352
|
+
# If no matches found, attempt to parse in case lack of matches
|
353
|
+
# was due to unparsability
|
354
|
+
grammar.parse(type_str)
|
355
|
+
|
356
|
+
raise
|
357
|
+
|
358
|
+
return value
|
359
|
+
|
360
|
+
|
361
|
+
class ABIRegistry(Copyable, BaseRegistry):
|
362
|
+
def __init__(self):
|
363
|
+
self._encoders = PredicateMapping("encoder registry")
|
364
|
+
self._decoders = PredicateMapping("decoder registry")
|
365
|
+
|
366
|
+
def _get_registration(self, mapping, type_str):
|
367
|
+
coder = super()._get_registration(mapping, type_str)
|
368
|
+
|
369
|
+
if isinstance(coder, type) and issubclass(coder, BaseCoder):
|
370
|
+
return coder.from_type_str(type_str, self)
|
371
|
+
|
372
|
+
return coder
|
373
|
+
|
374
|
+
@_clear_encoder_cache
|
375
|
+
def register_encoder(
|
376
|
+
self, lookup: Lookup, encoder: Encoder, label: str = None
|
377
|
+
) -> None:
|
378
|
+
"""
|
379
|
+
Registers the given ``encoder`` under the given ``lookup``. A unique
|
380
|
+
string label may be optionally provided that can be used to refer to
|
381
|
+
the registration by name. For more information about arguments, refer
|
382
|
+
to :any:`register`.
|
383
|
+
"""
|
384
|
+
self._register(self._encoders, lookup, encoder, label=label)
|
385
|
+
|
386
|
+
@_clear_encoder_cache
|
387
|
+
def unregister_encoder(self, lookup_or_label: Lookup) -> None:
|
388
|
+
"""
|
389
|
+
Unregisters an encoder in the registry with the given lookup or label.
|
390
|
+
If ``lookup_or_label`` is a string, the encoder with the label
|
391
|
+
``lookup_or_label`` will be unregistered. If it is an function, the
|
392
|
+
encoder with the lookup function ``lookup_or_label`` will be
|
393
|
+
unregistered.
|
394
|
+
"""
|
395
|
+
self._unregister(self._encoders, lookup_or_label)
|
396
|
+
|
397
|
+
@_clear_decoder_cache
|
398
|
+
def register_decoder(
|
399
|
+
self, lookup: Lookup, decoder: Decoder, label: str = None
|
400
|
+
) -> None:
|
401
|
+
"""
|
402
|
+
Registers the given ``decoder`` under the given ``lookup``. A unique
|
403
|
+
string label may be optionally provided that can be used to refer to
|
404
|
+
the registration by name. For more information about arguments, refer
|
405
|
+
to :any:`register`.
|
406
|
+
"""
|
407
|
+
self._register(self._decoders, lookup, decoder, label=label)
|
408
|
+
|
409
|
+
@_clear_decoder_cache
|
410
|
+
def unregister_decoder(self, lookup_or_label: Lookup) -> None:
|
411
|
+
"""
|
412
|
+
Unregisters a decoder in the registry with the given lookup or label.
|
413
|
+
If ``lookup_or_label`` is a string, the decoder with the label
|
414
|
+
``lookup_or_label`` will be unregistered. If it is an function, the
|
415
|
+
decoder with the lookup function ``lookup_or_label`` will be
|
416
|
+
unregistered.
|
417
|
+
"""
|
418
|
+
self._unregister(self._decoders, lookup_or_label)
|
419
|
+
|
420
|
+
def register(
|
421
|
+
self, lookup: Lookup, encoder: Encoder, decoder: Decoder, label: str = None
|
422
|
+
) -> None:
|
423
|
+
"""
|
424
|
+
Registers the given ``encoder`` and ``decoder`` under the given
|
425
|
+
``lookup``. A unique string label may be optionally provided that can
|
426
|
+
be used to refer to the registration by name.
|
427
|
+
|
428
|
+
:param lookup: A type string or type string matcher function
|
429
|
+
(predicate). When the registry is queried with a type string
|
430
|
+
``query`` to determine which encoder or decoder to use, ``query``
|
431
|
+
will be checked against every registration in the registry. If a
|
432
|
+
registration was created with a type string for ``lookup``, it will
|
433
|
+
be considered a match if ``lookup == query``. If a registration
|
434
|
+
was created with a matcher function for ``lookup``, it will be
|
435
|
+
considered a match if ``lookup(query) is True``. If more than one
|
436
|
+
registration is found to be a match, then an exception is raised.
|
437
|
+
|
438
|
+
:param encoder: An encoder callable or class to use if ``lookup``
|
439
|
+
matches a query. If ``encoder`` is a callable, it must accept a
|
440
|
+
python value and return a ``bytes`` value. If ``encoder`` is a
|
441
|
+
class, it must be a valid subclass of :any:`encoding.BaseEncoder`
|
442
|
+
and must also implement the :any:`from_type_str` method on
|
443
|
+
:any:`base.BaseCoder`.
|
444
|
+
|
445
|
+
:param decoder: A decoder callable or class to use if ``lookup``
|
446
|
+
matches a query. If ``decoder`` is a callable, it must accept a
|
447
|
+
stream-like object of bytes and return a python value. If
|
448
|
+
``decoder`` is a class, it must be a valid subclass of
|
449
|
+
:any:`decoding.BaseDecoder` and must also implement the
|
450
|
+
:any:`from_type_str` method on :any:`base.BaseCoder`.
|
451
|
+
|
452
|
+
:param label: An optional label that can be used to refer to this
|
453
|
+
registration by name. This label can be used to unregister an
|
454
|
+
entry in the registry via the :any:`unregister` method and its
|
455
|
+
variants.
|
456
|
+
"""
|
457
|
+
self.register_encoder(lookup, encoder, label=label)
|
458
|
+
self.register_decoder(lookup, decoder, label=label)
|
459
|
+
|
460
|
+
def unregister(self, label: str) -> None:
|
461
|
+
"""
|
462
|
+
Unregisters the entries in the encoder and decoder registries which
|
463
|
+
have the label ``label``.
|
464
|
+
"""
|
465
|
+
self.unregister_encoder(label)
|
466
|
+
self.unregister_decoder(label)
|
467
|
+
|
468
|
+
@functools.lru_cache(maxsize=None)
|
469
|
+
def get_encoder(self, type_str):
|
470
|
+
return self._get_registration(self._encoders, type_str)
|
471
|
+
|
472
|
+
def has_encoder(self, type_str: abi.TypeStr) -> bool:
|
473
|
+
"""
|
474
|
+
Returns ``True`` if an encoder is found for the given type string
|
475
|
+
``type_str``. Otherwise, returns ``False``. Raises
|
476
|
+
:class:`~eth_abi.exceptions.MultipleEntriesFound` if multiple encoders
|
477
|
+
are found.
|
478
|
+
"""
|
479
|
+
try:
|
480
|
+
self.get_encoder(type_str)
|
481
|
+
except (ABITypeError, NoEntriesFound):
|
482
|
+
return False
|
483
|
+
else:
|
484
|
+
return True
|
485
|
+
|
486
|
+
@functools.lru_cache(maxsize=None)
|
487
|
+
def get_decoder(self, type_str):
|
488
|
+
return self._get_registration(self._decoders, type_str)
|
489
|
+
|
490
|
+
def copy(self):
|
491
|
+
"""
|
492
|
+
Copies a registry such that new registrations can be made or existing
|
493
|
+
registrations can be unregistered without affecting any instance from
|
494
|
+
which a copy was obtained. This is useful if an existing registry
|
495
|
+
fulfills most of a user's needs but requires one or two modifications.
|
496
|
+
In that case, a copy of that registry can be obtained and the necessary
|
497
|
+
changes made without affecting the original registry.
|
498
|
+
"""
|
499
|
+
cpy = type(self)()
|
500
|
+
|
501
|
+
cpy._encoders = copy.copy(self._encoders)
|
502
|
+
cpy._decoders = copy.copy(self._decoders)
|
503
|
+
|
504
|
+
return cpy
|
505
|
+
|
506
|
+
|
507
|
+
registry = ABIRegistry()
|
508
|
+
|
509
|
+
registry.register(
|
510
|
+
BaseEquals("uint"),
|
511
|
+
encoding.UnsignedIntegerEncoder,
|
512
|
+
decoding.UnsignedIntegerDecoder,
|
513
|
+
label="uint",
|
514
|
+
)
|
515
|
+
registry.register(
|
516
|
+
BaseEquals("int"),
|
517
|
+
encoding.SignedIntegerEncoder,
|
518
|
+
decoding.SignedIntegerDecoder,
|
519
|
+
label="int",
|
520
|
+
)
|
521
|
+
registry.register(
|
522
|
+
BaseEquals("address"),
|
523
|
+
encoding.AddressEncoder,
|
524
|
+
decoding.AddressDecoder,
|
525
|
+
label="address",
|
526
|
+
)
|
527
|
+
registry.register(
|
528
|
+
BaseEquals("bool"),
|
529
|
+
encoding.BooleanEncoder,
|
530
|
+
decoding.BooleanDecoder,
|
531
|
+
label="bool",
|
532
|
+
)
|
533
|
+
registry.register(
|
534
|
+
BaseEquals("ufixed"),
|
535
|
+
encoding.UnsignedFixedEncoder,
|
536
|
+
decoding.UnsignedFixedDecoder,
|
537
|
+
label="ufixed",
|
538
|
+
)
|
539
|
+
registry.register(
|
540
|
+
BaseEquals("fixed"),
|
541
|
+
encoding.SignedFixedEncoder,
|
542
|
+
decoding.SignedFixedDecoder,
|
543
|
+
label="fixed",
|
544
|
+
)
|
545
|
+
registry.register(
|
546
|
+
BaseEquals("bytes", with_sub=True),
|
547
|
+
encoding.BytesEncoder,
|
548
|
+
decoding.BytesDecoder,
|
549
|
+
label="bytes<M>",
|
550
|
+
)
|
551
|
+
registry.register(
|
552
|
+
BaseEquals("bytes", with_sub=False),
|
553
|
+
encoding.ByteStringEncoder,
|
554
|
+
decoding.ByteStringDecoder,
|
555
|
+
label="bytes",
|
556
|
+
)
|
557
|
+
registry.register(
|
558
|
+
BaseEquals("function"),
|
559
|
+
encoding.BytesEncoder,
|
560
|
+
decoding.BytesDecoder,
|
561
|
+
label="function",
|
562
|
+
)
|
563
|
+
registry.register(
|
564
|
+
BaseEquals("string"),
|
565
|
+
encoding.TextStringEncoder,
|
566
|
+
decoding.StringDecoder,
|
567
|
+
label="string",
|
568
|
+
)
|
569
|
+
registry.register(
|
570
|
+
has_arrlist,
|
571
|
+
encoding.BaseArrayEncoder,
|
572
|
+
decoding.BaseArrayDecoder,
|
573
|
+
label="has_arrlist",
|
574
|
+
)
|
575
|
+
registry.register(
|
576
|
+
is_base_tuple,
|
577
|
+
encoding.TupleEncoder,
|
578
|
+
decoding.TupleDecoder,
|
579
|
+
label="is_base_tuple",
|
580
|
+
)
|
581
|
+
|
582
|
+
registry_packed = ABIRegistry()
|
583
|
+
|
584
|
+
registry_packed.register_encoder(
|
585
|
+
BaseEquals("uint"),
|
586
|
+
encoding.PackedUnsignedIntegerEncoder,
|
587
|
+
label="uint",
|
588
|
+
)
|
589
|
+
registry_packed.register_encoder(
|
590
|
+
BaseEquals("int"),
|
591
|
+
encoding.PackedSignedIntegerEncoder,
|
592
|
+
label="int",
|
593
|
+
)
|
594
|
+
registry_packed.register_encoder(
|
595
|
+
BaseEquals("address"),
|
596
|
+
encoding.PackedAddressEncoder,
|
597
|
+
label="address",
|
598
|
+
)
|
599
|
+
registry_packed.register_encoder(
|
600
|
+
BaseEquals("bool"),
|
601
|
+
encoding.PackedBooleanEncoder,
|
602
|
+
label="bool",
|
603
|
+
)
|
604
|
+
registry_packed.register_encoder(
|
605
|
+
BaseEquals("ufixed"),
|
606
|
+
encoding.PackedUnsignedFixedEncoder,
|
607
|
+
label="ufixed",
|
608
|
+
)
|
609
|
+
registry_packed.register_encoder(
|
610
|
+
BaseEquals("fixed"),
|
611
|
+
encoding.PackedSignedFixedEncoder,
|
612
|
+
label="fixed",
|
613
|
+
)
|
614
|
+
registry_packed.register_encoder(
|
615
|
+
BaseEquals("bytes", with_sub=True),
|
616
|
+
encoding.PackedBytesEncoder,
|
617
|
+
label="bytes<M>",
|
618
|
+
)
|
619
|
+
registry_packed.register_encoder(
|
620
|
+
BaseEquals("bytes", with_sub=False),
|
621
|
+
encoding.PackedByteStringEncoder,
|
622
|
+
label="bytes",
|
623
|
+
)
|
624
|
+
registry_packed.register_encoder(
|
625
|
+
BaseEquals("function"),
|
626
|
+
encoding.PackedBytesEncoder,
|
627
|
+
label="function",
|
628
|
+
)
|
629
|
+
registry_packed.register_encoder(
|
630
|
+
BaseEquals("string"),
|
631
|
+
encoding.PackedTextStringEncoder,
|
632
|
+
label="string",
|
633
|
+
)
|
634
|
+
registry_packed.register_encoder(
|
635
|
+
has_arrlist,
|
636
|
+
encoding.PackedArrayEncoder,
|
637
|
+
label="has_arrlist",
|
638
|
+
)
|
639
|
+
registry_packed.register_encoder(
|
640
|
+
is_base_tuple,
|
641
|
+
encoding.TupleEncoder,
|
642
|
+
label="is_base_tuple",
|
643
|
+
)
|