coinex-api 0.0.13__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.13.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.13.dist-info/RECORD +0 -3
- {coinex_api-0.0.13.dist-info → coinex_api-0.0.14.dist-info}/WHEEL +0 -0
@@ -0,0 +1,132 @@
|
|
1
|
+
from ....marshmallow import Schema, fields
|
2
|
+
from ....marshmallow_oneofschema import OneOfSchema
|
3
|
+
|
4
|
+
from .shape import (
|
5
|
+
CONSTRUCTOR_ENTRY,
|
6
|
+
DATA_KIND,
|
7
|
+
ENUM_ENTRY,
|
8
|
+
EVENT_ENTRY,
|
9
|
+
FUNCTION_ENTRY,
|
10
|
+
IMPL_ENTRY,
|
11
|
+
INTERFACE_ENTRY,
|
12
|
+
L1_HANDLER_ENTRY,
|
13
|
+
NESTED_KIND,
|
14
|
+
STRUCT_ENTRY,
|
15
|
+
)
|
16
|
+
|
17
|
+
|
18
|
+
class TypeSchema(Schema):
|
19
|
+
type = fields.String(data_key="type", required=True)
|
20
|
+
|
21
|
+
|
22
|
+
class TypedParameterSchema(TypeSchema):
|
23
|
+
name = fields.String(data_key="name", required=True)
|
24
|
+
|
25
|
+
|
26
|
+
class FunctionBaseSchema(Schema):
|
27
|
+
name = fields.String(data_key="name", required=True)
|
28
|
+
inputs = fields.List(
|
29
|
+
fields.Nested(TypedParameterSchema()), data_key="inputs", required=True
|
30
|
+
)
|
31
|
+
outputs = fields.List(
|
32
|
+
fields.Nested(TypeSchema()), data_key="outputs", required=True
|
33
|
+
)
|
34
|
+
state_mutability = fields.String(data_key="state_mutability", default=None)
|
35
|
+
|
36
|
+
|
37
|
+
class FunctionAbiEntrySchema(FunctionBaseSchema):
|
38
|
+
type = fields.Constant(FUNCTION_ENTRY, data_key="type", required=True)
|
39
|
+
|
40
|
+
|
41
|
+
class ConstructorAbiEntrySchema(Schema):
|
42
|
+
type = fields.Constant(CONSTRUCTOR_ENTRY, data_key="type", required=True)
|
43
|
+
name = fields.String(data_key="name", required=True)
|
44
|
+
inputs = fields.List(
|
45
|
+
fields.Nested(TypedParameterSchema()), data_key="inputs", required=True
|
46
|
+
)
|
47
|
+
|
48
|
+
|
49
|
+
class L1HandlerAbiEntrySchema(FunctionBaseSchema):
|
50
|
+
type = fields.Constant(L1_HANDLER_ENTRY, data_key="type", required=True)
|
51
|
+
|
52
|
+
|
53
|
+
class EventStructMemberSchema(TypedParameterSchema):
|
54
|
+
kind = fields.Constant(DATA_KIND, data_key="kind", required=True)
|
55
|
+
|
56
|
+
|
57
|
+
class EventStructAbiEntrySchema(Schema):
|
58
|
+
type = fields.Constant(EVENT_ENTRY, data_key="type", required=True)
|
59
|
+
name = fields.String(data_key="name", required=True)
|
60
|
+
kind = fields.Constant(STRUCT_ENTRY, data_key="kind", required=True)
|
61
|
+
members = fields.List(
|
62
|
+
fields.Nested(EventStructMemberSchema()), data_key="members", required=True
|
63
|
+
)
|
64
|
+
|
65
|
+
|
66
|
+
class EventEnumVariantSchema(TypedParameterSchema):
|
67
|
+
kind = fields.Constant(NESTED_KIND, data_key="kind", required=True)
|
68
|
+
|
69
|
+
|
70
|
+
class EventEnumAbiEntrySchema(Schema):
|
71
|
+
type = fields.Constant(EVENT_ENTRY, data_key="type", required=True)
|
72
|
+
name = fields.String(data_key="name", required=True)
|
73
|
+
kind = fields.Constant(ENUM_ENTRY, data_key="kind", required=True)
|
74
|
+
variants = fields.List(
|
75
|
+
fields.Nested(EventEnumVariantSchema()), data_key="variants", required=True
|
76
|
+
)
|
77
|
+
|
78
|
+
|
79
|
+
class EventAbiEntrySchema(OneOfSchema):
|
80
|
+
type_field = "kind"
|
81
|
+
type_field_remove = False
|
82
|
+
type_schemas = {
|
83
|
+
STRUCT_ENTRY: EventStructAbiEntrySchema,
|
84
|
+
ENUM_ENTRY: EventEnumAbiEntrySchema,
|
85
|
+
}
|
86
|
+
|
87
|
+
|
88
|
+
class StructAbiEntrySchema(Schema):
|
89
|
+
type = fields.Constant(STRUCT_ENTRY, data_key="type", required=True)
|
90
|
+
name = fields.String(data_key="name", required=True)
|
91
|
+
members = fields.List(
|
92
|
+
fields.Nested(TypedParameterSchema()), data_key="members", required=True
|
93
|
+
)
|
94
|
+
|
95
|
+
|
96
|
+
class EnumAbiEntrySchema(Schema):
|
97
|
+
type = fields.Constant(ENUM_ENTRY, data_key="type", required=True)
|
98
|
+
name = fields.String(data_key="name", required=True)
|
99
|
+
variants = fields.List(
|
100
|
+
fields.Nested(TypedParameterSchema(), data_key="variants", required=True)
|
101
|
+
)
|
102
|
+
|
103
|
+
|
104
|
+
class ImplAbiEntrySchema(Schema):
|
105
|
+
type = fields.Constant(IMPL_ENTRY, data_key="type", required=True)
|
106
|
+
name = fields.String(data_key="name", required=True)
|
107
|
+
interface_name = fields.String(data_key="interface_name", required=True)
|
108
|
+
|
109
|
+
|
110
|
+
class InterfaceAbiEntrySchema(Schema):
|
111
|
+
type = fields.Constant(INTERFACE_ENTRY, data_key="type", required=True)
|
112
|
+
name = fields.String(data_key="name", required=True)
|
113
|
+
|
114
|
+
items = fields.List(
|
115
|
+
fields.Nested(
|
116
|
+
FunctionAbiEntrySchema(), data_key="items", required=True
|
117
|
+
) # for now only functions can be defined here
|
118
|
+
)
|
119
|
+
|
120
|
+
|
121
|
+
class ContractAbiEntrySchema(OneOfSchema):
|
122
|
+
type_field_remove = False
|
123
|
+
type_schemas = {
|
124
|
+
FUNCTION_ENTRY: FunctionAbiEntrySchema,
|
125
|
+
EVENT_ENTRY: EventAbiEntrySchema,
|
126
|
+
STRUCT_ENTRY: StructAbiEntrySchema,
|
127
|
+
ENUM_ENTRY: EnumAbiEntrySchema,
|
128
|
+
CONSTRUCTOR_ENTRY: ConstructorAbiEntrySchema,
|
129
|
+
L1_HANDLER_ENTRY: L1HandlerAbiEntrySchema,
|
130
|
+
IMPL_ENTRY: ImplAbiEntrySchema,
|
131
|
+
INTERFACE_ENTRY: InterfaceAbiEntrySchema,
|
132
|
+
}
|
@@ -0,0 +1,107 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from typing import List, Literal, Optional, TypedDict, Union
|
4
|
+
|
5
|
+
STRUCT_ENTRY = "struct"
|
6
|
+
EVENT_ENTRY = "event"
|
7
|
+
FUNCTION_ENTRY = "function"
|
8
|
+
ENUM_ENTRY = "enum"
|
9
|
+
CONSTRUCTOR_ENTRY = "constructor"
|
10
|
+
L1_HANDLER_ENTRY = "l1_handler"
|
11
|
+
IMPL_ENTRY = "impl"
|
12
|
+
INTERFACE_ENTRY = "interface"
|
13
|
+
|
14
|
+
DATA_KIND = "data"
|
15
|
+
NESTED_KIND = "nested"
|
16
|
+
|
17
|
+
|
18
|
+
class TypeDict(TypedDict):
|
19
|
+
type: str
|
20
|
+
|
21
|
+
|
22
|
+
class TypedParameterDict(TypeDict):
|
23
|
+
name: str
|
24
|
+
|
25
|
+
|
26
|
+
class StructDict(TypedDict):
|
27
|
+
type: Literal["struct"]
|
28
|
+
name: str
|
29
|
+
members: List[TypedParameterDict]
|
30
|
+
|
31
|
+
|
32
|
+
class FunctionBaseDict(TypedDict):
|
33
|
+
name: str
|
34
|
+
inputs: List[TypedParameterDict]
|
35
|
+
outputs: List[TypeDict]
|
36
|
+
state_mutability: Optional[Literal["external", "view"]]
|
37
|
+
|
38
|
+
|
39
|
+
class FunctionDict(FunctionBaseDict):
|
40
|
+
type: Literal["function"]
|
41
|
+
|
42
|
+
|
43
|
+
class ConstructorDict(TypedDict):
|
44
|
+
type: Literal["constructor"]
|
45
|
+
name: str
|
46
|
+
inputs: List[TypedParameterDict]
|
47
|
+
|
48
|
+
|
49
|
+
class L1HandlerDict(FunctionBaseDict):
|
50
|
+
type: Literal["l1_handler"]
|
51
|
+
|
52
|
+
|
53
|
+
class EventBaseDict(TypedDict):
|
54
|
+
type: Literal["event"]
|
55
|
+
name: str
|
56
|
+
|
57
|
+
|
58
|
+
class EventStructMemberDict(TypedParameterDict):
|
59
|
+
kind: Literal["data"]
|
60
|
+
|
61
|
+
|
62
|
+
class EventStructDict(EventBaseDict):
|
63
|
+
kind: Literal["struct"]
|
64
|
+
members: List[EventStructMemberDict]
|
65
|
+
|
66
|
+
|
67
|
+
class EventEnumVariantDict(TypedParameterDict):
|
68
|
+
kind: Literal["nested"]
|
69
|
+
|
70
|
+
|
71
|
+
class EventEnumDict(EventBaseDict):
|
72
|
+
kind: Literal["enum"]
|
73
|
+
variants: List[EventEnumVariantDict]
|
74
|
+
|
75
|
+
|
76
|
+
EventDict = Union[EventStructDict, EventEnumDict]
|
77
|
+
|
78
|
+
|
79
|
+
class EnumDict(TypedDict):
|
80
|
+
type: Literal["enum"]
|
81
|
+
name: str
|
82
|
+
variants: List[TypedParameterDict]
|
83
|
+
|
84
|
+
|
85
|
+
class ImplDict(TypedDict):
|
86
|
+
type: Literal["impl"]
|
87
|
+
name: str
|
88
|
+
interface_name: str
|
89
|
+
|
90
|
+
|
91
|
+
class InterfaceDict(TypedDict):
|
92
|
+
type: Literal["interface"]
|
93
|
+
name: str
|
94
|
+
items: List[FunctionDict] # for now only functions can be defined here
|
95
|
+
|
96
|
+
|
97
|
+
AbiDictEntry = Union[
|
98
|
+
StructDict,
|
99
|
+
FunctionDict,
|
100
|
+
EventDict,
|
101
|
+
EnumDict,
|
102
|
+
ConstructorDict,
|
103
|
+
L1HandlerDict,
|
104
|
+
ImplDict,
|
105
|
+
InterfaceDict,
|
106
|
+
]
|
107
|
+
AbiDictList = List[AbiDictEntry]
|
File without changes
|
@@ -0,0 +1,123 @@
|
|
1
|
+
from __future__ import annotations
|
2
|
+
|
3
|
+
from abc import ABC
|
4
|
+
from collections import OrderedDict
|
5
|
+
from dataclasses import dataclass
|
6
|
+
from typing import List
|
7
|
+
|
8
|
+
|
9
|
+
class CairoType(ABC):
|
10
|
+
"""
|
11
|
+
Base type for all Cairo type representations. All types extend it.
|
12
|
+
"""
|
13
|
+
|
14
|
+
|
15
|
+
@dataclass
|
16
|
+
class FeltType(CairoType):
|
17
|
+
"""
|
18
|
+
Type representation of Cairo field element.
|
19
|
+
"""
|
20
|
+
|
21
|
+
|
22
|
+
@dataclass
|
23
|
+
class BoolType(CairoType):
|
24
|
+
"""
|
25
|
+
Type representation of Cairo boolean.
|
26
|
+
"""
|
27
|
+
|
28
|
+
|
29
|
+
@dataclass
|
30
|
+
class TupleType(CairoType):
|
31
|
+
"""
|
32
|
+
Type representation of Cairo tuples without named fields.
|
33
|
+
"""
|
34
|
+
|
35
|
+
types: List[CairoType] #: types of every tuple element.
|
36
|
+
|
37
|
+
|
38
|
+
@dataclass
|
39
|
+
class NamedTupleType(CairoType):
|
40
|
+
"""
|
41
|
+
Type representation of Cairo tuples with named fields.
|
42
|
+
"""
|
43
|
+
|
44
|
+
types: OrderedDict[str, CairoType] #: types of every tuple member.
|
45
|
+
|
46
|
+
|
47
|
+
@dataclass
|
48
|
+
class ArrayType(CairoType):
|
49
|
+
"""
|
50
|
+
Type representation of Cairo arrays.
|
51
|
+
"""
|
52
|
+
|
53
|
+
inner_type: CairoType #: type of element inside array.
|
54
|
+
|
55
|
+
|
56
|
+
@dataclass
|
57
|
+
class StructType(CairoType):
|
58
|
+
"""
|
59
|
+
Type representation of Cairo structures.
|
60
|
+
"""
|
61
|
+
|
62
|
+
name: str #: Structure name
|
63
|
+
# We need ordered dict, because it is important in serialization
|
64
|
+
types: OrderedDict[str, CairoType] #: types of every structure member.
|
65
|
+
|
66
|
+
|
67
|
+
@dataclass
|
68
|
+
class EnumType(CairoType):
|
69
|
+
"""
|
70
|
+
Type representation of Cairo enums.
|
71
|
+
"""
|
72
|
+
|
73
|
+
name: str
|
74
|
+
variants: OrderedDict[str, CairoType]
|
75
|
+
|
76
|
+
|
77
|
+
@dataclass
|
78
|
+
class OptionType(CairoType):
|
79
|
+
"""
|
80
|
+
Type representation of Cairo options.
|
81
|
+
"""
|
82
|
+
|
83
|
+
type: CairoType
|
84
|
+
|
85
|
+
|
86
|
+
@dataclass
|
87
|
+
class UintType(CairoType):
|
88
|
+
"""
|
89
|
+
Type representation of Cairo unsigned integers.
|
90
|
+
"""
|
91
|
+
|
92
|
+
bits: int
|
93
|
+
|
94
|
+
def check_range(self, value: int):
|
95
|
+
"""
|
96
|
+
Utility method checking if the `value` is in range.
|
97
|
+
"""
|
98
|
+
|
99
|
+
|
100
|
+
@dataclass
|
101
|
+
class TypeIdentifier(CairoType):
|
102
|
+
"""
|
103
|
+
Type representation of Cairo identifiers.
|
104
|
+
"""
|
105
|
+
|
106
|
+
name: str
|
107
|
+
|
108
|
+
|
109
|
+
@dataclass
|
110
|
+
class UnitType(CairoType):
|
111
|
+
"""
|
112
|
+
Type representation of Cairo unit `()`.
|
113
|
+
"""
|
114
|
+
|
115
|
+
|
116
|
+
@dataclass
|
117
|
+
class EventType(CairoType):
|
118
|
+
"""
|
119
|
+
Type representation of Cairo Event.
|
120
|
+
"""
|
121
|
+
|
122
|
+
name: str
|
123
|
+
types: OrderedDict[str, CairoType]
|
File without changes
|
@@ -0,0 +1,77 @@
|
|
1
|
+
import dataclasses
|
2
|
+
from typing import List, Optional
|
3
|
+
|
4
|
+
|
5
|
+
class CairoType:
|
6
|
+
"""
|
7
|
+
Base class for cairo types.
|
8
|
+
"""
|
9
|
+
|
10
|
+
|
11
|
+
@dataclasses.dataclass
|
12
|
+
class TypeFelt(CairoType):
|
13
|
+
pass
|
14
|
+
|
15
|
+
|
16
|
+
@dataclasses.dataclass
|
17
|
+
class TypeCodeoffset(CairoType):
|
18
|
+
pass
|
19
|
+
|
20
|
+
|
21
|
+
@dataclasses.dataclass
|
22
|
+
class TypePointer(CairoType):
|
23
|
+
pointee: CairoType
|
24
|
+
|
25
|
+
|
26
|
+
@dataclasses.dataclass
|
27
|
+
class TypeIdentifier(CairoType):
|
28
|
+
"""
|
29
|
+
Represents a name of an unresolved type.
|
30
|
+
This type can be resolved to TypeStruct or TypeDefinition.
|
31
|
+
"""
|
32
|
+
|
33
|
+
name: str
|
34
|
+
|
35
|
+
|
36
|
+
@dataclasses.dataclass
|
37
|
+
class TypeStruct(CairoType):
|
38
|
+
scope: str
|
39
|
+
|
40
|
+
|
41
|
+
@dataclasses.dataclass
|
42
|
+
class TypeFunction(CairoType):
|
43
|
+
"""
|
44
|
+
Represents a type of a function.
|
45
|
+
"""
|
46
|
+
|
47
|
+
scope: str
|
48
|
+
|
49
|
+
|
50
|
+
@dataclasses.dataclass
|
51
|
+
class TypeTuple(CairoType):
|
52
|
+
"""
|
53
|
+
Represents a type of a named or unnamed tuple.
|
54
|
+
For example, "(felt, felt*)" or "(a: felt, b: felt*)".
|
55
|
+
"""
|
56
|
+
|
57
|
+
@dataclasses.dataclass
|
58
|
+
class Item(CairoType):
|
59
|
+
"""
|
60
|
+
Represents a possibly named type item of a TypeTuple.
|
61
|
+
For example: "felt" or "a: felt".
|
62
|
+
"""
|
63
|
+
|
64
|
+
name: Optional[str]
|
65
|
+
typ: CairoType
|
66
|
+
|
67
|
+
members: List["TypeTuple.Item"]
|
68
|
+
has_trailing_comma: bool = dataclasses.field(hash=False, compare=False)
|
69
|
+
|
70
|
+
@property
|
71
|
+
def is_named(self) -> bool:
|
72
|
+
return all(member.name is not None for member in self.members)
|
73
|
+
|
74
|
+
|
75
|
+
@dataclasses.dataclass
|
76
|
+
class ExprIdentifier(CairoType):
|
77
|
+
name: str
|
@@ -0,0 +1,46 @@
|
|
1
|
+
from ....lark import Lark
|
2
|
+
|
3
|
+
from .cairo_types import CairoType
|
4
|
+
from .parser_transformer import ParserTransformer
|
5
|
+
|
6
|
+
CAIRO_EBNF = """
|
7
|
+
%import common.WS_INLINE
|
8
|
+
%ignore WS_INLINE
|
9
|
+
|
10
|
+
IDENTIFIER: /[a-zA-Z_][a-zA-Z_0-9]*/
|
11
|
+
_DBL_STAR: "**"
|
12
|
+
COMMA: ","
|
13
|
+
|
14
|
+
?type: non_identifier_type
|
15
|
+
| identifier -> type_struct
|
16
|
+
|
17
|
+
comma_separated{item}: item? (COMMA item)* COMMA?
|
18
|
+
|
19
|
+
named_type: identifier (":" type)? | non_identifier_type
|
20
|
+
non_identifier_type: "felt" -> type_felt
|
21
|
+
| "codeoffset" -> type_codeoffset
|
22
|
+
| type "*" -> type_pointer
|
23
|
+
| type _DBL_STAR -> type_pointer2
|
24
|
+
| "(" comma_separated{named_type} ")" -> type_tuple
|
25
|
+
|
26
|
+
identifier: IDENTIFIER ("." IDENTIFIER)*
|
27
|
+
"""
|
28
|
+
|
29
|
+
|
30
|
+
def parse(code: str) -> CairoType:
|
31
|
+
"""
|
32
|
+
Parses the given string and returns a CairoType.
|
33
|
+
"""
|
34
|
+
|
35
|
+
grammar = CAIRO_EBNF
|
36
|
+
|
37
|
+
grammar_parser = Lark(
|
38
|
+
grammar=grammar,
|
39
|
+
start=["type"],
|
40
|
+
parser="lalr",
|
41
|
+
)
|
42
|
+
|
43
|
+
parsed = grammar_parser.parse(code)
|
44
|
+
transformed = ParserTransformer().transform(parsed)
|
45
|
+
|
46
|
+
return transformed
|
@@ -0,0 +1,138 @@
|
|
1
|
+
import dataclasses
|
2
|
+
from typing import Optional, Tuple
|
3
|
+
|
4
|
+
from ....lark import Token, Transformer, v_args
|
5
|
+
|
6
|
+
from .cairo_types import (
|
7
|
+
CairoType,
|
8
|
+
ExprIdentifier,
|
9
|
+
TypeCodeoffset,
|
10
|
+
TypeFelt,
|
11
|
+
TypeIdentifier,
|
12
|
+
TypePointer,
|
13
|
+
TypeStruct,
|
14
|
+
TypeTuple,
|
15
|
+
)
|
16
|
+
|
17
|
+
|
18
|
+
@dataclasses.dataclass
|
19
|
+
class ParserContext:
|
20
|
+
"""
|
21
|
+
Represents information that affects the parsing process.
|
22
|
+
"""
|
23
|
+
|
24
|
+
# If True, treat type identifiers as resolved.
|
25
|
+
resolved_types: bool = False
|
26
|
+
|
27
|
+
|
28
|
+
class ParserError(Exception):
|
29
|
+
"""
|
30
|
+
Base exception for parsing process.
|
31
|
+
"""
|
32
|
+
|
33
|
+
|
34
|
+
@dataclasses.dataclass
|
35
|
+
class CommaSeparated:
|
36
|
+
"""
|
37
|
+
Represents a list of comma separated values, such as expressions or types.
|
38
|
+
"""
|
39
|
+
|
40
|
+
args: list
|
41
|
+
has_trailing_comma: bool
|
42
|
+
|
43
|
+
|
44
|
+
class ParserTransformer(Transformer):
|
45
|
+
"""
|
46
|
+
Transforms the lark tree into an AST based on the classes defined in cairo_types.py.
|
47
|
+
"""
|
48
|
+
|
49
|
+
# pylint: disable=unused-argument, no-self-use
|
50
|
+
|
51
|
+
def __init__(self):
|
52
|
+
super().__init__()
|
53
|
+
self.parser_context = ParserContext()
|
54
|
+
|
55
|
+
def __default__(self, data: str, children, meta):
|
56
|
+
raise TypeError(f"Unable to parse tree node of type {data}")
|
57
|
+
|
58
|
+
def comma_separated(self, value) -> CommaSeparated:
|
59
|
+
saw_comma = None
|
60
|
+
args: list = []
|
61
|
+
for v in value:
|
62
|
+
if isinstance(v, Token) and v.type == "COMMA":
|
63
|
+
if saw_comma is not False:
|
64
|
+
raise ParserError("Unexpected comma.")
|
65
|
+
saw_comma = True
|
66
|
+
else:
|
67
|
+
if saw_comma is False:
|
68
|
+
raise ParserError("Expected a comma before this expression.")
|
69
|
+
args.append(v)
|
70
|
+
|
71
|
+
# Reset state.
|
72
|
+
saw_comma = False
|
73
|
+
|
74
|
+
if saw_comma is None:
|
75
|
+
saw_comma = False
|
76
|
+
|
77
|
+
return CommaSeparated(args=args, has_trailing_comma=saw_comma)
|
78
|
+
|
79
|
+
# Types.
|
80
|
+
|
81
|
+
@v_args(meta=True)
|
82
|
+
def named_type(self, meta, value) -> TypeTuple.Item:
|
83
|
+
name: Optional[str]
|
84
|
+
if len(value) == 1:
|
85
|
+
# Unnamed type.
|
86
|
+
(typ,) = value
|
87
|
+
name = None
|
88
|
+
if isinstance(typ, ExprIdentifier):
|
89
|
+
typ = self.type_struct([typ])
|
90
|
+
elif len(value) == 2:
|
91
|
+
# Named type.
|
92
|
+
identifier, typ = value
|
93
|
+
assert isinstance(identifier, ExprIdentifier)
|
94
|
+
assert isinstance(typ, CairoType)
|
95
|
+
if "." in identifier.name:
|
96
|
+
raise ParserError("Unexpected . in name.")
|
97
|
+
name = identifier.name
|
98
|
+
else:
|
99
|
+
raise NotImplementedError(f"Unexpected number of values. {value}")
|
100
|
+
|
101
|
+
return TypeTuple.Item(name=name, typ=typ)
|
102
|
+
|
103
|
+
@v_args(meta=True)
|
104
|
+
def type_felt(self, meta, value):
|
105
|
+
return TypeFelt()
|
106
|
+
|
107
|
+
@v_args(meta=True)
|
108
|
+
def type_codeoffset(self, meta, value):
|
109
|
+
return TypeCodeoffset()
|
110
|
+
|
111
|
+
def type_struct(self, value):
|
112
|
+
assert len(value) == 1 and isinstance(value[0], ExprIdentifier)
|
113
|
+
if self.parser_context.resolved_types:
|
114
|
+
# If parser_context.resolved_types is True, assume that the type is a struct.
|
115
|
+
return TypeStruct(scope=value[0].name)
|
116
|
+
|
117
|
+
return TypeIdentifier(name=value[0].name)
|
118
|
+
|
119
|
+
@v_args(meta=True)
|
120
|
+
def type_pointer(self, meta, value):
|
121
|
+
return TypePointer(pointee=value[0])
|
122
|
+
|
123
|
+
@v_args(meta=True)
|
124
|
+
def type_pointer2(self, meta, value):
|
125
|
+
return TypePointer(pointee=TypePointer(pointee=value[0]))
|
126
|
+
|
127
|
+
@v_args(meta=True)
|
128
|
+
def type_tuple(self, meta, value: Tuple[CommaSeparated]):
|
129
|
+
(lst,) = value
|
130
|
+
return TypeTuple(members=lst.args, has_trailing_comma=lst.has_trailing_comma)
|
131
|
+
|
132
|
+
@v_args(meta=True)
|
133
|
+
def identifier(self, meta, value):
|
134
|
+
return ExprIdentifier(name=".".join(x.value for x in value))
|
135
|
+
|
136
|
+
@v_args(meta=True)
|
137
|
+
def identifier_def(self, meta, value):
|
138
|
+
return ExprIdentifier(name=value[0].value)
|
@@ -0,0 +1,64 @@
|
|
1
|
+
from typing import List
|
2
|
+
|
3
|
+
from ..constants import FIELD_PRIME
|
4
|
+
|
5
|
+
CairoData = List[int]
|
6
|
+
|
7
|
+
|
8
|
+
MAX_UINT256 = (1 << 256) - 1
|
9
|
+
MIN_UINT256 = 0
|
10
|
+
|
11
|
+
|
12
|
+
def uint256_range_check(value: int):
|
13
|
+
if not MIN_UINT256 <= value <= MAX_UINT256:
|
14
|
+
raise ValueError(
|
15
|
+
f"Uint256 is expected to be in range [0;2**256), got: {value}."
|
16
|
+
)
|
17
|
+
|
18
|
+
|
19
|
+
MIN_FELT = -FIELD_PRIME // 2
|
20
|
+
MAX_FELT = FIELD_PRIME // 2
|
21
|
+
|
22
|
+
|
23
|
+
def is_in_felt_range(value: int) -> bool:
|
24
|
+
return 0 <= value < FIELD_PRIME
|
25
|
+
|
26
|
+
|
27
|
+
def cairo_vm_range_check(value: int):
|
28
|
+
if not is_in_felt_range(value):
|
29
|
+
raise ValueError(
|
30
|
+
f"Felt is expected to be in range [0; {FIELD_PRIME}), got: {value}."
|
31
|
+
)
|
32
|
+
|
33
|
+
|
34
|
+
def encode_shortstring(text: str) -> int:
|
35
|
+
"""
|
36
|
+
A function which encodes short string value (at most 31 characters) into cairo felt (MSB as first character)
|
37
|
+
|
38
|
+
:param text: A short string value in python
|
39
|
+
:return: Short string value encoded into felt
|
40
|
+
"""
|
41
|
+
if len(text) > 31:
|
42
|
+
raise ValueError(
|
43
|
+
f"Shortstring cannot be longer than 31 characters, got: {len(text)}."
|
44
|
+
)
|
45
|
+
|
46
|
+
try:
|
47
|
+
text_bytes = text.encode("ascii")
|
48
|
+
except UnicodeEncodeError as u_err:
|
49
|
+
raise ValueError(f"Expected an ascii string. Found: {repr(text)}.") from u_err
|
50
|
+
value = int.from_bytes(text_bytes, "big")
|
51
|
+
|
52
|
+
cairo_vm_range_check(value)
|
53
|
+
return value
|
54
|
+
|
55
|
+
|
56
|
+
def decode_shortstring(value: int) -> str:
|
57
|
+
"""
|
58
|
+
A function which decodes a felt value to short string (at most 31 characters)
|
59
|
+
|
60
|
+
:param value: A felt value
|
61
|
+
:return: Decoded string which is corresponds to that felt
|
62
|
+
"""
|
63
|
+
cairo_vm_range_check(value)
|
64
|
+
return "".join([chr(i) for i in value.to_bytes(31, byteorder="big")]).lstrip("\x00")
|