ccxt 4.2.77__py2.py3-none-any.whl → 4.4.49__py2.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.
- ccxt/__init__.py +36 -14
- ccxt/abstract/alpaca.py +4 -0
- ccxt/abstract/bigone.py +1 -1
- ccxt/abstract/binance.py +112 -48
- ccxt/abstract/binancecoinm.py +112 -48
- ccxt/abstract/binanceus.py +147 -83
- ccxt/abstract/binanceusdm.py +112 -48
- ccxt/abstract/bingx.py +133 -78
- ccxt/abstract/bitbank.py +5 -0
- ccxt/abstract/bitfinex.py +136 -65
- ccxt/abstract/bitfinex1.py +69 -0
- ccxt/abstract/bitflyer.py +1 -0
- ccxt/abstract/bitget.py +8 -1
- ccxt/abstract/bitmart.py +13 -1
- ccxt/abstract/bitopro.py +1 -0
- ccxt/abstract/bitpanda.py +0 -12
- ccxt/abstract/bitrue.py +3 -3
- ccxt/abstract/bitstamp.py +26 -3
- ccxt/abstract/blofin.py +24 -0
- ccxt/abstract/btcbox.py +1 -0
- ccxt/abstract/bybit.py +29 -14
- ccxt/abstract/cex.py +28 -29
- ccxt/abstract/coinbase.py +6 -0
- ccxt/abstract/coinbaseadvanced.py +94 -0
- ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/abstract/coincatch.py +94 -0
- ccxt/abstract/coinex.py +233 -123
- ccxt/abstract/coinmetro.py +1 -0
- ccxt/abstract/cryptocom.py +14 -0
- ccxt/abstract/defx.py +69 -0
- ccxt/abstract/deribit.py +1 -0
- ccxt/abstract/digifinex.py +1 -0
- ccxt/abstract/ellipx.py +25 -0
- ccxt/abstract/gate.py +20 -0
- ccxt/abstract/gateio.py +20 -0
- ccxt/abstract/gemini.py +1 -0
- ccxt/abstract/hashkey.py +67 -0
- ccxt/abstract/hyperliquid.py +1 -1
- ccxt/abstract/independentreserve.py +6 -0
- ccxt/abstract/kraken.py +4 -3
- ccxt/abstract/krakenfutures.py +4 -0
- ccxt/abstract/kucoin.py +24 -0
- ccxt/abstract/kucoinfutures.py +34 -0
- ccxt/abstract/luno.py +2 -0
- ccxt/abstract/mexc.py +4 -0
- ccxt/abstract/myokx.py +340 -0
- ccxt/abstract/oceanex.py +5 -0
- ccxt/abstract/okx.py +30 -0
- ccxt/abstract/onetrading.py +0 -12
- ccxt/abstract/oxfun.py +34 -0
- ccxt/abstract/paradex.py +40 -0
- ccxt/abstract/phemex.py +1 -0
- ccxt/abstract/upbit.py +4 -0
- ccxt/abstract/vertex.py +19 -0
- ccxt/abstract/whitebit.py +31 -1
- ccxt/abstract/woo.py +6 -2
- ccxt/abstract/woofipro.py +119 -0
- ccxt/abstract/xt.py +153 -0
- ccxt/abstract/zonda.py +6 -0
- ccxt/ace.py +164 -60
- ccxt/alpaca.py +727 -63
- ccxt/ascendex.py +395 -249
- ccxt/async_support/__init__.py +36 -14
- ccxt/async_support/ace.py +164 -60
- ccxt/async_support/alpaca.py +727 -63
- ccxt/async_support/ascendex.py +396 -249
- ccxt/async_support/base/exchange.py +531 -155
- ccxt/async_support/base/ws/aiohttp_client.py +28 -5
- ccxt/async_support/base/ws/cache.py +3 -2
- ccxt/async_support/base/ws/client.py +26 -5
- ccxt/async_support/base/ws/fast_client.py +4 -3
- ccxt/async_support/base/ws/functions.py +1 -1
- ccxt/async_support/base/ws/future.py +40 -31
- ccxt/async_support/base/ws/order_book_side.py +3 -0
- ccxt/async_support/bequant.py +1 -1
- ccxt/async_support/bigone.py +329 -202
- ccxt/async_support/binance.py +3030 -1087
- ccxt/async_support/binancecoinm.py +2 -1
- ccxt/async_support/binanceus.py +12 -1
- ccxt/async_support/binanceusdm.py +3 -1
- ccxt/async_support/bingx.py +3205 -937
- ccxt/async_support/bit2c.py +119 -38
- ccxt/async_support/bitbank.py +215 -76
- ccxt/async_support/bitbns.py +124 -53
- ccxt/async_support/bitfinex.py +3236 -1078
- ccxt/async_support/bitfinex1.py +1711 -0
- ccxt/async_support/bitflyer.py +238 -49
- ccxt/async_support/bitget.py +1525 -573
- ccxt/async_support/bithumb.py +199 -65
- ccxt/async_support/bitmart.py +1320 -435
- ccxt/async_support/bitmex.py +308 -111
- ccxt/async_support/bitopro.py +256 -96
- ccxt/async_support/bitrue.py +365 -233
- ccxt/async_support/bitso.py +201 -89
- ccxt/async_support/bitstamp.py +438 -269
- ccxt/async_support/bitteam.py +179 -73
- ccxt/async_support/bitvavo.py +180 -70
- ccxt/async_support/bl3p.py +92 -25
- ccxt/async_support/blockchaincom.py +193 -79
- ccxt/async_support/blofin.py +392 -148
- ccxt/async_support/btcalpha.py +161 -55
- ccxt/async_support/btcbox.py +250 -34
- ccxt/async_support/btcmarkets.py +232 -85
- ccxt/async_support/btcturk.py +159 -60
- ccxt/async_support/bybit.py +2231 -1193
- ccxt/async_support/cex.py +1409 -1329
- ccxt/async_support/coinbase.py +1454 -287
- ccxt/async_support/coinbaseadvanced.py +17 -0
- ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/async_support/coinbaseinternational.py +428 -88
- ccxt/async_support/coincatch.py +5152 -0
- ccxt/async_support/coincheck.py +121 -38
- ccxt/async_support/coinex.py +4020 -3339
- ccxt/async_support/coinlist.py +273 -116
- ccxt/async_support/coinmate.py +204 -97
- ccxt/async_support/coinmetro.py +203 -110
- ccxt/async_support/coinone.py +142 -68
- ccxt/async_support/coinsph.py +223 -97
- ccxt/async_support/coinspot.py +137 -62
- ccxt/async_support/cryptocom.py +515 -185
- ccxt/async_support/currencycom.py +203 -85
- ccxt/async_support/defx.py +2066 -0
- ccxt/async_support/delta.py +404 -109
- ccxt/async_support/deribit.py +639 -323
- ccxt/async_support/digifinex.py +465 -233
- ccxt/async_support/ellipx.py +1887 -0
- ccxt/async_support/exmo.py +317 -128
- ccxt/async_support/gate.py +1472 -463
- ccxt/async_support/gemini.py +206 -84
- ccxt/async_support/hashkey.py +4164 -0
- ccxt/async_support/hitbtc.py +433 -178
- ccxt/async_support/hollaex.py +207 -83
- ccxt/async_support/htx.py +1095 -563
- ccxt/async_support/huobijp.py +178 -56
- ccxt/async_support/hyperliquid.py +1678 -292
- ccxt/async_support/idex.py +219 -95
- ccxt/async_support/independentreserve.py +300 -31
- ccxt/async_support/indodax.py +226 -62
- ccxt/async_support/kraken.py +871 -354
- ccxt/async_support/krakenfutures.py +324 -100
- ccxt/async_support/kucoin.py +917 -357
- ccxt/async_support/kucoinfutures.py +1004 -149
- ccxt/async_support/kuna.py +198 -107
- ccxt/async_support/latoken.py +199 -79
- ccxt/async_support/lbank.py +360 -113
- ccxt/async_support/luno.py +185 -62
- ccxt/async_support/lykke.py +168 -55
- ccxt/async_support/mercado.py +101 -29
- ccxt/async_support/mexc.py +995 -429
- ccxt/async_support/myokx.py +53 -0
- ccxt/async_support/ndax.py +234 -82
- ccxt/async_support/novadax.py +195 -75
- ccxt/async_support/oceanex.py +244 -59
- ccxt/async_support/okcoin.py +301 -165
- ccxt/async_support/okx.py +1776 -454
- ccxt/async_support/onetrading.py +198 -414
- ccxt/async_support/oxfun.py +2898 -0
- ccxt/async_support/p2b.py +142 -52
- ccxt/async_support/paradex.py +2085 -0
- ccxt/async_support/paymium.py +56 -32
- ccxt/async_support/phemex.py +572 -196
- ccxt/async_support/poloniex.py +218 -95
- ccxt/async_support/poloniexfutures.py +260 -92
- ccxt/async_support/probit.py +143 -110
- ccxt/async_support/timex.py +123 -70
- ccxt/async_support/tokocrypto.py +129 -93
- ccxt/async_support/tradeogre.py +39 -25
- ccxt/async_support/upbit.py +322 -113
- ccxt/async_support/vertex.py +2983 -0
- ccxt/async_support/wavesexchange.py +227 -173
- ccxt/async_support/wazirx.py +145 -65
- ccxt/async_support/whitebit.py +533 -138
- ccxt/async_support/woo.py +1137 -296
- ccxt/async_support/woofipro.py +2716 -0
- ccxt/async_support/xt.py +4628 -0
- ccxt/async_support/yobit.py +160 -92
- ccxt/async_support/zaif.py +80 -33
- ccxt/async_support/zonda.py +140 -69
- ccxt/base/errors.py +51 -20
- ccxt/base/exchange.py +1722 -480
- ccxt/base/precise.py +10 -0
- ccxt/base/types.py +223 -4
- ccxt/bequant.py +1 -1
- ccxt/bigone.py +329 -202
- ccxt/binance.py +3030 -1087
- ccxt/binancecoinm.py +2 -1
- ccxt/binanceus.py +12 -1
- ccxt/binanceusdm.py +3 -1
- ccxt/bingx.py +3205 -937
- ccxt/bit2c.py +119 -38
- ccxt/bitbank.py +215 -76
- ccxt/bitbns.py +124 -53
- ccxt/bitfinex.py +3235 -1078
- ccxt/bitfinex1.py +1710 -0
- ccxt/bitflyer.py +238 -49
- ccxt/bitget.py +1525 -573
- ccxt/bithumb.py +198 -65
- ccxt/bitmart.py +1320 -435
- ccxt/bitmex.py +308 -111
- ccxt/bitopro.py +256 -96
- ccxt/bitrue.py +365 -233
- ccxt/bitso.py +201 -89
- ccxt/bitstamp.py +438 -269
- ccxt/bitteam.py +179 -73
- ccxt/bitvavo.py +180 -70
- ccxt/bl3p.py +92 -25
- ccxt/blockchaincom.py +193 -79
- ccxt/blofin.py +392 -148
- ccxt/btcalpha.py +161 -55
- ccxt/btcbox.py +250 -34
- ccxt/btcmarkets.py +232 -85
- ccxt/btcturk.py +159 -60
- ccxt/bybit.py +2231 -1193
- ccxt/cex.py +1408 -1329
- ccxt/coinbase.py +1454 -287
- ccxt/coinbaseadvanced.py +17 -0
- ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/coinbaseinternational.py +428 -88
- ccxt/coincatch.py +5152 -0
- ccxt/coincheck.py +121 -38
- ccxt/coinex.py +4020 -3339
- ccxt/coinlist.py +273 -116
- ccxt/coinmate.py +204 -97
- ccxt/coinmetro.py +203 -110
- ccxt/coinone.py +142 -68
- ccxt/coinsph.py +223 -97
- ccxt/coinspot.py +137 -62
- ccxt/cryptocom.py +515 -185
- ccxt/currencycom.py +203 -85
- ccxt/defx.py +2065 -0
- ccxt/delta.py +404 -109
- ccxt/deribit.py +639 -323
- ccxt/digifinex.py +465 -233
- ccxt/ellipx.py +1887 -0
- ccxt/exmo.py +317 -128
- ccxt/gate.py +1472 -463
- ccxt/gemini.py +206 -84
- ccxt/hashkey.py +4164 -0
- ccxt/hitbtc.py +433 -178
- ccxt/hollaex.py +207 -83
- ccxt/htx.py +1095 -563
- ccxt/huobijp.py +178 -56
- ccxt/hyperliquid.py +1677 -292
- ccxt/idex.py +219 -95
- ccxt/independentreserve.py +299 -31
- ccxt/indodax.py +226 -62
- ccxt/kraken.py +871 -354
- ccxt/krakenfutures.py +324 -100
- ccxt/kucoin.py +917 -357
- ccxt/kucoinfutures.py +1004 -149
- ccxt/kuna.py +198 -107
- ccxt/latoken.py +199 -79
- ccxt/lbank.py +360 -113
- ccxt/luno.py +185 -62
- ccxt/lykke.py +168 -55
- ccxt/mercado.py +101 -29
- ccxt/mexc.py +994 -429
- ccxt/myokx.py +53 -0
- ccxt/ndax.py +234 -82
- ccxt/novadax.py +195 -75
- ccxt/oceanex.py +244 -59
- ccxt/okcoin.py +301 -165
- ccxt/okx.py +1776 -454
- ccxt/onetrading.py +198 -414
- ccxt/oxfun.py +2897 -0
- ccxt/p2b.py +142 -52
- ccxt/paradex.py +2085 -0
- ccxt/paymium.py +56 -32
- ccxt/phemex.py +572 -196
- ccxt/poloniex.py +218 -95
- ccxt/poloniexfutures.py +260 -92
- ccxt/pro/__init__.py +29 -5
- ccxt/pro/alpaca.py +32 -17
- ccxt/pro/ascendex.py +62 -14
- ccxt/pro/bequant.py +4 -0
- ccxt/pro/binance.py +1596 -329
- ccxt/pro/binancecoinm.py +1 -0
- ccxt/pro/binanceus.py +2 -9
- ccxt/pro/binanceusdm.py +2 -0
- ccxt/pro/bingx.py +527 -134
- ccxt/pro/bitcoincom.py +4 -1
- ccxt/pro/bitfinex.py +731 -266
- ccxt/pro/bitfinex1.py +635 -0
- ccxt/pro/bitget.py +726 -357
- ccxt/pro/bithumb.py +380 -0
- ccxt/pro/bitmart.py +143 -39
- ccxt/pro/bitmex.py +199 -40
- ccxt/pro/bitopro.py +25 -13
- ccxt/pro/bitrue.py +31 -32
- ccxt/pro/bitstamp.py +7 -6
- ccxt/pro/bitvavo.py +203 -81
- ccxt/pro/blockchaincom.py +30 -17
- ccxt/pro/blofin.py +692 -0
- ccxt/pro/bybit.py +791 -82
- ccxt/pro/cex.py +99 -51
- ccxt/pro/coinbase.py +220 -30
- ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
- ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
- ccxt/pro/coinbaseinternational.py +193 -30
- ccxt/pro/coincatch.py +1464 -0
- ccxt/pro/coincheck.py +11 -6
- ccxt/pro/coinex.py +965 -665
- ccxt/pro/coinone.py +17 -10
- ccxt/pro/cryptocom.py +446 -66
- ccxt/pro/currencycom.py +11 -10
- ccxt/pro/defx.py +832 -0
- ccxt/pro/deribit.py +167 -31
- ccxt/pro/exmo.py +252 -20
- ccxt/pro/gate.py +729 -64
- ccxt/pro/gemini.py +44 -26
- ccxt/pro/hashkey.py +802 -0
- ccxt/pro/hitbtc.py +208 -103
- ccxt/pro/hollaex.py +25 -9
- ccxt/pro/htx.py +83 -39
- ccxt/pro/huobijp.py +17 -16
- ccxt/pro/hyperliquid.py +502 -31
- ccxt/pro/idex.py +28 -13
- ccxt/pro/independentreserve.py +21 -16
- ccxt/pro/kraken.py +298 -51
- ccxt/pro/krakenfutures.py +166 -75
- ccxt/pro/kucoin.py +395 -77
- ccxt/pro/kucoinfutures.py +400 -99
- ccxt/pro/lbank.py +52 -31
- ccxt/pro/luno.py +12 -10
- ccxt/pro/mexc.py +400 -50
- ccxt/pro/myokx.py +28 -0
- ccxt/pro/ndax.py +25 -12
- ccxt/pro/okcoin.py +28 -9
- ccxt/pro/okx.py +935 -124
- ccxt/pro/onetrading.py +41 -24
- ccxt/pro/oxfun.py +1054 -0
- ccxt/pro/p2b.py +100 -24
- ccxt/pro/paradex.py +352 -0
- ccxt/pro/phemex.py +92 -33
- ccxt/pro/poloniex.py +128 -49
- ccxt/pro/poloniexfutures.py +53 -32
- ccxt/pro/probit.py +92 -85
- ccxt/pro/upbit.py +401 -8
- ccxt/pro/vertex.py +943 -0
- ccxt/pro/wazirx.py +46 -28
- ccxt/pro/whitebit.py +65 -12
- ccxt/pro/woo.py +437 -65
- ccxt/pro/woofipro.py +1271 -0
- ccxt/pro/xt.py +1067 -0
- ccxt/probit.py +143 -110
- ccxt/static_dependencies/__init__.py +1 -1
- ccxt/static_dependencies/lark/__init__.py +38 -0
- ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
- ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
- ccxt/static_dependencies/lark/ast_utils.py +59 -0
- ccxt/static_dependencies/lark/common.py +86 -0
- ccxt/static_dependencies/lark/exceptions.py +292 -0
- ccxt/static_dependencies/lark/grammar.py +130 -0
- ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
- ccxt/static_dependencies/lark/indenter.py +143 -0
- ccxt/static_dependencies/lark/lark.py +658 -0
- ccxt/static_dependencies/lark/lexer.py +678 -0
- ccxt/static_dependencies/lark/load_grammar.py +1428 -0
- ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
- ccxt/static_dependencies/lark/parser_frontends.py +257 -0
- ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
- ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
- ccxt/static_dependencies/lark/parsers/earley.py +314 -0
- ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
- ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
- ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
- ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
- ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
- ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
- ccxt/static_dependencies/lark/py.typed +0 -0
- ccxt/static_dependencies/lark/reconstruct.py +107 -0
- ccxt/static_dependencies/lark/tools/__init__.py +70 -0
- ccxt/static_dependencies/lark/tools/nearley.py +202 -0
- ccxt/static_dependencies/lark/tools/serialize.py +32 -0
- ccxt/static_dependencies/lark/tools/standalone.py +196 -0
- ccxt/static_dependencies/lark/tree.py +267 -0
- ccxt/static_dependencies/lark/tree_matcher.py +186 -0
- ccxt/static_dependencies/lark/tree_templates.py +180 -0
- ccxt/static_dependencies/lark/utils.py +343 -0
- ccxt/static_dependencies/lark/visitors.py +596 -0
- ccxt/static_dependencies/marshmallow/__init__.py +81 -0
- ccxt/static_dependencies/marshmallow/base.py +65 -0
- ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
- ccxt/static_dependencies/marshmallow/decorators.py +231 -0
- ccxt/static_dependencies/marshmallow/error_store.py +60 -0
- ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
- ccxt/static_dependencies/marshmallow/fields.py +2114 -0
- ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
- ccxt/static_dependencies/marshmallow/py.typed +0 -0
- ccxt/static_dependencies/marshmallow/schema.py +1228 -0
- ccxt/static_dependencies/marshmallow/types.py +12 -0
- ccxt/static_dependencies/marshmallow/utils.py +378 -0
- ccxt/static_dependencies/marshmallow/validate.py +678 -0
- ccxt/static_dependencies/marshmallow/warnings.py +2 -0
- ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
- ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
- ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
- ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
- ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
- ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
- ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
- ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
- ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
- ccxt/static_dependencies/starknet/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
- ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
- ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
- ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
- ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
- ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
- ccxt/static_dependencies/starknet/common.py +15 -0
- ccxt/static_dependencies/starknet/constants.py +39 -0
- ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
- ccxt/static_dependencies/starknet/hash/address.py +79 -0
- ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
- ccxt/static_dependencies/starknet/hash/selector.py +16 -0
- ccxt/static_dependencies/starknet/hash/storage.py +12 -0
- ccxt/static_dependencies/starknet/hash/utils.py +78 -0
- ccxt/static_dependencies/starknet/models/__init__.py +0 -0
- ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
- ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
- ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
- ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
- ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
- ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
- ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
- ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
- ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
- ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
- ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
- ccxt/static_dependencies/starknet/utils/schema.py +13 -0
- ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
- ccxt/static_dependencies/starkware/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
- ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
- ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
- ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
- ccxt/static_dependencies/sympy/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
- ccxt/static_dependencies/sympy/external/__init__.py +0 -0
- ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
- ccxt/static_dependencies/sympy/external/importtools.py +187 -0
- ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
- ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
- ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
- ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
- ccxt/test/{test_async.py → tests_async.py} +456 -391
- ccxt/test/tests_helpers.py +285 -0
- ccxt/test/tests_init.py +39 -0
- ccxt/test/{test_sync.py → tests_sync.py} +456 -393
- ccxt/timex.py +123 -70
- ccxt/tokocrypto.py +129 -93
- ccxt/tradeogre.py +39 -25
- ccxt/upbit.py +322 -113
- ccxt/vertex.py +2983 -0
- ccxt/wavesexchange.py +227 -173
- ccxt/wazirx.py +145 -65
- ccxt/whitebit.py +533 -138
- ccxt/woo.py +1137 -296
- ccxt/woofipro.py +2716 -0
- ccxt/xt.py +4627 -0
- ccxt/yobit.py +159 -92
- ccxt/zaif.py +80 -33
- ccxt/zonda.py +140 -69
- ccxt-4.4.49.dist-info/LICENSE.txt +21 -0
- ccxt-4.4.49.dist-info/METADATA +646 -0
- ccxt-4.4.49.dist-info/RECORD +669 -0
- {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/WHEEL +1 -1
- ccxt/abstract/bitbay.py +0 -47
- ccxt/abstract/bitfinex2.py +0 -139
- ccxt/abstract/hitbtc3.py +0 -115
- ccxt/async_support/bitbay.py +0 -17
- ccxt/async_support/bitfinex2.py +0 -3496
- ccxt/async_support/flowbtc.py +0 -34
- ccxt/bitbay.py +0 -17
- ccxt/bitfinex2.py +0 -3496
- ccxt/flowbtc.py +0 -34
- ccxt/hitbtc3.py +0 -16
- ccxt/pro/bitfinex2.py +0 -1081
- ccxt/test/base/__init__.py +0 -28
- ccxt/test/base/test_account.py +0 -26
- ccxt/test/base/test_balance.py +0 -56
- ccxt/test/base/test_borrow_interest.py +0 -35
- ccxt/test/base/test_borrow_rate.py +0 -32
- ccxt/test/base/test_calculate_fee.py +0 -51
- ccxt/test/base/test_crypto.py +0 -127
- ccxt/test/base/test_currency.py +0 -76
- ccxt/test/base/test_datetime.py +0 -103
- ccxt/test/base/test_decimal_to_precision.py +0 -392
- ccxt/test/base/test_deep_extend.py +0 -68
- ccxt/test/base/test_deposit_withdrawal.py +0 -50
- ccxt/test/base/test_exchange_datetime_functions.py +0 -76
- ccxt/test/base/test_funding_rate_history.py +0 -29
- ccxt/test/base/test_last_price.py +0 -32
- ccxt/test/base/test_ledger_entry.py +0 -45
- ccxt/test/base/test_ledger_item.py +0 -48
- ccxt/test/base/test_leverage_tier.py +0 -33
- ccxt/test/base/test_margin_mode.py +0 -24
- ccxt/test/base/test_margin_modification.py +0 -35
- ccxt/test/base/test_market.py +0 -190
- ccxt/test/base/test_number.py +0 -411
- ccxt/test/base/test_ohlcv.py +0 -32
- ccxt/test/base/test_open_interest.py +0 -32
- ccxt/test/base/test_order.py +0 -64
- ccxt/test/base/test_order_book.py +0 -63
- ccxt/test/base/test_position.py +0 -60
- ccxt/test/base/test_shared_methods.py +0 -345
- ccxt/test/base/test_status.py +0 -24
- ccxt/test/base/test_throttle.py +0 -126
- ccxt/test/base/test_ticker.py +0 -86
- ccxt/test/base/test_trade.py +0 -47
- ccxt/test/base/test_trading_fee.py +0 -26
- ccxt/test/base/test_transaction.py +0 -39
- ccxt-4.2.77.dist-info/METADATA +0 -626
- ccxt-4.2.77.dist-info/RECORD +0 -534
- {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/top_level.txt +0 -0
ccxt/async_support/tokocrypto.py
CHANGED
@@ -7,16 +7,16 @@ from ccxt.async_support.base.exchange import Exchange
|
|
7
7
|
from ccxt.abstract.tokocrypto import ImplicitAPI
|
8
8
|
import hashlib
|
9
9
|
import json
|
10
|
-
from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
|
10
|
+
from ccxt.base.types import Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
|
11
11
|
from typing import List
|
12
12
|
from ccxt.base.errors import ExchangeError
|
13
|
+
from ccxt.base.errors import AuthenticationError
|
13
14
|
from ccxt.base.errors import PermissionDenied
|
14
15
|
from ccxt.base.errors import AccountSuspended
|
15
16
|
from ccxt.base.errors import ArgumentsRequired
|
16
17
|
from ccxt.base.errors import BadRequest
|
17
18
|
from ccxt.base.errors import BadSymbol
|
18
19
|
from ccxt.base.errors import MarginModeAlreadySet
|
19
|
-
from ccxt.base.errors import BadResponse
|
20
20
|
from ccxt.base.errors import InsufficientFunds
|
21
21
|
from ccxt.base.errors import InvalidOrder
|
22
22
|
from ccxt.base.errors import OrderNotFound
|
@@ -29,9 +29,9 @@ from ccxt.base.errors import ExchangeNotAvailable
|
|
29
29
|
from ccxt.base.errors import OnMaintenance
|
30
30
|
from ccxt.base.errors import InvalidNonce
|
31
31
|
from ccxt.base.errors import RequestTimeout
|
32
|
-
from ccxt.base.errors import
|
32
|
+
from ccxt.base.errors import BadResponse
|
33
33
|
from ccxt.base.decimal_to_precision import TRUNCATE
|
34
|
-
from ccxt.base.decimal_to_precision import
|
34
|
+
from ccxt.base.decimal_to_precision import TICK_SIZE
|
35
35
|
from ccxt.base.precise import Precise
|
36
36
|
|
37
37
|
|
@@ -234,7 +234,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
234
234
|
'maker': self.parse_number('0.0075'), # 0.1% trading fee, zero fees for all trading pairs before November 1
|
235
235
|
},
|
236
236
|
},
|
237
|
-
'precisionMode':
|
237
|
+
'precisionMode': TICK_SIZE,
|
238
238
|
'options': {
|
239
239
|
# 'fetchTradesMethod': 'binanceGetTrades', # binanceGetTrades, binanceGetAggTrades
|
240
240
|
'createMarketBuyOrderRequiresPrice': True,
|
@@ -626,7 +626,9 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
626
626
|
|
627
627
|
async def fetch_time(self, params={}):
|
628
628
|
"""
|
629
|
-
|
629
|
+
|
630
|
+
https://www.tokocrypto.com/apidocs/#check-server-time
|
631
|
+
|
630
632
|
fetches the current integer timestamp in milliseconds from the exchange server
|
631
633
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
632
634
|
:returns int: the current integer timestamp in milliseconds from the exchange server
|
@@ -637,9 +639,11 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
637
639
|
#
|
638
640
|
return self.safe_integer(response, 'serverTime')
|
639
641
|
|
640
|
-
async def fetch_markets(self, params={}):
|
642
|
+
async def fetch_markets(self, params={}) -> List[Market]:
|
641
643
|
"""
|
642
|
-
|
644
|
+
|
645
|
+
https://www.tokocrypto.com/apidocs/#get-all-supported-trading-symbol
|
646
|
+
|
643
647
|
retrieves data on all markets for tokocrypto
|
644
648
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
645
649
|
:returns dict[]: an array of objects representing market data
|
@@ -707,7 +711,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
707
711
|
active = False
|
708
712
|
break
|
709
713
|
isMarginTradingAllowed = self.safe_bool(market, 'isMarginTradingAllowed', False)
|
710
|
-
entry = {
|
714
|
+
entry: dict = {
|
711
715
|
'id': id,
|
712
716
|
'lowercaseId': lowercaseId,
|
713
717
|
'symbol': symbol,
|
@@ -734,10 +738,10 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
734
738
|
'strike': None,
|
735
739
|
'optionType': None,
|
736
740
|
'precision': {
|
737
|
-
'amount': self.
|
738
|
-
'price': self.
|
739
|
-
'base': self.
|
740
|
-
'quote': self.
|
741
|
+
'amount': self.parse_number(self.parse_precision(self.safe_string(market, 'quantityPrecision'))),
|
742
|
+
'price': self.parse_number(self.parse_precision(self.safe_string(market, 'pricePrecision'))),
|
743
|
+
'base': self.parse_number(self.parse_precision(self.safe_string(market, 'baseAssetPrecision'))),
|
744
|
+
'quote': self.parse_number(self.parse_precision(self.safe_string(market, 'quotePrecision'))),
|
741
745
|
},
|
742
746
|
'limits': {
|
743
747
|
'leverage': {
|
@@ -762,8 +766,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
762
766
|
}
|
763
767
|
if 'PRICE_FILTER' in filtersByType:
|
764
768
|
filter = self.safe_value(filtersByType, 'PRICE_FILTER', {})
|
765
|
-
|
766
|
-
entry['precision']['price'] = self.precision_from_string(tickSize)
|
769
|
+
entry['precision']['price'] = self.safe_number(filter, 'tickSize')
|
767
770
|
# PRICE_FILTER reports zero values for maxPrice
|
768
771
|
# since they updated filter types in November 2018
|
769
772
|
# https://github.com/ccxt/ccxt/issues/4286
|
@@ -772,11 +775,10 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
772
775
|
'min': self.safe_number(filter, 'minPrice'),
|
773
776
|
'max': self.safe_number(filter, 'maxPrice'),
|
774
777
|
}
|
775
|
-
entry['precision']['price'] =
|
778
|
+
entry['precision']['price'] = filter['tickSize']
|
776
779
|
if 'LOT_SIZE' in filtersByType:
|
777
780
|
filter = self.safe_value(filtersByType, 'LOT_SIZE', {})
|
778
|
-
|
779
|
-
entry['precision']['amount'] = self.precision_from_string(stepSize)
|
781
|
+
entry['precision']['amount'] = self.safe_number(filter, 'stepSize')
|
780
782
|
entry['limits']['amount'] = {
|
781
783
|
'min': self.safe_number(filter, 'minQty'),
|
782
784
|
'max': self.safe_number(filter, 'maxQty'),
|
@@ -795,7 +797,9 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
795
797
|
|
796
798
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
797
799
|
"""
|
798
|
-
|
800
|
+
|
801
|
+
https://www.tokocrypto.com/apidocs/#order-book
|
802
|
+
|
799
803
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
800
804
|
:param str symbol: unified symbol of the market to fetch the order book for
|
801
805
|
:param int [limit]: the maximum amount of order book entries to return
|
@@ -804,7 +808,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
804
808
|
"""
|
805
809
|
await self.load_markets()
|
806
810
|
market = self.market(symbol)
|
807
|
-
request = {}
|
811
|
+
request: dict = {}
|
808
812
|
if limit is not None:
|
809
813
|
request['limit'] = limit # default 100, max 5000, see https://github.com/binance/binance-spot-api-docs/blob/master/rest-api.md#order-book
|
810
814
|
response = None
|
@@ -849,7 +853,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
849
853
|
orderbook['nonce'] = self.safe_integer(data, 'lastUpdateId')
|
850
854
|
return orderbook
|
851
855
|
|
852
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
856
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
853
857
|
#
|
854
858
|
# aggregate trades
|
855
859
|
# https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md#compressedaggregate-trades-list
|
@@ -991,8 +995,10 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
991
995
|
|
992
996
|
async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
993
997
|
"""
|
994
|
-
|
995
|
-
|
998
|
+
|
999
|
+
https://www.tokocrypto.com/apidocs/#recent-trades-list
|
1000
|
+
https://www.tokocrypto.com/apidocs/#compressedaggregate-trades-list
|
1001
|
+
|
996
1002
|
get the list of most recent trades for a particular symbol
|
997
1003
|
:param str symbol: unified symbol of the market to fetch trades for
|
998
1004
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
@@ -1002,7 +1008,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1002
1008
|
"""
|
1003
1009
|
await self.load_markets()
|
1004
1010
|
market = self.market(symbol)
|
1005
|
-
request = {
|
1011
|
+
request: dict = {
|
1006
1012
|
'symbol': self.get_market_id_by_type(market),
|
1007
1013
|
# 'fromId': 123, # ID to get aggregate trades from INCLUSIVE.
|
1008
1014
|
# 'startTime': 456, # Timestamp in ms to get aggregate trades from INCLUSIVE.
|
@@ -1088,7 +1094,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1088
1094
|
#
|
1089
1095
|
return self.parse_trades(response, market, since, limit)
|
1090
1096
|
|
1091
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
1097
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
1092
1098
|
#
|
1093
1099
|
# {
|
1094
1100
|
# "symbol": "ETHBTC",
|
@@ -1173,7 +1179,9 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1173
1179
|
|
1174
1180
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
1175
1181
|
"""
|
1176
|
-
|
1182
|
+
|
1183
|
+
https://binance-docs.github.io/apidocs/spot/en/#24hr-ticker-price-change-statistics
|
1184
|
+
|
1177
1185
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
1178
1186
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
1179
1187
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1190,7 +1198,9 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1190
1198
|
|
1191
1199
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
1192
1200
|
"""
|
1193
|
-
|
1201
|
+
|
1202
|
+
https://binance-docs.github.io/apidocs/spot/en/#24hr-ticker-price-change-statistics
|
1203
|
+
|
1194
1204
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
1195
1205
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
1196
1206
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1198,18 +1208,20 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1198
1208
|
"""
|
1199
1209
|
await self.load_markets()
|
1200
1210
|
market = self.market(symbol)
|
1201
|
-
request = {
|
1211
|
+
request: dict = {
|
1202
1212
|
'symbol': market['baseId'] + market['quoteId'],
|
1203
1213
|
}
|
1204
1214
|
response = await self.binanceGetTicker24hr(self.extend(request, params))
|
1205
1215
|
if isinstance(response, list):
|
1206
|
-
firstTicker = self.
|
1216
|
+
firstTicker = self.safe_dict(response, 0, {})
|
1207
1217
|
return self.parse_ticker(firstTicker, market)
|
1208
1218
|
return self.parse_ticker(response, market)
|
1209
1219
|
|
1210
1220
|
async def fetch_bids_asks(self, symbols: Strings = None, params={}):
|
1211
1221
|
"""
|
1212
|
-
|
1222
|
+
|
1223
|
+
https://binance-docs.github.io/apidocs/spot/en/#symbol-order-book-ticker
|
1224
|
+
|
1213
1225
|
fetches the bid and ask price and volume for multiple markets
|
1214
1226
|
:param str[]|None symbols: unified symbols of the markets to fetch the bids and asks for, all markets are returned if not assigned
|
1215
1227
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1265,7 +1277,9 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1265
1277
|
|
1266
1278
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
1267
1279
|
"""
|
1268
|
-
|
1280
|
+
|
1281
|
+
https://binance-docs.github.io/apidocs/spot/en/#kline-candlestick-data
|
1282
|
+
|
1269
1283
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
1270
1284
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
1271
1285
|
:param str timeframe: the length of time each candle represents
|
@@ -1286,7 +1300,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1286
1300
|
until = self.safe_integer(params, 'until')
|
1287
1301
|
params = self.omit(params, ['price', 'until'])
|
1288
1302
|
limit = defaultLimit if (limit is None) else min(limit, maxLimit)
|
1289
|
-
request = {
|
1303
|
+
request: dict = {
|
1290
1304
|
'interval': self.safe_string(self.timeframes, timeframe, timeframe),
|
1291
1305
|
'limit': limit,
|
1292
1306
|
}
|
@@ -1311,12 +1325,14 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1311
1325
|
# [1591478640000,"0.02500800","0.02501100","0.02500300","0.02500800","154.14200000",1591478699999,"3.85405839",97,"5.32300000","0.13312641","0"],
|
1312
1326
|
# ]
|
1313
1327
|
#
|
1314
|
-
data = self.
|
1328
|
+
data = self.safe_list(response, 'data', response)
|
1315
1329
|
return self.parse_ohlcvs(data, market, timeframe, since, limit)
|
1316
1330
|
|
1317
1331
|
async def fetch_balance(self, params={}) -> Balances:
|
1318
1332
|
"""
|
1319
|
-
|
1333
|
+
|
1334
|
+
https://www.tokocrypto.com/apidocs/#account-information-signed
|
1335
|
+
|
1320
1336
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
1321
1337
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1322
1338
|
:param str [params.type]: 'future', 'delivery', 'savings', 'funding', or 'spot'
|
@@ -1329,7 +1345,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1329
1345
|
type = self.safe_string(params, 'type', defaultType)
|
1330
1346
|
defaultMarginMode = self.safe_string_2(self.options, 'marginMode', 'defaultMarginMode')
|
1331
1347
|
marginMode = self.safe_string_lower(params, 'marginMode', defaultMarginMode)
|
1332
|
-
request = {}
|
1348
|
+
request: dict = {}
|
1333
1349
|
response = await self.privateGetOpenV1AccountSpot(self.extend(request, params))
|
1334
1350
|
#
|
1335
1351
|
# spot
|
@@ -1359,7 +1375,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1359
1375
|
|
1360
1376
|
def parse_balance_custom(self, response, type=None, marginMode=None):
|
1361
1377
|
timestamp = self.safe_integer(response, 'updateTime')
|
1362
|
-
result = {
|
1378
|
+
result: dict = {
|
1363
1379
|
'info': response,
|
1364
1380
|
'timestamp': timestamp,
|
1365
1381
|
'datetime': self.iso8601(timestamp),
|
@@ -1376,8 +1392,8 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1376
1392
|
result[code] = account
|
1377
1393
|
return self.safe_balance(result)
|
1378
1394
|
|
1379
|
-
def parse_order_status(self, status):
|
1380
|
-
statuses = {
|
1395
|
+
def parse_order_status(self, status: Str):
|
1396
|
+
statuses: dict = {
|
1381
1397
|
'-2': 'open',
|
1382
1398
|
'0': 'open', # NEW
|
1383
1399
|
'1': 'open', # PARTIALLY_FILLED
|
@@ -1396,7 +1412,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1396
1412
|
}
|
1397
1413
|
return self.safe_string(statuses, status, status)
|
1398
1414
|
|
1399
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
1415
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1400
1416
|
#
|
1401
1417
|
# spot
|
1402
1418
|
#
|
@@ -1520,8 +1536,6 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1520
1536
|
# GTX means "Good Till Crossing" and is an equivalent way of saying Post Only
|
1521
1537
|
timeInForce = 'PO'
|
1522
1538
|
postOnly = (type == 'limit_maker') or (timeInForce == 'PO')
|
1523
|
-
stopPriceString = self.safe_string(order, 'stopPrice')
|
1524
|
-
stopPrice = self.parse_number(self.omit_zero(stopPriceString))
|
1525
1539
|
return self.safe_order({
|
1526
1540
|
'info': order,
|
1527
1541
|
'id': id,
|
@@ -1536,8 +1550,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1536
1550
|
'reduceOnly': self.safe_value(order, 'reduceOnly'),
|
1537
1551
|
'side': side,
|
1538
1552
|
'price': price,
|
1539
|
-
'
|
1540
|
-
'triggerPrice': stopPrice,
|
1553
|
+
'triggerPrice': self.parse_number(self.omit_zero(self.safe_string(order, 'stopPrice'))),
|
1541
1554
|
'amount': amount,
|
1542
1555
|
'cost': cost,
|
1543
1556
|
'average': average,
|
@@ -1549,7 +1562,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1549
1562
|
}, market)
|
1550
1563
|
|
1551
1564
|
def parse_order_type(self, status):
|
1552
|
-
statuses = {
|
1565
|
+
statuses: dict = {
|
1553
1566
|
'2': 'market',
|
1554
1567
|
'1': 'limit',
|
1555
1568
|
'4': 'limit',
|
@@ -1560,13 +1573,15 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1560
1573
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1561
1574
|
"""
|
1562
1575
|
create a trade order
|
1563
|
-
|
1564
|
-
|
1576
|
+
|
1577
|
+
https://www.tokocrypto.com/apidocs/#new-order--signed
|
1578
|
+
https://www.tokocrypto.com/apidocs/#account-trade-list-signed
|
1579
|
+
|
1565
1580
|
:param str symbol: unified symbol of the market to create an order in
|
1566
1581
|
:param str type: 'market' or 'limit'
|
1567
1582
|
:param str side: 'buy' or 'sell'
|
1568
1583
|
:param float amount: how much of currency you want to trade in units of base currency
|
1569
|
-
:param float [price]: the price at which the order is to be
|
1584
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1570
1585
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1571
1586
|
:param float [params.triggerPrice]: the price at which a trigger order would be triggered
|
1572
1587
|
:param float [params.cost]: for spot market buy orders, the quote quantity that can be used alternative for the amount
|
@@ -1582,8 +1597,8 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1582
1597
|
params = self.omit(params, ['clientId', 'clientOrderId'])
|
1583
1598
|
initialUppercaseType = type.upper()
|
1584
1599
|
uppercaseType = initialUppercaseType
|
1585
|
-
|
1586
|
-
if
|
1600
|
+
triggerPrice = self.safe_value_2(params, 'triggerPrice', 'stopPrice')
|
1601
|
+
if triggerPrice is not None:
|
1587
1602
|
params = self.omit(params, ['triggerPrice', 'stopPrice'])
|
1588
1603
|
if uppercaseType == 'MARKET':
|
1589
1604
|
uppercaseType = 'STOP_LOSS'
|
@@ -1592,10 +1607,10 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1592
1607
|
validOrderTypes = self.safe_value(market['info'], 'orderTypes')
|
1593
1608
|
if not self.in_array(uppercaseType, validOrderTypes):
|
1594
1609
|
if initialUppercaseType != uppercaseType:
|
1595
|
-
raise InvalidOrder(self.id + '
|
1610
|
+
raise InvalidOrder(self.id + ' triggerPrice parameter is not allowed for ' + symbol + ' ' + type + ' orders')
|
1596
1611
|
else:
|
1597
1612
|
raise InvalidOrder(self.id + ' ' + type + ' is not a valid order type for the ' + symbol + ' market')
|
1598
|
-
reverseOrderTypeMapping = {
|
1613
|
+
reverseOrderTypeMapping: dict = {
|
1599
1614
|
'LIMIT': 1,
|
1600
1615
|
'MARKET': 2,
|
1601
1616
|
'STOP_LOSS': 3,
|
@@ -1604,7 +1619,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1604
1619
|
'TAKE_PROFIT_LIMIT': 6,
|
1605
1620
|
'LIMIT_MAKER': 7,
|
1606
1621
|
}
|
1607
|
-
request = {
|
1622
|
+
request: dict = {
|
1608
1623
|
'symbol': market['baseId'] + '_' + market['quoteId'],
|
1609
1624
|
'type': self.safe_string(reverseOrderTypeMapping, uppercaseType),
|
1610
1625
|
}
|
@@ -1622,7 +1637,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1622
1637
|
request['clientId'] = clientOrderId
|
1623
1638
|
# additional required fields depending on the order type
|
1624
1639
|
priceIsRequired = False
|
1625
|
-
|
1640
|
+
triggerPriceIsRequired = False
|
1626
1641
|
quantityIsRequired = False
|
1627
1642
|
#
|
1628
1643
|
# spot/margin
|
@@ -1661,13 +1676,13 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1661
1676
|
priceIsRequired = True
|
1662
1677
|
quantityIsRequired = True
|
1663
1678
|
elif (uppercaseType == 'STOP_LOSS') or (uppercaseType == 'TAKE_PROFIT'):
|
1664
|
-
|
1679
|
+
triggerPriceIsRequired = True
|
1665
1680
|
quantityIsRequired = True
|
1666
1681
|
if market['linear'] or market['inverse']:
|
1667
1682
|
priceIsRequired = True
|
1668
1683
|
elif (uppercaseType == 'STOP_LOSS_LIMIT') or (uppercaseType == 'TAKE_PROFIT_LIMIT'):
|
1669
1684
|
quantityIsRequired = True
|
1670
|
-
|
1685
|
+
triggerPriceIsRequired = True
|
1671
1686
|
priceIsRequired = True
|
1672
1687
|
elif uppercaseType == 'LIMIT_MAKER':
|
1673
1688
|
priceIsRequired = True
|
@@ -1678,11 +1693,11 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1678
1693
|
if price is None:
|
1679
1694
|
raise InvalidOrder(self.id + ' createOrder() requires a price argument for a ' + type + ' order')
|
1680
1695
|
request['price'] = self.price_to_precision(symbol, price)
|
1681
|
-
if
|
1682
|
-
if
|
1683
|
-
raise InvalidOrder(self.id + ' createOrder() requires a
|
1696
|
+
if triggerPriceIsRequired:
|
1697
|
+
if triggerPrice is None:
|
1698
|
+
raise InvalidOrder(self.id + ' createOrder() requires a triggerPrice extra param for a ' + type + ' order')
|
1684
1699
|
else:
|
1685
|
-
request['stopPrice'] = self.price_to_precision(symbol,
|
1700
|
+
request['stopPrice'] = self.price_to_precision(symbol, triggerPrice)
|
1686
1701
|
response = await self.privatePostOpenV1Orders(self.extend(request, params))
|
1687
1702
|
#
|
1688
1703
|
# {
|
@@ -1712,18 +1727,21 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1712
1727
|
# "timestamp": 1662710994975
|
1713
1728
|
# }
|
1714
1729
|
#
|
1715
|
-
rawOrder = self.
|
1730
|
+
rawOrder = self.safe_dict(response, 'data', {})
|
1716
1731
|
return self.parse_order(rawOrder, market)
|
1717
1732
|
|
1718
1733
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
1719
1734
|
"""
|
1720
|
-
|
1735
|
+
|
1736
|
+
https://www.tokocrypto.com/apidocs/#all-orders-signed
|
1737
|
+
|
1721
1738
|
fetches information on an order made by the user
|
1739
|
+
:param str id: order id
|
1722
1740
|
:param str symbol: unified symbol of the market the order was made in
|
1723
1741
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1724
1742
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1725
1743
|
"""
|
1726
|
-
request = {
|
1744
|
+
request: dict = {
|
1727
1745
|
'orderId': id,
|
1728
1746
|
}
|
1729
1747
|
response = await self.privateGetOpenV1Orders(self.extend(request, params))
|
@@ -1759,12 +1777,14 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1759
1777
|
#
|
1760
1778
|
data = self.safe_value(response, 'data', {})
|
1761
1779
|
list = self.safe_value(data, 'list', [])
|
1762
|
-
rawOrder = self.
|
1780
|
+
rawOrder = self.safe_dict(list, 0, {})
|
1763
1781
|
return self.parse_order(rawOrder)
|
1764
1782
|
|
1765
1783
|
async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1766
1784
|
"""
|
1767
|
-
|
1785
|
+
|
1786
|
+
https://www.tokocrypto.com/apidocs/#all-orders-signed
|
1787
|
+
|
1768
1788
|
fetches information on multiple orders made by the user
|
1769
1789
|
:param str symbol: unified market symbol of the market orders were made in
|
1770
1790
|
:param int [since]: the earliest time in ms to fetch orders for
|
@@ -1776,7 +1796,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1776
1796
|
raise ArgumentsRequired(self.id + ' fetchOrders() requires a symbol argument')
|
1777
1797
|
await self.load_markets()
|
1778
1798
|
market = self.market(symbol)
|
1779
|
-
request = {
|
1799
|
+
request: dict = {
|
1780
1800
|
'symbol': market['id'],
|
1781
1801
|
# 'type': -1, # -1 = all, 1 = open, 2 = closed
|
1782
1802
|
# 'side': 1, # or 2
|
@@ -1825,12 +1845,14 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1825
1845
|
# }
|
1826
1846
|
#
|
1827
1847
|
data = self.safe_value(response, 'data', {})
|
1828
|
-
orders = self.
|
1848
|
+
orders = self.safe_list(data, 'list', [])
|
1829
1849
|
return self.parse_orders(orders, market, since, limit)
|
1830
1850
|
|
1831
1851
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1832
1852
|
"""
|
1833
|
-
|
1853
|
+
|
1854
|
+
https://www.tokocrypto.com/apidocs/#all-orders-signed
|
1855
|
+
|
1834
1856
|
fetch all unfilled currently open orders
|
1835
1857
|
:param str symbol: unified market symbol
|
1836
1858
|
:param int [since]: the earliest time in ms to fetch open orders for
|
@@ -1838,12 +1860,14 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1838
1860
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1839
1861
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1840
1862
|
"""
|
1841
|
-
request = {'type': 1} # -1 = all, 1 = open, 2 = closed
|
1863
|
+
request: dict = {'type': 1} # -1 = all, 1 = open, 2 = closed
|
1842
1864
|
return await self.fetch_orders(symbol, since, limit, self.extend(request, params))
|
1843
1865
|
|
1844
1866
|
async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1845
1867
|
"""
|
1846
|
-
|
1868
|
+
|
1869
|
+
https://www.tokocrypto.com/apidocs/#all-orders-signed
|
1870
|
+
|
1847
1871
|
fetches information on multiple closed orders made by the user
|
1848
1872
|
:param str symbol: unified market symbol of the market orders were made in
|
1849
1873
|
:param int [since]: the earliest time in ms to fetch orders for
|
@@ -1851,19 +1875,21 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1851
1875
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1852
1876
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1853
1877
|
"""
|
1854
|
-
request = {'type': 2} # -1 = all, 1 = open, 2 = closed
|
1878
|
+
request: dict = {'type': 2} # -1 = all, 1 = open, 2 = closed
|
1855
1879
|
return await self.fetch_orders(symbol, since, limit, self.extend(request, params))
|
1856
1880
|
|
1857
1881
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
1858
1882
|
"""
|
1859
|
-
|
1883
|
+
|
1884
|
+
https://www.tokocrypto.com/apidocs/#cancel-order-signed
|
1885
|
+
|
1860
1886
|
cancels an open order
|
1861
1887
|
:param str id: order id
|
1862
1888
|
:param str symbol: unified symbol of the market the order was made in
|
1863
1889
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1864
1890
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1865
1891
|
"""
|
1866
|
-
request = {
|
1892
|
+
request: dict = {
|
1867
1893
|
'orderId': id,
|
1868
1894
|
}
|
1869
1895
|
response = await self.privatePostOpenV1OrdersCancel(self.extend(request, params))
|
@@ -1894,12 +1920,14 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1894
1920
|
# "timestamp": 1662710683634
|
1895
1921
|
# }
|
1896
1922
|
#
|
1897
|
-
rawOrder = self.
|
1923
|
+
rawOrder = self.safe_dict(response, 'data', {})
|
1898
1924
|
return self.parse_order(rawOrder)
|
1899
1925
|
|
1900
1926
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
1901
1927
|
"""
|
1902
|
-
|
1928
|
+
|
1929
|
+
https://www.tokocrypto.com/apidocs/#account-trade-list-signed
|
1930
|
+
|
1903
1931
|
fetch all trades made by the user
|
1904
1932
|
:param str symbol: unified market symbol
|
1905
1933
|
:param int [since]: the earliest time in ms to fetch trades for
|
@@ -1911,7 +1939,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1911
1939
|
raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol argument')
|
1912
1940
|
await self.load_markets()
|
1913
1941
|
market = self.market(symbol)
|
1914
|
-
request = {
|
1942
|
+
request: dict = {
|
1915
1943
|
'symbol': market['id'],
|
1916
1944
|
}
|
1917
1945
|
endTime = self.safe_integer_2(params, 'until', 'endTime')
|
@@ -1949,20 +1977,22 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1949
1977
|
# }
|
1950
1978
|
#
|
1951
1979
|
data = self.safe_value(response, 'data', {})
|
1952
|
-
trades = self.
|
1980
|
+
trades = self.safe_list(data, 'list', [])
|
1953
1981
|
return self.parse_trades(trades, market, since, limit)
|
1954
1982
|
|
1955
|
-
async def fetch_deposit_address(self, code: str, params={}):
|
1983
|
+
async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
|
1956
1984
|
"""
|
1957
|
-
:see: https://www.tokocrypto.com/apidocs/#deposit-address-signed
|
1958
1985
|
fetch the deposit address for a currency associated with self account
|
1986
|
+
|
1987
|
+
https://www.tokocrypto.com/apidocs/#deposit-address-signed
|
1988
|
+
|
1959
1989
|
:param str code: unified currency code
|
1960
1990
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1961
1991
|
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
|
1962
1992
|
"""
|
1963
1993
|
await self.load_markets()
|
1964
1994
|
currency = self.currency(code)
|
1965
|
-
request = {
|
1995
|
+
request: dict = {
|
1966
1996
|
'asset': currency['id'],
|
1967
1997
|
# 'network': 'ETH', # 'BSC', 'XMR', you can get network and isDefault in networkList in the response of sapiGetCapitalConfigDetail
|
1968
1998
|
}
|
@@ -1997,16 +2027,18 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
1997
2027
|
tag = None
|
1998
2028
|
self.check_address(address)
|
1999
2029
|
return {
|
2030
|
+
'info': response,
|
2000
2031
|
'currency': code,
|
2032
|
+
'network': self.safe_string(data, 'network'),
|
2001
2033
|
'address': address,
|
2002
2034
|
'tag': tag,
|
2003
|
-
'network': self.safe_string(data, 'network'),
|
2004
|
-
'info': response,
|
2005
2035
|
}
|
2006
2036
|
|
2007
2037
|
async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
2008
2038
|
"""
|
2009
|
-
|
2039
|
+
|
2040
|
+
https://www.tokocrypto.com/apidocs/#deposit-history-signed
|
2041
|
+
|
2010
2042
|
fetch all deposits made to an account
|
2011
2043
|
:param str code: unified currency code
|
2012
2044
|
:param int [since]: the earliest time in ms to fetch deposits for
|
@@ -2017,7 +2049,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
2017
2049
|
"""
|
2018
2050
|
await self.load_markets()
|
2019
2051
|
currency = None
|
2020
|
-
request = {}
|
2052
|
+
request: dict = {}
|
2021
2053
|
until = self.safe_integer(params, 'until')
|
2022
2054
|
if code is not None:
|
2023
2055
|
currency = self.currency(code)
|
@@ -2056,12 +2088,14 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
2056
2088
|
# }
|
2057
2089
|
#
|
2058
2090
|
data = self.safe_value(response, 'data', {})
|
2059
|
-
deposits = self.
|
2091
|
+
deposits = self.safe_list(data, 'list', [])
|
2060
2092
|
return self.parse_transactions(deposits, currency, since, limit)
|
2061
2093
|
|
2062
2094
|
async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
2063
2095
|
"""
|
2064
|
-
|
2096
|
+
|
2097
|
+
https://www.tokocrypto.com/apidocs/#withdraw-signed
|
2098
|
+
|
2065
2099
|
fetch all withdrawals made from an account
|
2066
2100
|
:param str code: unified currency code
|
2067
2101
|
:param int [since]: the earliest time in ms to fetch withdrawals for
|
@@ -2070,7 +2104,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
2070
2104
|
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
|
2071
2105
|
"""
|
2072
2106
|
await self.load_markets()
|
2073
|
-
request = {}
|
2107
|
+
request: dict = {}
|
2074
2108
|
currency = None
|
2075
2109
|
if code is not None:
|
2076
2110
|
currency = self.currency(code)
|
@@ -2108,11 +2142,11 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
2108
2142
|
# }
|
2109
2143
|
#
|
2110
2144
|
data = self.safe_value(response, 'data', {})
|
2111
|
-
withdrawals = self.
|
2145
|
+
withdrawals = self.safe_list(data, 'list', [])
|
2112
2146
|
return self.parse_transactions(withdrawals, currency, since, limit)
|
2113
2147
|
|
2114
2148
|
def parse_transaction_status_by_type(self, status, type=None):
|
2115
|
-
statusesByType = {
|
2149
|
+
statusesByType: dict = {
|
2116
2150
|
'deposit': {
|
2117
2151
|
'0': 'pending',
|
2118
2152
|
'1': 'ok',
|
@@ -2130,7 +2164,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
2130
2164
|
statuses = self.safe_value(statusesByType, type, {})
|
2131
2165
|
return self.safe_string(statuses, status, status)
|
2132
2166
|
|
2133
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
2167
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
2134
2168
|
#
|
2135
2169
|
# fetchDeposits
|
2136
2170
|
#
|
@@ -2237,9 +2271,11 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
2237
2271
|
'fee': fee,
|
2238
2272
|
}
|
2239
2273
|
|
2240
|
-
async def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
2274
|
+
async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
2241
2275
|
"""
|
2242
|
-
|
2276
|
+
|
2277
|
+
https://www.tokocrypto.com/apidocs/#withdraw-signed
|
2278
|
+
|
2243
2279
|
make a withdrawal
|
2244
2280
|
:param str code: unified currency code
|
2245
2281
|
:param float amount: the amount to withdraw
|
@@ -2252,7 +2288,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
2252
2288
|
await self.load_markets()
|
2253
2289
|
self.check_address(address)
|
2254
2290
|
currency = self.currency(code)
|
2255
|
-
request = {
|
2291
|
+
request: dict = {
|
2256
2292
|
'asset': currency['id'],
|
2257
2293
|
# 'clientId': 'string', # # client's custom id for withdraw order, server does not check it's uniqueness, automatically generated if not sent
|
2258
2294
|
# 'network': 'string',
|
@@ -2331,7 +2367,7 @@ class tokocrypto(Exchange, ImplicitAPI):
|
|
2331
2367
|
url += '?' + self.urlencode(params)
|
2332
2368
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
2333
2369
|
|
2334
|
-
def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
2370
|
+
def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
2335
2371
|
if (code == 418) or (code == 429):
|
2336
2372
|
raise DDoSProtection(self.id + ' ' + str(code) + ' ' + reason + ' ' + body)
|
2337
2373
|
# error response in a form: {"code": -1013, "msg": "Invalid quantity."}
|