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.
Files changed (289) hide show
  1. coinex/__init__.py +7 -0
  2. coinex/ccxt/__init__.py +101 -0
  3. coinex/ccxt/abstract/coinex.py +237 -0
  4. coinex/ccxt/async_support/__init__.py +80 -0
  5. coinex/ccxt/async_support/base/__init__.py +1 -0
  6. coinex/ccxt/async_support/base/exchange.py +2100 -0
  7. coinex/ccxt/async_support/base/throttler.py +50 -0
  8. coinex/ccxt/async_support/base/ws/__init__.py +38 -0
  9. coinex/ccxt/async_support/base/ws/aiohttp_client.py +147 -0
  10. coinex/ccxt/async_support/base/ws/cache.py +213 -0
  11. coinex/ccxt/async_support/base/ws/client.py +214 -0
  12. coinex/ccxt/async_support/base/ws/fast_client.py +97 -0
  13. coinex/ccxt/async_support/base/ws/functions.py +59 -0
  14. coinex/ccxt/async_support/base/ws/future.py +69 -0
  15. coinex/ccxt/async_support/base/ws/order_book.py +78 -0
  16. coinex/ccxt/async_support/base/ws/order_book_side.py +174 -0
  17. coinex/ccxt/async_support/coinex.py +5833 -0
  18. coinex/ccxt/base/__init__.py +27 -0
  19. coinex/ccxt/base/decimal_to_precision.py +174 -0
  20. coinex/ccxt/base/errors.py +267 -0
  21. coinex/ccxt/base/exchange.py +6769 -0
  22. coinex/ccxt/base/precise.py +297 -0
  23. coinex/ccxt/base/types.py +577 -0
  24. coinex/ccxt/coinex.py +5832 -0
  25. coinex/ccxt/pro/__init__.py +21 -0
  26. coinex/ccxt/pro/coinex.py +1366 -0
  27. coinex/ccxt/static_dependencies/README.md +1 -0
  28. coinex/ccxt/static_dependencies/__init__.py +1 -0
  29. coinex/ccxt/static_dependencies/ecdsa/__init__.py +14 -0
  30. coinex/ccxt/static_dependencies/ecdsa/_version.py +520 -0
  31. coinex/ccxt/static_dependencies/ecdsa/curves.py +56 -0
  32. coinex/ccxt/static_dependencies/ecdsa/der.py +221 -0
  33. coinex/ccxt/static_dependencies/ecdsa/ecdsa.py +310 -0
  34. coinex/ccxt/static_dependencies/ecdsa/ellipticcurve.py +197 -0
  35. coinex/ccxt/static_dependencies/ecdsa/keys.py +332 -0
  36. coinex/ccxt/static_dependencies/ecdsa/numbertheory.py +531 -0
  37. coinex/ccxt/static_dependencies/ecdsa/rfc6979.py +100 -0
  38. coinex/ccxt/static_dependencies/ecdsa/util.py +266 -0
  39. coinex/ccxt/static_dependencies/ethereum/__init__.py +7 -0
  40. coinex/ccxt/static_dependencies/ethereum/abi/__init__.py +16 -0
  41. coinex/ccxt/static_dependencies/ethereum/abi/abi.py +19 -0
  42. coinex/ccxt/static_dependencies/ethereum/abi/base.py +152 -0
  43. coinex/ccxt/static_dependencies/ethereum/abi/codec.py +217 -0
  44. coinex/ccxt/static_dependencies/ethereum/abi/constants.py +3 -0
  45. coinex/ccxt/static_dependencies/ethereum/abi/decoding.py +565 -0
  46. coinex/ccxt/static_dependencies/ethereum/abi/encoding.py +720 -0
  47. coinex/ccxt/static_dependencies/ethereum/abi/exceptions.py +139 -0
  48. coinex/ccxt/static_dependencies/ethereum/abi/grammar.py +443 -0
  49. coinex/ccxt/static_dependencies/ethereum/abi/packed.py +13 -0
  50. coinex/ccxt/static_dependencies/ethereum/abi/py.typed +0 -0
  51. coinex/ccxt/static_dependencies/ethereum/abi/registry.py +643 -0
  52. coinex/ccxt/static_dependencies/ethereum/abi/tools/__init__.py +3 -0
  53. coinex/ccxt/static_dependencies/ethereum/abi/tools/_strategies.py +230 -0
  54. coinex/ccxt/static_dependencies/ethereum/abi/utils/__init__.py +0 -0
  55. coinex/ccxt/static_dependencies/ethereum/abi/utils/numeric.py +83 -0
  56. coinex/ccxt/static_dependencies/ethereum/abi/utils/padding.py +27 -0
  57. coinex/ccxt/static_dependencies/ethereum/abi/utils/string.py +19 -0
  58. coinex/ccxt/static_dependencies/ethereum/account/__init__.py +3 -0
  59. coinex/ccxt/static_dependencies/ethereum/account/encode_typed_data/__init__.py +4 -0
  60. coinex/ccxt/static_dependencies/ethereum/account/encode_typed_data/encoding_and_hashing.py +239 -0
  61. coinex/ccxt/static_dependencies/ethereum/account/encode_typed_data/helpers.py +40 -0
  62. coinex/ccxt/static_dependencies/ethereum/account/messages.py +263 -0
  63. coinex/ccxt/static_dependencies/ethereum/account/py.typed +0 -0
  64. coinex/ccxt/static_dependencies/ethereum/hexbytes/__init__.py +5 -0
  65. coinex/ccxt/static_dependencies/ethereum/hexbytes/_utils.py +54 -0
  66. coinex/ccxt/static_dependencies/ethereum/hexbytes/main.py +65 -0
  67. coinex/ccxt/static_dependencies/ethereum/hexbytes/py.typed +0 -0
  68. coinex/ccxt/static_dependencies/ethereum/typing/__init__.py +63 -0
  69. coinex/ccxt/static_dependencies/ethereum/typing/abi.py +6 -0
  70. coinex/ccxt/static_dependencies/ethereum/typing/bls.py +7 -0
  71. coinex/ccxt/static_dependencies/ethereum/typing/discovery.py +5 -0
  72. coinex/ccxt/static_dependencies/ethereum/typing/encoding.py +7 -0
  73. coinex/ccxt/static_dependencies/ethereum/typing/enums.py +17 -0
  74. coinex/ccxt/static_dependencies/ethereum/typing/ethpm.py +9 -0
  75. coinex/ccxt/static_dependencies/ethereum/typing/evm.py +20 -0
  76. coinex/ccxt/static_dependencies/ethereum/typing/networks.py +1122 -0
  77. coinex/ccxt/static_dependencies/ethereum/typing/py.typed +0 -0
  78. coinex/ccxt/static_dependencies/ethereum/utils/__init__.py +115 -0
  79. coinex/ccxt/static_dependencies/ethereum/utils/abi.py +72 -0
  80. coinex/ccxt/static_dependencies/ethereum/utils/address.py +171 -0
  81. coinex/ccxt/static_dependencies/ethereum/utils/applicators.py +151 -0
  82. coinex/ccxt/static_dependencies/ethereum/utils/conversions.py +190 -0
  83. coinex/ccxt/static_dependencies/ethereum/utils/currency.py +107 -0
  84. coinex/ccxt/static_dependencies/ethereum/utils/curried/__init__.py +269 -0
  85. coinex/ccxt/static_dependencies/ethereum/utils/debug.py +20 -0
  86. coinex/ccxt/static_dependencies/ethereum/utils/decorators.py +132 -0
  87. coinex/ccxt/static_dependencies/ethereum/utils/encoding.py +6 -0
  88. coinex/ccxt/static_dependencies/ethereum/utils/exceptions.py +4 -0
  89. coinex/ccxt/static_dependencies/ethereum/utils/functional.py +75 -0
  90. coinex/ccxt/static_dependencies/ethereum/utils/hexadecimal.py +74 -0
  91. coinex/ccxt/static_dependencies/ethereum/utils/humanize.py +188 -0
  92. coinex/ccxt/static_dependencies/ethereum/utils/logging.py +159 -0
  93. coinex/ccxt/static_dependencies/ethereum/utils/module_loading.py +31 -0
  94. coinex/ccxt/static_dependencies/ethereum/utils/numeric.py +43 -0
  95. coinex/ccxt/static_dependencies/ethereum/utils/py.typed +0 -0
  96. coinex/ccxt/static_dependencies/ethereum/utils/toolz.py +76 -0
  97. coinex/ccxt/static_dependencies/ethereum/utils/types.py +54 -0
  98. coinex/ccxt/static_dependencies/ethereum/utils/typing/__init__.py +18 -0
  99. coinex/ccxt/static_dependencies/ethereum/utils/typing/misc.py +14 -0
  100. coinex/ccxt/static_dependencies/ethereum/utils/units.py +31 -0
  101. coinex/ccxt/static_dependencies/keccak/__init__.py +3 -0
  102. coinex/ccxt/static_dependencies/keccak/keccak.py +197 -0
  103. coinex/ccxt/static_dependencies/lark/__init__.py +38 -0
  104. coinex/ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
  105. coinex/ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
  106. coinex/ccxt/static_dependencies/lark/ast_utils.py +59 -0
  107. coinex/ccxt/static_dependencies/lark/common.py +86 -0
  108. coinex/ccxt/static_dependencies/lark/exceptions.py +292 -0
  109. coinex/ccxt/static_dependencies/lark/grammar.py +130 -0
  110. coinex/ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  111. coinex/ccxt/static_dependencies/lark/grammars/common.lark +59 -0
  112. coinex/ccxt/static_dependencies/lark/grammars/lark.lark +62 -0
  113. coinex/ccxt/static_dependencies/lark/grammars/python.lark +302 -0
  114. coinex/ccxt/static_dependencies/lark/grammars/unicode.lark +7 -0
  115. coinex/ccxt/static_dependencies/lark/indenter.py +143 -0
  116. coinex/ccxt/static_dependencies/lark/lark.py +658 -0
  117. coinex/ccxt/static_dependencies/lark/lexer.py +678 -0
  118. coinex/ccxt/static_dependencies/lark/load_grammar.py +1428 -0
  119. coinex/ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
  120. coinex/ccxt/static_dependencies/lark/parser_frontends.py +257 -0
  121. coinex/ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  122. coinex/ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
  123. coinex/ccxt/static_dependencies/lark/parsers/earley.py +314 -0
  124. coinex/ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
  125. coinex/ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
  126. coinex/ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
  127. coinex/ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
  128. coinex/ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
  129. coinex/ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
  130. coinex/ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
  131. coinex/ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
  132. coinex/ccxt/static_dependencies/lark/py.typed +0 -0
  133. coinex/ccxt/static_dependencies/lark/reconstruct.py +107 -0
  134. coinex/ccxt/static_dependencies/lark/tools/__init__.py +70 -0
  135. coinex/ccxt/static_dependencies/lark/tools/nearley.py +202 -0
  136. coinex/ccxt/static_dependencies/lark/tools/serialize.py +32 -0
  137. coinex/ccxt/static_dependencies/lark/tools/standalone.py +196 -0
  138. coinex/ccxt/static_dependencies/lark/tree.py +267 -0
  139. coinex/ccxt/static_dependencies/lark/tree_matcher.py +186 -0
  140. coinex/ccxt/static_dependencies/lark/tree_templates.py +180 -0
  141. coinex/ccxt/static_dependencies/lark/utils.py +343 -0
  142. coinex/ccxt/static_dependencies/lark/visitors.py +596 -0
  143. coinex/ccxt/static_dependencies/marshmallow/__init__.py +81 -0
  144. coinex/ccxt/static_dependencies/marshmallow/base.py +65 -0
  145. coinex/ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
  146. coinex/ccxt/static_dependencies/marshmallow/decorators.py +231 -0
  147. coinex/ccxt/static_dependencies/marshmallow/error_store.py +60 -0
  148. coinex/ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
  149. coinex/ccxt/static_dependencies/marshmallow/fields.py +2114 -0
  150. coinex/ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
  151. coinex/ccxt/static_dependencies/marshmallow/py.typed +0 -0
  152. coinex/ccxt/static_dependencies/marshmallow/schema.py +1228 -0
  153. coinex/ccxt/static_dependencies/marshmallow/types.py +12 -0
  154. coinex/ccxt/static_dependencies/marshmallow/utils.py +378 -0
  155. coinex/ccxt/static_dependencies/marshmallow/validate.py +678 -0
  156. coinex/ccxt/static_dependencies/marshmallow/warnings.py +2 -0
  157. coinex/ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
  158. coinex/ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
  159. coinex/ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
  160. coinex/ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
  161. coinex/ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  162. coinex/ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
  163. coinex/ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
  164. coinex/ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
  165. coinex/ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
  166. coinex/ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  167. coinex/ccxt/static_dependencies/msgpack/__init__.py +55 -0
  168. coinex/ccxt/static_dependencies/msgpack/_cmsgpack.pyx +11 -0
  169. coinex/ccxt/static_dependencies/msgpack/_packer.pyx +374 -0
  170. coinex/ccxt/static_dependencies/msgpack/_unpacker.pyx +547 -0
  171. coinex/ccxt/static_dependencies/msgpack/buff_converter.h +8 -0
  172. coinex/ccxt/static_dependencies/msgpack/exceptions.py +48 -0
  173. coinex/ccxt/static_dependencies/msgpack/ext.py +168 -0
  174. coinex/ccxt/static_dependencies/msgpack/fallback.py +951 -0
  175. coinex/ccxt/static_dependencies/msgpack/pack.h +89 -0
  176. coinex/ccxt/static_dependencies/msgpack/pack_template.h +820 -0
  177. coinex/ccxt/static_dependencies/msgpack/sysdep.h +194 -0
  178. coinex/ccxt/static_dependencies/msgpack/unpack.h +391 -0
  179. coinex/ccxt/static_dependencies/msgpack/unpack_define.h +95 -0
  180. coinex/ccxt/static_dependencies/msgpack/unpack_template.h +464 -0
  181. coinex/ccxt/static_dependencies/parsimonious/__init__.py +10 -0
  182. coinex/ccxt/static_dependencies/parsimonious/exceptions.py +105 -0
  183. coinex/ccxt/static_dependencies/parsimonious/expressions.py +479 -0
  184. coinex/ccxt/static_dependencies/parsimonious/grammar.py +487 -0
  185. coinex/ccxt/static_dependencies/parsimonious/nodes.py +325 -0
  186. coinex/ccxt/static_dependencies/parsimonious/utils.py +40 -0
  187. coinex/ccxt/static_dependencies/starknet/__init__.py +0 -0
  188. coinex/ccxt/static_dependencies/starknet/abi/v0/__init__.py +2 -0
  189. coinex/ccxt/static_dependencies/starknet/abi/v0/model.py +44 -0
  190. coinex/ccxt/static_dependencies/starknet/abi/v0/parser.py +216 -0
  191. coinex/ccxt/static_dependencies/starknet/abi/v0/schemas.py +72 -0
  192. coinex/ccxt/static_dependencies/starknet/abi/v0/shape.py +63 -0
  193. coinex/ccxt/static_dependencies/starknet/abi/v1/__init__.py +2 -0
  194. coinex/ccxt/static_dependencies/starknet/abi/v1/core_structures.json +14 -0
  195. coinex/ccxt/static_dependencies/starknet/abi/v1/model.py +39 -0
  196. coinex/ccxt/static_dependencies/starknet/abi/v1/parser.py +220 -0
  197. coinex/ccxt/static_dependencies/starknet/abi/v1/parser_transformer.py +179 -0
  198. coinex/ccxt/static_dependencies/starknet/abi/v1/schemas.py +66 -0
  199. coinex/ccxt/static_dependencies/starknet/abi/v1/shape.py +47 -0
  200. coinex/ccxt/static_dependencies/starknet/abi/v2/__init__.py +2 -0
  201. coinex/ccxt/static_dependencies/starknet/abi/v2/model.py +89 -0
  202. coinex/ccxt/static_dependencies/starknet/abi/v2/parser.py +293 -0
  203. coinex/ccxt/static_dependencies/starknet/abi/v2/parser_transformer.py +192 -0
  204. coinex/ccxt/static_dependencies/starknet/abi/v2/schemas.py +132 -0
  205. coinex/ccxt/static_dependencies/starknet/abi/v2/shape.py +107 -0
  206. coinex/ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  207. coinex/ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
  208. coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  209. coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
  210. coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
  211. coinex/ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
  212. coinex/ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
  213. coinex/ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
  214. coinex/ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  215. coinex/ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
  216. coinex/ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  217. coinex/ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
  218. coinex/ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
  219. coinex/ccxt/static_dependencies/starknet/common.py +15 -0
  220. coinex/ccxt/static_dependencies/starknet/constants.py +39 -0
  221. coinex/ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  222. coinex/ccxt/static_dependencies/starknet/hash/address.py +79 -0
  223. coinex/ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
  224. coinex/ccxt/static_dependencies/starknet/hash/selector.py +16 -0
  225. coinex/ccxt/static_dependencies/starknet/hash/storage.py +12 -0
  226. coinex/ccxt/static_dependencies/starknet/hash/utils.py +78 -0
  227. coinex/ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  228. coinex/ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
  229. coinex/ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
  230. coinex/ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
  231. coinex/ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
  232. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
  233. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
  234. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
  235. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
  236. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
  237. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
  238. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
  239. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
  240. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
  241. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
  242. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
  243. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
  244. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
  245. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
  246. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
  247. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
  248. coinex/ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
  249. coinex/ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
  250. coinex/ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
  251. coinex/ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
  252. coinex/ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
  253. coinex/ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  254. coinex/ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
  255. coinex/ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
  256. coinex/ccxt/static_dependencies/starknet/utils/schema.py +13 -0
  257. coinex/ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
  258. coinex/ccxt/static_dependencies/starkware/__init__.py +0 -0
  259. coinex/ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  260. coinex/ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
  261. coinex/ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
  262. coinex/ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
  263. coinex/ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
  264. coinex/ccxt/static_dependencies/sympy/__init__.py +0 -0
  265. coinex/ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  266. coinex/ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
  267. coinex/ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  268. coinex/ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
  269. coinex/ccxt/static_dependencies/sympy/external/importtools.py +187 -0
  270. coinex/ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
  271. coinex/ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
  272. coinex/ccxt/static_dependencies/toolz/__init__.py +26 -0
  273. coinex/ccxt/static_dependencies/toolz/_signatures.py +784 -0
  274. coinex/ccxt/static_dependencies/toolz/_version.py +520 -0
  275. coinex/ccxt/static_dependencies/toolz/compatibility.py +30 -0
  276. coinex/ccxt/static_dependencies/toolz/curried/__init__.py +101 -0
  277. coinex/ccxt/static_dependencies/toolz/curried/exceptions.py +22 -0
  278. coinex/ccxt/static_dependencies/toolz/curried/operator.py +22 -0
  279. coinex/ccxt/static_dependencies/toolz/dicttoolz.py +339 -0
  280. coinex/ccxt/static_dependencies/toolz/functoolz.py +1049 -0
  281. coinex/ccxt/static_dependencies/toolz/itertoolz.py +1057 -0
  282. coinex/ccxt/static_dependencies/toolz/recipes.py +46 -0
  283. coinex/ccxt/static_dependencies/toolz/utils.py +9 -0
  284. coinex/ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  285. coinex/ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
  286. {coinex_api-0.0.13.dist-info → coinex_api-0.0.14.dist-info}/METADATA +1 -1
  287. coinex_api-0.0.14.dist-info/RECORD +288 -0
  288. coinex_api-0.0.13.dist-info/RECORD +0 -3
  289. {coinex_api-0.0.13.dist-info → coinex_api-0.0.14.dist-info}/WHEEL +0 -0
@@ -0,0 +1,24 @@
1
+ # PayloadSerializer and FunctionSerializationAdapter would mostly be used by users
2
+ from .data_serializers import (
3
+ ArraySerializer,
4
+ CairoDataSerializer,
5
+ FeltSerializer,
6
+ NamedTupleSerializer,
7
+ PayloadSerializer,
8
+ StructSerializer,
9
+ TupleSerializer,
10
+ Uint256Serializer,
11
+ )
12
+ from .errors import (
13
+ CairoSerializerException,
14
+ InvalidTypeException,
15
+ InvalidValueException,
16
+ )
17
+ from .factory import (
18
+ serializer_for_event,
19
+ serializer_for_function,
20
+ serializer_for_payload,
21
+ serializer_for_type,
22
+ )
23
+ from .function_serialization_adapter import FunctionSerializationAdapter
24
+ from .tuple_dataclass import TupleDataclass
@@ -0,0 +1,40 @@
1
+ from typing import List
2
+
3
+ from ..cairo.felt import CairoData
4
+
5
+
6
+ class OutOfBoundsError(Exception):
7
+ def __init__(self, position: int, requested_size: int, remaining_size: int):
8
+ super().__init__(
9
+ f"Requested {requested_size} elements, {remaining_size} available."
10
+ )
11
+ self.position = position
12
+ self.requested_size = requested_size
13
+ self.remaining_len = remaining_size
14
+
15
+
16
+ class CalldataReader:
17
+ _data: List[int]
18
+ _position: int
19
+
20
+ def __init__(self, data: List[int]):
21
+ self._data = data
22
+ self._position = 0
23
+
24
+ @property
25
+ def remaining_len(self) -> int:
26
+ return len(self._data) - self._position
27
+
28
+ def read(self, size: int) -> CairoData:
29
+ if size < 1:
30
+ raise ValueError("size must be greater than 0")
31
+
32
+ if size > self.remaining_len:
33
+ raise OutOfBoundsError(
34
+ position=self._position,
35
+ requested_size=size,
36
+ remaining_size=self.remaining_len,
37
+ )
38
+ data = self._data[self._position : self._position + size]
39
+ self._position += size
40
+ return data
@@ -0,0 +1,142 @@
1
+ from __future__ import annotations
2
+
3
+ from abc import ABC
4
+ from contextlib import contextmanager
5
+ from typing import Any, Generator, Iterator, List
6
+
7
+ from ._calldata_reader import (
8
+ CairoData,
9
+ CalldataReader,
10
+ OutOfBoundsError,
11
+ )
12
+ from .errors import InvalidTypeException, InvalidValueException
13
+
14
+
15
+ class Context(ABC):
16
+ """
17
+ Holds information about context when (de)serializing data. This is needed to inform what and where went
18
+ wrong during processing. Every separate (de)serialization should have its own context.
19
+ """
20
+
21
+ _namespace_stack: List[str]
22
+
23
+ def __init__(self):
24
+ self._namespace_stack = []
25
+
26
+ @property
27
+ def current_entity(self):
28
+ """
29
+ Name of currently processed entity.
30
+
31
+ :return: transformed path.
32
+ """
33
+ return ".".join(self._namespace_stack)
34
+
35
+ @contextmanager
36
+ def push_entity(self, name: str) -> Generator:
37
+ """
38
+ Manager used for maintaining information about names of (de)serialized types. Wraps some errors with
39
+ custom errors, adding information about the context.
40
+
41
+ :param name: name of (de)serialized entity.
42
+ """
43
+ # This ensures the name will be popped if everything is ok. In case an exception is raised we want the stack to
44
+ # be filled to wrap the error at the end.
45
+ self._namespace_stack.append(name)
46
+ yield
47
+ self._namespace_stack.pop()
48
+
49
+ def ensure_valid_value(self, valid: bool, text: str):
50
+ if not valid:
51
+ raise InvalidValueException(f"{self._error_prefix}: {text}.")
52
+
53
+ def ensure_valid_type(self, value: Any, valid: bool, expected_type: str):
54
+ if not valid:
55
+ raise InvalidTypeException(
56
+ f"{self._error_prefix}: expected {expected_type}, "
57
+ f"received '{value}' of type '{type(value)}'."
58
+ )
59
+
60
+ @contextmanager
61
+ def _wrap_errors(self):
62
+ try:
63
+ yield
64
+ except OutOfBoundsError as err:
65
+ action_name = (
66
+ f"deserialize '{self.current_entity}'"
67
+ if self._namespace_stack
68
+ else "deserialize"
69
+ )
70
+ # This way we can precisely inform user what's wrong when reading calldata.
71
+ raise InvalidValueException(
72
+ f"Not enough data to {action_name}. "
73
+ f"Can't read {err.requested_size} values at position {err.position}, {err.remaining_len} available."
74
+ ) from err
75
+
76
+ # Those two are based on ValueError and TypeError, we have to catch them early
77
+ except (InvalidValueException, InvalidTypeException) as err:
78
+ raise err
79
+
80
+ except ValueError as err:
81
+ raise InvalidValueException(f"{self._error_prefix}: {err}") from err
82
+ except TypeError as err:
83
+ raise InvalidTypeException(f"{self._error_prefix}: {err}") from err
84
+
85
+ @property
86
+ def _error_prefix(self):
87
+ if not self._namespace_stack:
88
+ return "Error"
89
+ return f"Error at path '{self.current_entity}'"
90
+
91
+
92
+ class SerializationContext(Context):
93
+ """
94
+ Context used during serialization.
95
+ """
96
+
97
+ # Type is iterator, because ContextManager doesn't work with pyright :|
98
+ # https://github.com/microsoft/pyright/issues/476
99
+ @classmethod
100
+ @contextmanager
101
+ def create(cls) -> Iterator[SerializationContext]:
102
+ context = cls()
103
+ with context._wrap_errors():
104
+ yield context
105
+
106
+
107
+ class DeserializationContext(Context):
108
+ """
109
+ Context used during deserialization.
110
+ """
111
+
112
+ reader: CalldataReader
113
+
114
+ def __init__(self, calldata: CairoData):
115
+ """
116
+ Don't use default constructor. Use DeserializationContext.create context manager.
117
+ """
118
+ super().__init__()
119
+ self._namespace_stack = []
120
+ self.reader = CalldataReader(calldata)
121
+
122
+ @classmethod
123
+ @contextmanager
124
+ def create(cls, data: CairoData) -> Iterator[DeserializationContext]:
125
+ context = cls(data)
126
+ with context._wrap_errors():
127
+ yield context
128
+ context._ensure_all_values_read(len(data))
129
+
130
+ def _ensure_all_values_read(self, total_len: int):
131
+ values_not_used = self.reader.remaining_len
132
+ if values_not_used != 0:
133
+ # We want to output up to 3 values. It there is more they will be truncated like "0x1,0x1,0x1..."
134
+ max_values_to_show = 3
135
+ values_to_show = min(values_not_used, max_values_to_show)
136
+ example = ",".join(hex(v) for v in self.reader.read(values_to_show))
137
+ suffix = "..." if values_not_used > max_values_to_show else ""
138
+
139
+ raise InvalidValueException(
140
+ f"Last {values_not_used} values '{example}{suffix}' out of total {total_len} "
141
+ "values were not used during deserialization."
142
+ )
@@ -0,0 +1,10 @@
1
+ from .array_serializer import ArraySerializer
2
+ from .bool_serializer import BoolSerializer
3
+ from .byte_array_serializer import ByteArraySerializer
4
+ from .cairo_data_serializer import CairoDataSerializer
5
+ from .felt_serializer import FeltSerializer
6
+ from .named_tuple_serializer import NamedTupleSerializer
7
+ from .payload_serializer import PayloadSerializer
8
+ from .struct_serializer import StructSerializer
9
+ from .tuple_serializer import TupleSerializer
10
+ from .uint256_serializer import Uint256Serializer
@@ -0,0 +1,82 @@
1
+ # We have to use parametrised type from typing
2
+ from collections import OrderedDict as _OrderedDict
3
+ from typing import Dict, Generator, List, OrderedDict
4
+
5
+ from .._context import (
6
+ DeserializationContext,
7
+ SerializationContext,
8
+ )
9
+ from .cairo_data_serializer import (
10
+ CairoDataSerializer,
11
+ )
12
+
13
+ # The actual serialization logic is very similar among all serializers: they either serialize data based on
14
+ # position or their name. Having this logic reused adds indirection, but makes sure proper logic is used everywhere.
15
+
16
+
17
+ def deserialize_to_list(
18
+ deserializers: List[CairoDataSerializer], context: DeserializationContext
19
+ ) -> List:
20
+ """
21
+ Deserializes data from context to list. This logic is used in every sequential type (arrays and tuples).
22
+ """
23
+ result = []
24
+
25
+ for index, serializer in enumerate(deserializers):
26
+ with context.push_entity(f"[{index}]"):
27
+ result.append(serializer.deserialize_with_context(context))
28
+
29
+ return result
30
+
31
+
32
+ def deserialize_to_dict(
33
+ deserializers: OrderedDict[str, CairoDataSerializer],
34
+ context: DeserializationContext,
35
+ ) -> OrderedDict:
36
+ """
37
+ Deserializes data from context to dictionary. This logic is used in every type with named fields (structs,
38
+ named tuples and payloads).
39
+ """
40
+ result = _OrderedDict()
41
+
42
+ for key, serializer in deserializers.items():
43
+ with context.push_entity(key):
44
+ result[key] = serializer.deserialize_with_context(context)
45
+
46
+ return result
47
+
48
+
49
+ def serialize_from_list(
50
+ serializers: List[CairoDataSerializer], context: SerializationContext, values: List
51
+ ) -> Generator[int, None, None]:
52
+ """
53
+ Serializes data from list. This logic is used in every sequential type (arrays and tuples).
54
+ """
55
+ context.ensure_valid_value(
56
+ len(serializers) == len(values),
57
+ f"expected {len(serializers)} elements, {len(values)} provided",
58
+ )
59
+
60
+ for index, (serializer, value) in enumerate(zip(serializers, values)):
61
+ with context.push_entity(f"[{index}]"):
62
+ yield from serializer.serialize_with_context(context, value)
63
+
64
+
65
+ def serialize_from_dict(
66
+ serializers: OrderedDict[str, CairoDataSerializer],
67
+ context: SerializationContext,
68
+ values: Dict,
69
+ ) -> Generator[int, None, None]:
70
+ """
71
+ Serializes data from dict. This logic is used in every type with named fields (structs, named tuples and payloads).
72
+ """
73
+ excessive_keys = set(values.keys()).difference(serializers.keys())
74
+ context.ensure_valid_value(
75
+ not excessive_keys,
76
+ f"unexpected keys '{','.join(excessive_keys)}' were provided",
77
+ )
78
+
79
+ for name, serializer in serializers.items():
80
+ with context.push_entity(name):
81
+ context.ensure_valid_value(name in values, f"key '{name}' is missing")
82
+ yield from serializer.serialize_with_context(context, values[name])
@@ -0,0 +1,43 @@
1
+ from dataclasses import dataclass
2
+ from typing import Generator, Iterable, List
3
+
4
+ from .._context import (
5
+ DeserializationContext,
6
+ SerializationContext,
7
+ )
8
+ from ..data_serializers._common import (
9
+ deserialize_to_list,
10
+ serialize_from_list,
11
+ )
12
+ from ..data_serializers.cairo_data_serializer import (
13
+ CairoDataSerializer,
14
+ )
15
+
16
+
17
+ @dataclass
18
+ class ArraySerializer(CairoDataSerializer[Iterable, List]):
19
+ """
20
+ Serializer for arrays. In abi they are represented as a pointer to a type.
21
+ Can serialize any iterable and prepends its length to resulting list.
22
+ Deserializes data to a list.
23
+
24
+ Examples:
25
+ [1,2,3] => [3,1,2,3]
26
+ [] => [0]
27
+ """
28
+
29
+ inner_serializer: CairoDataSerializer
30
+
31
+ def deserialize_with_context(self, context: DeserializationContext) -> List:
32
+ with context.push_entity("len"):
33
+ [size] = context.reader.read(1)
34
+
35
+ return deserialize_to_list([self.inner_serializer] * size, context)
36
+
37
+ def serialize_with_context(
38
+ self, context: SerializationContext, value: List
39
+ ) -> Generator[int, None, None]:
40
+ yield len(value)
41
+ yield from serialize_from_list(
42
+ [self.inner_serializer] * len(value), context, value
43
+ )
@@ -0,0 +1,37 @@
1
+ from dataclasses import dataclass
2
+ from typing import Generator
3
+
4
+ from .._context import (
5
+ Context,
6
+ DeserializationContext,
7
+ SerializationContext,
8
+ )
9
+ from .cairo_data_serializer import (
10
+ CairoDataSerializer,
11
+ )
12
+
13
+
14
+ @dataclass
15
+ class BoolSerializer(CairoDataSerializer[bool, int]):
16
+ """
17
+ Serializer for boolean.
18
+ """
19
+
20
+ def deserialize_with_context(self, context: DeserializationContext) -> bool:
21
+ [val] = context.reader.read(1)
22
+ self._ensure_bool(context, val)
23
+ return bool(val)
24
+
25
+ def serialize_with_context(
26
+ self, context: SerializationContext, value: bool
27
+ ) -> Generator[int, None, None]:
28
+ context.ensure_valid_type(value, isinstance(value, bool), "bool")
29
+ self._ensure_bool(context, value)
30
+ yield int(value)
31
+
32
+ @staticmethod
33
+ def _ensure_bool(context: Context, value: int):
34
+ context.ensure_valid_value(
35
+ value in [0, 1],
36
+ f"invalid value '{value}' - must be in [0, 2) range",
37
+ )
@@ -0,0 +1,66 @@
1
+ from dataclasses import dataclass
2
+ from typing import Generator
3
+
4
+ from ...cairo.felt import decode_shortstring, encode_shortstring
5
+ from .._context import (
6
+ DeserializationContext,
7
+ SerializationContext,
8
+ )
9
+ from ._common import (
10
+ deserialize_to_list,
11
+ serialize_from_list,
12
+ )
13
+ from .cairo_data_serializer import (
14
+ CairoDataSerializer,
15
+ )
16
+ from .felt_serializer import FeltSerializer
17
+
18
+ BYTES_31_SIZE = 31
19
+
20
+
21
+ @dataclass
22
+ class ByteArraySerializer(CairoDataSerializer[str, str]):
23
+ """
24
+ Serializer for ByteArrays. Serializes to and deserializes from str values.
25
+
26
+ Examples:
27
+ "" => [0,0,0]
28
+ "hello" => [0,448378203247,5]
29
+ """
30
+
31
+ def deserialize_with_context(self, context: DeserializationContext) -> str:
32
+ with context.push_entity("data_array_len"):
33
+ [size] = context.reader.read(1)
34
+
35
+ data = deserialize_to_list([FeltSerializer()] * size, context)
36
+
37
+ with context.push_entity("pending_word"):
38
+ [pending_word] = context.reader.read(1)
39
+
40
+ with context.push_entity("pending_word_len"):
41
+ [pending_word_len] = context.reader.read(1)
42
+
43
+ pending_word = decode_shortstring(pending_word)
44
+ context.ensure_valid_value(
45
+ len(pending_word) == pending_word_len,
46
+ f"Invalid length {pending_word_len} for pending word {pending_word}",
47
+ )
48
+
49
+ data_joined = "".join(map(decode_shortstring, data))
50
+ return data_joined + pending_word
51
+
52
+ def serialize_with_context(
53
+ self, context: SerializationContext, value: str
54
+ ) -> Generator[int, None, None]:
55
+ context.ensure_valid_type(value, isinstance(value, str), "str")
56
+ data = [
57
+ value[i : i + BYTES_31_SIZE] for i in range(0, len(value), BYTES_31_SIZE)
58
+ ]
59
+ pending_word = (
60
+ "" if len(data) == 0 or len(data[-1]) == BYTES_31_SIZE else data.pop(-1)
61
+ )
62
+
63
+ yield len(data)
64
+ yield from serialize_from_list([FeltSerializer()] * len(data), context, data)
65
+ yield encode_shortstring(pending_word)
66
+ yield len(pending_word)
@@ -0,0 +1,71 @@
1
+ from abc import ABC, abstractmethod
2
+ from typing import Generator, Generic, List, TypeVar
3
+
4
+ from .._calldata_reader import CairoData
5
+ from .._context import (
6
+ DeserializationContext,
7
+ SerializationContext,
8
+ )
9
+
10
+ # Python type that is accepted by a serializer
11
+ # pylint: disable=invalid-name
12
+ SerializationType = TypeVar("SerializationType")
13
+
14
+ # Python type that will be returned from a serializer. Often same as SerializationType.
15
+ # pylint: disable=invalid-name
16
+ DeserializationType = TypeVar("DeserializationType")
17
+
18
+
19
+ class CairoDataSerializer(ABC, Generic[SerializationType, DeserializationType]):
20
+ """
21
+ Base class for serializing/deserializing data to/from calldata.
22
+ """
23
+
24
+ def deserialize(self, data: List[int]) -> DeserializationType:
25
+ """
26
+ Transform calldata into python value.
27
+
28
+ :param data: calldata to deserialize.
29
+ :return: defined DeserializationType.
30
+ """
31
+ with DeserializationContext.create(data) as context:
32
+ return self.deserialize_with_context(context)
33
+
34
+ def serialize(self, data: SerializationType) -> CairoData:
35
+ """
36
+ Transform python data into calldata.
37
+
38
+ :param data: data to serialize.
39
+ :return: calldata.
40
+ """
41
+ with SerializationContext.create() as context:
42
+ serialized_data = list(self.serialize_with_context(context, data))
43
+
44
+ return self.remove_units_from_serialized_data(serialized_data)
45
+
46
+ @abstractmethod
47
+ def deserialize_with_context(
48
+ self, context: DeserializationContext
49
+ ) -> DeserializationType:
50
+ """
51
+ Transform calldata into python value.
52
+
53
+ :param context: context of this deserialization.
54
+ :return: defined DeserializationType.
55
+ """
56
+
57
+ @abstractmethod
58
+ def serialize_with_context(
59
+ self, context: SerializationContext, value: SerializationType
60
+ ) -> Generator[int, None, None]:
61
+ """
62
+ Transform python value into calldata.
63
+
64
+ :param context: context of this serialization.
65
+ :param value: python value to serialize.
66
+ :return: defined SerializationType.
67
+ """
68
+
69
+ @staticmethod
70
+ def remove_units_from_serialized_data(serialized_data: List) -> List:
71
+ return [x for x in serialized_data if x is not None]
@@ -0,0 +1,71 @@
1
+ from dataclasses import dataclass
2
+ from typing import Dict, Generator, OrderedDict, Tuple, Union
3
+
4
+ from .._context import (
5
+ DeserializationContext,
6
+ SerializationContext,
7
+ )
8
+ from .cairo_data_serializer import (
9
+ CairoDataSerializer,
10
+ )
11
+ from ..tuple_dataclass import TupleDataclass
12
+
13
+
14
+ @dataclass
15
+ class EnumSerializer(CairoDataSerializer[Union[Dict, TupleDataclass], TupleDataclass]):
16
+ """
17
+ Serializer of enums.
18
+ Can serialize a dictionary and TupleDataclass.
19
+ Deserializes data to a TupleDataclass.
20
+
21
+ Example:
22
+ enum MyEnum {
23
+ a: u128,
24
+ b: u128
25
+ }
26
+
27
+ {"a": 1} => [0, 1]
28
+ {"b": 100} => [1, 100]
29
+ TupleDataclass(variant='a', value=100) => [0, 100]
30
+ """
31
+
32
+ serializers: OrderedDict[str, CairoDataSerializer]
33
+
34
+ def deserialize_with_context(
35
+ self, context: DeserializationContext
36
+ ) -> TupleDataclass:
37
+ [variant_index] = context.reader.read(1)
38
+ variant_name, serializer = self._get_variant(variant_index)
39
+
40
+ with context.push_entity("enum.variant: " + variant_name):
41
+ result_dict = {
42
+ "variant": variant_name,
43
+ "value": serializer.deserialize_with_context(context),
44
+ }
45
+
46
+ return TupleDataclass.from_dict(result_dict)
47
+
48
+ def serialize_with_context(
49
+ self, context: SerializationContext, value: Union[Dict, TupleDataclass]
50
+ ) -> Generator[int, None, None]:
51
+ if isinstance(value, Dict):
52
+ items = list(value.items())
53
+ if len(items) != 1:
54
+ raise ValueError(
55
+ "Can serialize only one enum variant, got: " + str(len(items))
56
+ )
57
+
58
+ variant_name, variant_value = items[0]
59
+ else:
60
+ variant_name, variant_value = value
61
+
62
+ yield self._get_variant_index(variant_name)
63
+ yield from self.serializers[variant_name].serialize_with_context(
64
+ context, variant_value
65
+ )
66
+
67
+ def _get_variant(self, variant_index: int) -> Tuple[str, CairoDataSerializer]:
68
+ return list(self.serializers.items())[variant_index]
69
+
70
+ def _get_variant_index(self, variant_name: str) -> int:
71
+ return list(self.serializers.keys()).index(variant_name)
@@ -0,0 +1,50 @@
1
+ import warnings
2
+ from dataclasses import dataclass
3
+ from typing import Generator
4
+
5
+ from ...cairo.felt import encode_shortstring, is_in_felt_range
6
+ from ...constants import FIELD_PRIME
7
+ from .._context import (
8
+ Context,
9
+ DeserializationContext,
10
+ SerializationContext,
11
+ )
12
+ from .cairo_data_serializer import (
13
+ CairoDataSerializer,
14
+ )
15
+
16
+
17
+ @dataclass
18
+ class FeltSerializer(CairoDataSerializer[int, int]):
19
+ """
20
+ Serializer for field element. At the time of writing it is the only existing numeric type.
21
+ """
22
+
23
+ def deserialize_with_context(self, context: DeserializationContext) -> int:
24
+ [val] = context.reader.read(1)
25
+ self._ensure_felt(context, val)
26
+ return val
27
+
28
+ def serialize_with_context(
29
+ self, context: SerializationContext, value: int
30
+ ) -> Generator[int, None, None]:
31
+ if isinstance(value, str):
32
+ warnings.warn(
33
+ "Serializing shortstrings in FeltSerializer is deprecated. "
34
+ "Use starknet_py.cairo.felt.encode_shortstring instead.",
35
+ category=DeprecationWarning,
36
+ )
37
+ value = encode_shortstring(value)
38
+ yield value
39
+ return
40
+
41
+ context.ensure_valid_type(value, isinstance(value, int), "int")
42
+ self._ensure_felt(context, value)
43
+ yield value
44
+
45
+ @staticmethod
46
+ def _ensure_felt(context: Context, value: int):
47
+ context.ensure_valid_value(
48
+ is_in_felt_range(value),
49
+ f"invalid value '{value}' - must be in [0, {FIELD_PRIME}) range",
50
+ )