coinex-api 0.0.15__py3-none-any.whl → 0.0.16__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.15.dist-info → coinex_api-0.0.16.dist-info}/METADATA +1 -1
  287. coinex_api-0.0.16.dist-info/RECORD +288 -0
  288. coinex_api-0.0.15.dist-info/RECORD +0 -3
  289. {coinex_api-0.0.15.dist-info → coinex_api-0.0.16.dist-info}/WHEEL +0 -0
@@ -0,0 +1,72 @@
1
+ from ....marshmallow import Schema, fields
2
+ from ....marshmallow_oneofschema import OneOfSchema
3
+
4
+ from .shape import (
5
+ CONSTRUCTOR_ENTRY,
6
+ EVENT_ENTRY,
7
+ FUNCTION_ENTRY,
8
+ L1_HANDLER_ENTRY,
9
+ STRUCT_ENTRY,
10
+ )
11
+
12
+
13
+ class TypedParameterSchema(Schema):
14
+ name = fields.String(data_key="name", required=True)
15
+ type = fields.String(data_key="type", required=True)
16
+
17
+
18
+ class StructMemberSchema(TypedParameterSchema):
19
+ offset = fields.Integer(data_key="offset", required=False)
20
+
21
+
22
+ class FunctionBaseSchema(Schema):
23
+ name = fields.String(data_key="name", required=True)
24
+ inputs = fields.List(
25
+ fields.Nested(TypedParameterSchema()), data_key="inputs", required=True
26
+ )
27
+ outputs = fields.List(
28
+ fields.Nested(TypedParameterSchema()), data_key="outputs", required=True
29
+ )
30
+
31
+
32
+ class FunctionAbiEntrySchema(FunctionBaseSchema):
33
+ type = fields.Constant(FUNCTION_ENTRY, data_key="type", required=True)
34
+
35
+
36
+ class ConstructorAbiEntrySchema(FunctionBaseSchema):
37
+ type = fields.Constant(CONSTRUCTOR_ENTRY, data_key="type", required=True)
38
+
39
+
40
+ class L1HandlerAbiEntrySchema(FunctionBaseSchema):
41
+ type = fields.Constant(L1_HANDLER_ENTRY, data_key="type", required=True)
42
+
43
+
44
+ class EventAbiEntrySchema(Schema):
45
+ type = fields.Constant(EVENT_ENTRY, data_key="type", required=True)
46
+ name = fields.String(data_key="name", required=True)
47
+ keys = fields.List(
48
+ fields.Nested(TypedParameterSchema()), data_key="keys", required=True
49
+ )
50
+ data = fields.List(
51
+ fields.Nested(TypedParameterSchema()), data_key="data", required=True
52
+ )
53
+
54
+
55
+ class StructAbiEntrySchema(Schema):
56
+ type = fields.Constant(STRUCT_ENTRY, data_key="type", required=True)
57
+ name = fields.String(data_key="name", required=True)
58
+ size = fields.Integer(data_key="size", required=True)
59
+ members = fields.List(
60
+ fields.Nested(StructMemberSchema()), data_key="members", required=True
61
+ )
62
+
63
+
64
+ class ContractAbiEntrySchema(OneOfSchema):
65
+ type_field_remove = False
66
+ type_schemas = {
67
+ FUNCTION_ENTRY: FunctionAbiEntrySchema,
68
+ L1_HANDLER_ENTRY: L1HandlerAbiEntrySchema,
69
+ CONSTRUCTOR_ENTRY: ConstructorAbiEntrySchema,
70
+ EVENT_ENTRY: EventAbiEntrySchema,
71
+ STRUCT_ENTRY: StructAbiEntrySchema,
72
+ }
@@ -0,0 +1,63 @@
1
+ # TODO (#1260): update pylint to 3.1.0 and remove pylint disable
2
+ # pylint: disable=too-many-ancestors
3
+ import sys
4
+ from typing import List, Literal, Union
5
+
6
+ if sys.version_info < (3, 11):
7
+ from typing_extensions import NotRequired, TypedDict
8
+ else:
9
+ from typing import NotRequired, TypedDict
10
+
11
+ STRUCT_ENTRY = "struct"
12
+ FUNCTION_ENTRY = "function"
13
+ CONSTRUCTOR_ENTRY = "constructor"
14
+ L1_HANDLER_ENTRY = "l1_handler"
15
+ EVENT_ENTRY = "event"
16
+
17
+
18
+ class TypedMemberDict(TypedDict):
19
+ name: str
20
+ type: str
21
+
22
+
23
+ class StructMemberDict(TypedMemberDict):
24
+ offset: NotRequired[int]
25
+
26
+
27
+ class StructDict(TypedDict):
28
+ type: Literal["struct"]
29
+ name: str
30
+ size: int
31
+ members: List[StructMemberDict]
32
+
33
+
34
+ class FunctionBaseDict(TypedDict):
35
+ name: str
36
+ inputs: List[TypedMemberDict]
37
+ outputs: List[TypedMemberDict]
38
+ stateMutability: NotRequired[Literal["view"]]
39
+
40
+
41
+ class FunctionDict(FunctionBaseDict):
42
+ type: Literal["function"]
43
+
44
+
45
+ class ConstructorDict(FunctionBaseDict):
46
+ type: Literal["constructor"]
47
+
48
+
49
+ class L1HandlerDict(FunctionBaseDict):
50
+ type: Literal["l1_handler"]
51
+
52
+
53
+ class EventDict(TypedDict):
54
+ name: str
55
+ type: Literal["event"]
56
+ data: List[TypedMemberDict]
57
+ keys: List[TypedMemberDict]
58
+
59
+
60
+ AbiDictEntry = Union[
61
+ StructDict, FunctionDict, ConstructorDict, L1HandlerDict, EventDict
62
+ ]
63
+ AbiDictList = List[AbiDictEntry]
@@ -0,0 +1,2 @@
1
+ from .model import Abi
2
+ from .parser import AbiParser, AbiParsingError
@@ -0,0 +1,14 @@
1
+ {
2
+ "abi": [
3
+ {
4
+ "type": "struct",
5
+ "name": "core::starknet::eth_address::EthAddress",
6
+ "members": [
7
+ {
8
+ "name": "address",
9
+ "type": "core::felt252"
10
+ }
11
+ ]
12
+ }
13
+ ]
14
+ }
@@ -0,0 +1,39 @@
1
+ from __future__ import annotations
2
+
3
+ from dataclasses import dataclass
4
+ from typing import Dict, List, OrderedDict
5
+
6
+ from ...cairo.data_types import CairoType, EnumType, StructType
7
+
8
+
9
+ @dataclass
10
+ class Abi:
11
+ """
12
+ Dataclass representing class abi. Contains parsed functions, enums, events and structures.
13
+ """
14
+
15
+ @dataclass
16
+ class Function:
17
+ """
18
+ Dataclass representing function's abi.
19
+ """
20
+
21
+ name: str
22
+ inputs: OrderedDict[str, CairoType]
23
+ outputs: List[CairoType]
24
+
25
+ @dataclass
26
+ class Event:
27
+ """
28
+ Dataclass representing event's abi.
29
+ """
30
+
31
+ name: str
32
+ inputs: OrderedDict[str, CairoType]
33
+
34
+ defined_structures: Dict[
35
+ str, StructType
36
+ ] #: Abi of structures defined by the class.
37
+ defined_enums: Dict[str, EnumType] #: Abi of enums defined by the class.
38
+ functions: Dict[str, Function] #: Functions defined by the class.
39
+ events: Dict[str, Event] #: Events defined by the class
@@ -0,0 +1,220 @@
1
+ from __future__ import annotations
2
+
3
+ import dataclasses
4
+ import json
5
+ import os
6
+ from collections import OrderedDict, defaultdict
7
+ from pathlib import Path
8
+ from typing import DefaultDict, Dict, List, Optional, Tuple, Union, cast
9
+
10
+ from ....marshmallow import EXCLUDE
11
+
12
+ from .model import Abi
13
+ from .schemas import ContractAbiEntrySchema
14
+ from .shape import (
15
+ ENUM_ENTRY,
16
+ EVENT_ENTRY,
17
+ FUNCTION_ENTRY,
18
+ STRUCT_ENTRY,
19
+ EventDict,
20
+ FunctionDict,
21
+ TypedParameterDict,
22
+ )
23
+ from ...cairo.data_types import CairoType, EnumType, StructType
24
+ from ...cairo.v1.type_parser import TypeParser
25
+
26
+
27
+ class AbiParsingError(ValueError):
28
+ """
29
+ Error raised when something wrong goes during abi parsing.
30
+ """
31
+
32
+
33
+ class AbiParser:
34
+ """
35
+ Utility class for parsing abi into a dataclass.
36
+ """
37
+
38
+ # Entries from ABI grouped by entry type
39
+ _grouped: DefaultDict[str, List[Dict]]
40
+ # lazy init property
41
+ _type_parser: Optional[TypeParser] = None
42
+
43
+ def __init__(self, abi_list: List[Dict]):
44
+ """
45
+ Abi parser constructor. Ensures that abi satisfies the abi schema.
46
+
47
+ :param abi_list: Contract's ABI as a list of dictionaries.
48
+ """
49
+ # prepend abi with core structures
50
+ core_structures = (
51
+ Path(os.path.dirname(__file__)) / "core_structures.json"
52
+ ).read_text("utf-8")
53
+ abi_list = json.loads(core_structures)["abi"] + abi_list
54
+ abi = [
55
+ ContractAbiEntrySchema().load(entry, unknown=EXCLUDE) for entry in abi_list
56
+ ]
57
+ grouped = defaultdict(list)
58
+ for entry in abi:
59
+ assert isinstance(entry, dict)
60
+ grouped[entry["type"]].append(entry)
61
+
62
+ self._grouped = grouped
63
+
64
+ def parse(self) -> Abi:
65
+ """
66
+ Parse abi provided to constructor and return it as a dataclass. Ensures that there are no cycles in the abi.
67
+
68
+ :raises: AbiParsingError: on any parsing error.
69
+ :return: Abi dataclass.
70
+ """
71
+ structures, enums = self._parse_structures_and_enums()
72
+ functions_dict = cast(
73
+ Dict[str, FunctionDict],
74
+ AbiParser._group_by_entry_name(
75
+ self._grouped[FUNCTION_ENTRY], "defined functions"
76
+ ),
77
+ )
78
+ events_dict = cast(
79
+ Dict[str, EventDict],
80
+ AbiParser._group_by_entry_name(
81
+ self._grouped[EVENT_ENTRY], "defined events"
82
+ ),
83
+ )
84
+
85
+ return Abi(
86
+ defined_structures=structures,
87
+ defined_enums=enums,
88
+ functions={
89
+ name: self._parse_function(entry)
90
+ for name, entry in functions_dict.items()
91
+ },
92
+ events={
93
+ name: self._parse_event(entry) for name, entry in events_dict.items()
94
+ },
95
+ )
96
+
97
+ @property
98
+ def type_parser(self) -> TypeParser:
99
+ if self._type_parser:
100
+ return self._type_parser
101
+
102
+ raise RuntimeError("Tried to get type_parser before it was set.")
103
+
104
+ def _parse_structures_and_enums(
105
+ self,
106
+ ) -> Tuple[Dict[str, StructType], Dict[str, EnumType]]:
107
+ structs_dict = AbiParser._group_by_entry_name(
108
+ self._grouped[STRUCT_ENTRY], "defined structures"
109
+ )
110
+ enums_dict = AbiParser._group_by_entry_name(
111
+ self._grouped[ENUM_ENTRY], "defined enums"
112
+ )
113
+
114
+ # Contains sorted members of the struct
115
+ struct_members: Dict[str, List[TypedParameterDict]] = {}
116
+ structs: Dict[str, StructType] = {}
117
+
118
+ # Contains sorted members of the enum
119
+ enum_members: Dict[str, List[TypedParameterDict]] = {}
120
+ enums: Dict[str, EnumType] = {}
121
+
122
+ # Example problem (with a simplified json structure):
123
+ # [{name: User, fields: {id: Uint256}}, {name: "Uint256", ...}]
124
+ # User refers to Uint256 even though it is not known yet (will be parsed next).
125
+ # This is why it is important to create the structure types first. This way other types can already refer to
126
+ # them when parsing types, even thought their fields are not filled yet.
127
+ # At the end we will mutate those structures to contain the right fields. An alternative would be to use
128
+ # topological sorting with an additional "unresolved type", so this flow is much easier.
129
+ for name, struct in structs_dict.items():
130
+ structs[name] = StructType(name, OrderedDict())
131
+ struct_members[name] = struct["members"]
132
+
133
+ for name, enum in enums_dict.items():
134
+ enums[name] = EnumType(name, OrderedDict())
135
+ enum_members[name] = enum["variants"]
136
+
137
+ # Now parse the types of members and save them.
138
+ defined_structs_enums: Dict[str, Union[StructType, EnumType]] = dict(structs)
139
+ defined_structs_enums.update(enums)
140
+
141
+ self._type_parser = TypeParser(defined_structs_enums)
142
+ for name, struct in structs.items():
143
+ members = self._parse_members(
144
+ cast(List[TypedParameterDict], struct_members[name]),
145
+ f"members of structure '{name}'",
146
+ )
147
+ struct.types.update(members)
148
+ for name, enum in enums.items():
149
+ members = self._parse_members(
150
+ cast(List[TypedParameterDict], enum_members[name]),
151
+ f"members of enum '{name}'",
152
+ )
153
+ enum.variants.update(members)
154
+
155
+ # All types have their members assigned now
156
+
157
+ self._check_for_cycles(defined_structs_enums)
158
+
159
+ return structs, enums
160
+
161
+ @staticmethod
162
+ def _check_for_cycles(structs: Dict[str, Union[StructType, EnumType]]):
163
+ # We want to avoid creating our own cycle checker as it would make it more complex. json module has a built-in
164
+ # checker for cycles.
165
+ try:
166
+ _to_json(structs)
167
+ except ValueError as err:
168
+ raise AbiParsingError(err) from ValueError
169
+
170
+ def _parse_function(self, function: FunctionDict) -> Abi.Function:
171
+ return Abi.Function(
172
+ name=function["name"],
173
+ inputs=self._parse_members(function["inputs"], function["name"]),
174
+ outputs=list(
175
+ self.type_parser.parse_inline_type(param["type"])
176
+ for param in function["outputs"]
177
+ ),
178
+ )
179
+
180
+ def _parse_event(self, event: EventDict) -> Abi.Event:
181
+ return Abi.Event(
182
+ name=event["name"],
183
+ inputs=self._parse_members(event["inputs"], event["name"]),
184
+ )
185
+
186
+ def _parse_members(
187
+ self, params: List[TypedParameterDict], entity_name: str
188
+ ) -> OrderedDict[str, CairoType]:
189
+ # Without cast, it complains that 'Type "TypedParameterDict" cannot be assigned to type "T@_group_by_name"'
190
+ members = AbiParser._group_by_entry_name(cast(List[Dict], params), entity_name)
191
+ return OrderedDict(
192
+ (name, self.type_parser.parse_inline_type(param["type"]))
193
+ for name, param in members.items()
194
+ )
195
+
196
+ @staticmethod
197
+ def _group_by_entry_name(
198
+ dicts: List[Dict], entity_name: str
199
+ ) -> OrderedDict[str, Dict]:
200
+ grouped = OrderedDict()
201
+ for entry in dicts:
202
+ name = entry["name"]
203
+ if name in grouped:
204
+ raise AbiParsingError(
205
+ f"Name '{name}' was used more than once in {entity_name}."
206
+ )
207
+ grouped[name] = entry
208
+ return grouped
209
+
210
+
211
+ def _to_json(value):
212
+ class DataclassSupportingEncoder(json.JSONEncoder):
213
+ def default(self, o):
214
+ # Dataclasses are not supported by json. Additionally, dataclasses.asdict() works recursively and doesn't
215
+ # check for cycles, so we need to flatten dataclasses (by ONE LEVEL) ourselves.
216
+ if dataclasses.is_dataclass(o):
217
+ return tuple(getattr(o, field.name) for field in dataclasses.fields(o))
218
+ return super().default(o)
219
+
220
+ return json.dumps(value, cls=DataclassSupportingEncoder)
@@ -0,0 +1,179 @@
1
+ from typing import Any, List, Optional
2
+
3
+ from ....lark import *
4
+ from ....lark import Token, Transformer
5
+
6
+ from ...cairo.data_types import (
7
+ ArrayType,
8
+ BoolType,
9
+ CairoType,
10
+ FeltType,
11
+ OptionType,
12
+ TupleType,
13
+ TypeIdentifier,
14
+ UintType,
15
+ UnitType,
16
+ )
17
+
18
+ ABI_EBNF = """
19
+ IDENTIFIER: /[a-zA-Z_][a-zA-Z_0-9]*/
20
+
21
+ type: type_unit
22
+ | type_bool
23
+ | type_felt
24
+ | type_uint
25
+ | type_contract_address
26
+ | type_class_hash
27
+ | type_storage_address
28
+ | type_option
29
+ | type_array
30
+ | type_span
31
+ | tuple
32
+ | type_identifier
33
+
34
+
35
+ type_unit: "()"
36
+ type_felt: "core::felt252"
37
+ type_bool: "core::bool"
38
+ type_uint: "core::integer::u" INT
39
+ type_contract_address: "core::starknet::contract_address::ContractAddress"
40
+ type_class_hash: "core::starknet::class_hash::ClassHash"
41
+ type_storage_address: "core::starknet::storage_access::StorageAddress"
42
+ type_option: "core::option::Option::<" (type | type_identifier) ">"
43
+ type_array: "core::array::Array::<" (type | type_identifier) ">"
44
+ type_span: "core::array::Span::<" (type | type_identifier) ">"
45
+
46
+ tuple: "(" type? ("," type?)* ")"
47
+
48
+ type_identifier: (IDENTIFIER | "::")+ ("<" (type | ",")+ ">")?
49
+
50
+
51
+ %import common.INT
52
+ %import common.WS
53
+ %ignore WS
54
+ """
55
+
56
+
57
+ class ParserTransformer(Transformer):
58
+ """
59
+ Transforms the lark tree into CairoTypes.
60
+ """
61
+
62
+ def __init__(self, type_identifiers: Optional[dict] = None) -> None:
63
+ if type_identifiers is None:
64
+ type_identifiers = {}
65
+ self.type_identifiers = type_identifiers
66
+ super(Transformer, self).__init__()
67
+
68
+ # pylint: disable=no-self-use
69
+
70
+ def __default__(self, data: str, children, meta):
71
+ raise TypeError(f"Unable to parse tree node of type {data}.")
72
+
73
+ def type(self, value: List[Optional[CairoType]]) -> Optional[CairoType]:
74
+ """
75
+ Tokens are read bottom-up, so here all of them are parsed and should be just returned.
76
+ `Optional` is added in case of the unit type.
77
+ """
78
+ assert len(value) == 1
79
+ return value[0]
80
+
81
+ def type_felt(self, _value: List[Any]) -> FeltType:
82
+ """
83
+ Felt does not contain any additional arguments, so `_value` is just an empty list.
84
+ """
85
+ return FeltType()
86
+
87
+ def type_bool(self, _value: List[Any]) -> BoolType:
88
+ """
89
+ Bool does not contain any additional arguments, so `_value` is just an empty list.
90
+ """
91
+ return BoolType()
92
+
93
+ def type_uint(self, value: List[Token]) -> UintType:
94
+ """
95
+ Uint type contains information about its size. It is present in the value[0].
96
+ """
97
+ return UintType(int(value[0]))
98
+
99
+ def type_unit(self, _value: List[Any]) -> UnitType:
100
+ """
101
+ `()` type.
102
+ """
103
+ return UnitType()
104
+
105
+ def type_option(self, value: List[CairoType]) -> OptionType:
106
+ """
107
+ Option includes an information about which type it eventually represents.
108
+ `Optional` is added in case of the unit type.
109
+ """
110
+ return OptionType(value[0])
111
+
112
+ def type_array(self, value: List[CairoType]) -> ArrayType:
113
+ """
114
+ Array contains values of type under `value[0]`.
115
+ """
116
+ return ArrayType(value[0])
117
+
118
+ def type_span(self, value: List[CairoType]) -> ArrayType:
119
+ """
120
+ Span contains values of type under `value[0]`.
121
+ """
122
+ return ArrayType(value[0])
123
+
124
+ def type_identifier(self, tokens: List[Token]) -> TypeIdentifier:
125
+ """
126
+ Structs and enums are defined as follows: (IDENTIFIER | "::")+ [some not important info]
127
+ where IDENTIFIER is a string.
128
+
129
+ Tokens would contain strings and types (if it is present).
130
+ We are interested only in the strings because a structure (or enum) name can be built from them.
131
+ """
132
+ name = "::".join(token for token in tokens if isinstance(token, str))
133
+ if name in self.type_identifiers:
134
+ return self.type_identifiers[name]
135
+ return TypeIdentifier(name)
136
+
137
+ def type_contract_address(self, _value: List[Any]) -> FeltType:
138
+ """
139
+ ContractAddress is represented by the felt252.
140
+ """
141
+ return FeltType()
142
+
143
+ def type_class_hash(self, _value: List[Any]) -> FeltType:
144
+ """
145
+ ClassHash is represented by the felt252.
146
+ """
147
+ return FeltType()
148
+
149
+ def type_storage_address(self, _value: List[Any]) -> FeltType:
150
+ """
151
+ StorageAddress is represented by the felt252.
152
+ """
153
+ return FeltType()
154
+
155
+ def tuple(self, types: List[CairoType]) -> TupleType:
156
+ """
157
+ Tuple contains values defined in the `types` argument.
158
+ """
159
+ return TupleType(types)
160
+
161
+
162
+ def parse(
163
+ code: str,
164
+ type_identifiers,
165
+ ) -> CairoType:
166
+ """
167
+ Parse the given string and return a CairoType.
168
+ """
169
+ grammar_parser = lark.Lark(
170
+ grammar=ABI_EBNF,
171
+ start="type",
172
+ parser="earley",
173
+ )
174
+ parsed = grammar_parser.parse(code)
175
+
176
+ parser_transformer = ParserTransformer(type_identifiers)
177
+ cairo_type = parser_transformer.transform(parsed)
178
+
179
+ return cairo_type
@@ -0,0 +1,66 @@
1
+ from ....marshmallow import Schema, fields
2
+ from ....marshmallow_oneofschema import OneOfSchema
3
+
4
+ from .shape import (
5
+ ENUM_ENTRY,
6
+ EVENT_ENTRY,
7
+ FUNCTION_ENTRY,
8
+ STRUCT_ENTRY,
9
+ )
10
+
11
+
12
+ class TypeSchema(Schema):
13
+ type = fields.String(data_key="type", required=True)
14
+
15
+
16
+ class TypedParameterSchema(TypeSchema):
17
+ name = fields.String(data_key="name", required=True)
18
+
19
+
20
+ class FunctionBaseSchema(Schema):
21
+ name = fields.String(data_key="name", required=True)
22
+ inputs = fields.List(
23
+ fields.Nested(TypedParameterSchema()), data_key="inputs", required=True
24
+ )
25
+ outputs = fields.List(
26
+ fields.Nested(TypeSchema()), data_key="outputs", required=True
27
+ )
28
+ state_mutability = fields.String(data_key="state_mutability", default=None)
29
+
30
+
31
+ class FunctionAbiEntrySchema(FunctionBaseSchema):
32
+ type = fields.Constant(FUNCTION_ENTRY, data_key="type", required=True)
33
+
34
+
35
+ class EventAbiEntrySchema(Schema):
36
+ type = fields.Constant(EVENT_ENTRY, data_key="type", required=True)
37
+ name = fields.String(data_key="name", required=True)
38
+ inputs = fields.List(
39
+ fields.Nested(TypedParameterSchema()), data_key="inputs", required=True
40
+ )
41
+
42
+
43
+ class StructAbiEntrySchema(Schema):
44
+ type = fields.Constant(STRUCT_ENTRY, data_key="type", required=True)
45
+ name = fields.String(data_key="name", required=True)
46
+ members = fields.List(
47
+ fields.Nested(TypedParameterSchema()), data_key="members", required=True
48
+ )
49
+
50
+
51
+ class EnumAbiEntrySchema(Schema):
52
+ type = fields.Constant(ENUM_ENTRY, data_key="type", required=True)
53
+ name = fields.String(data_key="name", required=True)
54
+ variants = fields.List(
55
+ fields.Nested(TypedParameterSchema(), data_key="variants", required=True)
56
+ )
57
+
58
+
59
+ class ContractAbiEntrySchema(OneOfSchema):
60
+ type_field_remove = False
61
+ type_schemas = {
62
+ FUNCTION_ENTRY: FunctionAbiEntrySchema,
63
+ EVENT_ENTRY: EventAbiEntrySchema,
64
+ STRUCT_ENTRY: StructAbiEntrySchema,
65
+ ENUM_ENTRY: EnumAbiEntrySchema,
66
+ }