ccxt 4.2.77__py2.py3-none-any.whl → 4.4.49__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ccxt/__init__.py +36 -14
- ccxt/abstract/alpaca.py +4 -0
- ccxt/abstract/bigone.py +1 -1
- ccxt/abstract/binance.py +112 -48
- ccxt/abstract/binancecoinm.py +112 -48
- ccxt/abstract/binanceus.py +147 -83
- ccxt/abstract/binanceusdm.py +112 -48
- ccxt/abstract/bingx.py +133 -78
- ccxt/abstract/bitbank.py +5 -0
- ccxt/abstract/bitfinex.py +136 -65
- ccxt/abstract/bitfinex1.py +69 -0
- ccxt/abstract/bitflyer.py +1 -0
- ccxt/abstract/bitget.py +8 -1
- ccxt/abstract/bitmart.py +13 -1
- ccxt/abstract/bitopro.py +1 -0
- ccxt/abstract/bitpanda.py +0 -12
- ccxt/abstract/bitrue.py +3 -3
- ccxt/abstract/bitstamp.py +26 -3
- ccxt/abstract/blofin.py +24 -0
- ccxt/abstract/btcbox.py +1 -0
- ccxt/abstract/bybit.py +29 -14
- ccxt/abstract/cex.py +28 -29
- ccxt/abstract/coinbase.py +6 -0
- ccxt/abstract/coinbaseadvanced.py +94 -0
- ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/abstract/coincatch.py +94 -0
- ccxt/abstract/coinex.py +233 -123
- ccxt/abstract/coinmetro.py +1 -0
- ccxt/abstract/cryptocom.py +14 -0
- ccxt/abstract/defx.py +69 -0
- ccxt/abstract/deribit.py +1 -0
- ccxt/abstract/digifinex.py +1 -0
- ccxt/abstract/ellipx.py +25 -0
- ccxt/abstract/gate.py +20 -0
- ccxt/abstract/gateio.py +20 -0
- ccxt/abstract/gemini.py +1 -0
- ccxt/abstract/hashkey.py +67 -0
- ccxt/abstract/hyperliquid.py +1 -1
- ccxt/abstract/independentreserve.py +6 -0
- ccxt/abstract/kraken.py +4 -3
- ccxt/abstract/krakenfutures.py +4 -0
- ccxt/abstract/kucoin.py +24 -0
- ccxt/abstract/kucoinfutures.py +34 -0
- ccxt/abstract/luno.py +2 -0
- ccxt/abstract/mexc.py +4 -0
- ccxt/abstract/myokx.py +340 -0
- ccxt/abstract/oceanex.py +5 -0
- ccxt/abstract/okx.py +30 -0
- ccxt/abstract/onetrading.py +0 -12
- ccxt/abstract/oxfun.py +34 -0
- ccxt/abstract/paradex.py +40 -0
- ccxt/abstract/phemex.py +1 -0
- ccxt/abstract/upbit.py +4 -0
- ccxt/abstract/vertex.py +19 -0
- ccxt/abstract/whitebit.py +31 -1
- ccxt/abstract/woo.py +6 -2
- ccxt/abstract/woofipro.py +119 -0
- ccxt/abstract/xt.py +153 -0
- ccxt/abstract/zonda.py +6 -0
- ccxt/ace.py +164 -60
- ccxt/alpaca.py +727 -63
- ccxt/ascendex.py +395 -249
- ccxt/async_support/__init__.py +36 -14
- ccxt/async_support/ace.py +164 -60
- ccxt/async_support/alpaca.py +727 -63
- ccxt/async_support/ascendex.py +396 -249
- ccxt/async_support/base/exchange.py +531 -155
- ccxt/async_support/base/ws/aiohttp_client.py +28 -5
- ccxt/async_support/base/ws/cache.py +3 -2
- ccxt/async_support/base/ws/client.py +26 -5
- ccxt/async_support/base/ws/fast_client.py +4 -3
- ccxt/async_support/base/ws/functions.py +1 -1
- ccxt/async_support/base/ws/future.py +40 -31
- ccxt/async_support/base/ws/order_book_side.py +3 -0
- ccxt/async_support/bequant.py +1 -1
- ccxt/async_support/bigone.py +329 -202
- ccxt/async_support/binance.py +3030 -1087
- ccxt/async_support/binancecoinm.py +2 -1
- ccxt/async_support/binanceus.py +12 -1
- ccxt/async_support/binanceusdm.py +3 -1
- ccxt/async_support/bingx.py +3205 -937
- ccxt/async_support/bit2c.py +119 -38
- ccxt/async_support/bitbank.py +215 -76
- ccxt/async_support/bitbns.py +124 -53
- ccxt/async_support/bitfinex.py +3236 -1078
- ccxt/async_support/bitfinex1.py +1711 -0
- ccxt/async_support/bitflyer.py +238 -49
- ccxt/async_support/bitget.py +1525 -573
- ccxt/async_support/bithumb.py +199 -65
- ccxt/async_support/bitmart.py +1320 -435
- ccxt/async_support/bitmex.py +308 -111
- ccxt/async_support/bitopro.py +256 -96
- ccxt/async_support/bitrue.py +365 -233
- ccxt/async_support/bitso.py +201 -89
- ccxt/async_support/bitstamp.py +438 -269
- ccxt/async_support/bitteam.py +179 -73
- ccxt/async_support/bitvavo.py +180 -70
- ccxt/async_support/bl3p.py +92 -25
- ccxt/async_support/blockchaincom.py +193 -79
- ccxt/async_support/blofin.py +392 -148
- ccxt/async_support/btcalpha.py +161 -55
- ccxt/async_support/btcbox.py +250 -34
- ccxt/async_support/btcmarkets.py +232 -85
- ccxt/async_support/btcturk.py +159 -60
- ccxt/async_support/bybit.py +2231 -1193
- ccxt/async_support/cex.py +1409 -1329
- ccxt/async_support/coinbase.py +1454 -287
- ccxt/async_support/coinbaseadvanced.py +17 -0
- ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/async_support/coinbaseinternational.py +428 -88
- ccxt/async_support/coincatch.py +5152 -0
- ccxt/async_support/coincheck.py +121 -38
- ccxt/async_support/coinex.py +4020 -3339
- ccxt/async_support/coinlist.py +273 -116
- ccxt/async_support/coinmate.py +204 -97
- ccxt/async_support/coinmetro.py +203 -110
- ccxt/async_support/coinone.py +142 -68
- ccxt/async_support/coinsph.py +223 -97
- ccxt/async_support/coinspot.py +137 -62
- ccxt/async_support/cryptocom.py +515 -185
- ccxt/async_support/currencycom.py +203 -85
- ccxt/async_support/defx.py +2066 -0
- ccxt/async_support/delta.py +404 -109
- ccxt/async_support/deribit.py +639 -323
- ccxt/async_support/digifinex.py +465 -233
- ccxt/async_support/ellipx.py +1887 -0
- ccxt/async_support/exmo.py +317 -128
- ccxt/async_support/gate.py +1472 -463
- ccxt/async_support/gemini.py +206 -84
- ccxt/async_support/hashkey.py +4164 -0
- ccxt/async_support/hitbtc.py +433 -178
- ccxt/async_support/hollaex.py +207 -83
- ccxt/async_support/htx.py +1095 -563
- ccxt/async_support/huobijp.py +178 -56
- ccxt/async_support/hyperliquid.py +1678 -292
- ccxt/async_support/idex.py +219 -95
- ccxt/async_support/independentreserve.py +300 -31
- ccxt/async_support/indodax.py +226 -62
- ccxt/async_support/kraken.py +871 -354
- ccxt/async_support/krakenfutures.py +324 -100
- ccxt/async_support/kucoin.py +917 -357
- ccxt/async_support/kucoinfutures.py +1004 -149
- ccxt/async_support/kuna.py +198 -107
- ccxt/async_support/latoken.py +199 -79
- ccxt/async_support/lbank.py +360 -113
- ccxt/async_support/luno.py +185 -62
- ccxt/async_support/lykke.py +168 -55
- ccxt/async_support/mercado.py +101 -29
- ccxt/async_support/mexc.py +995 -429
- ccxt/async_support/myokx.py +53 -0
- ccxt/async_support/ndax.py +234 -82
- ccxt/async_support/novadax.py +195 -75
- ccxt/async_support/oceanex.py +244 -59
- ccxt/async_support/okcoin.py +301 -165
- ccxt/async_support/okx.py +1776 -454
- ccxt/async_support/onetrading.py +198 -414
- ccxt/async_support/oxfun.py +2898 -0
- ccxt/async_support/p2b.py +142 -52
- ccxt/async_support/paradex.py +2085 -0
- ccxt/async_support/paymium.py +56 -32
- ccxt/async_support/phemex.py +572 -196
- ccxt/async_support/poloniex.py +218 -95
- ccxt/async_support/poloniexfutures.py +260 -92
- ccxt/async_support/probit.py +143 -110
- ccxt/async_support/timex.py +123 -70
- ccxt/async_support/tokocrypto.py +129 -93
- ccxt/async_support/tradeogre.py +39 -25
- ccxt/async_support/upbit.py +322 -113
- ccxt/async_support/vertex.py +2983 -0
- ccxt/async_support/wavesexchange.py +227 -173
- ccxt/async_support/wazirx.py +145 -65
- ccxt/async_support/whitebit.py +533 -138
- ccxt/async_support/woo.py +1137 -296
- ccxt/async_support/woofipro.py +2716 -0
- ccxt/async_support/xt.py +4628 -0
- ccxt/async_support/yobit.py +160 -92
- ccxt/async_support/zaif.py +80 -33
- ccxt/async_support/zonda.py +140 -69
- ccxt/base/errors.py +51 -20
- ccxt/base/exchange.py +1722 -480
- ccxt/base/precise.py +10 -0
- ccxt/base/types.py +223 -4
- ccxt/bequant.py +1 -1
- ccxt/bigone.py +329 -202
- ccxt/binance.py +3030 -1087
- ccxt/binancecoinm.py +2 -1
- ccxt/binanceus.py +12 -1
- ccxt/binanceusdm.py +3 -1
- ccxt/bingx.py +3205 -937
- ccxt/bit2c.py +119 -38
- ccxt/bitbank.py +215 -76
- ccxt/bitbns.py +124 -53
- ccxt/bitfinex.py +3235 -1078
- ccxt/bitfinex1.py +1710 -0
- ccxt/bitflyer.py +238 -49
- ccxt/bitget.py +1525 -573
- ccxt/bithumb.py +198 -65
- ccxt/bitmart.py +1320 -435
- ccxt/bitmex.py +308 -111
- ccxt/bitopro.py +256 -96
- ccxt/bitrue.py +365 -233
- ccxt/bitso.py +201 -89
- ccxt/bitstamp.py +438 -269
- ccxt/bitteam.py +179 -73
- ccxt/bitvavo.py +180 -70
- ccxt/bl3p.py +92 -25
- ccxt/blockchaincom.py +193 -79
- ccxt/blofin.py +392 -148
- ccxt/btcalpha.py +161 -55
- ccxt/btcbox.py +250 -34
- ccxt/btcmarkets.py +232 -85
- ccxt/btcturk.py +159 -60
- ccxt/bybit.py +2231 -1193
- ccxt/cex.py +1408 -1329
- ccxt/coinbase.py +1454 -287
- ccxt/coinbaseadvanced.py +17 -0
- ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/coinbaseinternational.py +428 -88
- ccxt/coincatch.py +5152 -0
- ccxt/coincheck.py +121 -38
- ccxt/coinex.py +4020 -3339
- ccxt/coinlist.py +273 -116
- ccxt/coinmate.py +204 -97
- ccxt/coinmetro.py +203 -110
- ccxt/coinone.py +142 -68
- ccxt/coinsph.py +223 -97
- ccxt/coinspot.py +137 -62
- ccxt/cryptocom.py +515 -185
- ccxt/currencycom.py +203 -85
- ccxt/defx.py +2065 -0
- ccxt/delta.py +404 -109
- ccxt/deribit.py +639 -323
- ccxt/digifinex.py +465 -233
- ccxt/ellipx.py +1887 -0
- ccxt/exmo.py +317 -128
- ccxt/gate.py +1472 -463
- ccxt/gemini.py +206 -84
- ccxt/hashkey.py +4164 -0
- ccxt/hitbtc.py +433 -178
- ccxt/hollaex.py +207 -83
- ccxt/htx.py +1095 -563
- ccxt/huobijp.py +178 -56
- ccxt/hyperliquid.py +1677 -292
- ccxt/idex.py +219 -95
- ccxt/independentreserve.py +299 -31
- ccxt/indodax.py +226 -62
- ccxt/kraken.py +871 -354
- ccxt/krakenfutures.py +324 -100
- ccxt/kucoin.py +917 -357
- ccxt/kucoinfutures.py +1004 -149
- ccxt/kuna.py +198 -107
- ccxt/latoken.py +199 -79
- ccxt/lbank.py +360 -113
- ccxt/luno.py +185 -62
- ccxt/lykke.py +168 -55
- ccxt/mercado.py +101 -29
- ccxt/mexc.py +994 -429
- ccxt/myokx.py +53 -0
- ccxt/ndax.py +234 -82
- ccxt/novadax.py +195 -75
- ccxt/oceanex.py +244 -59
- ccxt/okcoin.py +301 -165
- ccxt/okx.py +1776 -454
- ccxt/onetrading.py +198 -414
- ccxt/oxfun.py +2897 -0
- ccxt/p2b.py +142 -52
- ccxt/paradex.py +2085 -0
- ccxt/paymium.py +56 -32
- ccxt/phemex.py +572 -196
- ccxt/poloniex.py +218 -95
- ccxt/poloniexfutures.py +260 -92
- ccxt/pro/__init__.py +29 -5
- ccxt/pro/alpaca.py +32 -17
- ccxt/pro/ascendex.py +62 -14
- ccxt/pro/bequant.py +4 -0
- ccxt/pro/binance.py +1596 -329
- ccxt/pro/binancecoinm.py +1 -0
- ccxt/pro/binanceus.py +2 -9
- ccxt/pro/binanceusdm.py +2 -0
- ccxt/pro/bingx.py +527 -134
- ccxt/pro/bitcoincom.py +4 -1
- ccxt/pro/bitfinex.py +731 -266
- ccxt/pro/bitfinex1.py +635 -0
- ccxt/pro/bitget.py +726 -357
- ccxt/pro/bithumb.py +380 -0
- ccxt/pro/bitmart.py +143 -39
- ccxt/pro/bitmex.py +199 -40
- ccxt/pro/bitopro.py +25 -13
- ccxt/pro/bitrue.py +31 -32
- ccxt/pro/bitstamp.py +7 -6
- ccxt/pro/bitvavo.py +203 -81
- ccxt/pro/blockchaincom.py +30 -17
- ccxt/pro/blofin.py +692 -0
- ccxt/pro/bybit.py +791 -82
- ccxt/pro/cex.py +99 -51
- ccxt/pro/coinbase.py +220 -30
- ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
- ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
- ccxt/pro/coinbaseinternational.py +193 -30
- ccxt/pro/coincatch.py +1464 -0
- ccxt/pro/coincheck.py +11 -6
- ccxt/pro/coinex.py +965 -665
- ccxt/pro/coinone.py +17 -10
- ccxt/pro/cryptocom.py +446 -66
- ccxt/pro/currencycom.py +11 -10
- ccxt/pro/defx.py +832 -0
- ccxt/pro/deribit.py +167 -31
- ccxt/pro/exmo.py +252 -20
- ccxt/pro/gate.py +729 -64
- ccxt/pro/gemini.py +44 -26
- ccxt/pro/hashkey.py +802 -0
- ccxt/pro/hitbtc.py +208 -103
- ccxt/pro/hollaex.py +25 -9
- ccxt/pro/htx.py +83 -39
- ccxt/pro/huobijp.py +17 -16
- ccxt/pro/hyperliquid.py +502 -31
- ccxt/pro/idex.py +28 -13
- ccxt/pro/independentreserve.py +21 -16
- ccxt/pro/kraken.py +298 -51
- ccxt/pro/krakenfutures.py +166 -75
- ccxt/pro/kucoin.py +395 -77
- ccxt/pro/kucoinfutures.py +400 -99
- ccxt/pro/lbank.py +52 -31
- ccxt/pro/luno.py +12 -10
- ccxt/pro/mexc.py +400 -50
- ccxt/pro/myokx.py +28 -0
- ccxt/pro/ndax.py +25 -12
- ccxt/pro/okcoin.py +28 -9
- ccxt/pro/okx.py +935 -124
- ccxt/pro/onetrading.py +41 -24
- ccxt/pro/oxfun.py +1054 -0
- ccxt/pro/p2b.py +100 -24
- ccxt/pro/paradex.py +352 -0
- ccxt/pro/phemex.py +92 -33
- ccxt/pro/poloniex.py +128 -49
- ccxt/pro/poloniexfutures.py +53 -32
- ccxt/pro/probit.py +92 -85
- ccxt/pro/upbit.py +401 -8
- ccxt/pro/vertex.py +943 -0
- ccxt/pro/wazirx.py +46 -28
- ccxt/pro/whitebit.py +65 -12
- ccxt/pro/woo.py +437 -65
- ccxt/pro/woofipro.py +1271 -0
- ccxt/pro/xt.py +1067 -0
- ccxt/probit.py +143 -110
- ccxt/static_dependencies/__init__.py +1 -1
- ccxt/static_dependencies/lark/__init__.py +38 -0
- ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
- ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
- ccxt/static_dependencies/lark/ast_utils.py +59 -0
- ccxt/static_dependencies/lark/common.py +86 -0
- ccxt/static_dependencies/lark/exceptions.py +292 -0
- ccxt/static_dependencies/lark/grammar.py +130 -0
- ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
- ccxt/static_dependencies/lark/indenter.py +143 -0
- ccxt/static_dependencies/lark/lark.py +658 -0
- ccxt/static_dependencies/lark/lexer.py +678 -0
- ccxt/static_dependencies/lark/load_grammar.py +1428 -0
- ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
- ccxt/static_dependencies/lark/parser_frontends.py +257 -0
- ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
- ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
- ccxt/static_dependencies/lark/parsers/earley.py +314 -0
- ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
- ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
- ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
- ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
- ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
- ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
- ccxt/static_dependencies/lark/py.typed +0 -0
- ccxt/static_dependencies/lark/reconstruct.py +107 -0
- ccxt/static_dependencies/lark/tools/__init__.py +70 -0
- ccxt/static_dependencies/lark/tools/nearley.py +202 -0
- ccxt/static_dependencies/lark/tools/serialize.py +32 -0
- ccxt/static_dependencies/lark/tools/standalone.py +196 -0
- ccxt/static_dependencies/lark/tree.py +267 -0
- ccxt/static_dependencies/lark/tree_matcher.py +186 -0
- ccxt/static_dependencies/lark/tree_templates.py +180 -0
- ccxt/static_dependencies/lark/utils.py +343 -0
- ccxt/static_dependencies/lark/visitors.py +596 -0
- ccxt/static_dependencies/marshmallow/__init__.py +81 -0
- ccxt/static_dependencies/marshmallow/base.py +65 -0
- ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
- ccxt/static_dependencies/marshmallow/decorators.py +231 -0
- ccxt/static_dependencies/marshmallow/error_store.py +60 -0
- ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
- ccxt/static_dependencies/marshmallow/fields.py +2114 -0
- ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
- ccxt/static_dependencies/marshmallow/py.typed +0 -0
- ccxt/static_dependencies/marshmallow/schema.py +1228 -0
- ccxt/static_dependencies/marshmallow/types.py +12 -0
- ccxt/static_dependencies/marshmallow/utils.py +378 -0
- ccxt/static_dependencies/marshmallow/validate.py +678 -0
- ccxt/static_dependencies/marshmallow/warnings.py +2 -0
- ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
- ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
- ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
- ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
- ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
- ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
- ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
- ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
- ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
- ccxt/static_dependencies/starknet/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
- ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
- ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
- ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
- ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
- ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
- ccxt/static_dependencies/starknet/common.py +15 -0
- ccxt/static_dependencies/starknet/constants.py +39 -0
- ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
- ccxt/static_dependencies/starknet/hash/address.py +79 -0
- ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
- ccxt/static_dependencies/starknet/hash/selector.py +16 -0
- ccxt/static_dependencies/starknet/hash/storage.py +12 -0
- ccxt/static_dependencies/starknet/hash/utils.py +78 -0
- ccxt/static_dependencies/starknet/models/__init__.py +0 -0
- ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
- ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
- ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
- ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
- ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
- ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
- ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
- ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
- ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
- ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
- ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
- ccxt/static_dependencies/starknet/utils/schema.py +13 -0
- ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
- ccxt/static_dependencies/starkware/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
- ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
- ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
- ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
- ccxt/static_dependencies/sympy/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
- ccxt/static_dependencies/sympy/external/__init__.py +0 -0
- ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
- ccxt/static_dependencies/sympy/external/importtools.py +187 -0
- ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
- ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
- ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
- ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
- ccxt/test/{test_async.py → tests_async.py} +456 -391
- ccxt/test/tests_helpers.py +285 -0
- ccxt/test/tests_init.py +39 -0
- ccxt/test/{test_sync.py → tests_sync.py} +456 -393
- ccxt/timex.py +123 -70
- ccxt/tokocrypto.py +129 -93
- ccxt/tradeogre.py +39 -25
- ccxt/upbit.py +322 -113
- ccxt/vertex.py +2983 -0
- ccxt/wavesexchange.py +227 -173
- ccxt/wazirx.py +145 -65
- ccxt/whitebit.py +533 -138
- ccxt/woo.py +1137 -296
- ccxt/woofipro.py +2716 -0
- ccxt/xt.py +4627 -0
- ccxt/yobit.py +159 -92
- ccxt/zaif.py +80 -33
- ccxt/zonda.py +140 -69
- ccxt-4.4.49.dist-info/LICENSE.txt +21 -0
- ccxt-4.4.49.dist-info/METADATA +646 -0
- ccxt-4.4.49.dist-info/RECORD +669 -0
- {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/WHEEL +1 -1
- ccxt/abstract/bitbay.py +0 -47
- ccxt/abstract/bitfinex2.py +0 -139
- ccxt/abstract/hitbtc3.py +0 -115
- ccxt/async_support/bitbay.py +0 -17
- ccxt/async_support/bitfinex2.py +0 -3496
- ccxt/async_support/flowbtc.py +0 -34
- ccxt/bitbay.py +0 -17
- ccxt/bitfinex2.py +0 -3496
- ccxt/flowbtc.py +0 -34
- ccxt/hitbtc3.py +0 -16
- ccxt/pro/bitfinex2.py +0 -1081
- ccxt/test/base/__init__.py +0 -28
- ccxt/test/base/test_account.py +0 -26
- ccxt/test/base/test_balance.py +0 -56
- ccxt/test/base/test_borrow_interest.py +0 -35
- ccxt/test/base/test_borrow_rate.py +0 -32
- ccxt/test/base/test_calculate_fee.py +0 -51
- ccxt/test/base/test_crypto.py +0 -127
- ccxt/test/base/test_currency.py +0 -76
- ccxt/test/base/test_datetime.py +0 -103
- ccxt/test/base/test_decimal_to_precision.py +0 -392
- ccxt/test/base/test_deep_extend.py +0 -68
- ccxt/test/base/test_deposit_withdrawal.py +0 -50
- ccxt/test/base/test_exchange_datetime_functions.py +0 -76
- ccxt/test/base/test_funding_rate_history.py +0 -29
- ccxt/test/base/test_last_price.py +0 -32
- ccxt/test/base/test_ledger_entry.py +0 -45
- ccxt/test/base/test_ledger_item.py +0 -48
- ccxt/test/base/test_leverage_tier.py +0 -33
- ccxt/test/base/test_margin_mode.py +0 -24
- ccxt/test/base/test_margin_modification.py +0 -35
- ccxt/test/base/test_market.py +0 -190
- ccxt/test/base/test_number.py +0 -411
- ccxt/test/base/test_ohlcv.py +0 -32
- ccxt/test/base/test_open_interest.py +0 -32
- ccxt/test/base/test_order.py +0 -64
- ccxt/test/base/test_order_book.py +0 -63
- ccxt/test/base/test_position.py +0 -60
- ccxt/test/base/test_shared_methods.py +0 -345
- ccxt/test/base/test_status.py +0 -24
- ccxt/test/base/test_throttle.py +0 -126
- ccxt/test/base/test_ticker.py +0 -86
- ccxt/test/base/test_trade.py +0 -47
- ccxt/test/base/test_trading_fee.py +0 -26
- ccxt/test/base/test_transaction.py +0 -39
- ccxt-4.2.77.dist-info/METADATA +0 -626
- ccxt-4.2.77.dist-info/RECORD +0 -534
- {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/top_level.txt +0 -0
ccxt/async_support/digifinex.py
CHANGED
@@ -8,15 +8,15 @@ from ccxt.abstract.digifinex import ImplicitAPI
|
|
8
8
|
import asyncio
|
9
9
|
import hashlib
|
10
10
|
import json
|
11
|
-
from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
|
11
|
+
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
|
12
12
|
from typing import List
|
13
13
|
from ccxt.base.errors import ExchangeError
|
14
|
+
from ccxt.base.errors import AuthenticationError
|
14
15
|
from ccxt.base.errors import PermissionDenied
|
15
16
|
from ccxt.base.errors import AccountSuspended
|
16
17
|
from ccxt.base.errors import ArgumentsRequired
|
17
18
|
from ccxt.base.errors import BadRequest
|
18
19
|
from ccxt.base.errors import BadSymbol
|
19
|
-
from ccxt.base.errors import BadResponse
|
20
20
|
from ccxt.base.errors import InsufficientFunds
|
21
21
|
from ccxt.base.errors import InvalidAddress
|
22
22
|
from ccxt.base.errors import InvalidOrder
|
@@ -26,7 +26,7 @@ from ccxt.base.errors import NetworkError
|
|
26
26
|
from ccxt.base.errors import DDoSProtection
|
27
27
|
from ccxt.base.errors import RateLimitExceeded
|
28
28
|
from ccxt.base.errors import InvalidNonce
|
29
|
-
from ccxt.base.errors import
|
29
|
+
from ccxt.base.errors import BadResponse
|
30
30
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
31
31
|
from ccxt.base.precise import Precise
|
32
32
|
|
@@ -68,10 +68,14 @@ class digifinex(Exchange, ImplicitAPI):
|
|
68
68
|
'fetchCrossBorrowRates': True,
|
69
69
|
'fetchCurrencies': True,
|
70
70
|
'fetchDepositAddress': True,
|
71
|
+
'fetchDepositAddresses': False,
|
72
|
+
'fetchDepositAddressesByNetwork': False,
|
71
73
|
'fetchDeposits': True,
|
72
74
|
'fetchDepositWithdrawFee': 'emulated',
|
73
75
|
'fetchDepositWithdrawFees': True,
|
74
76
|
'fetchFundingHistory': True,
|
77
|
+
'fetchFundingInterval': True,
|
78
|
+
'fetchFundingIntervals': False,
|
75
79
|
'fetchFundingRate': True,
|
76
80
|
'fetchFundingRateHistory': True,
|
77
81
|
'fetchFundingRates': False,
|
@@ -227,6 +231,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
227
231
|
'trade/order_info',
|
228
232
|
],
|
229
233
|
'post': [
|
234
|
+
'account/transfer',
|
230
235
|
'account/leverage',
|
231
236
|
'account/position_mode',
|
232
237
|
'account/position_margin',
|
@@ -249,6 +254,109 @@ class digifinex(Exchange, ImplicitAPI):
|
|
249
254
|
},
|
250
255
|
},
|
251
256
|
},
|
257
|
+
'features': {
|
258
|
+
'default': {
|
259
|
+
'sandbox': False,
|
260
|
+
'createOrder': {
|
261
|
+
'marginMode': True,
|
262
|
+
'triggerPrice': False,
|
263
|
+
'triggerPriceType': None,
|
264
|
+
'triggerDirection': False,
|
265
|
+
'stopLossPrice': False,
|
266
|
+
'takeProfitPrice': False,
|
267
|
+
'attachedStopLossTakeProfit': None,
|
268
|
+
'timeInForce': {
|
269
|
+
'IOC': False,
|
270
|
+
'FOK': False,
|
271
|
+
'PO': True,
|
272
|
+
'GTD': False,
|
273
|
+
},
|
274
|
+
'hedged': False,
|
275
|
+
'selfTradePrevention': False,
|
276
|
+
'trailing': False,
|
277
|
+
'leverage': False,
|
278
|
+
'marketBuyByCost': False,
|
279
|
+
'marketBuyRequiresPrice': False,
|
280
|
+
'iceberg': False,
|
281
|
+
},
|
282
|
+
'createOrders': {
|
283
|
+
'max': 10,
|
284
|
+
'marginMode': True,
|
285
|
+
},
|
286
|
+
'fetchMyTrades': {
|
287
|
+
'marginMode': True,
|
288
|
+
'limit': 500,
|
289
|
+
'daysBack': 100000, # todo
|
290
|
+
'untilDays': 30,
|
291
|
+
},
|
292
|
+
'fetchOrder': {
|
293
|
+
'marginMode': True,
|
294
|
+
'trigger': False,
|
295
|
+
'trailing': False,
|
296
|
+
'marketType': True,
|
297
|
+
},
|
298
|
+
'fetchOpenOrders': {
|
299
|
+
'marginMode': True,
|
300
|
+
'limit': None,
|
301
|
+
'trigger': False,
|
302
|
+
'trailing': False,
|
303
|
+
},
|
304
|
+
'fetchOrders': {
|
305
|
+
'marginMode': True,
|
306
|
+
'limit': 100,
|
307
|
+
'daysBack': 100000, # todo
|
308
|
+
'untilDays': 30,
|
309
|
+
'trigger': False,
|
310
|
+
'trailing': False,
|
311
|
+
},
|
312
|
+
'fetchClosedOrders': None,
|
313
|
+
'fetchOHLCV': {
|
314
|
+
'limit': 500,
|
315
|
+
},
|
316
|
+
},
|
317
|
+
'spot': {
|
318
|
+
'extends': 'default',
|
319
|
+
},
|
320
|
+
'forDerivatives': {
|
321
|
+
'extends': 'default',
|
322
|
+
'createOrders': {
|
323
|
+
'max': 20,
|
324
|
+
'marginMode': False,
|
325
|
+
},
|
326
|
+
'fetchMyTrades': {
|
327
|
+
'marginMode': False,
|
328
|
+
'limit': 100,
|
329
|
+
'daysBack': 100000, # todo
|
330
|
+
'untilDays': 100000, # todo
|
331
|
+
},
|
332
|
+
'fetchOrder': {
|
333
|
+
'marginMode': False,
|
334
|
+
},
|
335
|
+
'fetchOpenOrders': {
|
336
|
+
'marginMode': False,
|
337
|
+
'limit': 100,
|
338
|
+
},
|
339
|
+
'fetchOrders': {
|
340
|
+
'marginMode': False,
|
341
|
+
'daysBack': 100000, # todo
|
342
|
+
},
|
343
|
+
'fetchOHLCV': {
|
344
|
+
'limit': 100,
|
345
|
+
},
|
346
|
+
},
|
347
|
+
'swap': {
|
348
|
+
'linear': {
|
349
|
+
'extends': 'forDerivatives',
|
350
|
+
},
|
351
|
+
'inverse': {
|
352
|
+
'extends': 'forDerivatives',
|
353
|
+
},
|
354
|
+
},
|
355
|
+
'future': {
|
356
|
+
'linear': None,
|
357
|
+
'inverse': None,
|
358
|
+
},
|
359
|
+
},
|
252
360
|
'fees': {
|
253
361
|
'trading': {
|
254
362
|
'tierBased': True,
|
@@ -366,7 +474,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
366
474
|
},
|
367
475
|
})
|
368
476
|
|
369
|
-
async def fetch_currencies(self, params={}):
|
477
|
+
async def fetch_currencies(self, params={}) -> Currencies:
|
370
478
|
"""
|
371
479
|
fetches all available currencies on an exchange
|
372
480
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -411,7 +519,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
411
519
|
# }
|
412
520
|
#
|
413
521
|
data = self.safe_value(response, 'data', [])
|
414
|
-
result = {}
|
522
|
+
result: dict = {}
|
415
523
|
for i in range(0, len(data)):
|
416
524
|
currency = data[i]
|
417
525
|
id = self.safe_string(currency, 'currency')
|
@@ -434,7 +542,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
434
542
|
networkCode = None
|
435
543
|
if networkId is not None:
|
436
544
|
networkCode = self.network_id_to_code(networkId)
|
437
|
-
network = {
|
545
|
+
network: dict = {
|
438
546
|
'info': currency,
|
439
547
|
'id': networkId,
|
440
548
|
'network': networkCode,
|
@@ -523,7 +631,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
523
631
|
result[code]['precision'] = precision if (result[code]['precision'] is None) else max(result[code]['precision'], precision)
|
524
632
|
return result
|
525
633
|
|
526
|
-
async def fetch_markets(self, params={}):
|
634
|
+
async def fetch_markets(self, params={}) -> List[Market]:
|
527
635
|
"""
|
528
636
|
retrieves data on all markets for digifinex
|
529
637
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -789,7 +897,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
789
897
|
# "time_stamp": 1661487402396
|
790
898
|
# }
|
791
899
|
#
|
792
|
-
result = {'info': response}
|
900
|
+
result: dict = {'info': response}
|
793
901
|
for i in range(0, len(response)):
|
794
902
|
balance = response[i]
|
795
903
|
currencyId = self.safe_string(balance, 'currency')
|
@@ -806,9 +914,11 @@ class digifinex(Exchange, ImplicitAPI):
|
|
806
914
|
async def fetch_balance(self, params={}) -> Balances:
|
807
915
|
"""
|
808
916
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
809
|
-
|
810
|
-
|
811
|
-
|
917
|
+
|
918
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#spot-account-assets
|
919
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#margin-assets
|
920
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#accountbalance
|
921
|
+
|
812
922
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
813
923
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
814
924
|
"""
|
@@ -869,8 +979,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
869
979
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
870
980
|
"""
|
871
981
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
872
|
-
|
873
|
-
|
982
|
+
|
983
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#get-orderbook
|
984
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#orderbook
|
985
|
+
|
874
986
|
:param str symbol: unified symbol of the market to fetch the order book for
|
875
987
|
:param int [limit]: the maximum amount of order book entries to return
|
876
988
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -879,7 +991,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
879
991
|
await self.load_markets()
|
880
992
|
market = self.market(symbol)
|
881
993
|
marketType, query = self.handle_market_type_and_params('fetchOrderBook', market, params)
|
882
|
-
request = {}
|
994
|
+
request: dict = {}
|
883
995
|
if limit is not None:
|
884
996
|
request['limit'] = limit
|
885
997
|
response = None
|
@@ -940,8 +1052,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
940
1052
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
941
1053
|
"""
|
942
1054
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
943
|
-
|
944
|
-
|
1055
|
+
|
1056
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#ticker-price
|
1057
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#tickers
|
1058
|
+
|
945
1059
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
946
1060
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
947
1061
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -954,7 +1068,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
954
1068
|
market = self.market(first)
|
955
1069
|
type = None
|
956
1070
|
type, params = self.handle_market_type_and_params('fetchTickers', market, params)
|
957
|
-
request = {}
|
1071
|
+
request: dict = {}
|
958
1072
|
response = None
|
959
1073
|
if type == 'swap':
|
960
1074
|
response = await self.publicSwapGetPublicTickers(self.extend(request, params))
|
@@ -1008,7 +1122,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1008
1122
|
# ]
|
1009
1123
|
# }
|
1010
1124
|
#
|
1011
|
-
result = {}
|
1125
|
+
result: dict = {}
|
1012
1126
|
tickers = self.safe_value_2(response, 'ticker', 'data', [])
|
1013
1127
|
date = self.safe_integer(response, 'date')
|
1014
1128
|
for i in range(0, len(tickers)):
|
@@ -1023,15 +1137,17 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1023
1137
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
1024
1138
|
"""
|
1025
1139
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
1026
|
-
|
1027
|
-
|
1140
|
+
|
1141
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#ticker-price
|
1142
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#ticker
|
1143
|
+
|
1028
1144
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
1029
1145
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1030
1146
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
1031
1147
|
"""
|
1032
1148
|
await self.load_markets()
|
1033
1149
|
market = self.market(symbol)
|
1034
|
-
request = {}
|
1150
|
+
request: dict = {}
|
1035
1151
|
response = None
|
1036
1152
|
if market['swap']:
|
1037
1153
|
request['instrument_id'] = market['id']
|
@@ -1095,7 +1211,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1095
1211
|
result = self.extend({'date': date}, firstTicker)
|
1096
1212
|
return self.parse_ticker(result, market)
|
1097
1213
|
|
1098
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
1214
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
1099
1215
|
#
|
1100
1216
|
# spot: fetchTicker, fetchTickers
|
1101
1217
|
#
|
@@ -1164,10 +1280,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1164
1280
|
'average': None,
|
1165
1281
|
'baseVolume': self.safe_string_2(ticker, 'vol', 'volume_24h'),
|
1166
1282
|
'quoteVolume': self.safe_string(ticker, 'base_vol'),
|
1283
|
+
'markPrice': self.safe_string(ticker, 'mark_price'),
|
1284
|
+
'indexPrice': indexPrice,
|
1167
1285
|
'info': ticker,
|
1168
1286
|
}, market)
|
1169
1287
|
|
1170
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
1288
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
1171
1289
|
#
|
1172
1290
|
# spot: fetchTrades
|
1173
1291
|
#
|
@@ -1336,8 +1454,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1336
1454
|
async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
1337
1455
|
"""
|
1338
1456
|
get the list of most recent trades for a particular symbol
|
1339
|
-
|
1340
|
-
|
1457
|
+
|
1458
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#get-recent-trades
|
1459
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#recenttrades
|
1460
|
+
|
1341
1461
|
:param str symbol: unified symbol of the market to fetch trades for
|
1342
1462
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
1343
1463
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -1346,7 +1466,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1346
1466
|
"""
|
1347
1467
|
await self.load_markets()
|
1348
1468
|
market = self.market(symbol)
|
1349
|
-
request = {}
|
1469
|
+
request: dict = {}
|
1350
1470
|
if limit is not None:
|
1351
1471
|
request['limit'] = min(limit, 100) if market['swap'] else limit
|
1352
1472
|
response = None
|
@@ -1397,7 +1517,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1397
1517
|
# ]
|
1398
1518
|
# }
|
1399
1519
|
#
|
1400
|
-
data = self.
|
1520
|
+
data = self.safe_list(response, 'data', [])
|
1401
1521
|
return self.parse_trades(data, market, since, limit)
|
1402
1522
|
|
1403
1523
|
def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
|
@@ -1433,39 +1553,53 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1433
1553
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
1434
1554
|
"""
|
1435
1555
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
1436
|
-
|
1437
|
-
|
1556
|
+
|
1557
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#get-candles-data
|
1558
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#recentcandle
|
1559
|
+
|
1438
1560
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
1439
1561
|
:param str timeframe: the length of time each candle represents
|
1440
1562
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
1441
1563
|
:param int [limit]: the maximum amount of candles to fetch
|
1442
1564
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1565
|
+
:param int [params.until]: timestamp in ms of the latest candle to fetch
|
1443
1566
|
:returns int[][]: A list of candles ordered, open, high, low, close, volume
|
1444
1567
|
"""
|
1445
1568
|
await self.load_markets()
|
1446
1569
|
market = self.market(symbol)
|
1447
|
-
request = {}
|
1570
|
+
request: dict = {}
|
1448
1571
|
response = None
|
1449
1572
|
if market['swap']:
|
1450
1573
|
request['instrument_id'] = market['id']
|
1451
1574
|
request['granularity'] = timeframe
|
1452
1575
|
if limit is not None:
|
1453
|
-
request['limit'] = limit
|
1576
|
+
request['limit'] = min(limit, 100)
|
1454
1577
|
response = await self.publicSwapGetPublicCandles(self.extend(request, params))
|
1455
1578
|
else:
|
1579
|
+
until = self.safe_integer(params, 'until')
|
1456
1580
|
request['symbol'] = market['id']
|
1457
1581
|
request['period'] = self.safe_string(self.timeframes, timeframe, timeframe)
|
1458
|
-
|
1459
|
-
|
1582
|
+
startTime = since
|
1583
|
+
duration = self.parse_timeframe(timeframe)
|
1584
|
+
if startTime is None:
|
1585
|
+
if (limit is not None) or (until is not None):
|
1586
|
+
endTime = until if (until is not None) else self.milliseconds()
|
1587
|
+
startLimit = limit if (limit is not None) else 200
|
1588
|
+
startTime = endTime - (startLimit * duration * 1000)
|
1589
|
+
if startTime is not None:
|
1590
|
+
startTime = self.parse_to_int(startTime / 1000)
|
1460
1591
|
request['start_time'] = startTime
|
1461
|
-
if limit is not None:
|
1462
|
-
|
1463
|
-
|
1464
|
-
|
1465
|
-
|
1466
|
-
|
1467
|
-
|
1468
|
-
|
1592
|
+
if (limit is not None) or (until is not None):
|
1593
|
+
if until is not None:
|
1594
|
+
endByUntil = self.parse_to_int(until / 1000)
|
1595
|
+
if limit is not None:
|
1596
|
+
endByLimit = self.sum(startTime, limit * duration)
|
1597
|
+
request['end_time'] = min(endByLimit, endByUntil)
|
1598
|
+
else:
|
1599
|
+
request['end_time'] = endByUntil
|
1600
|
+
else:
|
1601
|
+
request['end_time'] = self.sum(startTime, limit * duration)
|
1602
|
+
params = self.omit(params, 'until')
|
1469
1603
|
response = await self.publicSpotGetKline(self.extend(request, params))
|
1470
1604
|
#
|
1471
1605
|
# spot
|
@@ -1505,13 +1639,15 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1505
1639
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1506
1640
|
"""
|
1507
1641
|
create a trade order
|
1508
|
-
|
1509
|
-
|
1642
|
+
|
1643
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#create-new-order
|
1644
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#orderplace
|
1645
|
+
|
1510
1646
|
:param str symbol: unified symbol of the market to create an order in
|
1511
1647
|
:param str type: 'market' or 'limit'
|
1512
1648
|
:param str side: 'buy' or 'sell'
|
1513
1649
|
: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
|
1514
|
-
:param float [price]: the price at which the order is to be
|
1650
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1515
1651
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1516
1652
|
:param str [params.timeInForce]: "GTC", "IOC", "FOK", or "PO"
|
1517
1653
|
:param bool [params.postOnly]: True or False
|
@@ -1559,8 +1695,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1559
1695
|
async def create_orders(self, orders: List[OrderRequest], params={}):
|
1560
1696
|
"""
|
1561
1697
|
create a list of trade orders(all orders should be of the same symbol)
|
1562
|
-
|
1563
|
-
|
1698
|
+
|
1699
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#create-multiple-order
|
1700
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#batchorder
|
1701
|
+
|
1564
1702
|
: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
|
1565
1703
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1566
1704
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -1593,7 +1731,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1593
1731
|
orderRequest = self.create_order_request(marketId, type, side, amount, price, orderParams)
|
1594
1732
|
ordersRequests.append(orderRequest)
|
1595
1733
|
market = self.market(symbol)
|
1596
|
-
request = {}
|
1734
|
+
request: dict = {}
|
1597
1735
|
response = None
|
1598
1736
|
if market['swap']:
|
1599
1737
|
response = await self.privateSwapPostTradeBatchOrder(ordersRequests)
|
@@ -1631,7 +1769,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1631
1769
|
result = []
|
1632
1770
|
for i in range(0, len(orders)):
|
1633
1771
|
rawOrder = orders[i]
|
1634
|
-
individualOrder = {}
|
1772
|
+
individualOrder: dict = {}
|
1635
1773
|
individualOrder['order_id'] = data[i]
|
1636
1774
|
individualOrder['instrument_id'] = market['id']
|
1637
1775
|
individualOrder['amount'] = self.safe_number(rawOrder, 'amount')
|
@@ -1641,13 +1779,13 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1641
1779
|
|
1642
1780
|
def create_order_request(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1643
1781
|
"""
|
1644
|
-
|
1782
|
+
@ignore
|
1645
1783
|
helper function to build request
|
1646
1784
|
:param str symbol: unified symbol of the market to create an order in
|
1647
1785
|
:param str type: 'market' or 'limit'
|
1648
1786
|
:param str side: 'buy' or 'sell'
|
1649
1787
|
: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
|
1650
|
-
:param float [price]: the price at which the order is to be
|
1788
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1651
1789
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1652
1790
|
:returns dict: request to be sent to the exchange
|
1653
1791
|
"""
|
@@ -1658,7 +1796,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1658
1796
|
marginMode, params = self.handle_margin_mode_and_params('createOrderRequest', params)
|
1659
1797
|
if marginMode is not None:
|
1660
1798
|
marketType = 'margin'
|
1661
|
-
request = {}
|
1799
|
+
request: dict = {}
|
1662
1800
|
swap = (marketType == 'swap')
|
1663
1801
|
isMarketOrder = (type == 'market')
|
1664
1802
|
isLimitOrder = (type == 'limit')
|
@@ -1733,7 +1871,9 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1733
1871
|
async def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
|
1734
1872
|
"""
|
1735
1873
|
create a market buy order by providing the symbol and cost
|
1736
|
-
|
1874
|
+
|
1875
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#create-new-order
|
1876
|
+
|
1737
1877
|
:param str symbol: unified symbol of the market to create an order in
|
1738
1878
|
:param float cost: how much you want to trade in units of the quote currency
|
1739
1879
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1749,8 +1889,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1749
1889
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
1750
1890
|
"""
|
1751
1891
|
cancels an open order
|
1752
|
-
|
1753
|
-
|
1892
|
+
|
1893
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#cancel-order
|
1894
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#cancelorder
|
1895
|
+
|
1754
1896
|
:param str id: order id
|
1755
1897
|
:param str symbol: not used by digifinex cancelOrder()
|
1756
1898
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1763,7 +1905,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1763
1905
|
id = str(id)
|
1764
1906
|
marketType = None
|
1765
1907
|
marketType, params = self.handle_market_type_and_params('cancelOrder', market, params)
|
1766
|
-
request = {
|
1908
|
+
request: dict = {
|
1767
1909
|
'order_id': id,
|
1768
1910
|
}
|
1769
1911
|
if marketType == 'swap':
|
@@ -1809,7 +1951,34 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1809
1951
|
numCanceledOrders = len(canceledOrders)
|
1810
1952
|
if numCanceledOrders != 1:
|
1811
1953
|
raise OrderNotFound(self.id + ' cancelOrder() ' + id + ' not found')
|
1812
|
-
|
1954
|
+
orders = self.parse_cancel_orders(response)
|
1955
|
+
return self.safe_dict(orders, 0)
|
1956
|
+
else:
|
1957
|
+
return self.safe_order({
|
1958
|
+
'info': response,
|
1959
|
+
'orderId': self.safe_string(response, 'data'),
|
1960
|
+
})
|
1961
|
+
|
1962
|
+
def parse_cancel_orders(self, response):
|
1963
|
+
success = self.safe_list(response, 'success')
|
1964
|
+
error = self.safe_list(response, 'error')
|
1965
|
+
result = []
|
1966
|
+
for i in range(0, len(success)):
|
1967
|
+
order = success[i]
|
1968
|
+
result.append(self.safe_order({
|
1969
|
+
'info': order,
|
1970
|
+
'id': order,
|
1971
|
+
'status': 'canceled',
|
1972
|
+
}))
|
1973
|
+
for i in range(0, len(error)):
|
1974
|
+
order = error[i]
|
1975
|
+
result.append(self.safe_order({
|
1976
|
+
'info': order,
|
1977
|
+
'id': self.safe_string_2(order, 'order-id', 'order_id'),
|
1978
|
+
'status': 'failed',
|
1979
|
+
'clientOrderId': self.safe_string(order, 'client-order-id'),
|
1980
|
+
}))
|
1981
|
+
return result
|
1813
1982
|
|
1814
1983
|
async def cancel_orders(self, ids, symbol: Str = None, params={}):
|
1815
1984
|
"""
|
@@ -1823,7 +1992,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1823
1992
|
defaultType = self.safe_string(self.options, 'defaultType', 'spot')
|
1824
1993
|
orderType = self.safe_string(params, 'type', defaultType)
|
1825
1994
|
params = self.omit(params, 'type')
|
1826
|
-
request = {
|
1995
|
+
request: dict = {
|
1827
1996
|
'market': orderType,
|
1828
1997
|
'order_id': ','.join(ids),
|
1829
1998
|
}
|
@@ -1840,14 +2009,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1840
2009
|
# ]
|
1841
2010
|
# }
|
1842
2011
|
#
|
1843
|
-
|
1844
|
-
numCanceledOrders = len(canceledOrders)
|
1845
|
-
if numCanceledOrders < 1:
|
1846
|
-
raise OrderNotFound(self.id + ' cancelOrders() error')
|
1847
|
-
return response
|
2012
|
+
return self.parse_cancel_orders(response)
|
1848
2013
|
|
1849
|
-
def parse_order_status(self, status):
|
1850
|
-
statuses = {
|
2014
|
+
def parse_order_status(self, status: Str):
|
2015
|
+
statuses: dict = {
|
1851
2016
|
'0': 'open',
|
1852
2017
|
'1': 'open', # partially filled
|
1853
2018
|
'2': 'closed',
|
@@ -1856,7 +2021,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1856
2021
|
}
|
1857
2022
|
return self.safe_string(statuses, status, status)
|
1858
2023
|
|
1859
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
2024
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1860
2025
|
#
|
1861
2026
|
# spot: createOrder
|
1862
2027
|
#
|
@@ -1975,7 +2140,6 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1975
2140
|
'postOnly': None,
|
1976
2141
|
'side': side,
|
1977
2142
|
'price': self.safe_number(order, 'price'),
|
1978
|
-
'stopPrice': None,
|
1979
2143
|
'triggerPrice': None,
|
1980
2144
|
'amount': self.safe_number_2(order, 'amount', 'size'),
|
1981
2145
|
'filled': self.safe_number_2(order, 'executed_amount', 'filled_qty'),
|
@@ -1992,8 +2156,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1992
2156
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1993
2157
|
"""
|
1994
2158
|
fetch all unfilled currently open orders
|
1995
|
-
|
1996
|
-
|
2159
|
+
|
2160
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#current-active-orders
|
2161
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#openorder
|
2162
|
+
|
1997
2163
|
:param str symbol: unified market symbol
|
1998
2164
|
:param int [since]: the earliest time in ms to fetch open orders for
|
1999
2165
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
@@ -2007,7 +2173,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2007
2173
|
marketType = None
|
2008
2174
|
marketType, params = self.handle_market_type_and_params('fetchOpenOrders', market, params)
|
2009
2175
|
marginMode, query = self.handle_margin_mode_and_params('fetchOpenOrders', params)
|
2010
|
-
request = {}
|
2176
|
+
request: dict = {}
|
2011
2177
|
swap = (marketType == 'swap')
|
2012
2178
|
if swap:
|
2013
2179
|
if since is not None:
|
@@ -2080,14 +2246,16 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2080
2246
|
# ]
|
2081
2247
|
# }
|
2082
2248
|
#
|
2083
|
-
data = self.
|
2249
|
+
data = self.safe_list(response, 'data', [])
|
2084
2250
|
return self.parse_orders(data, market, since, limit)
|
2085
2251
|
|
2086
2252
|
async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
2087
2253
|
"""
|
2088
2254
|
fetches information on multiple orders made by the user
|
2089
|
-
|
2090
|
-
|
2255
|
+
|
2256
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#get-all-orders-including-history-orders
|
2257
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#historyorder
|
2258
|
+
|
2091
2259
|
:param str symbol: unified market symbol of the market orders were made in
|
2092
2260
|
:param int [since]: the earliest time in ms to fetch orders for
|
2093
2261
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -2101,7 +2269,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2101
2269
|
marketType = None
|
2102
2270
|
marketType, params = self.handle_market_type_and_params('fetchOrders', market, params)
|
2103
2271
|
marginMode, query = self.handle_margin_mode_and_params('fetchOrders', params)
|
2104
|
-
request = {}
|
2272
|
+
request: dict = {}
|
2105
2273
|
if marketType == 'swap':
|
2106
2274
|
if since is not None:
|
2107
2275
|
request['start_timestamp'] = since
|
@@ -2175,14 +2343,16 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2175
2343
|
# ]
|
2176
2344
|
# }
|
2177
2345
|
#
|
2178
|
-
data = self.
|
2346
|
+
data = self.safe_list(response, 'data', [])
|
2179
2347
|
return self.parse_orders(data, market, since, limit)
|
2180
2348
|
|
2181
2349
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
2182
2350
|
"""
|
2183
2351
|
fetches information on an order made by the user
|
2184
|
-
|
2185
|
-
|
2352
|
+
|
2353
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#get-order-status
|
2354
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#orderinfo
|
2355
|
+
|
2186
2356
|
:param str id: order id
|
2187
2357
|
:param str symbol: unified symbol of the market the order was made in
|
2188
2358
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -2195,7 +2365,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2195
2365
|
marketType = None
|
2196
2366
|
marketType, params = self.handle_market_type_and_params('fetchOrder', market, params)
|
2197
2367
|
marginMode, query = self.handle_margin_mode_and_params('fetchOrder', params)
|
2198
|
-
request = {
|
2368
|
+
request: dict = {
|
2199
2369
|
'order_id': id,
|
2200
2370
|
}
|
2201
2371
|
if marketType == 'swap':
|
@@ -2270,8 +2440,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2270
2440
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
2271
2441
|
"""
|
2272
2442
|
fetch all trades made by the user
|
2273
|
-
|
2274
|
-
|
2443
|
+
|
2444
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#customer-39-s-trades
|
2445
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#historytrade
|
2446
|
+
|
2275
2447
|
:param str symbol: unified market symbol
|
2276
2448
|
:param int [since]: the earliest time in ms to fetch trades for
|
2277
2449
|
:param int [limit]: the maximum number of trades structures to retrieve
|
@@ -2280,7 +2452,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2280
2452
|
"""
|
2281
2453
|
await self.load_markets()
|
2282
2454
|
market = None
|
2283
|
-
request = {}
|
2455
|
+
request: dict = {}
|
2284
2456
|
if symbol is not None:
|
2285
2457
|
market = self.market(symbol)
|
2286
2458
|
marketType = None
|
@@ -2354,14 +2526,14 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2354
2526
|
# }
|
2355
2527
|
#
|
2356
2528
|
responseRequest = 'data' if (marketType == 'swap') else 'list'
|
2357
|
-
data = self.
|
2529
|
+
data = self.safe_list(response, responseRequest, [])
|
2358
2530
|
return self.parse_trades(data, market, since, limit)
|
2359
2531
|
|
2360
2532
|
def parse_ledger_entry_type(self, type):
|
2361
|
-
types = {}
|
2533
|
+
types: dict = {}
|
2362
2534
|
return self.safe_string(types, type, type)
|
2363
2535
|
|
2364
|
-
def parse_ledger_entry(self, item, currency: Currency = None):
|
2536
|
+
def parse_ledger_entry(self, item: dict, currency: Currency = None) -> LedgerEntry:
|
2365
2537
|
#
|
2366
2538
|
# spot and margin
|
2367
2539
|
#
|
@@ -2383,13 +2555,15 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2383
2555
|
# }
|
2384
2556
|
#
|
2385
2557
|
type = self.parse_ledger_entry_type(self.safe_string_2(item, 'type', 'finance_type'))
|
2386
|
-
|
2558
|
+
currencyId = self.safe_string_2(item, 'currency_mark', 'currency')
|
2559
|
+
code = self.safe_currency_code(currencyId, currency)
|
2560
|
+
currency = self.safe_currency(currencyId, currency)
|
2387
2561
|
amount = self.safe_number_2(item, 'num', 'change')
|
2388
2562
|
after = self.safe_number(item, 'balance')
|
2389
2563
|
timestamp = self.safe_timestamp(item, 'time')
|
2390
2564
|
if timestamp is None:
|
2391
2565
|
timestamp = self.safe_integer(item, 'timestamp')
|
2392
|
-
return {
|
2566
|
+
return self.safe_ledger_entry({
|
2393
2567
|
'info': item,
|
2394
2568
|
'id': None,
|
2395
2569
|
'direction': None,
|
@@ -2405,21 +2579,23 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2405
2579
|
'timestamp': timestamp,
|
2406
2580
|
'datetime': self.iso8601(timestamp),
|
2407
2581
|
'fee': None,
|
2408
|
-
}
|
2582
|
+
}, currency)
|
2409
2583
|
|
2410
|
-
async def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
2584
|
+
async def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
|
2411
2585
|
"""
|
2412
|
-
fetch the history of changes, actions done by the user or operations that altered balance of the user
|
2413
|
-
|
2414
|
-
|
2415
|
-
|
2586
|
+
fetch the history of changes, actions done by the user or operations that altered the balance of the user
|
2587
|
+
|
2588
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#spot-margin-otc-financial-logs
|
2589
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#bills
|
2590
|
+
|
2591
|
+
:param str [code]: unified currency code, default is None
|
2416
2592
|
:param int [since]: timestamp in ms of the earliest ledger entry, default is None
|
2417
|
-
:param int [limit]: max number of ledger
|
2593
|
+
:param int [limit]: max number of ledger entries to return, default is None
|
2418
2594
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2419
|
-
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger
|
2595
|
+
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
|
2420
2596
|
"""
|
2421
2597
|
await self.load_markets()
|
2422
|
-
request = {}
|
2598
|
+
request: dict = {}
|
2423
2599
|
marketType = None
|
2424
2600
|
marketType, params = self.handle_market_type_and_params('fetchLedger', None, params)
|
2425
2601
|
marginMode, query = self.handle_margin_mode_and_params('fetchLedger', params)
|
@@ -2488,7 +2664,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2488
2664
|
ledger = self.safe_value(data, 'finance', [])
|
2489
2665
|
return self.parse_ledger(ledger, currency, since, limit)
|
2490
2666
|
|
2491
|
-
def parse_deposit_address(self, depositAddress, currency: Currency = None):
|
2667
|
+
def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
|
2492
2668
|
#
|
2493
2669
|
# {
|
2494
2670
|
# "addressTag":"",
|
@@ -2504,12 +2680,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2504
2680
|
return {
|
2505
2681
|
'info': depositAddress,
|
2506
2682
|
'currency': code,
|
2683
|
+
'network': None,
|
2507
2684
|
'address': address,
|
2508
2685
|
'tag': tag,
|
2509
|
-
'network': None,
|
2510
2686
|
}
|
2511
2687
|
|
2512
|
-
async def fetch_deposit_address(self, code: str, params={}):
|
2688
|
+
async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
|
2513
2689
|
"""
|
2514
2690
|
fetch the deposit address for a currency associated with self account
|
2515
2691
|
:param str code: unified currency code
|
@@ -2518,7 +2694,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2518
2694
|
"""
|
2519
2695
|
await self.load_markets()
|
2520
2696
|
currency = self.currency(code)
|
2521
|
-
request = {
|
2697
|
+
request: dict = {
|
2522
2698
|
'currency': currency['id'],
|
2523
2699
|
}
|
2524
2700
|
response = await self.privateSpotGetDepositAddress(self.extend(request, params))
|
@@ -2545,7 +2721,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2545
2721
|
async def fetch_transactions_by_type(self, type, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
2546
2722
|
await self.load_markets()
|
2547
2723
|
currency = None
|
2548
|
-
request = {
|
2724
|
+
request: dict = {
|
2549
2725
|
# 'currency': currency['id'],
|
2550
2726
|
# '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
|
2551
2727
|
# 'size': 100, # default 100, max 500
|
@@ -2581,7 +2757,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2581
2757
|
# ]
|
2582
2758
|
# }
|
2583
2759
|
#
|
2584
|
-
data = self.
|
2760
|
+
data = self.safe_list(response, 'data', [])
|
2585
2761
|
return self.parse_transactions(data, currency, since, limit, {'type': type})
|
2586
2762
|
|
2587
2763
|
async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
@@ -2606,10 +2782,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2606
2782
|
"""
|
2607
2783
|
return await self.fetch_transactions_by_type('withdrawal', code, since, limit, params)
|
2608
2784
|
|
2609
|
-
def parse_transaction_status(self, status):
|
2785
|
+
def parse_transaction_status(self, status: Str):
|
2610
2786
|
# deposit state includes: 1(in deposit), 2(to be confirmed), 3(successfully deposited), 4(stopped)
|
2611
2787
|
# withdrawal state includes: 1(application in progress), 2(to be confirmed), 3(completed), 4(rejected)
|
2612
|
-
statuses = {
|
2788
|
+
statuses: dict = {
|
2613
2789
|
'1': 'pending', # in Progress
|
2614
2790
|
'2': 'pending', # to be confirmed
|
2615
2791
|
'3': 'ok', # Completed
|
@@ -2617,7 +2793,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2617
2793
|
}
|
2618
2794
|
return self.safe_string(statuses, status, status)
|
2619
2795
|
|
2620
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
2796
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
2621
2797
|
#
|
2622
2798
|
# withdraw
|
2623
2799
|
#
|
@@ -2680,20 +2856,31 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2680
2856
|
'fee': fee,
|
2681
2857
|
}
|
2682
2858
|
|
2683
|
-
def parse_transfer_status(self, status):
|
2684
|
-
statuses = {
|
2859
|
+
def parse_transfer_status(self, status: Str) -> Str:
|
2860
|
+
statuses: dict = {
|
2685
2861
|
'0': 'ok',
|
2686
2862
|
}
|
2687
2863
|
return self.safe_string(statuses, status, status)
|
2688
2864
|
|
2689
|
-
def parse_transfer(self, transfer, currency: Currency = None):
|
2865
|
+
def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
|
2690
2866
|
#
|
2691
|
-
# transfer
|
2867
|
+
# transfer between spot, margin and OTC
|
2692
2868
|
#
|
2693
2869
|
# {
|
2694
2870
|
# "code": 0
|
2695
2871
|
# }
|
2696
2872
|
#
|
2873
|
+
# transfer between spot and swap
|
2874
|
+
#
|
2875
|
+
# {
|
2876
|
+
# "code": 0,
|
2877
|
+
# "data": {
|
2878
|
+
# "type": 2,
|
2879
|
+
# "currency": "USDT",
|
2880
|
+
# "transfer_amount": "5"
|
2881
|
+
# }
|
2882
|
+
# }
|
2883
|
+
#
|
2697
2884
|
# fetchTransfers
|
2698
2885
|
#
|
2699
2886
|
# {
|
@@ -2706,7 +2893,8 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2706
2893
|
#
|
2707
2894
|
fromAccount = None
|
2708
2895
|
toAccount = None
|
2709
|
-
|
2896
|
+
data = self.safe_dict(transfer, 'data', transfer)
|
2897
|
+
type = self.safe_integer(data, 'type')
|
2710
2898
|
if type == 1:
|
2711
2899
|
fromAccount = 'spot'
|
2712
2900
|
toAccount = 'swap'
|
@@ -2719,8 +2907,8 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2719
2907
|
'id': self.safe_string(transfer, 'transfer_id'),
|
2720
2908
|
'timestamp': timestamp,
|
2721
2909
|
'datetime': self.iso8601(timestamp),
|
2722
|
-
'currency': self.safe_currency_code(self.safe_string(
|
2723
|
-
'amount': self.
|
2910
|
+
'currency': self.safe_currency_code(self.safe_string(data, 'currency'), currency),
|
2911
|
+
'amount': self.safe_number_2(data, 'amount', 'transfer_amount'),
|
2724
2912
|
'fromAccount': fromAccount,
|
2725
2913
|
'toAccount': toAccount,
|
2726
2914
|
'status': self.parse_transfer_status(self.safe_string(transfer, 'code')),
|
@@ -2729,33 +2917,59 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2729
2917
|
async def transfer(self, code: str, amount: float, fromAccount: str, toAccount: str, params={}) -> TransferEntry:
|
2730
2918
|
"""
|
2731
2919
|
transfer currency internally between wallets on the same account
|
2920
|
+
|
2921
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#transfer-assets-among-accounts
|
2922
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#accounttransfer
|
2923
|
+
|
2732
2924
|
:param str code: unified currency code
|
2733
2925
|
:param float amount: amount to transfer
|
2734
|
-
:param str fromAccount: account to transfer from
|
2735
|
-
:param str toAccount: account to transfer to
|
2926
|
+
:param str fromAccount: 'spot', 'swap', 'margin', 'OTC' - account to transfer from
|
2927
|
+
:param str toAccount: 'spot', 'swap', 'margin', 'OTC' - account to transfer to
|
2736
2928
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2737
2929
|
:returns dict: a `transfer structure <https://docs.ccxt.com/#/?id=transfer-structure>`
|
2738
2930
|
"""
|
2739
2931
|
await self.load_markets()
|
2740
2932
|
currency = self.currency(code)
|
2933
|
+
currencyId = currency['id']
|
2741
2934
|
accountsByType = self.safe_value(self.options, 'accountsByType', {})
|
2742
2935
|
fromId = self.safe_string(accountsByType, fromAccount, fromAccount)
|
2743
2936
|
toId = self.safe_string(accountsByType, toAccount, toAccount)
|
2744
|
-
request = {
|
2745
|
-
|
2746
|
-
|
2747
|
-
|
2748
|
-
|
2749
|
-
|
2750
|
-
|
2751
|
-
|
2752
|
-
|
2753
|
-
|
2754
|
-
|
2755
|
-
|
2937
|
+
request = {}
|
2938
|
+
fromSwap = (fromAccount == 'swap')
|
2939
|
+
toSwap = (toAccount == 'swap')
|
2940
|
+
response = None
|
2941
|
+
amountString = self.currency_to_precision(code, amount)
|
2942
|
+
if fromSwap or toSwap:
|
2943
|
+
if (fromId != '1') and (toId != '1'):
|
2944
|
+
raise ExchangeError(self.id + ' transfer() supports transferring between spot and swap, spot and margin, spot and OTC only')
|
2945
|
+
request['type'] = 1 if toSwap else 2 # 1 = spot to swap, 2 = swap to spot
|
2946
|
+
request['currency'] = currencyId
|
2947
|
+
request['transfer_amount'] = amountString
|
2948
|
+
#
|
2949
|
+
# {
|
2950
|
+
# "code": 0,
|
2951
|
+
# "data": {
|
2952
|
+
# "type": 2,
|
2953
|
+
# "currency": "USDT",
|
2954
|
+
# "transfer_amount": "5"
|
2955
|
+
# }
|
2956
|
+
# }
|
2957
|
+
#
|
2958
|
+
response = await self.privateSwapPostAccountTransfer(self.extend(request, params))
|
2959
|
+
else:
|
2960
|
+
request['currency_mark'] = currencyId
|
2961
|
+
request['num'] = amountString
|
2962
|
+
request['from'] = fromId # 1 = SPOT, 2 = MARGIN, 3 = OTC
|
2963
|
+
request['to'] = toId # 1 = SPOT, 2 = MARGIN, 3 = OTC
|
2964
|
+
#
|
2965
|
+
# {
|
2966
|
+
# "code": 0
|
2967
|
+
# }
|
2968
|
+
#
|
2969
|
+
response = await self.privateSpotPostTransfer(self.extend(request, params))
|
2756
2970
|
return self.parse_transfer(response, currency)
|
2757
2971
|
|
2758
|
-
async def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
2972
|
+
async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
2759
2973
|
"""
|
2760
2974
|
make a withdrawal
|
2761
2975
|
:param str code: unified currency code
|
@@ -2769,7 +2983,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2769
2983
|
self.check_address(address)
|
2770
2984
|
await self.load_markets()
|
2771
2985
|
currency = self.currency(code)
|
2772
|
-
request = {
|
2986
|
+
request: dict = {
|
2773
2987
|
# 'chain': 'ERC20', 'OMNI', 'TRC20', # required for USDT
|
2774
2988
|
'address': address,
|
2775
2989
|
'amount': self.currency_to_precision(code, amount),
|
@@ -2786,9 +3000,9 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2786
3000
|
#
|
2787
3001
|
return self.parse_transaction(response, currency)
|
2788
3002
|
|
2789
|
-
async def fetch_borrow_interest(self, code: Str = None, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
3003
|
+
async def fetch_borrow_interest(self, code: Str = None, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[BorrowInterest]:
|
2790
3004
|
await self.load_markets()
|
2791
|
-
request = {}
|
3005
|
+
request: dict = {}
|
2792
3006
|
market = None
|
2793
3007
|
if symbol is not None:
|
2794
3008
|
market = self.market(symbol)
|
@@ -2819,7 +3033,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2819
3033
|
interest = self.parse_borrow_interests(rows, market)
|
2820
3034
|
return self.filter_by_currency_since_limit(interest, code, since, limit)
|
2821
3035
|
|
2822
|
-
def parse_borrow_interest(self, info, market: Market = None):
|
3036
|
+
def parse_borrow_interest(self, info: dict, market: Market = None) -> BorrowInterest:
|
2823
3037
|
#
|
2824
3038
|
# {
|
2825
3039
|
# "amount": 0.0006103,
|
@@ -2841,27 +3055,29 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2841
3055
|
currency = None if (market is None) else market['base']
|
2842
3056
|
symbol = self.safe_symbol(marketId, market)
|
2843
3057
|
return {
|
2844
|
-
'
|
3058
|
+
'info': info,
|
2845
3059
|
'symbol': symbol,
|
2846
3060
|
'currency': currency,
|
2847
3061
|
'interest': None,
|
2848
3062
|
'interestRate': 0.001, # all interest rates on digifinex are 0.1%
|
2849
3063
|
'amountBorrowed': self.parse_number(amountBorrowed),
|
3064
|
+
'marginMode': None,
|
2850
3065
|
'timestamp': None,
|
2851
3066
|
'datetime': None,
|
2852
|
-
'info': info,
|
2853
3067
|
}
|
2854
3068
|
|
2855
|
-
async def fetch_cross_borrow_rate(self, code: str, params={}):
|
3069
|
+
async def fetch_cross_borrow_rate(self, code: str, params={}) -> CrossBorrowRate:
|
2856
3070
|
"""
|
2857
3071
|
fetch the rate of interest to borrow a currency for margin trading
|
2858
|
-
|
3072
|
+
|
3073
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#margin-assets
|
3074
|
+
|
2859
3075
|
:param str code: unified currency code
|
2860
3076
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2861
3077
|
:returns dict: a `borrow rate structure <https://github.com/ccxt/ccxt/wiki/Manual#borrow-rate-structure>`
|
2862
3078
|
"""
|
2863
3079
|
await self.load_markets()
|
2864
|
-
request = {}
|
3080
|
+
request: dict = {}
|
2865
3081
|
response = await self.privateSpotGetMarginAssets(self.extend(request, params))
|
2866
3082
|
#
|
2867
3083
|
# {
|
@@ -2889,10 +3105,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2889
3105
|
currency = self.currency(code)
|
2890
3106
|
return self.parse_borrow_rate(result, currency)
|
2891
3107
|
|
2892
|
-
async def fetch_cross_borrow_rates(self, params={}):
|
3108
|
+
async def fetch_cross_borrow_rates(self, params={}) -> CrossBorrowRates:
|
2893
3109
|
"""
|
2894
3110
|
fetch the borrow interest rates of all currencies
|
2895
|
-
|
3111
|
+
|
3112
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#margin-assets
|
3113
|
+
|
2896
3114
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2897
3115
|
:returns dict: a list of `borrow rate structures <https://docs.ccxt.com/#/?id=borrow-rate-structure>`
|
2898
3116
|
"""
|
@@ -2947,7 +3165,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2947
3165
|
# "currency": "USDT"
|
2948
3166
|
# },
|
2949
3167
|
#
|
2950
|
-
result = {}
|
3168
|
+
result: dict = {}
|
2951
3169
|
for i in range(0, len(info)):
|
2952
3170
|
item = info[i]
|
2953
3171
|
currency = self.safe_string(item, codeKey)
|
@@ -2956,10 +3174,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2956
3174
|
result[code] = borrowRate
|
2957
3175
|
return result
|
2958
3176
|
|
2959
|
-
async def fetch_funding_rate(self, symbol: str, params={}):
|
3177
|
+
async def fetch_funding_rate(self, symbol: str, params={}) -> FundingRate:
|
2960
3178
|
"""
|
2961
3179
|
fetch the current funding rate
|
2962
|
-
|
3180
|
+
|
3181
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#currentfundingrate
|
3182
|
+
|
2963
3183
|
:param str symbol: unified market symbol
|
2964
3184
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2965
3185
|
:returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
|
@@ -2968,7 +3188,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2968
3188
|
market = self.market(symbol)
|
2969
3189
|
if not market['swap']:
|
2970
3190
|
raise BadSymbol(self.id + ' fetchFundingRate() supports swap contracts only')
|
2971
|
-
request = {
|
3191
|
+
request: dict = {
|
2972
3192
|
'instrument_id': market['id'],
|
2973
3193
|
}
|
2974
3194
|
response = await self.publicSwapGetPublicFundingRate(self.extend(request, params))
|
@@ -2984,10 +3204,22 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2984
3204
|
# }
|
2985
3205
|
# }
|
2986
3206
|
#
|
2987
|
-
data = self.
|
3207
|
+
data = self.safe_dict(response, 'data', {})
|
2988
3208
|
return self.parse_funding_rate(data, market)
|
2989
3209
|
|
2990
|
-
def
|
3210
|
+
async def fetch_funding_interval(self, symbol: str, params={}) -> FundingRate:
|
3211
|
+
"""
|
3212
|
+
fetch the current funding rate interval
|
3213
|
+
|
3214
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#currentfundingrate
|
3215
|
+
|
3216
|
+
:param str symbol: unified market symbol
|
3217
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3218
|
+
:returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
|
3219
|
+
"""
|
3220
|
+
return await self.fetch_funding_rate(symbol, params)
|
3221
|
+
|
3222
|
+
def parse_funding_rate(self, contract, market: Market = None) -> FundingRate:
|
2991
3223
|
#
|
2992
3224
|
# {
|
2993
3225
|
# "instrument_id": "BTCUSDTPERP",
|
@@ -3000,6 +3232,9 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3000
3232
|
marketId = self.safe_string(contract, 'instrument_id')
|
3001
3233
|
timestamp = self.safe_integer(contract, 'funding_time')
|
3002
3234
|
nextTimestamp = self.safe_integer(contract, 'next_funding_time')
|
3235
|
+
fundingTimeString = self.safe_string(contract, 'funding_time')
|
3236
|
+
nextFundingTimeString = self.safe_string(contract, 'next_funding_time')
|
3237
|
+
millisecondsInterval = Precise.string_sub(nextFundingTimeString, fundingTimeString)
|
3003
3238
|
return {
|
3004
3239
|
'info': contract,
|
3005
3240
|
'symbol': self.safe_symbol(marketId, market),
|
@@ -3012,14 +3247,25 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3012
3247
|
'fundingRate': self.safe_number(contract, 'funding_rate'),
|
3013
3248
|
'fundingTimestamp': timestamp,
|
3014
3249
|
'fundingDatetime': self.iso8601(timestamp),
|
3015
|
-
'nextFundingRate': self.
|
3250
|
+
'nextFundingRate': self.safe_number(contract, 'next_funding_rate'),
|
3016
3251
|
'nextFundingTimestamp': nextTimestamp,
|
3017
3252
|
'nextFundingDatetime': self.iso8601(nextTimestamp),
|
3018
3253
|
'previousFundingRate': None,
|
3019
3254
|
'previousFundingTimestamp': None,
|
3020
3255
|
'previousFundingDatetime': None,
|
3256
|
+
'interval': self.parse_funding_interval(millisecondsInterval),
|
3021
3257
|
}
|
3022
3258
|
|
3259
|
+
def parse_funding_interval(self, interval):
|
3260
|
+
intervals: dict = {
|
3261
|
+
'3600000': '1h',
|
3262
|
+
'14400000': '4h',
|
3263
|
+
'28800000': '8h',
|
3264
|
+
'57600000': '16h',
|
3265
|
+
'86400000': '24h',
|
3266
|
+
}
|
3267
|
+
return self.safe_string(intervals, interval, interval)
|
3268
|
+
|
3023
3269
|
async def fetch_funding_rate_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
3024
3270
|
"""
|
3025
3271
|
fetches historical funding rate prices
|
@@ -3035,7 +3281,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3035
3281
|
market = self.market(symbol)
|
3036
3282
|
if not market['swap']:
|
3037
3283
|
raise BadSymbol(self.id + ' fetchFundingRateHistory() supports swap contracts only')
|
3038
|
-
request = {
|
3284
|
+
request: dict = {
|
3039
3285
|
'instrument_id': market['id'],
|
3040
3286
|
}
|
3041
3287
|
if since is not None:
|
@@ -3076,10 +3322,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3076
3322
|
sorted = self.sort_by(rates, 'timestamp')
|
3077
3323
|
return self.filter_by_symbol_since_limit(sorted, symbol, since, limit)
|
3078
3324
|
|
3079
|
-
async def fetch_trading_fee(self, symbol: str, params={}):
|
3325
|
+
async def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
|
3080
3326
|
"""
|
3081
3327
|
fetch the trading fees for a market
|
3082
|
-
|
3328
|
+
|
3329
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#tradingfee
|
3330
|
+
|
3083
3331
|
:param str symbol: unified market symbol
|
3084
3332
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3085
3333
|
:returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
|
@@ -3088,7 +3336,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3088
3336
|
market = self.market(symbol)
|
3089
3337
|
if not market['swap']:
|
3090
3338
|
raise BadRequest(self.id + ' fetchTradingFee() supports swap markets only')
|
3091
|
-
request = {
|
3339
|
+
request: dict = {
|
3092
3340
|
'instrument_id': market['id'],
|
3093
3341
|
}
|
3094
3342
|
response = await self.privateSwapGetAccountTradingFeeRate(self.extend(request, params))
|
@@ -3105,7 +3353,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3105
3353
|
data = self.safe_value(response, 'data', {})
|
3106
3354
|
return self.parse_trading_fee(data, market)
|
3107
3355
|
|
3108
|
-
def parse_trading_fee(self, fee, market: Market = None):
|
3356
|
+
def parse_trading_fee(self, fee: dict, market: Market = None) -> TradingFeeInterface:
|
3109
3357
|
#
|
3110
3358
|
# {
|
3111
3359
|
# "instrument_id": "BTCUSDTPERP",
|
@@ -3120,20 +3368,24 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3120
3368
|
'symbol': symbol,
|
3121
3369
|
'maker': self.safe_number(fee, 'maker_fee_rate'),
|
3122
3370
|
'taker': self.safe_number(fee, 'taker_fee_rate'),
|
3371
|
+
'percentage': None,
|
3372
|
+
'tierBased': None,
|
3123
3373
|
}
|
3124
3374
|
|
3125
3375
|
async def fetch_positions(self, symbols: Strings = None, params={}):
|
3126
3376
|
"""
|
3127
3377
|
fetch all open positions
|
3128
|
-
|
3129
|
-
|
3378
|
+
|
3379
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#margin-positions
|
3380
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#positions
|
3381
|
+
|
3130
3382
|
:param str[]|None symbols: list of unified market symbols
|
3131
3383
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3132
3384
|
:returns dict[]: a list of `position structures <https://docs.ccxt.com/#/?id=position-structure>`
|
3133
3385
|
"""
|
3134
3386
|
await self.load_markets()
|
3135
3387
|
symbols = self.market_symbols(symbols)
|
3136
|
-
request = {}
|
3388
|
+
request: dict = {}
|
3137
3389
|
market = None
|
3138
3390
|
marketType = None
|
3139
3391
|
if symbols is not None:
|
@@ -3222,8 +3474,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3222
3474
|
|
3223
3475
|
async def fetch_position(self, symbol: str, params={}):
|
3224
3476
|
"""
|
3225
|
-
|
3226
|
-
|
3477
|
+
|
3478
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#margin-positions
|
3479
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#positions
|
3480
|
+
|
3227
3481
|
fetch data on a single open contract trade position
|
3228
3482
|
:param str symbol: unified market symbol of the market the position is held in
|
3229
3483
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -3231,7 +3485,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3231
3485
|
"""
|
3232
3486
|
await self.load_markets()
|
3233
3487
|
market = self.market(symbol)
|
3234
|
-
request = {}
|
3488
|
+
request: dict = {}
|
3235
3489
|
marketType = None
|
3236
3490
|
marketType, params = self.handle_market_type_and_params('fetchPosition', market, params)
|
3237
3491
|
marginMode, query = self.handle_margin_mode_and_params('fetchPosition', params)
|
@@ -3307,7 +3561,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3307
3561
|
position['marginRatio'] = self.safe_number(response, 'margin_rate')
|
3308
3562
|
return position
|
3309
3563
|
|
3310
|
-
def parse_position(self, position, market: Market = None):
|
3564
|
+
def parse_position(self, position: dict, market: Market = None):
|
3311
3565
|
#
|
3312
3566
|
# swap
|
3313
3567
|
#
|
@@ -3391,7 +3645,9 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3391
3645
|
async def set_leverage(self, leverage: Int, symbol: Str = None, params={}):
|
3392
3646
|
"""
|
3393
3647
|
set the level of leverage for a market
|
3394
|
-
|
3648
|
+
|
3649
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#setleverage
|
3650
|
+
|
3395
3651
|
:param float leverage: the rate of leverage
|
3396
3652
|
:param str symbol: unified market symbol
|
3397
3653
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -3407,7 +3663,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3407
3663
|
raise BadSymbol(self.id + ' setLeverage() supports swap contracts only')
|
3408
3664
|
if (leverage < 1) or (leverage > 100):
|
3409
3665
|
raise BadRequest(self.id + ' leverage should be between 1 and 100')
|
3410
|
-
request = {
|
3666
|
+
request: dict = {
|
3411
3667
|
'instrument_id': market['id'],
|
3412
3668
|
'leverage': leverage,
|
3413
3669
|
}
|
@@ -3437,10 +3693,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3437
3693
|
# }
|
3438
3694
|
#
|
3439
3695
|
|
3440
|
-
async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
3696
|
+
async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[TransferEntry]:
|
3441
3697
|
"""
|
3442
3698
|
fetch the transfer history, only transfers between spot and swap accounts are supported
|
3443
|
-
|
3699
|
+
|
3700
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#transferrecord
|
3701
|
+
|
3444
3702
|
:param str code: unified currency code of the currency transferred
|
3445
3703
|
:param int [since]: the earliest time in ms to fetch transfers for
|
3446
3704
|
:param int [limit]: the maximum number of transfers to retrieve
|
@@ -3449,7 +3707,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3449
3707
|
"""
|
3450
3708
|
await self.load_markets()
|
3451
3709
|
currency = None
|
3452
|
-
request = {}
|
3710
|
+
request: dict = {}
|
3453
3711
|
if code is not None:
|
3454
3712
|
currency = self.safe_currency_code(code)
|
3455
3713
|
request['currency'] = currency['id']
|
@@ -3473,12 +3731,14 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3473
3731
|
# ]
|
3474
3732
|
# }
|
3475
3733
|
#
|
3476
|
-
transfers = self.
|
3734
|
+
transfers = self.safe_list(response, 'data', [])
|
3477
3735
|
return self.parse_transfers(transfers, currency, since, limit)
|
3478
3736
|
|
3479
|
-
async def fetch_leverage_tiers(self, symbols: Strings = None, params={}):
|
3737
|
+
async def fetch_leverage_tiers(self, symbols: Strings = None, params={}) -> LeverageTiers:
|
3480
3738
|
"""
|
3481
|
-
|
3739
|
+
|
3740
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#instruments
|
3741
|
+
|
3482
3742
|
retrieve information on the maximum leverage, for different trade sizes
|
3483
3743
|
:param str[]|None symbols: a list of unified market symbols
|
3484
3744
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -3517,56 +3777,14 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3517
3777
|
#
|
3518
3778
|
data = self.safe_value(response, 'data', [])
|
3519
3779
|
symbols = self.market_symbols(symbols)
|
3520
|
-
return self.parse_leverage_tiers(data, symbols, '
|
3521
|
-
|
3522
|
-
def parse_leverage_tiers(self, response, symbols: Strings = None, marketIdKey=None):
|
3523
|
-
#
|
3524
|
-
# [
|
3525
|
-
# {
|
3526
|
-
# "instrument_id": "BTCUSDTPERP",
|
3527
|
-
# "type": "REAL",
|
3528
|
-
# "contract_type": "PERPETUAL",
|
3529
|
-
# "base_currency": "BTC",
|
3530
|
-
# "quote_currency": "USDT",
|
3531
|
-
# "clear_currency": "USDT",
|
3532
|
-
# "contract_value": "0.001",
|
3533
|
-
# "contract_value_currency": "BTC",
|
3534
|
-
# "is_inverse": False,
|
3535
|
-
# "is_trading": True,
|
3536
|
-
# "status": "ONLINE",
|
3537
|
-
# "price_precision": 1,
|
3538
|
-
# "tick_size": "0.1",
|
3539
|
-
# "min_order_amount": 1,
|
3540
|
-
# "open_max_limits": [
|
3541
|
-
# {
|
3542
|
-
# "leverage": "50",
|
3543
|
-
# "max_limit": "1000000"
|
3544
|
-
# }
|
3545
|
-
# ]
|
3546
|
-
# },
|
3547
|
-
# ]
|
3548
|
-
#
|
3549
|
-
tiers = {}
|
3550
|
-
result = {}
|
3551
|
-
for i in range(0, len(response)):
|
3552
|
-
entry = response[i]
|
3553
|
-
marketId = self.safe_string(entry, 'instrument_id')
|
3554
|
-
market = self.safe_market(marketId)
|
3555
|
-
symbol = self.safe_symbol(marketId, market)
|
3556
|
-
symbolsLength = 0
|
3557
|
-
tiers[symbol] = self.parse_market_leverage_tiers(response[i], market)
|
3558
|
-
if symbols is not None:
|
3559
|
-
symbolsLength = len(symbols)
|
3560
|
-
if self.in_array(symbol, symbols):
|
3561
|
-
result[symbol] = self.parse_market_leverage_tiers(response[i], market)
|
3562
|
-
if symbol is not None and (symbolsLength == 0 or self.in_array(symbols, symbol)):
|
3563
|
-
result[symbol] = self.parse_market_leverage_tiers(response[i], market)
|
3564
|
-
return result
|
3780
|
+
return self.parse_leverage_tiers(data, symbols, 'instrument_id')
|
3565
3781
|
|
3566
|
-
async def fetch_market_leverage_tiers(self, symbol: str, params={}):
|
3782
|
+
async def fetch_market_leverage_tiers(self, symbol: str, params={}) -> List[LeverageTier]:
|
3567
3783
|
"""
|
3568
|
-
:see: https://docs.digifinex.com/en-ww/swap/v2/rest.html#instrument
|
3569
3784
|
retrieve information on the maximum leverage, for different trade sizes for a single market
|
3785
|
+
|
3786
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#instrument
|
3787
|
+
|
3570
3788
|
:param str symbol: unified market symbol
|
3571
3789
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3572
3790
|
:returns dict: a `leverage tiers structure <https://docs.ccxt.com/#/?id=leverage-tiers-structure>`
|
@@ -3575,7 +3793,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3575
3793
|
market = self.market(symbol)
|
3576
3794
|
if not market['swap']:
|
3577
3795
|
raise BadRequest(self.id + ' fetchMarketLeverageTiers() supports swap markets only')
|
3578
|
-
request = {
|
3796
|
+
request: dict = {
|
3579
3797
|
'instrument_id': market['id'],
|
3580
3798
|
}
|
3581
3799
|
response = await self.publicSwapGetPublicInstrument(self.extend(request, params))
|
@@ -3609,7 +3827,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3609
3827
|
data = self.safe_value(response, 'data', {})
|
3610
3828
|
return self.parse_market_leverage_tiers(data, market)
|
3611
3829
|
|
3612
|
-
def parse_market_leverage_tiers(self, info, market: Market = None):
|
3830
|
+
def parse_market_leverage_tiers(self, info, market: Market = None) -> List[LeverageTier]:
|
3613
3831
|
#
|
3614
3832
|
# {
|
3615
3833
|
# "instrument_id": "BTCUSDTPERP",
|
@@ -3639,9 +3857,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3639
3857
|
for i in range(0, len(brackets)):
|
3640
3858
|
tier = brackets[i]
|
3641
3859
|
marketId = self.safe_string(info, 'instrument_id')
|
3642
|
-
market = self.safe_market(marketId)
|
3860
|
+
market = self.safe_market(marketId, market)
|
3643
3861
|
tiers.append({
|
3644
3862
|
'tier': self.sum(i, 1),
|
3863
|
+
'symbol': self.safe_symbol(marketId, market, None, 'swap'),
|
3645
3864
|
'currency': market['settle'],
|
3646
3865
|
'minNotional': None,
|
3647
3866
|
'maxNotional': self.safe_number(tier, 'max_limit'),
|
@@ -3653,7 +3872,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3653
3872
|
|
3654
3873
|
def handle_margin_mode_and_params(self, methodName, params={}, defaultValue=None):
|
3655
3874
|
"""
|
3656
|
-
|
3875
|
+
@ignore
|
3657
3876
|
marginMode specified by params["marginMode"], self.options["marginMode"], self.options["defaultMarginMode"], params["margin"] = True or self.options["defaultType"] = 'margin'
|
3658
3877
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3659
3878
|
:returns Array: the marginMode in lowercase
|
@@ -3673,7 +3892,9 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3673
3892
|
async def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
|
3674
3893
|
"""
|
3675
3894
|
fetch deposit and withdraw fees
|
3676
|
-
|
3895
|
+
|
3896
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#get-currency-deposit-and-withdrawal-information
|
3897
|
+
|
3677
3898
|
:param str[]|None codes: not used by fetchDepositWithdrawFees()
|
3678
3899
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3679
3900
|
:returns dict: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
|
@@ -3709,7 +3930,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3709
3930
|
# "code": 200,
|
3710
3931
|
# }
|
3711
3932
|
#
|
3712
|
-
data = self.
|
3933
|
+
data = self.safe_list(response, 'data')
|
3713
3934
|
return self.parse_deposit_withdraw_fees(data, codes)
|
3714
3935
|
|
3715
3936
|
def parse_deposit_withdraw_fees(self, response, codes=None, currencyIdKey=None):
|
@@ -3739,7 +3960,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3739
3960
|
# },
|
3740
3961
|
# ]
|
3741
3962
|
#
|
3742
|
-
depositWithdrawFees = {}
|
3963
|
+
depositWithdrawFees: dict = {}
|
3743
3964
|
codes = self.market_codes(codes)
|
3744
3965
|
for i in range(0, len(response)):
|
3745
3966
|
entry = response[i]
|
@@ -3753,11 +3974,11 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3753
3974
|
depositWithdrawFees[code]['info'].append(entry)
|
3754
3975
|
networkId = self.safe_string(entry, 'chain')
|
3755
3976
|
withdrawFee = self.safe_value(entry, 'min_withdraw_fee')
|
3756
|
-
withdrawResult = {
|
3977
|
+
withdrawResult: dict = {
|
3757
3978
|
'fee': withdrawFee,
|
3758
3979
|
'percentage': False if (withdrawFee is not None) else None,
|
3759
3980
|
}
|
3760
|
-
depositResult = {
|
3981
|
+
depositResult: dict = {
|
3761
3982
|
'fee': None,
|
3762
3983
|
'percentage': None,
|
3763
3984
|
}
|
@@ -3777,10 +3998,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3777
3998
|
depositWithdrawFees[code] = self.assign_default_deposit_withdraw_fees(depositWithdrawFees[code], currency)
|
3778
3999
|
return depositWithdrawFees
|
3779
4000
|
|
3780
|
-
async def add_margin(self, symbol: str, amount, params={}):
|
4001
|
+
async def add_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
|
3781
4002
|
"""
|
3782
4003
|
add margin to a position
|
3783
|
-
|
4004
|
+
|
4005
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#positionmargin
|
4006
|
+
|
3784
4007
|
:param str symbol: unified market symbol
|
3785
4008
|
:param float amount: amount of margin to add
|
3786
4009
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -3791,10 +4014,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3791
4014
|
self.check_required_argument('addMargin', side, 'side', ['long', 'short'])
|
3792
4015
|
return await self.modify_margin_helper(symbol, amount, 1, params)
|
3793
4016
|
|
3794
|
-
async def reduce_margin(self, symbol: str, amount, params={}):
|
4017
|
+
async def reduce_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
|
3795
4018
|
"""
|
3796
4019
|
remove margin from a position
|
3797
|
-
|
4020
|
+
|
4021
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#positionmargin
|
4022
|
+
|
3798
4023
|
:param str symbol: unified market symbol
|
3799
4024
|
:param float amount: the amount of margin to remove
|
3800
4025
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -3805,11 +4030,11 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3805
4030
|
self.check_required_argument('reduceMargin', side, 'side', ['long', 'short'])
|
3806
4031
|
return await self.modify_margin_helper(symbol, amount, 2, params)
|
3807
4032
|
|
3808
|
-
async def modify_margin_helper(self, symbol: str, amount, type, params={}):
|
4033
|
+
async def modify_margin_helper(self, symbol: str, amount, type, params={}) -> MarginModification:
|
3809
4034
|
await self.load_markets()
|
3810
4035
|
side = self.safe_string(params, 'side')
|
3811
4036
|
market = self.market(symbol)
|
3812
|
-
request = {
|
4037
|
+
request: dict = {
|
3813
4038
|
'instrument_id': market['id'],
|
3814
4039
|
'amount': self.number_to_string(amount),
|
3815
4040
|
'type': type,
|
@@ -3834,7 +4059,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3834
4059
|
'status': status,
|
3835
4060
|
})
|
3836
4061
|
|
3837
|
-
def parse_margin_modification(self, data, market: Market = None):
|
4062
|
+
def parse_margin_modification(self, data: dict, market: Market = None) -> MarginModification:
|
3838
4063
|
#
|
3839
4064
|
# {
|
3840
4065
|
# "instrument_id": "BTCUSDTPERP",
|
@@ -3847,18 +4072,23 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3847
4072
|
rawType = self.safe_integer(data, 'type')
|
3848
4073
|
return {
|
3849
4074
|
'info': data,
|
4075
|
+
'symbol': self.safe_symbol(marketId, market, None, 'swap'),
|
3850
4076
|
'type': 'add' if (rawType == 1) else 'reduce',
|
4077
|
+
'marginMode': 'isolated',
|
3851
4078
|
'amount': self.safe_number(data, 'amount'),
|
3852
4079
|
'total': None,
|
3853
4080
|
'code': market['settle'],
|
3854
|
-
'symbol': self.safe_symbol(marketId, market, None, 'swap'),
|
3855
4081
|
'status': None,
|
4082
|
+
'timestamp': None,
|
4083
|
+
'datetime': None,
|
3856
4084
|
}
|
3857
4085
|
|
3858
4086
|
async def fetch_funding_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
3859
4087
|
"""
|
3860
4088
|
fetch the history of funding payments paid and received on self account
|
3861
|
-
|
4089
|
+
|
4090
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#funding-fee
|
4091
|
+
|
3862
4092
|
:param str [symbol]: unified market symbol
|
3863
4093
|
:param int [since]: the earliest time in ms to fetch funding history for
|
3864
4094
|
:param int [limit]: the maximum number of funding history structures to retrieve
|
@@ -3867,7 +4097,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3867
4097
|
:returns dict: a `funding history structure <https://docs.ccxt.com/#/?id=funding-history-structure>`
|
3868
4098
|
"""
|
3869
4099
|
await self.load_markets()
|
3870
|
-
request = {}
|
4100
|
+
request: dict = {}
|
3871
4101
|
request, params = self.handle_until_option('end_timestamp', request, params)
|
3872
4102
|
market = None
|
3873
4103
|
if symbol is not None:
|
@@ -3891,7 +4121,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3891
4121
|
# ]
|
3892
4122
|
# }
|
3893
4123
|
#
|
3894
|
-
data = self.
|
4124
|
+
data = self.safe_list(response, 'data', [])
|
3895
4125
|
return self.parse_incomes(data, market, since, limit)
|
3896
4126
|
|
3897
4127
|
def parse_income(self, income, market: Market = None):
|
@@ -3919,7 +4149,9 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3919
4149
|
async def set_margin_mode(self, marginMode: str, symbol: Str = None, params={}):
|
3920
4150
|
"""
|
3921
4151
|
set margin mode to 'cross' or 'isolated'
|
3922
|
-
|
4152
|
+
|
4153
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#positionmode
|
4154
|
+
|
3923
4155
|
:param str marginMode: 'cross' or 'isolated'
|
3924
4156
|
:param str symbol: unified market symbol
|
3925
4157
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -3932,7 +4164,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3932
4164
|
marginMode = marginMode.lower()
|
3933
4165
|
if marginMode == 'cross':
|
3934
4166
|
marginMode = 'crossed'
|
3935
|
-
request = {
|
4167
|
+
request: dict = {
|
3936
4168
|
'instrument_id': market['id'],
|
3937
4169
|
'margin_mode': marginMode,
|
3938
4170
|
}
|
@@ -3985,7 +4217,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3985
4217
|
url += '?' + urlencoded
|
3986
4218
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
3987
4219
|
|
3988
|
-
def handle_errors(self, statusCode, statusText, url, method, responseHeaders, responseBody, response, requestHeaders, requestBody):
|
4220
|
+
def handle_errors(self, statusCode: int, statusText: str, url: str, method: str, responseHeaders: dict, responseBody, response, requestHeaders, requestBody):
|
3989
4221
|
if not response:
|
3990
4222
|
return None # fall back to default error handler
|
3991
4223
|
code = self.safe_string(response, 'code')
|