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/digifinex.py
CHANGED
@@ -7,15 +7,15 @@ from ccxt.base.exchange import Exchange
|
|
7
7
|
from ccxt.abstract.digifinex import ImplicitAPI
|
8
8
|
import hashlib
|
9
9
|
import json
|
10
|
-
from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
|
10
|
+
from ccxt.base.types import Balances, BorrowInterest, CrossBorrowRate, CrossBorrowRates, Currencies, Currency, DepositAddress, Int, LedgerEntry, LeverageTier, LeverageTiers, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, FundingRate, Trade, TradingFeeInterface, Transaction, TransferEntry
|
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
|
-
from ccxt.base.errors import BadResponse
|
19
19
|
from ccxt.base.errors import InsufficientFunds
|
20
20
|
from ccxt.base.errors import InvalidAddress
|
21
21
|
from ccxt.base.errors import InvalidOrder
|
@@ -25,7 +25,7 @@ from ccxt.base.errors import NetworkError
|
|
25
25
|
from ccxt.base.errors import DDoSProtection
|
26
26
|
from ccxt.base.errors import RateLimitExceeded
|
27
27
|
from ccxt.base.errors import InvalidNonce
|
28
|
-
from ccxt.base.errors import
|
28
|
+
from ccxt.base.errors import BadResponse
|
29
29
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
30
30
|
from ccxt.base.precise import Precise
|
31
31
|
|
@@ -67,10 +67,14 @@ class digifinex(Exchange, ImplicitAPI):
|
|
67
67
|
'fetchCrossBorrowRates': True,
|
68
68
|
'fetchCurrencies': True,
|
69
69
|
'fetchDepositAddress': True,
|
70
|
+
'fetchDepositAddresses': False,
|
71
|
+
'fetchDepositAddressesByNetwork': False,
|
70
72
|
'fetchDeposits': True,
|
71
73
|
'fetchDepositWithdrawFee': 'emulated',
|
72
74
|
'fetchDepositWithdrawFees': True,
|
73
75
|
'fetchFundingHistory': True,
|
76
|
+
'fetchFundingInterval': True,
|
77
|
+
'fetchFundingIntervals': False,
|
74
78
|
'fetchFundingRate': True,
|
75
79
|
'fetchFundingRateHistory': True,
|
76
80
|
'fetchFundingRates': False,
|
@@ -226,6 +230,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
226
230
|
'trade/order_info',
|
227
231
|
],
|
228
232
|
'post': [
|
233
|
+
'account/transfer',
|
229
234
|
'account/leverage',
|
230
235
|
'account/position_mode',
|
231
236
|
'account/position_margin',
|
@@ -248,6 +253,109 @@ class digifinex(Exchange, ImplicitAPI):
|
|
248
253
|
},
|
249
254
|
},
|
250
255
|
},
|
256
|
+
'features': {
|
257
|
+
'default': {
|
258
|
+
'sandbox': False,
|
259
|
+
'createOrder': {
|
260
|
+
'marginMode': True,
|
261
|
+
'triggerPrice': False,
|
262
|
+
'triggerPriceType': None,
|
263
|
+
'triggerDirection': False,
|
264
|
+
'stopLossPrice': False,
|
265
|
+
'takeProfitPrice': False,
|
266
|
+
'attachedStopLossTakeProfit': None,
|
267
|
+
'timeInForce': {
|
268
|
+
'IOC': False,
|
269
|
+
'FOK': False,
|
270
|
+
'PO': True,
|
271
|
+
'GTD': False,
|
272
|
+
},
|
273
|
+
'hedged': False,
|
274
|
+
'selfTradePrevention': False,
|
275
|
+
'trailing': False,
|
276
|
+
'leverage': False,
|
277
|
+
'marketBuyByCost': False,
|
278
|
+
'marketBuyRequiresPrice': False,
|
279
|
+
'iceberg': False,
|
280
|
+
},
|
281
|
+
'createOrders': {
|
282
|
+
'max': 10,
|
283
|
+
'marginMode': True,
|
284
|
+
},
|
285
|
+
'fetchMyTrades': {
|
286
|
+
'marginMode': True,
|
287
|
+
'limit': 500,
|
288
|
+
'daysBack': 100000, # todo
|
289
|
+
'untilDays': 30,
|
290
|
+
},
|
291
|
+
'fetchOrder': {
|
292
|
+
'marginMode': True,
|
293
|
+
'trigger': False,
|
294
|
+
'trailing': False,
|
295
|
+
'marketType': True,
|
296
|
+
},
|
297
|
+
'fetchOpenOrders': {
|
298
|
+
'marginMode': True,
|
299
|
+
'limit': None,
|
300
|
+
'trigger': False,
|
301
|
+
'trailing': False,
|
302
|
+
},
|
303
|
+
'fetchOrders': {
|
304
|
+
'marginMode': True,
|
305
|
+
'limit': 100,
|
306
|
+
'daysBack': 100000, # todo
|
307
|
+
'untilDays': 30,
|
308
|
+
'trigger': False,
|
309
|
+
'trailing': False,
|
310
|
+
},
|
311
|
+
'fetchClosedOrders': None,
|
312
|
+
'fetchOHLCV': {
|
313
|
+
'limit': 500,
|
314
|
+
},
|
315
|
+
},
|
316
|
+
'spot': {
|
317
|
+
'extends': 'default',
|
318
|
+
},
|
319
|
+
'forDerivatives': {
|
320
|
+
'extends': 'default',
|
321
|
+
'createOrders': {
|
322
|
+
'max': 20,
|
323
|
+
'marginMode': False,
|
324
|
+
},
|
325
|
+
'fetchMyTrades': {
|
326
|
+
'marginMode': False,
|
327
|
+
'limit': 100,
|
328
|
+
'daysBack': 100000, # todo
|
329
|
+
'untilDays': 100000, # todo
|
330
|
+
},
|
331
|
+
'fetchOrder': {
|
332
|
+
'marginMode': False,
|
333
|
+
},
|
334
|
+
'fetchOpenOrders': {
|
335
|
+
'marginMode': False,
|
336
|
+
'limit': 100,
|
337
|
+
},
|
338
|
+
'fetchOrders': {
|
339
|
+
'marginMode': False,
|
340
|
+
'daysBack': 100000, # todo
|
341
|
+
},
|
342
|
+
'fetchOHLCV': {
|
343
|
+
'limit': 100,
|
344
|
+
},
|
345
|
+
},
|
346
|
+
'swap': {
|
347
|
+
'linear': {
|
348
|
+
'extends': 'forDerivatives',
|
349
|
+
},
|
350
|
+
'inverse': {
|
351
|
+
'extends': 'forDerivatives',
|
352
|
+
},
|
353
|
+
},
|
354
|
+
'future': {
|
355
|
+
'linear': None,
|
356
|
+
'inverse': None,
|
357
|
+
},
|
358
|
+
},
|
251
359
|
'fees': {
|
252
360
|
'trading': {
|
253
361
|
'tierBased': True,
|
@@ -365,7 +473,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
365
473
|
},
|
366
474
|
})
|
367
475
|
|
368
|
-
def fetch_currencies(self, params={}):
|
476
|
+
def fetch_currencies(self, params={}) -> Currencies:
|
369
477
|
"""
|
370
478
|
fetches all available currencies on an exchange
|
371
479
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -410,7 +518,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
410
518
|
# }
|
411
519
|
#
|
412
520
|
data = self.safe_value(response, 'data', [])
|
413
|
-
result = {}
|
521
|
+
result: dict = {}
|
414
522
|
for i in range(0, len(data)):
|
415
523
|
currency = data[i]
|
416
524
|
id = self.safe_string(currency, 'currency')
|
@@ -433,7 +541,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
433
541
|
networkCode = None
|
434
542
|
if networkId is not None:
|
435
543
|
networkCode = self.network_id_to_code(networkId)
|
436
|
-
network = {
|
544
|
+
network: dict = {
|
437
545
|
'info': currency,
|
438
546
|
'id': networkId,
|
439
547
|
'network': networkCode,
|
@@ -522,7 +630,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
522
630
|
result[code]['precision'] = precision if (result[code]['precision'] is None) else max(result[code]['precision'], precision)
|
523
631
|
return result
|
524
632
|
|
525
|
-
def fetch_markets(self, params={}):
|
633
|
+
def fetch_markets(self, params={}) -> List[Market]:
|
526
634
|
"""
|
527
635
|
retrieves data on all markets for digifinex
|
528
636
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -788,7 +896,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
788
896
|
# "time_stamp": 1661487402396
|
789
897
|
# }
|
790
898
|
#
|
791
|
-
result = {'info': response}
|
899
|
+
result: dict = {'info': response}
|
792
900
|
for i in range(0, len(response)):
|
793
901
|
balance = response[i]
|
794
902
|
currencyId = self.safe_string(balance, 'currency')
|
@@ -805,9 +913,11 @@ class digifinex(Exchange, ImplicitAPI):
|
|
805
913
|
def fetch_balance(self, params={}) -> Balances:
|
806
914
|
"""
|
807
915
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
808
|
-
|
809
|
-
|
810
|
-
|
916
|
+
|
917
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#spot-account-assets
|
918
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#margin-assets
|
919
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#accountbalance
|
920
|
+
|
811
921
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
812
922
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
813
923
|
"""
|
@@ -868,8 +978,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
868
978
|
def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
869
979
|
"""
|
870
980
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
871
|
-
|
872
|
-
|
981
|
+
|
982
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#get-orderbook
|
983
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#orderbook
|
984
|
+
|
873
985
|
:param str symbol: unified symbol of the market to fetch the order book for
|
874
986
|
:param int [limit]: the maximum amount of order book entries to return
|
875
987
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -878,7 +990,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
878
990
|
self.load_markets()
|
879
991
|
market = self.market(symbol)
|
880
992
|
marketType, query = self.handle_market_type_and_params('fetchOrderBook', market, params)
|
881
|
-
request = {}
|
993
|
+
request: dict = {}
|
882
994
|
if limit is not None:
|
883
995
|
request['limit'] = limit
|
884
996
|
response = None
|
@@ -939,8 +1051,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
939
1051
|
def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
940
1052
|
"""
|
941
1053
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
942
|
-
|
943
|
-
|
1054
|
+
|
1055
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#ticker-price
|
1056
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#tickers
|
1057
|
+
|
944
1058
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
945
1059
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
946
1060
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -953,7 +1067,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
953
1067
|
market = self.market(first)
|
954
1068
|
type = None
|
955
1069
|
type, params = self.handle_market_type_and_params('fetchTickers', market, params)
|
956
|
-
request = {}
|
1070
|
+
request: dict = {}
|
957
1071
|
response = None
|
958
1072
|
if type == 'swap':
|
959
1073
|
response = self.publicSwapGetPublicTickers(self.extend(request, params))
|
@@ -1007,7 +1121,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1007
1121
|
# ]
|
1008
1122
|
# }
|
1009
1123
|
#
|
1010
|
-
result = {}
|
1124
|
+
result: dict = {}
|
1011
1125
|
tickers = self.safe_value_2(response, 'ticker', 'data', [])
|
1012
1126
|
date = self.safe_integer(response, 'date')
|
1013
1127
|
for i in range(0, len(tickers)):
|
@@ -1022,15 +1136,17 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1022
1136
|
def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
1023
1137
|
"""
|
1024
1138
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
1025
|
-
|
1026
|
-
|
1139
|
+
|
1140
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#ticker-price
|
1141
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#ticker
|
1142
|
+
|
1027
1143
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
1028
1144
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1029
1145
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
1030
1146
|
"""
|
1031
1147
|
self.load_markets()
|
1032
1148
|
market = self.market(symbol)
|
1033
|
-
request = {}
|
1149
|
+
request: dict = {}
|
1034
1150
|
response = None
|
1035
1151
|
if market['swap']:
|
1036
1152
|
request['instrument_id'] = market['id']
|
@@ -1094,7 +1210,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1094
1210
|
result = self.extend({'date': date}, firstTicker)
|
1095
1211
|
return self.parse_ticker(result, market)
|
1096
1212
|
|
1097
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
1213
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
1098
1214
|
#
|
1099
1215
|
# spot: fetchTicker, fetchTickers
|
1100
1216
|
#
|
@@ -1163,10 +1279,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1163
1279
|
'average': None,
|
1164
1280
|
'baseVolume': self.safe_string_2(ticker, 'vol', 'volume_24h'),
|
1165
1281
|
'quoteVolume': self.safe_string(ticker, 'base_vol'),
|
1282
|
+
'markPrice': self.safe_string(ticker, 'mark_price'),
|
1283
|
+
'indexPrice': indexPrice,
|
1166
1284
|
'info': ticker,
|
1167
1285
|
}, market)
|
1168
1286
|
|
1169
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
1287
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
1170
1288
|
#
|
1171
1289
|
# spot: fetchTrades
|
1172
1290
|
#
|
@@ -1335,8 +1453,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1335
1453
|
def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
1336
1454
|
"""
|
1337
1455
|
get the list of most recent trades for a particular symbol
|
1338
|
-
|
1339
|
-
|
1456
|
+
|
1457
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#get-recent-trades
|
1458
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#recenttrades
|
1459
|
+
|
1340
1460
|
:param str symbol: unified symbol of the market to fetch trades for
|
1341
1461
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
1342
1462
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -1345,7 +1465,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1345
1465
|
"""
|
1346
1466
|
self.load_markets()
|
1347
1467
|
market = self.market(symbol)
|
1348
|
-
request = {}
|
1468
|
+
request: dict = {}
|
1349
1469
|
if limit is not None:
|
1350
1470
|
request['limit'] = min(limit, 100) if market['swap'] else limit
|
1351
1471
|
response = None
|
@@ -1396,7 +1516,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1396
1516
|
# ]
|
1397
1517
|
# }
|
1398
1518
|
#
|
1399
|
-
data = self.
|
1519
|
+
data = self.safe_list(response, 'data', [])
|
1400
1520
|
return self.parse_trades(data, market, since, limit)
|
1401
1521
|
|
1402
1522
|
def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
|
@@ -1432,39 +1552,53 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1432
1552
|
def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
1433
1553
|
"""
|
1434
1554
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
1435
|
-
|
1436
|
-
|
1555
|
+
|
1556
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#get-candles-data
|
1557
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#recentcandle
|
1558
|
+
|
1437
1559
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
1438
1560
|
:param str timeframe: the length of time each candle represents
|
1439
1561
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
1440
1562
|
:param int [limit]: the maximum amount of candles to fetch
|
1441
1563
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1564
|
+
:param int [params.until]: timestamp in ms of the latest candle to fetch
|
1442
1565
|
:returns int[][]: A list of candles ordered, open, high, low, close, volume
|
1443
1566
|
"""
|
1444
1567
|
self.load_markets()
|
1445
1568
|
market = self.market(symbol)
|
1446
|
-
request = {}
|
1569
|
+
request: dict = {}
|
1447
1570
|
response = None
|
1448
1571
|
if market['swap']:
|
1449
1572
|
request['instrument_id'] = market['id']
|
1450
1573
|
request['granularity'] = timeframe
|
1451
1574
|
if limit is not None:
|
1452
|
-
request['limit'] = limit
|
1575
|
+
request['limit'] = min(limit, 100)
|
1453
1576
|
response = self.publicSwapGetPublicCandles(self.extend(request, params))
|
1454
1577
|
else:
|
1578
|
+
until = self.safe_integer(params, 'until')
|
1455
1579
|
request['symbol'] = market['id']
|
1456
1580
|
request['period'] = self.safe_string(self.timeframes, timeframe, timeframe)
|
1457
|
-
|
1458
|
-
|
1581
|
+
startTime = since
|
1582
|
+
duration = self.parse_timeframe(timeframe)
|
1583
|
+
if startTime is None:
|
1584
|
+
if (limit is not None) or (until is not None):
|
1585
|
+
endTime = until if (until is not None) else self.milliseconds()
|
1586
|
+
startLimit = limit if (limit is not None) else 200
|
1587
|
+
startTime = endTime - (startLimit * duration * 1000)
|
1588
|
+
if startTime is not None:
|
1589
|
+
startTime = self.parse_to_int(startTime / 1000)
|
1459
1590
|
request['start_time'] = startTime
|
1460
|
-
if limit is not None:
|
1461
|
-
|
1462
|
-
|
1463
|
-
|
1464
|
-
|
1465
|
-
|
1466
|
-
|
1467
|
-
|
1591
|
+
if (limit is not None) or (until is not None):
|
1592
|
+
if until is not None:
|
1593
|
+
endByUntil = self.parse_to_int(until / 1000)
|
1594
|
+
if limit is not None:
|
1595
|
+
endByLimit = self.sum(startTime, limit * duration)
|
1596
|
+
request['end_time'] = min(endByLimit, endByUntil)
|
1597
|
+
else:
|
1598
|
+
request['end_time'] = endByUntil
|
1599
|
+
else:
|
1600
|
+
request['end_time'] = self.sum(startTime, limit * duration)
|
1601
|
+
params = self.omit(params, 'until')
|
1468
1602
|
response = self.publicSpotGetKline(self.extend(request, params))
|
1469
1603
|
#
|
1470
1604
|
# spot
|
@@ -1504,13 +1638,15 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1504
1638
|
def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1505
1639
|
"""
|
1506
1640
|
create a trade order
|
1507
|
-
|
1508
|
-
|
1641
|
+
|
1642
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#create-new-order
|
1643
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#orderplace
|
1644
|
+
|
1509
1645
|
:param str symbol: unified symbol of the market to create an order in
|
1510
1646
|
:param str type: 'market' or 'limit'
|
1511
1647
|
:param str side: 'buy' or 'sell'
|
1512
1648
|
:param float amount: how much you want to trade in units of the base currency, spot market orders use the quote currency, swap requires the number of contracts
|
1513
|
-
:param float [price]: the price at which the order is to be
|
1649
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1514
1650
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1515
1651
|
:param str [params.timeInForce]: "GTC", "IOC", "FOK", or "PO"
|
1516
1652
|
:param bool [params.postOnly]: True or False
|
@@ -1558,8 +1694,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1558
1694
|
def create_orders(self, orders: List[OrderRequest], params={}):
|
1559
1695
|
"""
|
1560
1696
|
create a list of trade orders(all orders should be of the same symbol)
|
1561
|
-
|
1562
|
-
|
1697
|
+
|
1698
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#create-multiple-order
|
1699
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#batchorder
|
1700
|
+
|
1563
1701
|
:param Array orders: list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
|
1564
1702
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1565
1703
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -1592,7 +1730,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1592
1730
|
orderRequest = self.create_order_request(marketId, type, side, amount, price, orderParams)
|
1593
1731
|
ordersRequests.append(orderRequest)
|
1594
1732
|
market = self.market(symbol)
|
1595
|
-
request = {}
|
1733
|
+
request: dict = {}
|
1596
1734
|
response = None
|
1597
1735
|
if market['swap']:
|
1598
1736
|
response = self.privateSwapPostTradeBatchOrder(ordersRequests)
|
@@ -1630,7 +1768,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1630
1768
|
result = []
|
1631
1769
|
for i in range(0, len(orders)):
|
1632
1770
|
rawOrder = orders[i]
|
1633
|
-
individualOrder = {}
|
1771
|
+
individualOrder: dict = {}
|
1634
1772
|
individualOrder['order_id'] = data[i]
|
1635
1773
|
individualOrder['instrument_id'] = market['id']
|
1636
1774
|
individualOrder['amount'] = self.safe_number(rawOrder, 'amount')
|
@@ -1640,13 +1778,13 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1640
1778
|
|
1641
1779
|
def create_order_request(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1642
1780
|
"""
|
1643
|
-
|
1781
|
+
@ignore
|
1644
1782
|
helper function to build request
|
1645
1783
|
:param str symbol: unified symbol of the market to create an order in
|
1646
1784
|
:param str type: 'market' or 'limit'
|
1647
1785
|
:param str side: 'buy' or 'sell'
|
1648
1786
|
:param float amount: how much you want to trade in units of the base currency, spot market orders use the quote currency, swap requires the number of contracts
|
1649
|
-
:param float [price]: the price at which the order is to be
|
1787
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1650
1788
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1651
1789
|
:returns dict: request to be sent to the exchange
|
1652
1790
|
"""
|
@@ -1657,7 +1795,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1657
1795
|
marginMode, params = self.handle_margin_mode_and_params('createOrderRequest', params)
|
1658
1796
|
if marginMode is not None:
|
1659
1797
|
marketType = 'margin'
|
1660
|
-
request = {}
|
1798
|
+
request: dict = {}
|
1661
1799
|
swap = (marketType == 'swap')
|
1662
1800
|
isMarketOrder = (type == 'market')
|
1663
1801
|
isLimitOrder = (type == 'limit')
|
@@ -1732,7 +1870,9 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1732
1870
|
def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
|
1733
1871
|
"""
|
1734
1872
|
create a market buy order by providing the symbol and cost
|
1735
|
-
|
1873
|
+
|
1874
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#create-new-order
|
1875
|
+
|
1736
1876
|
:param str symbol: unified symbol of the market to create an order in
|
1737
1877
|
:param float cost: how much you want to trade in units of the quote currency
|
1738
1878
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1748,8 +1888,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1748
1888
|
def cancel_order(self, id: str, symbol: Str = None, params={}):
|
1749
1889
|
"""
|
1750
1890
|
cancels an open order
|
1751
|
-
|
1752
|
-
|
1891
|
+
|
1892
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#cancel-order
|
1893
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#cancelorder
|
1894
|
+
|
1753
1895
|
:param str id: order id
|
1754
1896
|
:param str symbol: not used by digifinex cancelOrder()
|
1755
1897
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1762,7 +1904,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1762
1904
|
id = str(id)
|
1763
1905
|
marketType = None
|
1764
1906
|
marketType, params = self.handle_market_type_and_params('cancelOrder', market, params)
|
1765
|
-
request = {
|
1907
|
+
request: dict = {
|
1766
1908
|
'order_id': id,
|
1767
1909
|
}
|
1768
1910
|
if marketType == 'swap':
|
@@ -1808,7 +1950,34 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1808
1950
|
numCanceledOrders = len(canceledOrders)
|
1809
1951
|
if numCanceledOrders != 1:
|
1810
1952
|
raise OrderNotFound(self.id + ' cancelOrder() ' + id + ' not found')
|
1811
|
-
|
1953
|
+
orders = self.parse_cancel_orders(response)
|
1954
|
+
return self.safe_dict(orders, 0)
|
1955
|
+
else:
|
1956
|
+
return self.safe_order({
|
1957
|
+
'info': response,
|
1958
|
+
'orderId': self.safe_string(response, 'data'),
|
1959
|
+
})
|
1960
|
+
|
1961
|
+
def parse_cancel_orders(self, response):
|
1962
|
+
success = self.safe_list(response, 'success')
|
1963
|
+
error = self.safe_list(response, 'error')
|
1964
|
+
result = []
|
1965
|
+
for i in range(0, len(success)):
|
1966
|
+
order = success[i]
|
1967
|
+
result.append(self.safe_order({
|
1968
|
+
'info': order,
|
1969
|
+
'id': order,
|
1970
|
+
'status': 'canceled',
|
1971
|
+
}))
|
1972
|
+
for i in range(0, len(error)):
|
1973
|
+
order = error[i]
|
1974
|
+
result.append(self.safe_order({
|
1975
|
+
'info': order,
|
1976
|
+
'id': self.safe_string_2(order, 'order-id', 'order_id'),
|
1977
|
+
'status': 'failed',
|
1978
|
+
'clientOrderId': self.safe_string(order, 'client-order-id'),
|
1979
|
+
}))
|
1980
|
+
return result
|
1812
1981
|
|
1813
1982
|
def cancel_orders(self, ids, symbol: Str = None, params={}):
|
1814
1983
|
"""
|
@@ -1822,7 +1991,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1822
1991
|
defaultType = self.safe_string(self.options, 'defaultType', 'spot')
|
1823
1992
|
orderType = self.safe_string(params, 'type', defaultType)
|
1824
1993
|
params = self.omit(params, 'type')
|
1825
|
-
request = {
|
1994
|
+
request: dict = {
|
1826
1995
|
'market': orderType,
|
1827
1996
|
'order_id': ','.join(ids),
|
1828
1997
|
}
|
@@ -1839,14 +2008,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1839
2008
|
# ]
|
1840
2009
|
# }
|
1841
2010
|
#
|
1842
|
-
|
1843
|
-
numCanceledOrders = len(canceledOrders)
|
1844
|
-
if numCanceledOrders < 1:
|
1845
|
-
raise OrderNotFound(self.id + ' cancelOrders() error')
|
1846
|
-
return response
|
2011
|
+
return self.parse_cancel_orders(response)
|
1847
2012
|
|
1848
|
-
def parse_order_status(self, status):
|
1849
|
-
statuses = {
|
2013
|
+
def parse_order_status(self, status: Str):
|
2014
|
+
statuses: dict = {
|
1850
2015
|
'0': 'open',
|
1851
2016
|
'1': 'open', # partially filled
|
1852
2017
|
'2': 'closed',
|
@@ -1855,7 +2020,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1855
2020
|
}
|
1856
2021
|
return self.safe_string(statuses, status, status)
|
1857
2022
|
|
1858
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
2023
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1859
2024
|
#
|
1860
2025
|
# spot: createOrder
|
1861
2026
|
#
|
@@ -1974,7 +2139,6 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1974
2139
|
'postOnly': None,
|
1975
2140
|
'side': side,
|
1976
2141
|
'price': self.safe_number(order, 'price'),
|
1977
|
-
'stopPrice': None,
|
1978
2142
|
'triggerPrice': None,
|
1979
2143
|
'amount': self.safe_number_2(order, 'amount', 'size'),
|
1980
2144
|
'filled': self.safe_number_2(order, 'executed_amount', 'filled_qty'),
|
@@ -1991,8 +2155,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1991
2155
|
def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1992
2156
|
"""
|
1993
2157
|
fetch all unfilled currently open orders
|
1994
|
-
|
1995
|
-
|
2158
|
+
|
2159
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#current-active-orders
|
2160
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#openorder
|
2161
|
+
|
1996
2162
|
:param str symbol: unified market symbol
|
1997
2163
|
:param int [since]: the earliest time in ms to fetch open orders for
|
1998
2164
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
@@ -2006,7 +2172,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2006
2172
|
marketType = None
|
2007
2173
|
marketType, params = self.handle_market_type_and_params('fetchOpenOrders', market, params)
|
2008
2174
|
marginMode, query = self.handle_margin_mode_and_params('fetchOpenOrders', params)
|
2009
|
-
request = {}
|
2175
|
+
request: dict = {}
|
2010
2176
|
swap = (marketType == 'swap')
|
2011
2177
|
if swap:
|
2012
2178
|
if since is not None:
|
@@ -2079,14 +2245,16 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2079
2245
|
# ]
|
2080
2246
|
# }
|
2081
2247
|
#
|
2082
|
-
data = self.
|
2248
|
+
data = self.safe_list(response, 'data', [])
|
2083
2249
|
return self.parse_orders(data, market, since, limit)
|
2084
2250
|
|
2085
2251
|
def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
2086
2252
|
"""
|
2087
2253
|
fetches information on multiple orders made by the user
|
2088
|
-
|
2089
|
-
|
2254
|
+
|
2255
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#get-all-orders-including-history-orders
|
2256
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#historyorder
|
2257
|
+
|
2090
2258
|
:param str symbol: unified market symbol of the market orders were made in
|
2091
2259
|
:param int [since]: the earliest time in ms to fetch orders for
|
2092
2260
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -2100,7 +2268,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2100
2268
|
marketType = None
|
2101
2269
|
marketType, params = self.handle_market_type_and_params('fetchOrders', market, params)
|
2102
2270
|
marginMode, query = self.handle_margin_mode_and_params('fetchOrders', params)
|
2103
|
-
request = {}
|
2271
|
+
request: dict = {}
|
2104
2272
|
if marketType == 'swap':
|
2105
2273
|
if since is not None:
|
2106
2274
|
request['start_timestamp'] = since
|
@@ -2174,14 +2342,16 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2174
2342
|
# ]
|
2175
2343
|
# }
|
2176
2344
|
#
|
2177
|
-
data = self.
|
2345
|
+
data = self.safe_list(response, 'data', [])
|
2178
2346
|
return self.parse_orders(data, market, since, limit)
|
2179
2347
|
|
2180
2348
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
2181
2349
|
"""
|
2182
2350
|
fetches information on an order made by the user
|
2183
|
-
|
2184
|
-
|
2351
|
+
|
2352
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#get-order-status
|
2353
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#orderinfo
|
2354
|
+
|
2185
2355
|
:param str id: order id
|
2186
2356
|
:param str symbol: unified symbol of the market the order was made in
|
2187
2357
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -2194,7 +2364,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2194
2364
|
marketType = None
|
2195
2365
|
marketType, params = self.handle_market_type_and_params('fetchOrder', market, params)
|
2196
2366
|
marginMode, query = self.handle_margin_mode_and_params('fetchOrder', params)
|
2197
|
-
request = {
|
2367
|
+
request: dict = {
|
2198
2368
|
'order_id': id,
|
2199
2369
|
}
|
2200
2370
|
if marketType == 'swap':
|
@@ -2269,8 +2439,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2269
2439
|
def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
2270
2440
|
"""
|
2271
2441
|
fetch all trades made by the user
|
2272
|
-
|
2273
|
-
|
2442
|
+
|
2443
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#customer-39-s-trades
|
2444
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#historytrade
|
2445
|
+
|
2274
2446
|
:param str symbol: unified market symbol
|
2275
2447
|
:param int [since]: the earliest time in ms to fetch trades for
|
2276
2448
|
:param int [limit]: the maximum number of trades structures to retrieve
|
@@ -2279,7 +2451,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2279
2451
|
"""
|
2280
2452
|
self.load_markets()
|
2281
2453
|
market = None
|
2282
|
-
request = {}
|
2454
|
+
request: dict = {}
|
2283
2455
|
if symbol is not None:
|
2284
2456
|
market = self.market(symbol)
|
2285
2457
|
marketType = None
|
@@ -2353,14 +2525,14 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2353
2525
|
# }
|
2354
2526
|
#
|
2355
2527
|
responseRequest = 'data' if (marketType == 'swap') else 'list'
|
2356
|
-
data = self.
|
2528
|
+
data = self.safe_list(response, responseRequest, [])
|
2357
2529
|
return self.parse_trades(data, market, since, limit)
|
2358
2530
|
|
2359
2531
|
def parse_ledger_entry_type(self, type):
|
2360
|
-
types = {}
|
2532
|
+
types: dict = {}
|
2361
2533
|
return self.safe_string(types, type, type)
|
2362
2534
|
|
2363
|
-
def parse_ledger_entry(self, item, currency: Currency = None):
|
2535
|
+
def parse_ledger_entry(self, item: dict, currency: Currency = None) -> LedgerEntry:
|
2364
2536
|
#
|
2365
2537
|
# spot and margin
|
2366
2538
|
#
|
@@ -2382,13 +2554,15 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2382
2554
|
# }
|
2383
2555
|
#
|
2384
2556
|
type = self.parse_ledger_entry_type(self.safe_string_2(item, 'type', 'finance_type'))
|
2385
|
-
|
2557
|
+
currencyId = self.safe_string_2(item, 'currency_mark', 'currency')
|
2558
|
+
code = self.safe_currency_code(currencyId, currency)
|
2559
|
+
currency = self.safe_currency(currencyId, currency)
|
2386
2560
|
amount = self.safe_number_2(item, 'num', 'change')
|
2387
2561
|
after = self.safe_number(item, 'balance')
|
2388
2562
|
timestamp = self.safe_timestamp(item, 'time')
|
2389
2563
|
if timestamp is None:
|
2390
2564
|
timestamp = self.safe_integer(item, 'timestamp')
|
2391
|
-
return {
|
2565
|
+
return self.safe_ledger_entry({
|
2392
2566
|
'info': item,
|
2393
2567
|
'id': None,
|
2394
2568
|
'direction': None,
|
@@ -2404,21 +2578,23 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2404
2578
|
'timestamp': timestamp,
|
2405
2579
|
'datetime': self.iso8601(timestamp),
|
2406
2580
|
'fee': None,
|
2407
|
-
}
|
2581
|
+
}, currency)
|
2408
2582
|
|
2409
|
-
def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
2583
|
+
def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
|
2410
2584
|
"""
|
2411
|
-
fetch the history of changes, actions done by the user or operations that altered balance of the user
|
2412
|
-
|
2413
|
-
|
2414
|
-
|
2585
|
+
fetch the history of changes, actions done by the user or operations that altered the balance of the user
|
2586
|
+
|
2587
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#spot-margin-otc-financial-logs
|
2588
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#bills
|
2589
|
+
|
2590
|
+
:param str [code]: unified currency code, default is None
|
2415
2591
|
:param int [since]: timestamp in ms of the earliest ledger entry, default is None
|
2416
|
-
:param int [limit]: max number of ledger
|
2592
|
+
:param int [limit]: max number of ledger entries to return, default is None
|
2417
2593
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2418
|
-
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger
|
2594
|
+
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
|
2419
2595
|
"""
|
2420
2596
|
self.load_markets()
|
2421
|
-
request = {}
|
2597
|
+
request: dict = {}
|
2422
2598
|
marketType = None
|
2423
2599
|
marketType, params = self.handle_market_type_and_params('fetchLedger', None, params)
|
2424
2600
|
marginMode, query = self.handle_margin_mode_and_params('fetchLedger', params)
|
@@ -2487,7 +2663,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2487
2663
|
ledger = self.safe_value(data, 'finance', [])
|
2488
2664
|
return self.parse_ledger(ledger, currency, since, limit)
|
2489
2665
|
|
2490
|
-
def parse_deposit_address(self, depositAddress, currency: Currency = None):
|
2666
|
+
def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
|
2491
2667
|
#
|
2492
2668
|
# {
|
2493
2669
|
# "addressTag":"",
|
@@ -2503,12 +2679,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2503
2679
|
return {
|
2504
2680
|
'info': depositAddress,
|
2505
2681
|
'currency': code,
|
2682
|
+
'network': None,
|
2506
2683
|
'address': address,
|
2507
2684
|
'tag': tag,
|
2508
|
-
'network': None,
|
2509
2685
|
}
|
2510
2686
|
|
2511
|
-
def fetch_deposit_address(self, code: str, params={}):
|
2687
|
+
def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
|
2512
2688
|
"""
|
2513
2689
|
fetch the deposit address for a currency associated with self account
|
2514
2690
|
:param str code: unified currency code
|
@@ -2517,7 +2693,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2517
2693
|
"""
|
2518
2694
|
self.load_markets()
|
2519
2695
|
currency = self.currency(code)
|
2520
|
-
request = {
|
2696
|
+
request: dict = {
|
2521
2697
|
'currency': currency['id'],
|
2522
2698
|
}
|
2523
2699
|
response = self.privateSpotGetDepositAddress(self.extend(request, params))
|
@@ -2544,7 +2720,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2544
2720
|
def fetch_transactions_by_type(self, type, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
2545
2721
|
self.load_markets()
|
2546
2722
|
currency = None
|
2547
|
-
request = {
|
2723
|
+
request: dict = {
|
2548
2724
|
# 'currency': currency['id'],
|
2549
2725
|
# 'from': 'fromId', # When direct is' prev ', from is 1, returning from old to new ascending, when direct is' next ', from is the ID of the most recent record, returned from the old descending order
|
2550
2726
|
# 'size': 100, # default 100, max 500
|
@@ -2580,7 +2756,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2580
2756
|
# ]
|
2581
2757
|
# }
|
2582
2758
|
#
|
2583
|
-
data = self.
|
2759
|
+
data = self.safe_list(response, 'data', [])
|
2584
2760
|
return self.parse_transactions(data, currency, since, limit, {'type': type})
|
2585
2761
|
|
2586
2762
|
def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
@@ -2605,10 +2781,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2605
2781
|
"""
|
2606
2782
|
return self.fetch_transactions_by_type('withdrawal', code, since, limit, params)
|
2607
2783
|
|
2608
|
-
def parse_transaction_status(self, status):
|
2784
|
+
def parse_transaction_status(self, status: Str):
|
2609
2785
|
# deposit state includes: 1(in deposit), 2(to be confirmed), 3(successfully deposited), 4(stopped)
|
2610
2786
|
# withdrawal state includes: 1(application in progress), 2(to be confirmed), 3(completed), 4(rejected)
|
2611
|
-
statuses = {
|
2787
|
+
statuses: dict = {
|
2612
2788
|
'1': 'pending', # in Progress
|
2613
2789
|
'2': 'pending', # to be confirmed
|
2614
2790
|
'3': 'ok', # Completed
|
@@ -2616,7 +2792,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2616
2792
|
}
|
2617
2793
|
return self.safe_string(statuses, status, status)
|
2618
2794
|
|
2619
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
2795
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
2620
2796
|
#
|
2621
2797
|
# withdraw
|
2622
2798
|
#
|
@@ -2679,20 +2855,31 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2679
2855
|
'fee': fee,
|
2680
2856
|
}
|
2681
2857
|
|
2682
|
-
def parse_transfer_status(self, status):
|
2683
|
-
statuses = {
|
2858
|
+
def parse_transfer_status(self, status: Str) -> Str:
|
2859
|
+
statuses: dict = {
|
2684
2860
|
'0': 'ok',
|
2685
2861
|
}
|
2686
2862
|
return self.safe_string(statuses, status, status)
|
2687
2863
|
|
2688
|
-
def parse_transfer(self, transfer, currency: Currency = None):
|
2864
|
+
def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
|
2689
2865
|
#
|
2690
|
-
# transfer
|
2866
|
+
# transfer between spot, margin and OTC
|
2691
2867
|
#
|
2692
2868
|
# {
|
2693
2869
|
# "code": 0
|
2694
2870
|
# }
|
2695
2871
|
#
|
2872
|
+
# transfer between spot and swap
|
2873
|
+
#
|
2874
|
+
# {
|
2875
|
+
# "code": 0,
|
2876
|
+
# "data": {
|
2877
|
+
# "type": 2,
|
2878
|
+
# "currency": "USDT",
|
2879
|
+
# "transfer_amount": "5"
|
2880
|
+
# }
|
2881
|
+
# }
|
2882
|
+
#
|
2696
2883
|
# fetchTransfers
|
2697
2884
|
#
|
2698
2885
|
# {
|
@@ -2705,7 +2892,8 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2705
2892
|
#
|
2706
2893
|
fromAccount = None
|
2707
2894
|
toAccount = None
|
2708
|
-
|
2895
|
+
data = self.safe_dict(transfer, 'data', transfer)
|
2896
|
+
type = self.safe_integer(data, 'type')
|
2709
2897
|
if type == 1:
|
2710
2898
|
fromAccount = 'spot'
|
2711
2899
|
toAccount = 'swap'
|
@@ -2718,8 +2906,8 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2718
2906
|
'id': self.safe_string(transfer, 'transfer_id'),
|
2719
2907
|
'timestamp': timestamp,
|
2720
2908
|
'datetime': self.iso8601(timestamp),
|
2721
|
-
'currency': self.safe_currency_code(self.safe_string(
|
2722
|
-
'amount': self.
|
2909
|
+
'currency': self.safe_currency_code(self.safe_string(data, 'currency'), currency),
|
2910
|
+
'amount': self.safe_number_2(data, 'amount', 'transfer_amount'),
|
2723
2911
|
'fromAccount': fromAccount,
|
2724
2912
|
'toAccount': toAccount,
|
2725
2913
|
'status': self.parse_transfer_status(self.safe_string(transfer, 'code')),
|
@@ -2728,33 +2916,59 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2728
2916
|
def transfer(self, code: str, amount: float, fromAccount: str, toAccount: str, params={}) -> TransferEntry:
|
2729
2917
|
"""
|
2730
2918
|
transfer currency internally between wallets on the same account
|
2919
|
+
|
2920
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#transfer-assets-among-accounts
|
2921
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#accounttransfer
|
2922
|
+
|
2731
2923
|
:param str code: unified currency code
|
2732
2924
|
:param float amount: amount to transfer
|
2733
|
-
:param str fromAccount: account to transfer from
|
2734
|
-
:param str toAccount: account to transfer to
|
2925
|
+
:param str fromAccount: 'spot', 'swap', 'margin', 'OTC' - account to transfer from
|
2926
|
+
:param str toAccount: 'spot', 'swap', 'margin', 'OTC' - account to transfer to
|
2735
2927
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2736
2928
|
:returns dict: a `transfer structure <https://docs.ccxt.com/#/?id=transfer-structure>`
|
2737
2929
|
"""
|
2738
2930
|
self.load_markets()
|
2739
2931
|
currency = self.currency(code)
|
2932
|
+
currencyId = currency['id']
|
2740
2933
|
accountsByType = self.safe_value(self.options, 'accountsByType', {})
|
2741
2934
|
fromId = self.safe_string(accountsByType, fromAccount, fromAccount)
|
2742
2935
|
toId = self.safe_string(accountsByType, toAccount, toAccount)
|
2743
|
-
request = {
|
2744
|
-
|
2745
|
-
|
2746
|
-
|
2747
|
-
|
2748
|
-
|
2749
|
-
|
2750
|
-
|
2751
|
-
|
2752
|
-
|
2753
|
-
|
2754
|
-
|
2936
|
+
request = {}
|
2937
|
+
fromSwap = (fromAccount == 'swap')
|
2938
|
+
toSwap = (toAccount == 'swap')
|
2939
|
+
response = None
|
2940
|
+
amountString = self.currency_to_precision(code, amount)
|
2941
|
+
if fromSwap or toSwap:
|
2942
|
+
if (fromId != '1') and (toId != '1'):
|
2943
|
+
raise ExchangeError(self.id + ' transfer() supports transferring between spot and swap, spot and margin, spot and OTC only')
|
2944
|
+
request['type'] = 1 if toSwap else 2 # 1 = spot to swap, 2 = swap to spot
|
2945
|
+
request['currency'] = currencyId
|
2946
|
+
request['transfer_amount'] = amountString
|
2947
|
+
#
|
2948
|
+
# {
|
2949
|
+
# "code": 0,
|
2950
|
+
# "data": {
|
2951
|
+
# "type": 2,
|
2952
|
+
# "currency": "USDT",
|
2953
|
+
# "transfer_amount": "5"
|
2954
|
+
# }
|
2955
|
+
# }
|
2956
|
+
#
|
2957
|
+
response = self.privateSwapPostAccountTransfer(self.extend(request, params))
|
2958
|
+
else:
|
2959
|
+
request['currency_mark'] = currencyId
|
2960
|
+
request['num'] = amountString
|
2961
|
+
request['from'] = fromId # 1 = SPOT, 2 = MARGIN, 3 = OTC
|
2962
|
+
request['to'] = toId # 1 = SPOT, 2 = MARGIN, 3 = OTC
|
2963
|
+
#
|
2964
|
+
# {
|
2965
|
+
# "code": 0
|
2966
|
+
# }
|
2967
|
+
#
|
2968
|
+
response = self.privateSpotPostTransfer(self.extend(request, params))
|
2755
2969
|
return self.parse_transfer(response, currency)
|
2756
2970
|
|
2757
|
-
def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
2971
|
+
def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
2758
2972
|
"""
|
2759
2973
|
make a withdrawal
|
2760
2974
|
:param str code: unified currency code
|
@@ -2768,7 +2982,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2768
2982
|
self.check_address(address)
|
2769
2983
|
self.load_markets()
|
2770
2984
|
currency = self.currency(code)
|
2771
|
-
request = {
|
2985
|
+
request: dict = {
|
2772
2986
|
# 'chain': 'ERC20', 'OMNI', 'TRC20', # required for USDT
|
2773
2987
|
'address': address,
|
2774
2988
|
'amount': self.currency_to_precision(code, amount),
|
@@ -2785,9 +2999,9 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2785
2999
|
#
|
2786
3000
|
return self.parse_transaction(response, currency)
|
2787
3001
|
|
2788
|
-
def fetch_borrow_interest(self, code: Str = None, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
3002
|
+
def fetch_borrow_interest(self, code: Str = None, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[BorrowInterest]:
|
2789
3003
|
self.load_markets()
|
2790
|
-
request = {}
|
3004
|
+
request: dict = {}
|
2791
3005
|
market = None
|
2792
3006
|
if symbol is not None:
|
2793
3007
|
market = self.market(symbol)
|
@@ -2818,7 +3032,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2818
3032
|
interest = self.parse_borrow_interests(rows, market)
|
2819
3033
|
return self.filter_by_currency_since_limit(interest, code, since, limit)
|
2820
3034
|
|
2821
|
-
def parse_borrow_interest(self, info, market: Market = None):
|
3035
|
+
def parse_borrow_interest(self, info: dict, market: Market = None) -> BorrowInterest:
|
2822
3036
|
#
|
2823
3037
|
# {
|
2824
3038
|
# "amount": 0.0006103,
|
@@ -2840,27 +3054,29 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2840
3054
|
currency = None if (market is None) else market['base']
|
2841
3055
|
symbol = self.safe_symbol(marketId, market)
|
2842
3056
|
return {
|
2843
|
-
'
|
3057
|
+
'info': info,
|
2844
3058
|
'symbol': symbol,
|
2845
3059
|
'currency': currency,
|
2846
3060
|
'interest': None,
|
2847
3061
|
'interestRate': 0.001, # all interest rates on digifinex are 0.1%
|
2848
3062
|
'amountBorrowed': self.parse_number(amountBorrowed),
|
3063
|
+
'marginMode': None,
|
2849
3064
|
'timestamp': None,
|
2850
3065
|
'datetime': None,
|
2851
|
-
'info': info,
|
2852
3066
|
}
|
2853
3067
|
|
2854
|
-
def fetch_cross_borrow_rate(self, code: str, params={}):
|
3068
|
+
def fetch_cross_borrow_rate(self, code: str, params={}) -> CrossBorrowRate:
|
2855
3069
|
"""
|
2856
3070
|
fetch the rate of interest to borrow a currency for margin trading
|
2857
|
-
|
3071
|
+
|
3072
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#margin-assets
|
3073
|
+
|
2858
3074
|
:param str code: unified currency code
|
2859
3075
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2860
3076
|
:returns dict: a `borrow rate structure <https://github.com/ccxt/ccxt/wiki/Manual#borrow-rate-structure>`
|
2861
3077
|
"""
|
2862
3078
|
self.load_markets()
|
2863
|
-
request = {}
|
3079
|
+
request: dict = {}
|
2864
3080
|
response = self.privateSpotGetMarginAssets(self.extend(request, params))
|
2865
3081
|
#
|
2866
3082
|
# {
|
@@ -2888,10 +3104,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2888
3104
|
currency = self.currency(code)
|
2889
3105
|
return self.parse_borrow_rate(result, currency)
|
2890
3106
|
|
2891
|
-
def fetch_cross_borrow_rates(self, params={}):
|
3107
|
+
def fetch_cross_borrow_rates(self, params={}) -> CrossBorrowRates:
|
2892
3108
|
"""
|
2893
3109
|
fetch the borrow interest rates of all currencies
|
2894
|
-
|
3110
|
+
|
3111
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#margin-assets
|
3112
|
+
|
2895
3113
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2896
3114
|
:returns dict: a list of `borrow rate structures <https://docs.ccxt.com/#/?id=borrow-rate-structure>`
|
2897
3115
|
"""
|
@@ -2946,7 +3164,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2946
3164
|
# "currency": "USDT"
|
2947
3165
|
# },
|
2948
3166
|
#
|
2949
|
-
result = {}
|
3167
|
+
result: dict = {}
|
2950
3168
|
for i in range(0, len(info)):
|
2951
3169
|
item = info[i]
|
2952
3170
|
currency = self.safe_string(item, codeKey)
|
@@ -2955,10 +3173,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2955
3173
|
result[code] = borrowRate
|
2956
3174
|
return result
|
2957
3175
|
|
2958
|
-
def fetch_funding_rate(self, symbol: str, params={}):
|
3176
|
+
def fetch_funding_rate(self, symbol: str, params={}) -> FundingRate:
|
2959
3177
|
"""
|
2960
3178
|
fetch the current funding rate
|
2961
|
-
|
3179
|
+
|
3180
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#currentfundingrate
|
3181
|
+
|
2962
3182
|
:param str symbol: unified market symbol
|
2963
3183
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2964
3184
|
:returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
|
@@ -2967,7 +3187,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2967
3187
|
market = self.market(symbol)
|
2968
3188
|
if not market['swap']:
|
2969
3189
|
raise BadSymbol(self.id + ' fetchFundingRate() supports swap contracts only')
|
2970
|
-
request = {
|
3190
|
+
request: dict = {
|
2971
3191
|
'instrument_id': market['id'],
|
2972
3192
|
}
|
2973
3193
|
response = self.publicSwapGetPublicFundingRate(self.extend(request, params))
|
@@ -2983,10 +3203,22 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2983
3203
|
# }
|
2984
3204
|
# }
|
2985
3205
|
#
|
2986
|
-
data = self.
|
3206
|
+
data = self.safe_dict(response, 'data', {})
|
2987
3207
|
return self.parse_funding_rate(data, market)
|
2988
3208
|
|
2989
|
-
def
|
3209
|
+
def fetch_funding_interval(self, symbol: str, params={}) -> FundingRate:
|
3210
|
+
"""
|
3211
|
+
fetch the current funding rate interval
|
3212
|
+
|
3213
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#currentfundingrate
|
3214
|
+
|
3215
|
+
:param str symbol: unified market symbol
|
3216
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3217
|
+
:returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
|
3218
|
+
"""
|
3219
|
+
return self.fetch_funding_rate(symbol, params)
|
3220
|
+
|
3221
|
+
def parse_funding_rate(self, contract, market: Market = None) -> FundingRate:
|
2990
3222
|
#
|
2991
3223
|
# {
|
2992
3224
|
# "instrument_id": "BTCUSDTPERP",
|
@@ -2999,6 +3231,9 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2999
3231
|
marketId = self.safe_string(contract, 'instrument_id')
|
3000
3232
|
timestamp = self.safe_integer(contract, 'funding_time')
|
3001
3233
|
nextTimestamp = self.safe_integer(contract, 'next_funding_time')
|
3234
|
+
fundingTimeString = self.safe_string(contract, 'funding_time')
|
3235
|
+
nextFundingTimeString = self.safe_string(contract, 'next_funding_time')
|
3236
|
+
millisecondsInterval = Precise.string_sub(nextFundingTimeString, fundingTimeString)
|
3002
3237
|
return {
|
3003
3238
|
'info': contract,
|
3004
3239
|
'symbol': self.safe_symbol(marketId, market),
|
@@ -3011,14 +3246,25 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3011
3246
|
'fundingRate': self.safe_number(contract, 'funding_rate'),
|
3012
3247
|
'fundingTimestamp': timestamp,
|
3013
3248
|
'fundingDatetime': self.iso8601(timestamp),
|
3014
|
-
'nextFundingRate': self.
|
3249
|
+
'nextFundingRate': self.safe_number(contract, 'next_funding_rate'),
|
3015
3250
|
'nextFundingTimestamp': nextTimestamp,
|
3016
3251
|
'nextFundingDatetime': self.iso8601(nextTimestamp),
|
3017
3252
|
'previousFundingRate': None,
|
3018
3253
|
'previousFundingTimestamp': None,
|
3019
3254
|
'previousFundingDatetime': None,
|
3255
|
+
'interval': self.parse_funding_interval(millisecondsInterval),
|
3020
3256
|
}
|
3021
3257
|
|
3258
|
+
def parse_funding_interval(self, interval):
|
3259
|
+
intervals: dict = {
|
3260
|
+
'3600000': '1h',
|
3261
|
+
'14400000': '4h',
|
3262
|
+
'28800000': '8h',
|
3263
|
+
'57600000': '16h',
|
3264
|
+
'86400000': '24h',
|
3265
|
+
}
|
3266
|
+
return self.safe_string(intervals, interval, interval)
|
3267
|
+
|
3022
3268
|
def fetch_funding_rate_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
3023
3269
|
"""
|
3024
3270
|
fetches historical funding rate prices
|
@@ -3034,7 +3280,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3034
3280
|
market = self.market(symbol)
|
3035
3281
|
if not market['swap']:
|
3036
3282
|
raise BadSymbol(self.id + ' fetchFundingRateHistory() supports swap contracts only')
|
3037
|
-
request = {
|
3283
|
+
request: dict = {
|
3038
3284
|
'instrument_id': market['id'],
|
3039
3285
|
}
|
3040
3286
|
if since is not None:
|
@@ -3075,10 +3321,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3075
3321
|
sorted = self.sort_by(rates, 'timestamp')
|
3076
3322
|
return self.filter_by_symbol_since_limit(sorted, symbol, since, limit)
|
3077
3323
|
|
3078
|
-
def fetch_trading_fee(self, symbol: str, params={}):
|
3324
|
+
def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
|
3079
3325
|
"""
|
3080
3326
|
fetch the trading fees for a market
|
3081
|
-
|
3327
|
+
|
3328
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#tradingfee
|
3329
|
+
|
3082
3330
|
:param str symbol: unified market symbol
|
3083
3331
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3084
3332
|
:returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
|
@@ -3087,7 +3335,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3087
3335
|
market = self.market(symbol)
|
3088
3336
|
if not market['swap']:
|
3089
3337
|
raise BadRequest(self.id + ' fetchTradingFee() supports swap markets only')
|
3090
|
-
request = {
|
3338
|
+
request: dict = {
|
3091
3339
|
'instrument_id': market['id'],
|
3092
3340
|
}
|
3093
3341
|
response = self.privateSwapGetAccountTradingFeeRate(self.extend(request, params))
|
@@ -3104,7 +3352,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3104
3352
|
data = self.safe_value(response, 'data', {})
|
3105
3353
|
return self.parse_trading_fee(data, market)
|
3106
3354
|
|
3107
|
-
def parse_trading_fee(self, fee, market: Market = None):
|
3355
|
+
def parse_trading_fee(self, fee: dict, market: Market = None) -> TradingFeeInterface:
|
3108
3356
|
#
|
3109
3357
|
# {
|
3110
3358
|
# "instrument_id": "BTCUSDTPERP",
|
@@ -3119,20 +3367,24 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3119
3367
|
'symbol': symbol,
|
3120
3368
|
'maker': self.safe_number(fee, 'maker_fee_rate'),
|
3121
3369
|
'taker': self.safe_number(fee, 'taker_fee_rate'),
|
3370
|
+
'percentage': None,
|
3371
|
+
'tierBased': None,
|
3122
3372
|
}
|
3123
3373
|
|
3124
3374
|
def fetch_positions(self, symbols: Strings = None, params={}):
|
3125
3375
|
"""
|
3126
3376
|
fetch all open positions
|
3127
|
-
|
3128
|
-
|
3377
|
+
|
3378
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#margin-positions
|
3379
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#positions
|
3380
|
+
|
3129
3381
|
:param str[]|None symbols: list of unified market symbols
|
3130
3382
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3131
3383
|
:returns dict[]: a list of `position structures <https://docs.ccxt.com/#/?id=position-structure>`
|
3132
3384
|
"""
|
3133
3385
|
self.load_markets()
|
3134
3386
|
symbols = self.market_symbols(symbols)
|
3135
|
-
request = {}
|
3387
|
+
request: dict = {}
|
3136
3388
|
market = None
|
3137
3389
|
marketType = None
|
3138
3390
|
if symbols is not None:
|
@@ -3221,8 +3473,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3221
3473
|
|
3222
3474
|
def fetch_position(self, symbol: str, params={}):
|
3223
3475
|
"""
|
3224
|
-
|
3225
|
-
|
3476
|
+
|
3477
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#margin-positions
|
3478
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#positions
|
3479
|
+
|
3226
3480
|
fetch data on a single open contract trade position
|
3227
3481
|
:param str symbol: unified market symbol of the market the position is held in
|
3228
3482
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -3230,7 +3484,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3230
3484
|
"""
|
3231
3485
|
self.load_markets()
|
3232
3486
|
market = self.market(symbol)
|
3233
|
-
request = {}
|
3487
|
+
request: dict = {}
|
3234
3488
|
marketType = None
|
3235
3489
|
marketType, params = self.handle_market_type_and_params('fetchPosition', market, params)
|
3236
3490
|
marginMode, query = self.handle_margin_mode_and_params('fetchPosition', params)
|
@@ -3306,7 +3560,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3306
3560
|
position['marginRatio'] = self.safe_number(response, 'margin_rate')
|
3307
3561
|
return position
|
3308
3562
|
|
3309
|
-
def parse_position(self, position, market: Market = None):
|
3563
|
+
def parse_position(self, position: dict, market: Market = None):
|
3310
3564
|
#
|
3311
3565
|
# swap
|
3312
3566
|
#
|
@@ -3390,7 +3644,9 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3390
3644
|
def set_leverage(self, leverage: Int, symbol: Str = None, params={}):
|
3391
3645
|
"""
|
3392
3646
|
set the level of leverage for a market
|
3393
|
-
|
3647
|
+
|
3648
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#setleverage
|
3649
|
+
|
3394
3650
|
:param float leverage: the rate of leverage
|
3395
3651
|
:param str symbol: unified market symbol
|
3396
3652
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -3406,7 +3662,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3406
3662
|
raise BadSymbol(self.id + ' setLeverage() supports swap contracts only')
|
3407
3663
|
if (leverage < 1) or (leverage > 100):
|
3408
3664
|
raise BadRequest(self.id + ' leverage should be between 1 and 100')
|
3409
|
-
request = {
|
3665
|
+
request: dict = {
|
3410
3666
|
'instrument_id': market['id'],
|
3411
3667
|
'leverage': leverage,
|
3412
3668
|
}
|
@@ -3436,10 +3692,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3436
3692
|
# }
|
3437
3693
|
#
|
3438
3694
|
|
3439
|
-
def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
3695
|
+
def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[TransferEntry]:
|
3440
3696
|
"""
|
3441
3697
|
fetch the transfer history, only transfers between spot and swap accounts are supported
|
3442
|
-
|
3698
|
+
|
3699
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#transferrecord
|
3700
|
+
|
3443
3701
|
:param str code: unified currency code of the currency transferred
|
3444
3702
|
:param int [since]: the earliest time in ms to fetch transfers for
|
3445
3703
|
:param int [limit]: the maximum number of transfers to retrieve
|
@@ -3448,7 +3706,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3448
3706
|
"""
|
3449
3707
|
self.load_markets()
|
3450
3708
|
currency = None
|
3451
|
-
request = {}
|
3709
|
+
request: dict = {}
|
3452
3710
|
if code is not None:
|
3453
3711
|
currency = self.safe_currency_code(code)
|
3454
3712
|
request['currency'] = currency['id']
|
@@ -3472,12 +3730,14 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3472
3730
|
# ]
|
3473
3731
|
# }
|
3474
3732
|
#
|
3475
|
-
transfers = self.
|
3733
|
+
transfers = self.safe_list(response, 'data', [])
|
3476
3734
|
return self.parse_transfers(transfers, currency, since, limit)
|
3477
3735
|
|
3478
|
-
def fetch_leverage_tiers(self, symbols: Strings = None, params={}):
|
3736
|
+
def fetch_leverage_tiers(self, symbols: Strings = None, params={}) -> LeverageTiers:
|
3479
3737
|
"""
|
3480
|
-
|
3738
|
+
|
3739
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#instruments
|
3740
|
+
|
3481
3741
|
retrieve information on the maximum leverage, for different trade sizes
|
3482
3742
|
:param str[]|None symbols: a list of unified market symbols
|
3483
3743
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -3516,56 +3776,14 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3516
3776
|
#
|
3517
3777
|
data = self.safe_value(response, 'data', [])
|
3518
3778
|
symbols = self.market_symbols(symbols)
|
3519
|
-
return self.parse_leverage_tiers(data, symbols, '
|
3520
|
-
|
3521
|
-
def parse_leverage_tiers(self, response, symbols: Strings = None, marketIdKey=None):
|
3522
|
-
#
|
3523
|
-
# [
|
3524
|
-
# {
|
3525
|
-
# "instrument_id": "BTCUSDTPERP",
|
3526
|
-
# "type": "REAL",
|
3527
|
-
# "contract_type": "PERPETUAL",
|
3528
|
-
# "base_currency": "BTC",
|
3529
|
-
# "quote_currency": "USDT",
|
3530
|
-
# "clear_currency": "USDT",
|
3531
|
-
# "contract_value": "0.001",
|
3532
|
-
# "contract_value_currency": "BTC",
|
3533
|
-
# "is_inverse": False,
|
3534
|
-
# "is_trading": True,
|
3535
|
-
# "status": "ONLINE",
|
3536
|
-
# "price_precision": 1,
|
3537
|
-
# "tick_size": "0.1",
|
3538
|
-
# "min_order_amount": 1,
|
3539
|
-
# "open_max_limits": [
|
3540
|
-
# {
|
3541
|
-
# "leverage": "50",
|
3542
|
-
# "max_limit": "1000000"
|
3543
|
-
# }
|
3544
|
-
# ]
|
3545
|
-
# },
|
3546
|
-
# ]
|
3547
|
-
#
|
3548
|
-
tiers = {}
|
3549
|
-
result = {}
|
3550
|
-
for i in range(0, len(response)):
|
3551
|
-
entry = response[i]
|
3552
|
-
marketId = self.safe_string(entry, 'instrument_id')
|
3553
|
-
market = self.safe_market(marketId)
|
3554
|
-
symbol = self.safe_symbol(marketId, market)
|
3555
|
-
symbolsLength = 0
|
3556
|
-
tiers[symbol] = self.parse_market_leverage_tiers(response[i], market)
|
3557
|
-
if symbols is not None:
|
3558
|
-
symbolsLength = len(symbols)
|
3559
|
-
if self.in_array(symbol, symbols):
|
3560
|
-
result[symbol] = self.parse_market_leverage_tiers(response[i], market)
|
3561
|
-
if symbol is not None and (symbolsLength == 0 or self.in_array(symbols, symbol)):
|
3562
|
-
result[symbol] = self.parse_market_leverage_tiers(response[i], market)
|
3563
|
-
return result
|
3779
|
+
return self.parse_leverage_tiers(data, symbols, 'instrument_id')
|
3564
3780
|
|
3565
|
-
def fetch_market_leverage_tiers(self, symbol: str, params={}):
|
3781
|
+
def fetch_market_leverage_tiers(self, symbol: str, params={}) -> List[LeverageTier]:
|
3566
3782
|
"""
|
3567
|
-
:see: https://docs.digifinex.com/en-ww/swap/v2/rest.html#instrument
|
3568
3783
|
retrieve information on the maximum leverage, for different trade sizes for a single market
|
3784
|
+
|
3785
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#instrument
|
3786
|
+
|
3569
3787
|
:param str symbol: unified market symbol
|
3570
3788
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3571
3789
|
:returns dict: a `leverage tiers structure <https://docs.ccxt.com/#/?id=leverage-tiers-structure>`
|
@@ -3574,7 +3792,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3574
3792
|
market = self.market(symbol)
|
3575
3793
|
if not market['swap']:
|
3576
3794
|
raise BadRequest(self.id + ' fetchMarketLeverageTiers() supports swap markets only')
|
3577
|
-
request = {
|
3795
|
+
request: dict = {
|
3578
3796
|
'instrument_id': market['id'],
|
3579
3797
|
}
|
3580
3798
|
response = self.publicSwapGetPublicInstrument(self.extend(request, params))
|
@@ -3608,7 +3826,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3608
3826
|
data = self.safe_value(response, 'data', {})
|
3609
3827
|
return self.parse_market_leverage_tiers(data, market)
|
3610
3828
|
|
3611
|
-
def parse_market_leverage_tiers(self, info, market: Market = None):
|
3829
|
+
def parse_market_leverage_tiers(self, info, market: Market = None) -> List[LeverageTier]:
|
3612
3830
|
#
|
3613
3831
|
# {
|
3614
3832
|
# "instrument_id": "BTCUSDTPERP",
|
@@ -3638,9 +3856,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3638
3856
|
for i in range(0, len(brackets)):
|
3639
3857
|
tier = brackets[i]
|
3640
3858
|
marketId = self.safe_string(info, 'instrument_id')
|
3641
|
-
market = self.safe_market(marketId)
|
3859
|
+
market = self.safe_market(marketId, market)
|
3642
3860
|
tiers.append({
|
3643
3861
|
'tier': self.sum(i, 1),
|
3862
|
+
'symbol': self.safe_symbol(marketId, market, None, 'swap'),
|
3644
3863
|
'currency': market['settle'],
|
3645
3864
|
'minNotional': None,
|
3646
3865
|
'maxNotional': self.safe_number(tier, 'max_limit'),
|
@@ -3652,7 +3871,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3652
3871
|
|
3653
3872
|
def handle_margin_mode_and_params(self, methodName, params={}, defaultValue=None):
|
3654
3873
|
"""
|
3655
|
-
|
3874
|
+
@ignore
|
3656
3875
|
marginMode specified by params["marginMode"], self.options["marginMode"], self.options["defaultMarginMode"], params["margin"] = True or self.options["defaultType"] = 'margin'
|
3657
3876
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3658
3877
|
:returns Array: the marginMode in lowercase
|
@@ -3672,7 +3891,9 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3672
3891
|
def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
|
3673
3892
|
"""
|
3674
3893
|
fetch deposit and withdraw fees
|
3675
|
-
|
3894
|
+
|
3895
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#get-currency-deposit-and-withdrawal-information
|
3896
|
+
|
3676
3897
|
:param str[]|None codes: not used by fetchDepositWithdrawFees()
|
3677
3898
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3678
3899
|
:returns dict: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
|
@@ -3708,7 +3929,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3708
3929
|
# "code": 200,
|
3709
3930
|
# }
|
3710
3931
|
#
|
3711
|
-
data = self.
|
3932
|
+
data = self.safe_list(response, 'data')
|
3712
3933
|
return self.parse_deposit_withdraw_fees(data, codes)
|
3713
3934
|
|
3714
3935
|
def parse_deposit_withdraw_fees(self, response, codes=None, currencyIdKey=None):
|
@@ -3738,7 +3959,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3738
3959
|
# },
|
3739
3960
|
# ]
|
3740
3961
|
#
|
3741
|
-
depositWithdrawFees = {}
|
3962
|
+
depositWithdrawFees: dict = {}
|
3742
3963
|
codes = self.market_codes(codes)
|
3743
3964
|
for i in range(0, len(response)):
|
3744
3965
|
entry = response[i]
|
@@ -3752,11 +3973,11 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3752
3973
|
depositWithdrawFees[code]['info'].append(entry)
|
3753
3974
|
networkId = self.safe_string(entry, 'chain')
|
3754
3975
|
withdrawFee = self.safe_value(entry, 'min_withdraw_fee')
|
3755
|
-
withdrawResult = {
|
3976
|
+
withdrawResult: dict = {
|
3756
3977
|
'fee': withdrawFee,
|
3757
3978
|
'percentage': False if (withdrawFee is not None) else None,
|
3758
3979
|
}
|
3759
|
-
depositResult = {
|
3980
|
+
depositResult: dict = {
|
3760
3981
|
'fee': None,
|
3761
3982
|
'percentage': None,
|
3762
3983
|
}
|
@@ -3776,10 +3997,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3776
3997
|
depositWithdrawFees[code] = self.assign_default_deposit_withdraw_fees(depositWithdrawFees[code], currency)
|
3777
3998
|
return depositWithdrawFees
|
3778
3999
|
|
3779
|
-
def add_margin(self, symbol: str, amount, params={}):
|
4000
|
+
def add_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
|
3780
4001
|
"""
|
3781
4002
|
add margin to a position
|
3782
|
-
|
4003
|
+
|
4004
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#positionmargin
|
4005
|
+
|
3783
4006
|
:param str symbol: unified market symbol
|
3784
4007
|
:param float amount: amount of margin to add
|
3785
4008
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -3790,10 +4013,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3790
4013
|
self.check_required_argument('addMargin', side, 'side', ['long', 'short'])
|
3791
4014
|
return self.modify_margin_helper(symbol, amount, 1, params)
|
3792
4015
|
|
3793
|
-
def reduce_margin(self, symbol: str, amount, params={}):
|
4016
|
+
def reduce_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
|
3794
4017
|
"""
|
3795
4018
|
remove margin from a position
|
3796
|
-
|
4019
|
+
|
4020
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#positionmargin
|
4021
|
+
|
3797
4022
|
:param str symbol: unified market symbol
|
3798
4023
|
:param float amount: the amount of margin to remove
|
3799
4024
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -3804,11 +4029,11 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3804
4029
|
self.check_required_argument('reduceMargin', side, 'side', ['long', 'short'])
|
3805
4030
|
return self.modify_margin_helper(symbol, amount, 2, params)
|
3806
4031
|
|
3807
|
-
def modify_margin_helper(self, symbol: str, amount, type, params={}):
|
4032
|
+
def modify_margin_helper(self, symbol: str, amount, type, params={}) -> MarginModification:
|
3808
4033
|
self.load_markets()
|
3809
4034
|
side = self.safe_string(params, 'side')
|
3810
4035
|
market = self.market(symbol)
|
3811
|
-
request = {
|
4036
|
+
request: dict = {
|
3812
4037
|
'instrument_id': market['id'],
|
3813
4038
|
'amount': self.number_to_string(amount),
|
3814
4039
|
'type': type,
|
@@ -3833,7 +4058,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3833
4058
|
'status': status,
|
3834
4059
|
})
|
3835
4060
|
|
3836
|
-
def parse_margin_modification(self, data, market: Market = None):
|
4061
|
+
def parse_margin_modification(self, data: dict, market: Market = None) -> MarginModification:
|
3837
4062
|
#
|
3838
4063
|
# {
|
3839
4064
|
# "instrument_id": "BTCUSDTPERP",
|
@@ -3846,18 +4071,23 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3846
4071
|
rawType = self.safe_integer(data, 'type')
|
3847
4072
|
return {
|
3848
4073
|
'info': data,
|
4074
|
+
'symbol': self.safe_symbol(marketId, market, None, 'swap'),
|
3849
4075
|
'type': 'add' if (rawType == 1) else 'reduce',
|
4076
|
+
'marginMode': 'isolated',
|
3850
4077
|
'amount': self.safe_number(data, 'amount'),
|
3851
4078
|
'total': None,
|
3852
4079
|
'code': market['settle'],
|
3853
|
-
'symbol': self.safe_symbol(marketId, market, None, 'swap'),
|
3854
4080
|
'status': None,
|
4081
|
+
'timestamp': None,
|
4082
|
+
'datetime': None,
|
3855
4083
|
}
|
3856
4084
|
|
3857
4085
|
def fetch_funding_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
3858
4086
|
"""
|
3859
4087
|
fetch the history of funding payments paid and received on self account
|
3860
|
-
|
4088
|
+
|
4089
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#funding-fee
|
4090
|
+
|
3861
4091
|
:param str [symbol]: unified market symbol
|
3862
4092
|
:param int [since]: the earliest time in ms to fetch funding history for
|
3863
4093
|
:param int [limit]: the maximum number of funding history structures to retrieve
|
@@ -3866,7 +4096,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3866
4096
|
:returns dict: a `funding history structure <https://docs.ccxt.com/#/?id=funding-history-structure>`
|
3867
4097
|
"""
|
3868
4098
|
self.load_markets()
|
3869
|
-
request = {}
|
4099
|
+
request: dict = {}
|
3870
4100
|
request, params = self.handle_until_option('end_timestamp', request, params)
|
3871
4101
|
market = None
|
3872
4102
|
if symbol is not None:
|
@@ -3890,7 +4120,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3890
4120
|
# ]
|
3891
4121
|
# }
|
3892
4122
|
#
|
3893
|
-
data = self.
|
4123
|
+
data = self.safe_list(response, 'data', [])
|
3894
4124
|
return self.parse_incomes(data, market, since, limit)
|
3895
4125
|
|
3896
4126
|
def parse_income(self, income, market: Market = None):
|
@@ -3918,7 +4148,9 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3918
4148
|
def set_margin_mode(self, marginMode: str, symbol: Str = None, params={}):
|
3919
4149
|
"""
|
3920
4150
|
set margin mode to 'cross' or 'isolated'
|
3921
|
-
|
4151
|
+
|
4152
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#positionmode
|
4153
|
+
|
3922
4154
|
:param str marginMode: 'cross' or 'isolated'
|
3923
4155
|
:param str symbol: unified market symbol
|
3924
4156
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -3931,7 +4163,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3931
4163
|
marginMode = marginMode.lower()
|
3932
4164
|
if marginMode == 'cross':
|
3933
4165
|
marginMode = 'crossed'
|
3934
|
-
request = {
|
4166
|
+
request: dict = {
|
3935
4167
|
'instrument_id': market['id'],
|
3936
4168
|
'margin_mode': marginMode,
|
3937
4169
|
}
|
@@ -3984,7 +4216,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3984
4216
|
url += '?' + urlencoded
|
3985
4217
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
3986
4218
|
|
3987
|
-
def handle_errors(self, statusCode, statusText, url, method, responseHeaders, responseBody, response, requestHeaders, requestBody):
|
4219
|
+
def handle_errors(self, statusCode: int, statusText: str, url: str, method: str, responseHeaders: dict, responseBody, response, requestHeaders, requestBody):
|
3988
4220
|
if not response:
|
3989
4221
|
return None # fall back to default error handler
|
3990
4222
|
code = self.safe_string(response, 'code')
|