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/lbank.py
CHANGED
@@ -7,9 +7,10 @@ from ccxt.async_support.base.exchange import Exchange
|
|
7
7
|
from ccxt.abstract.lbank import ImplicitAPI
|
8
8
|
import asyncio
|
9
9
|
import hashlib
|
10
|
-
from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
|
10
|
+
from ccxt.base.types import Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, FundingRate, FundingRates, Trade, TradingFeeInterface, TradingFees, Transaction
|
11
11
|
from typing import List
|
12
12
|
from ccxt.base.errors import ExchangeError
|
13
|
+
from ccxt.base.errors import AuthenticationError
|
13
14
|
from ccxt.base.errors import PermissionDenied
|
14
15
|
from ccxt.base.errors import ArgumentsRequired
|
15
16
|
from ccxt.base.errors import BadRequest
|
@@ -21,7 +22,6 @@ from ccxt.base.errors import DuplicateOrderId
|
|
21
22
|
from ccxt.base.errors import NotSupported
|
22
23
|
from ccxt.base.errors import RateLimitExceeded
|
23
24
|
from ccxt.base.errors import InvalidNonce
|
24
|
-
from ccxt.base.errors import AuthenticationError
|
25
25
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
26
26
|
from ccxt.base.precise import Precise
|
27
27
|
|
@@ -63,12 +63,14 @@ class lbank(Exchange, ImplicitAPI):
|
|
63
63
|
'fetchCrossBorrowRate': False,
|
64
64
|
'fetchCrossBorrowRates': False,
|
65
65
|
'fetchDepositAddress': True,
|
66
|
+
'fetchDepositAddresses': False,
|
67
|
+
'fetchDepositAddressesByNetwork': False,
|
66
68
|
'fetchDepositWithdrawFee': 'emulated',
|
67
69
|
'fetchDepositWithdrawFees': True,
|
68
70
|
'fetchFundingHistory': False,
|
69
71
|
'fetchFundingRate': False,
|
70
72
|
'fetchFundingRateHistory': False,
|
71
|
-
'fetchFundingRates':
|
73
|
+
'fetchFundingRates': True,
|
72
74
|
'fetchIndexOHLCV': False,
|
73
75
|
'fetchIsolatedBorrowRate': False,
|
74
76
|
'fetchIsolatedBorrowRates': False,
|
@@ -220,6 +222,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
220
222
|
},
|
221
223
|
},
|
222
224
|
'commonCurrencies': {
|
225
|
+
'HIT': 'Hiver',
|
223
226
|
'VET_ERC20': 'VEN',
|
224
227
|
'PNT': 'Penta',
|
225
228
|
},
|
@@ -306,13 +309,85 @@ class lbank(Exchange, ImplicitAPI):
|
|
306
309
|
'USDT': 'TRC20',
|
307
310
|
},
|
308
311
|
},
|
312
|
+
'features': {
|
313
|
+
'default': {
|
314
|
+
'sandbox': False,
|
315
|
+
'createOrder': {
|
316
|
+
'marginMode': False,
|
317
|
+
'triggerPrice': False,
|
318
|
+
'triggerPriceType': None,
|
319
|
+
'triggerDirection': False,
|
320
|
+
'stopLossPrice': False,
|
321
|
+
'takeProfitPrice': False,
|
322
|
+
'attachedStopLossTakeProfit': None,
|
323
|
+
'timeInForce': {
|
324
|
+
'IOC': True,
|
325
|
+
'FOK': True,
|
326
|
+
'PO': False,
|
327
|
+
'GTD': False,
|
328
|
+
},
|
329
|
+
'hedged': False,
|
330
|
+
'selfTradePrevention': False,
|
331
|
+
'trailing': False,
|
332
|
+
'leverage': False,
|
333
|
+
'marketBuyByCost': True,
|
334
|
+
'marketBuyRequiresPrice': False,
|
335
|
+
'iceberg': False,
|
336
|
+
},
|
337
|
+
'createOrders': None, # todo
|
338
|
+
'fetchMyTrades': {
|
339
|
+
'marginMode': False,
|
340
|
+
'limit': 100,
|
341
|
+
'daysBack': 100000, # todo
|
342
|
+
'untilDays': 2,
|
343
|
+
},
|
344
|
+
'fetchOrder': {
|
345
|
+
'marginMode': False,
|
346
|
+
'trigger': False,
|
347
|
+
'trailing': False,
|
348
|
+
},
|
349
|
+
'fetchOpenOrders': {
|
350
|
+
'marginMode': False,
|
351
|
+
'limit': 200,
|
352
|
+
'trigger': False,
|
353
|
+
'trailing': False,
|
354
|
+
},
|
355
|
+
'fetchOrders': {
|
356
|
+
'marginMode': False,
|
357
|
+
'limit': 200,
|
358
|
+
'daysBack': None,
|
359
|
+
'untilDays': None,
|
360
|
+
'trigger': False,
|
361
|
+
'trailing': False,
|
362
|
+
},
|
363
|
+
'fetchClosedOrders': None, # todo: through fetchOrders "status" -1: Cancelled 0: Unfilled 1: Partially filled 2: Completely filled 3: Partially filled has been cancelled 4: Cancellation is being processed
|
364
|
+
'fetchOHLCV': {
|
365
|
+
'limit': 2000,
|
366
|
+
},
|
367
|
+
},
|
368
|
+
'spot': {
|
369
|
+
'extends': 'default',
|
370
|
+
},
|
371
|
+
'swap': {
|
372
|
+
'linear': {
|
373
|
+
'extends': 'default',
|
374
|
+
},
|
375
|
+
'inverse': None,
|
376
|
+
},
|
377
|
+
'future': {
|
378
|
+
'linear': None,
|
379
|
+
'inverse': None,
|
380
|
+
},
|
381
|
+
},
|
309
382
|
})
|
310
383
|
|
311
384
|
async def fetch_time(self, params={}):
|
312
385
|
"""
|
313
386
|
fetches the current integer timestamp in milliseconds from the exchange server
|
314
|
-
|
315
|
-
|
387
|
+
|
388
|
+
https://www.lbank.com/en-US/docs/index.html#get-timestamp
|
389
|
+
https://www.lbank.com/en-US/docs/contract.html#get-the-current-time
|
390
|
+
|
316
391
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
317
392
|
:returns int: the current integer timestamp in milliseconds from the exchange server
|
318
393
|
"""
|
@@ -345,11 +420,13 @@ class lbank(Exchange, ImplicitAPI):
|
|
345
420
|
#
|
346
421
|
return self.safe_integer(response, 'data')
|
347
422
|
|
348
|
-
async def fetch_markets(self, params={}):
|
423
|
+
async def fetch_markets(self, params={}) -> List[Market]:
|
349
424
|
"""
|
350
425
|
retrieves data on all markets for lbank
|
351
|
-
|
352
|
-
|
426
|
+
|
427
|
+
https://www.lbank.com/en-US/docs/index.html#trading-pairs
|
428
|
+
https://www.lbank.com/en-US/docs/contract.html#query-contract-information-list
|
429
|
+
|
353
430
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
354
431
|
:returns dict[]: an array of objects representing market data
|
355
432
|
"""
|
@@ -440,7 +517,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
440
517
|
return result
|
441
518
|
|
442
519
|
async def fetch_swap_markets(self, params={}):
|
443
|
-
request = {
|
520
|
+
request: dict = {
|
444
521
|
'productGroup': 'SwapU',
|
445
522
|
}
|
446
523
|
response = await self.contractPublicGetCfdOpenApiV1PubInstrument(self.extend(request, params))
|
@@ -535,7 +612,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
535
612
|
})
|
536
613
|
return result
|
537
614
|
|
538
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
615
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
539
616
|
#
|
540
617
|
# spot: fetchTicker, fetchTickers
|
541
618
|
#
|
@@ -598,7 +675,9 @@ class lbank(Exchange, ImplicitAPI):
|
|
598
675
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
599
676
|
"""
|
600
677
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
601
|
-
|
678
|
+
|
679
|
+
https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
|
680
|
+
|
602
681
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
603
682
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
604
683
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -608,7 +687,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
608
687
|
if market['swap']:
|
609
688
|
responseForSwap = await self.fetch_tickers([market['symbol']], params)
|
610
689
|
return self.safe_value(responseForSwap, market['symbol'])
|
611
|
-
request = {
|
690
|
+
request: dict = {
|
612
691
|
'symbol': market['id'],
|
613
692
|
}
|
614
693
|
response = await self.spotPublicGetTicker24hr(self.extend(request, params))
|
@@ -634,14 +713,16 @@ class lbank(Exchange, ImplicitAPI):
|
|
634
713
|
# }
|
635
714
|
#
|
636
715
|
data = self.safe_value(response, 'data', [])
|
637
|
-
first = self.
|
716
|
+
first = self.safe_dict(data, 0, {})
|
638
717
|
return self.parse_ticker(first, market)
|
639
718
|
|
640
719
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
641
720
|
"""
|
642
721
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
643
|
-
|
644
|
-
|
722
|
+
|
723
|
+
https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
|
724
|
+
https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
|
725
|
+
|
645
726
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
646
727
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
647
728
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -653,7 +734,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
653
734
|
symbolsLength = len(symbols)
|
654
735
|
if symbolsLength > 0:
|
655
736
|
market = self.market(symbols[0])
|
656
|
-
request = {}
|
737
|
+
request: dict = {}
|
657
738
|
type = None
|
658
739
|
type, params = self.handle_market_type_and_params('fetchTickers', market, params)
|
659
740
|
response = None
|
@@ -708,14 +789,16 @@ class lbank(Exchange, ImplicitAPI):
|
|
708
789
|
# "success": True
|
709
790
|
# }
|
710
791
|
#
|
711
|
-
data = self.
|
792
|
+
data = self.safe_list(response, 'data', [])
|
712
793
|
return self.parse_tickers(data, symbols)
|
713
794
|
|
714
795
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
715
796
|
"""
|
716
797
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
717
|
-
|
718
|
-
|
798
|
+
|
799
|
+
https://www.lbank.com/en-US/docs/index.html#query-market-depth
|
800
|
+
https://www.lbank.com/en-US/docs/contract.html#get-handicap
|
801
|
+
|
719
802
|
:param str symbol: unified symbol of the market to fetch the order book for
|
720
803
|
:param int [limit]: the maximum amount of order book entries to return
|
721
804
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -725,7 +808,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
725
808
|
market = self.market(symbol)
|
726
809
|
if limit is None:
|
727
810
|
limit = 60
|
728
|
-
request = {
|
811
|
+
request: dict = {
|
729
812
|
'symbol': market['id'],
|
730
813
|
}
|
731
814
|
type = None
|
@@ -791,7 +874,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
791
874
|
return self.parse_order_book(orderbook, market['symbol'], timestamp, 'bids', 'asks', 'price', 'volume')
|
792
875
|
return self.parse_order_book(orderbook, market['symbol'], timestamp)
|
793
876
|
|
794
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
877
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
795
878
|
#
|
796
879
|
# fetchTrades(old) spotPublicGetTrades
|
797
880
|
#
|
@@ -887,8 +970,10 @@ class lbank(Exchange, ImplicitAPI):
|
|
887
970
|
async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
888
971
|
"""
|
889
972
|
get the list of most recent trades for a particular symbol
|
890
|
-
|
891
|
-
|
973
|
+
|
974
|
+
https://www.lbank.com/en-US/docs/index.html#query-historical-transactions
|
975
|
+
https://www.lbank.com/en-US/docs/index.html#recent-transactions-list
|
976
|
+
|
892
977
|
:param str symbol: unified symbol of the market to fetch trades for
|
893
978
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
894
979
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -897,7 +982,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
897
982
|
"""
|
898
983
|
await self.load_markets()
|
899
984
|
market = self.market(symbol)
|
900
|
-
request = {
|
985
|
+
request: dict = {
|
901
986
|
'symbol': market['id'],
|
902
987
|
}
|
903
988
|
if since is not None:
|
@@ -931,7 +1016,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
931
1016
|
# "ts":1647021999308
|
932
1017
|
# }
|
933
1018
|
#
|
934
|
-
trades = self.
|
1019
|
+
trades = self.safe_list(response, 'data', [])
|
935
1020
|
return self.parse_trades(trades, market, since, limit)
|
936
1021
|
|
937
1022
|
def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
|
@@ -957,7 +1042,9 @@ class lbank(Exchange, ImplicitAPI):
|
|
957
1042
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
958
1043
|
"""
|
959
1044
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
960
|
-
|
1045
|
+
|
1046
|
+
https://www.lbank.com/en-US/docs/index.html#query-k-bar-data
|
1047
|
+
|
961
1048
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
962
1049
|
:param str timeframe: the length of time each candle represents
|
963
1050
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
@@ -970,17 +1057,19 @@ class lbank(Exchange, ImplicitAPI):
|
|
970
1057
|
market = self.market(symbol)
|
971
1058
|
if limit is None:
|
972
1059
|
limit = 100
|
1060
|
+
else:
|
1061
|
+
limit = min(limit, 2000)
|
973
1062
|
if since is None:
|
974
1063
|
duration = self.parse_timeframe(timeframe)
|
975
|
-
since = self.milliseconds() - duration * 1000 * limit
|
976
|
-
request = {
|
1064
|
+
since = self.milliseconds() - (duration * 1000 * limit)
|
1065
|
+
request: dict = {
|
977
1066
|
'symbol': market['id'],
|
978
1067
|
'type': self.safe_string(self.timeframes, timeframe, timeframe),
|
979
1068
|
'time': self.parse_to_int(since / 1000),
|
980
|
-
'size': limit, # max 2000
|
1069
|
+
'size': min(limit + 1, 2000), # max 2000
|
981
1070
|
}
|
982
1071
|
response = await self.spotPublicGetKline(self.extend(request, params))
|
983
|
-
ohlcvs = self.
|
1072
|
+
ohlcvs = self.safe_list(response, 'data', [])
|
984
1073
|
#
|
985
1074
|
#
|
986
1075
|
# [
|
@@ -1083,7 +1172,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1083
1172
|
# ]
|
1084
1173
|
#
|
1085
1174
|
timestamp = self.safe_integer(response, 'ts')
|
1086
|
-
result = {
|
1175
|
+
result: dict = {
|
1087
1176
|
'info': response,
|
1088
1177
|
'timestamp': timestamp,
|
1089
1178
|
'datetime': self.iso8601(timestamp),
|
@@ -1129,12 +1218,117 @@ class lbank(Exchange, ImplicitAPI):
|
|
1129
1218
|
return self.safe_balance(result)
|
1130
1219
|
return None
|
1131
1220
|
|
1221
|
+
def parse_funding_rate(self, ticker, market: Market = None) -> FundingRate:
|
1222
|
+
# {
|
1223
|
+
# "symbol": "BTCUSDT",
|
1224
|
+
# "highestPrice": "69495.5",
|
1225
|
+
# "underlyingPrice": "68455.904",
|
1226
|
+
# "lowestPrice": "68182.1",
|
1227
|
+
# "openPrice": "68762.4",
|
1228
|
+
# "positionFeeRate": "0.0001",
|
1229
|
+
# "volume": "33534.2858",
|
1230
|
+
# "markedPrice": "68434.1",
|
1231
|
+
# "turnover": "1200636218.210558",
|
1232
|
+
# "positionFeeTime": "28800",
|
1233
|
+
# "lastPrice": "68427.3",
|
1234
|
+
# "nextFeeTime": "1730736000000",
|
1235
|
+
# "fundingRate": "0.0001",
|
1236
|
+
# }
|
1237
|
+
marketId = self.safe_string(ticker, 'symbol')
|
1238
|
+
symbol = self.safe_symbol(marketId, market)
|
1239
|
+
markPrice = self.safe_number(ticker, 'markedPrice')
|
1240
|
+
indexPrice = self.safe_number(ticker, 'underlyingPrice')
|
1241
|
+
fundingRate = self.safe_number(ticker, 'fundingRate')
|
1242
|
+
fundingTime = self.safe_integer(ticker, 'nextFeeTime')
|
1243
|
+
positionFeeTime = self.safe_integer(ticker, 'positionFeeTime')
|
1244
|
+
intervalString = None
|
1245
|
+
if positionFeeTime is not None:
|
1246
|
+
interval = self.parse_to_int(positionFeeTime / 60 / 60)
|
1247
|
+
intervalString = str(interval) + 'h'
|
1248
|
+
return {
|
1249
|
+
'info': ticker,
|
1250
|
+
'symbol': symbol,
|
1251
|
+
'markPrice': markPrice,
|
1252
|
+
'indexPrice': indexPrice,
|
1253
|
+
'fundingRate': fundingRate,
|
1254
|
+
'fundingTimestamp': fundingTime,
|
1255
|
+
'fundingDatetime': self.iso8601(fundingTime),
|
1256
|
+
'timestamp': None,
|
1257
|
+
'datetime': None,
|
1258
|
+
'nextFundingRate': None,
|
1259
|
+
'nextFundingTimestamp': None,
|
1260
|
+
'nextFundingDatetime': None,
|
1261
|
+
'previousFundingRate': None,
|
1262
|
+
'previousFundingTimestamp': None,
|
1263
|
+
'previousFundingDatetime': None,
|
1264
|
+
'interval': intervalString,
|
1265
|
+
}
|
1266
|
+
|
1267
|
+
async def fetch_funding_rate(self, symbol: str, params={}) -> FundingRate:
|
1268
|
+
"""
|
1269
|
+
fetch the current funding rate
|
1270
|
+
|
1271
|
+
https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
|
1272
|
+
|
1273
|
+
:param str symbol: unified market symbol
|
1274
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1275
|
+
:returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
|
1276
|
+
"""
|
1277
|
+
await self.load_markets()
|
1278
|
+
market = self.market(symbol)
|
1279
|
+
responseForSwap = await self.fetch_funding_rates([market['symbol']], params)
|
1280
|
+
return self.safe_value(responseForSwap, market['symbol'])
|
1281
|
+
|
1282
|
+
async def fetch_funding_rates(self, symbols: Strings = None, params={}) -> FundingRates:
|
1283
|
+
"""
|
1284
|
+
fetch the funding rate for multiple markets
|
1285
|
+
|
1286
|
+
https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
|
1287
|
+
|
1288
|
+
:param str[]|None symbols: list of unified market symbols
|
1289
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1290
|
+
:returns dict: a dictionary of `funding rate structures <https://docs.ccxt.com/#/?id=funding-rates-structure>`, indexed by market symbols
|
1291
|
+
"""
|
1292
|
+
await self.load_markets()
|
1293
|
+
symbols = self.market_symbols(symbols)
|
1294
|
+
request: dict = {
|
1295
|
+
'productGroup': 'SwapU',
|
1296
|
+
}
|
1297
|
+
response = await self.contractPublicGetCfdOpenApiV1PubMarketData(self.extend(request, params))
|
1298
|
+
# {
|
1299
|
+
# "data": [
|
1300
|
+
# {
|
1301
|
+
# "symbol": "BTCUSDT",
|
1302
|
+
# "highestPrice": "69495.5",
|
1303
|
+
# "underlyingPrice": "68455.904",
|
1304
|
+
# "lowestPrice": "68182.1",
|
1305
|
+
# "openPrice": "68762.4",
|
1306
|
+
# "positionFeeRate": "0.0001",
|
1307
|
+
# "volume": "33534.2858",
|
1308
|
+
# "markedPrice": "68434.1",
|
1309
|
+
# "turnover": "1200636218.210558",
|
1310
|
+
# "positionFeeTime": "28800",
|
1311
|
+
# "lastPrice": "68427.3",
|
1312
|
+
# "nextFeeTime": "1730736000000",
|
1313
|
+
# "fundingRate": "0.0001",
|
1314
|
+
# }
|
1315
|
+
# ],
|
1316
|
+
# "error_code": "0",
|
1317
|
+
# "msg": "Success",
|
1318
|
+
# "result": "true",
|
1319
|
+
# "success": True,
|
1320
|
+
# }
|
1321
|
+
data = self.safe_list(response, 'data', [])
|
1322
|
+
return self.parse_funding_rates(data, symbols)
|
1323
|
+
|
1132
1324
|
async def fetch_balance(self, params={}) -> Balances:
|
1133
1325
|
"""
|
1134
1326
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
1135
|
-
|
1136
|
-
|
1137
|
-
|
1327
|
+
|
1328
|
+
https://www.lbank.com/en-US/docs/index.html#asset-information
|
1329
|
+
https://www.lbank.com/en-US/docs/index.html#account-information
|
1330
|
+
https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
|
1331
|
+
|
1138
1332
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1139
1333
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
1140
1334
|
"""
|
@@ -1181,7 +1375,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1181
1375
|
#
|
1182
1376
|
return self.parse_balance(response)
|
1183
1377
|
|
1184
|
-
def parse_trading_fee(self, fee, market: Market = None):
|
1378
|
+
def parse_trading_fee(self, fee: dict, market: Market = None) -> TradingFeeInterface:
|
1185
1379
|
#
|
1186
1380
|
# {
|
1187
1381
|
# "symbol":"skt_usdt",
|
@@ -1196,32 +1390,38 @@ class lbank(Exchange, ImplicitAPI):
|
|
1196
1390
|
'symbol': symbol,
|
1197
1391
|
'maker': self.safe_number(fee, 'makerCommission'),
|
1198
1392
|
'taker': self.safe_number(fee, 'takerCommission'),
|
1393
|
+
'percentage': None,
|
1394
|
+
'tierBased': None,
|
1199
1395
|
}
|
1200
1396
|
|
1201
|
-
async def fetch_trading_fee(self, symbol: str, params={}):
|
1397
|
+
async def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
|
1202
1398
|
"""
|
1203
1399
|
fetch the trading fees for a market
|
1204
|
-
|
1400
|
+
|
1401
|
+
https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
|
1402
|
+
|
1205
1403
|
:param str symbol: unified market symbol
|
1206
1404
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1207
1405
|
:returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
|
1208
1406
|
"""
|
1209
1407
|
market = self.market(symbol)
|
1210
1408
|
result = await self.fetch_trading_fees(self.extend(params, {'category': market['id']}))
|
1211
|
-
return result
|
1409
|
+
return self.safe_dict(result, symbol)
|
1212
1410
|
|
1213
|
-
async def fetch_trading_fees(self, params={}):
|
1411
|
+
async def fetch_trading_fees(self, params={}) -> TradingFees:
|
1214
1412
|
"""
|
1215
1413
|
fetch the trading fees for multiple markets
|
1216
|
-
|
1414
|
+
|
1415
|
+
https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
|
1416
|
+
|
1217
1417
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1218
1418
|
:returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
|
1219
1419
|
"""
|
1220
1420
|
await self.load_markets()
|
1221
|
-
request = {}
|
1421
|
+
request: dict = {}
|
1222
1422
|
response = await self.spotPrivatePostSupplementCustomerTradeFee(self.extend(request, params))
|
1223
1423
|
fees = self.safe_value(response, 'data', [])
|
1224
|
-
result = {}
|
1424
|
+
result: dict = {}
|
1225
1425
|
for i in range(0, len(fees)):
|
1226
1426
|
fee = self.parse_trading_fee(fees[i])
|
1227
1427
|
symbol = fee['symbol']
|
@@ -1231,8 +1431,10 @@ class lbank(Exchange, ImplicitAPI):
|
|
1231
1431
|
async def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
|
1232
1432
|
"""
|
1233
1433
|
create a market buy order by providing the symbol and cost
|
1234
|
-
|
1235
|
-
|
1434
|
+
|
1435
|
+
https://www.lbank.com/en-US/docs/index.html#place-order
|
1436
|
+
https://www.lbank.com/en-US/docs/index.html#place-an-order
|
1437
|
+
|
1236
1438
|
:param str symbol: unified symbol of the market to create an order in
|
1237
1439
|
:param float cost: how much you want to trade in units of the quote currency
|
1238
1440
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1248,13 +1450,15 @@ class lbank(Exchange, ImplicitAPI):
|
|
1248
1450
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1249
1451
|
"""
|
1250
1452
|
create a trade order
|
1251
|
-
|
1252
|
-
|
1453
|
+
|
1454
|
+
https://www.lbank.com/en-US/docs/index.html#place-order
|
1455
|
+
https://www.lbank.com/en-US/docs/index.html#place-an-order
|
1456
|
+
|
1253
1457
|
:param str symbol: unified symbol of the market to create an order in
|
1254
1458
|
:param str type: 'market' or 'limit'
|
1255
1459
|
:param str side: 'buy' or 'sell'
|
1256
1460
|
:param float amount: how much of currency you want to trade in units of base currency
|
1257
|
-
:param float [price]: the price at which the order is to be
|
1461
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1258
1462
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1259
1463
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1260
1464
|
"""
|
@@ -1264,7 +1468,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1264
1468
|
postOnly = self.safe_bool(params, 'postOnly', False)
|
1265
1469
|
timeInForce = self.safe_string_upper(params, 'timeInForce')
|
1266
1470
|
params = self.omit(params, ['custom_id', 'clientOrderId', 'timeInForce', 'postOnly'])
|
1267
|
-
request = {
|
1471
|
+
request: dict = {
|
1268
1472
|
'symbol': market['id'],
|
1269
1473
|
}
|
1270
1474
|
ioc = (timeInForce == 'IOC')
|
@@ -1335,8 +1539,8 @@ class lbank(Exchange, ImplicitAPI):
|
|
1335
1539
|
'info': result,
|
1336
1540
|
}, market)
|
1337
1541
|
|
1338
|
-
def parse_order_status(self, status):
|
1339
|
-
statuses = {
|
1542
|
+
def parse_order_status(self, status: Str):
|
1543
|
+
statuses: dict = {
|
1340
1544
|
'-1': 'canceled', # canceled
|
1341
1545
|
'0': 'open', # not traded
|
1342
1546
|
'1': 'open', # partial deal
|
@@ -1346,7 +1550,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1346
1550
|
}
|
1347
1551
|
return self.safe_string(statuses, status, status)
|
1348
1552
|
|
1349
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
1553
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1350
1554
|
#
|
1351
1555
|
# fetchOrderSupplement(private)
|
1352
1556
|
#
|
@@ -1413,6 +1617,27 @@ class lbank(Exchange, ImplicitAPI):
|
|
1413
1617
|
# "status":-1
|
1414
1618
|
# }
|
1415
1619
|
#
|
1620
|
+
# cancelOrder
|
1621
|
+
#
|
1622
|
+
# {
|
1623
|
+
# "executedQty":0.0,
|
1624
|
+
# "price":0.05,
|
1625
|
+
# "origQty":100.0,
|
1626
|
+
# "tradeType":"buy",
|
1627
|
+
# "status":0
|
1628
|
+
# }
|
1629
|
+
#
|
1630
|
+
# cancelAllOrders
|
1631
|
+
#
|
1632
|
+
# {
|
1633
|
+
# "executedQty":0.00000000000000000000,
|
1634
|
+
# "orderId":"293ef71b-3e67-4962-af93-aa06990a045f",
|
1635
|
+
# "price":0.05000000000000000000,
|
1636
|
+
# "origQty":100.00000000000000000000,
|
1637
|
+
# "tradeType":"buy",
|
1638
|
+
# "status":0
|
1639
|
+
# }
|
1640
|
+
#
|
1416
1641
|
id = self.safe_string_2(order, 'orderId', 'order_id')
|
1417
1642
|
clientOrderId = self.safe_string_2(order, 'clientOrderId', 'custom_id')
|
1418
1643
|
timestamp = self.safe_integer_2(order, 'time', 'create_time')
|
@@ -1422,7 +1647,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1422
1647
|
timeInForce = None
|
1423
1648
|
postOnly = False
|
1424
1649
|
type = 'limit'
|
1425
|
-
rawType = self.
|
1650
|
+
rawType = self.safe_string_2(order, 'type', 'tradeType') # buy, sell, buy_market, sell_market, buy_maker,sell_maker,buy_ioc,sell_ioc, buy_fok, sell_fok
|
1426
1651
|
parts = rawType.split('_')
|
1427
1652
|
side = self.safe_string(parts, 0)
|
1428
1653
|
typePart = self.safe_string(parts, 1) # market, maker, ioc, fok or None(limit)
|
@@ -1454,7 +1679,6 @@ class lbank(Exchange, ImplicitAPI):
|
|
1454
1679
|
'postOnly': postOnly,
|
1455
1680
|
'side': side,
|
1456
1681
|
'price': price,
|
1457
|
-
'stopPrice': None,
|
1458
1682
|
'triggerPrice': None,
|
1459
1683
|
'cost': costString,
|
1460
1684
|
'amount': amountString,
|
@@ -1469,8 +1693,11 @@ class lbank(Exchange, ImplicitAPI):
|
|
1469
1693
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
1470
1694
|
"""
|
1471
1695
|
fetches information on an order made by the user
|
1472
|
-
|
1473
|
-
|
1696
|
+
|
1697
|
+
https://www.lbank.com/en-US/docs/index.html#query-order
|
1698
|
+
https://www.lbank.com/en-US/docs/index.html#query-order-new
|
1699
|
+
|
1700
|
+
:param str id: order id
|
1474
1701
|
:param str symbol: unified symbol of the market the order was made in
|
1475
1702
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1476
1703
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -1489,7 +1716,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1489
1716
|
raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
|
1490
1717
|
await self.load_markets()
|
1491
1718
|
market = self.market(symbol)
|
1492
|
-
request = {
|
1719
|
+
request: dict = {
|
1493
1720
|
'symbol': market['id'],
|
1494
1721
|
'orderId': id,
|
1495
1722
|
}
|
@@ -1515,7 +1742,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1515
1742
|
# "ts":1648164471827
|
1516
1743
|
# }
|
1517
1744
|
#
|
1518
|
-
result = self.
|
1745
|
+
result = self.safe_dict(response, 'data', {})
|
1519
1746
|
return self.parse_order(result)
|
1520
1747
|
|
1521
1748
|
async def fetch_order_default(self, id: str, symbol: Str = None, params={}):
|
@@ -1524,7 +1751,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1524
1751
|
raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
|
1525
1752
|
await self.load_markets()
|
1526
1753
|
market = self.market(symbol)
|
1527
|
-
request = {
|
1754
|
+
request: dict = {
|
1528
1755
|
'symbol': market['id'],
|
1529
1756
|
'order_id': id,
|
1530
1757
|
}
|
@@ -1565,7 +1792,9 @@ class lbank(Exchange, ImplicitAPI):
|
|
1565
1792
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
1566
1793
|
"""
|
1567
1794
|
fetch all trades made by the user
|
1568
|
-
|
1795
|
+
|
1796
|
+
https://www.lbank.com/en-US/docs/index.html#past-transaction-details
|
1797
|
+
|
1569
1798
|
:param str symbol: unified market symbol
|
1570
1799
|
:param int [since]: the earliest time in ms to fetch trades for
|
1571
1800
|
:param int [limit]: the maximum number of trade structures to retrieve
|
@@ -1578,7 +1807,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1578
1807
|
market = self.market(symbol)
|
1579
1808
|
since = self.safe_value(params, 'start_date', since)
|
1580
1809
|
params = self.omit(params, 'start_date')
|
1581
|
-
request = {
|
1810
|
+
request: dict = {
|
1582
1811
|
'symbol': market['id'],
|
1583
1812
|
# 'start_date' Start time yyyy-mm-dd, the maximum is today, the default is yesterday
|
1584
1813
|
# 'end_date' Finish time yyyy-mm-dd, the maximum is today, the default is today
|
@@ -1613,13 +1842,15 @@ class lbank(Exchange, ImplicitAPI):
|
|
1613
1842
|
# "ts":1648509742164
|
1614
1843
|
# }
|
1615
1844
|
#
|
1616
|
-
trades = self.
|
1845
|
+
trades = self.safe_list(response, 'data', [])
|
1617
1846
|
return self.parse_trades(trades, market, since, limit)
|
1618
1847
|
|
1619
1848
|
async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1620
1849
|
"""
|
1621
1850
|
fetches information on multiple orders made by the user
|
1622
|
-
|
1851
|
+
|
1852
|
+
https://www.lbank.com/en-US/docs/index.html#query-all-orders
|
1853
|
+
|
1623
1854
|
:param str symbol: unified market symbol of the market orders were made in
|
1624
1855
|
:param int [since]: the earliest time in ms to fetch orders for
|
1625
1856
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -1634,7 +1865,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1634
1865
|
market = self.market(symbol)
|
1635
1866
|
if limit is None:
|
1636
1867
|
limit = 100
|
1637
|
-
request = {
|
1868
|
+
request: dict = {
|
1638
1869
|
'symbol': market['id'],
|
1639
1870
|
'current_page': 1,
|
1640
1871
|
'page_length': limit,
|
@@ -1669,13 +1900,15 @@ class lbank(Exchange, ImplicitAPI):
|
|
1669
1900
|
# }
|
1670
1901
|
#
|
1671
1902
|
result = self.safe_value(response, 'data', {})
|
1672
|
-
orders = self.
|
1903
|
+
orders = self.safe_list(result, 'orders', [])
|
1673
1904
|
return self.parse_orders(orders, market, since, limit)
|
1674
1905
|
|
1675
1906
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1676
1907
|
"""
|
1677
1908
|
fetch all unfilled currently open orders
|
1678
|
-
|
1909
|
+
|
1910
|
+
https://www.lbank.com/en-US/docs/index.html#current-pending-order
|
1911
|
+
|
1679
1912
|
:param str symbol: unified market symbol
|
1680
1913
|
:param int [since]: the earliest time in ms to fetch open orders for
|
1681
1914
|
:param int [limit]: the maximum number of open order structures to retrieve
|
@@ -1688,7 +1921,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1688
1921
|
market = self.market(symbol)
|
1689
1922
|
if limit is None:
|
1690
1923
|
limit = 100
|
1691
|
-
request = {
|
1924
|
+
request: dict = {
|
1692
1925
|
'symbol': market['id'],
|
1693
1926
|
'current_page': 1,
|
1694
1927
|
'page_length': limit,
|
@@ -1722,13 +1955,15 @@ class lbank(Exchange, ImplicitAPI):
|
|
1722
1955
|
# }
|
1723
1956
|
#
|
1724
1957
|
result = self.safe_value(response, 'data', {})
|
1725
|
-
orders = self.
|
1958
|
+
orders = self.safe_list(result, 'orders', [])
|
1726
1959
|
return self.parse_orders(orders, market, since, limit)
|
1727
1960
|
|
1728
1961
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
1729
1962
|
"""
|
1730
1963
|
cancels an open order
|
1731
|
-
|
1964
|
+
|
1965
|
+
https://www.lbank.com/en-US/docs/index.html#cancel-order-new
|
1966
|
+
|
1732
1967
|
:param str id: order id
|
1733
1968
|
:param str symbol: unified symbol of the market the order was made in
|
1734
1969
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1740,7 +1975,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1740
1975
|
clientOrderId = self.safe_string_2(params, 'origClientOrderId', 'clientOrderId')
|
1741
1976
|
params = self.omit(params, ['origClientOrderId', 'clientOrderId'])
|
1742
1977
|
market = self.market(symbol)
|
1743
|
-
request = {
|
1978
|
+
request: dict = {
|
1744
1979
|
'symbol': market['id'],
|
1745
1980
|
'orderId': id,
|
1746
1981
|
}
|
@@ -1756,17 +1991,19 @@ class lbank(Exchange, ImplicitAPI):
|
|
1756
1991
|
# "origQty":100.0,
|
1757
1992
|
# "tradeType":"buy",
|
1758
1993
|
# "status":0
|
1759
|
-
#
|
1994
|
+
# },
|
1760
1995
|
# "error_code":0,
|
1761
1996
|
# "ts":1648501286196
|
1762
1997
|
# }
|
1763
|
-
|
1764
|
-
return
|
1998
|
+
data = self.safe_dict(response, 'data', {})
|
1999
|
+
return self.parse_order(data)
|
1765
2000
|
|
1766
2001
|
async def cancel_all_orders(self, symbol: Str = None, params={}):
|
1767
2002
|
"""
|
1768
2003
|
cancel all open orders in a market
|
1769
|
-
|
2004
|
+
|
2005
|
+
https://www.lbank.com/en-US/docs/index.html#cancel-all-pending-orders-for-a-single-trading-pair
|
2006
|
+
|
1770
2007
|
:param str symbol: unified market symbol of the market to cancel orders in
|
1771
2008
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1772
2009
|
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -1775,7 +2012,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1775
2012
|
raise ArgumentsRequired(self.id + ' cancelAllOrders() requires a symbol argument')
|
1776
2013
|
await self.load_markets()
|
1777
2014
|
market = self.market(symbol)
|
1778
|
-
request = {
|
2015
|
+
request: dict = {
|
1779
2016
|
'symbol': market['id'],
|
1780
2017
|
}
|
1781
2018
|
response = await self.spotPrivatePostSupplementCancelOrderBySymbol(self.extend(request, params))
|
@@ -1796,8 +2033,8 @@ class lbank(Exchange, ImplicitAPI):
|
|
1796
2033
|
# "ts":1648506641469
|
1797
2034
|
# }
|
1798
2035
|
#
|
1799
|
-
|
1800
|
-
return
|
2036
|
+
data = self.safe_list(response, 'data', [])
|
2037
|
+
return self.parse_orders(data)
|
1801
2038
|
|
1802
2039
|
def get_network_code_for_currency(self, currencyCode, params):
|
1803
2040
|
defaultNetworks = self.safe_value(self.options, 'defaultNetworks')
|
@@ -1807,11 +2044,13 @@ class lbank(Exchange, ImplicitAPI):
|
|
1807
2044
|
network = self.safe_string(networks, network, network) # handle ERC20>ETH alias
|
1808
2045
|
return network
|
1809
2046
|
|
1810
|
-
async def fetch_deposit_address(self, code: str, params={}):
|
2047
|
+
async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
|
1811
2048
|
"""
|
1812
2049
|
fetch the deposit address for a currency associated with self account
|
1813
|
-
|
1814
|
-
|
2050
|
+
|
2051
|
+
https://www.lbank.com/en-US/docs/index.html#get-deposit-address
|
2052
|
+
https://www.lbank.com/en-US/docs/index.html#the-user-obtains-the-deposit-address
|
2053
|
+
|
1815
2054
|
:param str code: unified currency code
|
1816
2055
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1817
2056
|
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
|
@@ -1828,10 +2067,10 @@ class lbank(Exchange, ImplicitAPI):
|
|
1828
2067
|
response = await self.fetch_deposit_address_default(code, params)
|
1829
2068
|
return response
|
1830
2069
|
|
1831
|
-
async def fetch_deposit_address_default(self, code: str, params={}):
|
2070
|
+
async def fetch_deposit_address_default(self, code: str, params={}) -> DepositAddress:
|
1832
2071
|
await self.load_markets()
|
1833
2072
|
currency = self.currency(code)
|
1834
|
-
request = {
|
2073
|
+
request: dict = {
|
1835
2074
|
'assetCode': currency['id'],
|
1836
2075
|
}
|
1837
2076
|
network = self.get_network_code_for_currency(code, params)
|
@@ -1859,18 +2098,18 @@ class lbank(Exchange, ImplicitAPI):
|
|
1859
2098
|
inverseNetworks = self.safe_value(self.options, 'inverse-networks', {})
|
1860
2099
|
networkCode = self.safe_string_upper(inverseNetworks, networkId, networkId)
|
1861
2100
|
return {
|
2101
|
+
'info': response,
|
1862
2102
|
'currency': code,
|
2103
|
+
'network': networkCode,
|
1863
2104
|
'address': address,
|
1864
2105
|
'tag': tag,
|
1865
|
-
'network': networkCode,
|
1866
|
-
'info': response,
|
1867
2106
|
}
|
1868
2107
|
|
1869
|
-
async def fetch_deposit_address_supplement(self, code: str, params={}):
|
2108
|
+
async def fetch_deposit_address_supplement(self, code: str, params={}) -> DepositAddress:
|
1870
2109
|
# returns the address for whatever the default network is...
|
1871
2110
|
await self.load_markets()
|
1872
2111
|
currency = self.currency(code)
|
1873
|
-
request = {
|
2112
|
+
request: dict = {
|
1874
2113
|
'coin': currency['id'],
|
1875
2114
|
}
|
1876
2115
|
networks = self.safe_value(self.options, 'networks')
|
@@ -1898,17 +2137,19 @@ class lbank(Exchange, ImplicitAPI):
|
|
1898
2137
|
inverseNetworks = self.safe_value(self.options, 'inverse-networks', {})
|
1899
2138
|
networkCode = self.safe_string_upper(inverseNetworks, network, network)
|
1900
2139
|
return {
|
2140
|
+
'info': response,
|
1901
2141
|
'currency': code,
|
2142
|
+
'network': networkCode, # will be None if not specified in request
|
1902
2143
|
'address': address,
|
1903
2144
|
'tag': tag,
|
1904
|
-
'network': networkCode, # will be None if not specified in request
|
1905
|
-
'info': response,
|
1906
2145
|
}
|
1907
2146
|
|
1908
|
-
async def withdraw(self, code: str, amount: float, address, tag=None, params={}) -> Transaction:
|
2147
|
+
async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
1909
2148
|
"""
|
1910
2149
|
make a withdrawal
|
1911
|
-
|
2150
|
+
|
2151
|
+
https://www.lbank.com/en-US/docs/index.html#withdrawal
|
2152
|
+
|
1912
2153
|
:param str code: unified currency code
|
1913
2154
|
:param float amount: the amount to withdraw
|
1914
2155
|
:param str address: the address to withdraw to
|
@@ -1924,7 +2165,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1924
2165
|
# The relevant coin network fee can be found by calling fetchDepositWithdrawFees(), note: if no network param is supplied then the default network will be used, self can also be found in fetchDepositWithdrawFees().
|
1925
2166
|
self.check_required_argument('withdraw', fee, 'fee')
|
1926
2167
|
currency = self.currency(code)
|
1927
|
-
request = {
|
2168
|
+
request: dict = {
|
1928
2169
|
'address': address,
|
1929
2170
|
'coin': currency['id'],
|
1930
2171
|
'amount': amount,
|
@@ -1963,7 +2204,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1963
2204
|
}
|
1964
2205
|
|
1965
2206
|
def parse_transaction_status(self, status, type):
|
1966
|
-
statuses = {
|
2207
|
+
statuses: dict = {
|
1967
2208
|
'deposit': {
|
1968
2209
|
'1': 'pending',
|
1969
2210
|
'2': 'ok',
|
@@ -1980,7 +2221,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1980
2221
|
}
|
1981
2222
|
return self.safe_string(self.safe_value(statuses, type, {}), status, status)
|
1982
2223
|
|
1983
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
2224
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
1984
2225
|
#
|
1985
2226
|
# fetchDeposits(private)
|
1986
2227
|
#
|
@@ -2065,7 +2306,9 @@ class lbank(Exchange, ImplicitAPI):
|
|
2065
2306
|
async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
2066
2307
|
"""
|
2067
2308
|
fetch all deposits made to an account
|
2068
|
-
|
2309
|
+
|
2310
|
+
https://www.lbank.com/en-US/docs/index.html#get-recharge-history
|
2311
|
+
|
2069
2312
|
:param str code: unified currency code
|
2070
2313
|
:param int [since]: the earliest time in ms to fetch deposits for
|
2071
2314
|
:param int [limit]: the maximum number of deposits structures to retrieve
|
@@ -2073,7 +2316,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
2073
2316
|
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
|
2074
2317
|
"""
|
2075
2318
|
await self.load_markets()
|
2076
|
-
request = {
|
2319
|
+
request: dict = {
|
2077
2320
|
# 'status': Recharge status: ("1","Applying"),("2","Recharge successful"),("3","Recharge failed"),("4","Already Cancel"),("5", "Transfer")
|
2078
2321
|
# 'endTime': end time, timestamp in milliseconds, default now
|
2079
2322
|
}
|
@@ -2108,13 +2351,15 @@ class lbank(Exchange, ImplicitAPI):
|
|
2108
2351
|
# }
|
2109
2352
|
#
|
2110
2353
|
data = self.safe_value(response, 'data', {})
|
2111
|
-
deposits = self.
|
2354
|
+
deposits = self.safe_list(data, 'depositOrders', [])
|
2112
2355
|
return self.parse_transactions(deposits, currency, since, limit)
|
2113
2356
|
|
2114
2357
|
async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
2115
2358
|
"""
|
2116
2359
|
fetch all withdrawals made from an account
|
2117
|
-
|
2360
|
+
|
2361
|
+
https://www.lbank.com/en-US/docs/index.html#get-withdrawal-history
|
2362
|
+
|
2118
2363
|
:param str code: unified currency code
|
2119
2364
|
:param int [since]: the earliest time in ms to fetch withdrawals for
|
2120
2365
|
:param int [limit]: the maximum number of withdrawals structures to retrieve
|
@@ -2122,7 +2367,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
2122
2367
|
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
|
2123
2368
|
"""
|
2124
2369
|
await self.load_markets()
|
2125
|
-
request = {
|
2370
|
+
request: dict = {
|
2126
2371
|
# 'status': Recharge status: ("1","Applying"),("2","Recharge successful"),("3","Recharge failed"),("4","Already Cancel"),("5", "Transfer")
|
2127
2372
|
# 'endTime': end time, timestamp in milliseconds, default now
|
2128
2373
|
# 'withdrawOrderId': Custom withdrawal id
|
@@ -2161,12 +2406,12 @@ class lbank(Exchange, ImplicitAPI):
|
|
2161
2406
|
# }
|
2162
2407
|
#
|
2163
2408
|
data = self.safe_value(response, 'data', {})
|
2164
|
-
withdraws = self.
|
2409
|
+
withdraws = self.safe_list(data, 'withdraws', [])
|
2165
2410
|
return self.parse_transactions(withdraws, currency, since, limit)
|
2166
2411
|
|
2167
|
-
async def fetch_transaction_fees(self, codes:
|
2412
|
+
async def fetch_transaction_fees(self, codes: Strings = None, params={}):
|
2168
2413
|
"""
|
2169
|
-
|
2414
|
+
@deprecated
|
2170
2415
|
please use fetchDepositWithdrawFees instead
|
2171
2416
|
:param str[]|None codes: not used by lbank fetchTransactionFees()
|
2172
2417
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -2225,7 +2470,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
2225
2470
|
# }
|
2226
2471
|
#
|
2227
2472
|
result = self.safe_value(response, 'data', [])
|
2228
|
-
withdrawFees = {}
|
2473
|
+
withdrawFees: dict = {}
|
2229
2474
|
for i in range(0, len(result)):
|
2230
2475
|
entry = result[i]
|
2231
2476
|
currencyId = self.safe_string(entry, 'coin')
|
@@ -2251,7 +2496,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
2251
2496
|
await self.load_markets()
|
2252
2497
|
code = self.safe_string_2(params, 'coin', 'assetCode')
|
2253
2498
|
params = self.omit(params, ['coin', 'assetCode'])
|
2254
|
-
request = {}
|
2499
|
+
request: dict = {}
|
2255
2500
|
if code is not None:
|
2256
2501
|
currency = self.currency(code)
|
2257
2502
|
request['assetCode'] = currency['id']
|
@@ -2278,7 +2523,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
2278
2523
|
# }
|
2279
2524
|
#
|
2280
2525
|
result = self.safe_value(response, 'data', [])
|
2281
|
-
withdrawFees = {}
|
2526
|
+
withdrawFees: dict = {}
|
2282
2527
|
for i in range(0, len(result)):
|
2283
2528
|
item = result[i]
|
2284
2529
|
canWithdraw = self.safe_value(item, 'canWithDraw')
|
@@ -2302,9 +2547,11 @@ class lbank(Exchange, ImplicitAPI):
|
|
2302
2547
|
async def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
|
2303
2548
|
"""
|
2304
2549
|
when using private endpoint, only returns information for currencies with non-zero balance, use public method by specifying self.options['fetchDepositWithdrawFees']['method'] = 'fetchPublicDepositWithdrawFees'
|
2305
|
-
|
2306
|
-
|
2307
|
-
|
2550
|
+
|
2551
|
+
https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
|
2552
|
+
https://www.lbank.com/en-US/docs/index.html#withdrawal-configurations
|
2553
|
+
|
2554
|
+
:param str[] [codes]: array of unified currency codes
|
2308
2555
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2309
2556
|
:returns dict: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
|
2310
2557
|
"""
|
@@ -2317,11 +2564,11 @@ class lbank(Exchange, ImplicitAPI):
|
|
2317
2564
|
method = self.safe_string(params, 'method', defaultMethod)
|
2318
2565
|
params = self.omit(params, 'method')
|
2319
2566
|
if method == 'fetchPublicDepositWithdrawFees':
|
2320
|
-
await self.fetch_public_deposit_withdraw_fees(codes, params)
|
2567
|
+
response = await self.fetch_public_deposit_withdraw_fees(codes, params)
|
2321
2568
|
else:
|
2322
|
-
await self.fetch_private_deposit_withdraw_fees(codes, params)
|
2569
|
+
response = await self.fetch_private_deposit_withdraw_fees(codes, params)
|
2323
2570
|
else:
|
2324
|
-
await self.fetch_public_deposit_withdraw_fees(codes, params)
|
2571
|
+
response = await self.fetch_public_deposit_withdraw_fees(codes, params)
|
2325
2572
|
return response
|
2326
2573
|
|
2327
2574
|
async def fetch_private_deposit_withdraw_fees(self, codes=None, params={}):
|
@@ -2359,14 +2606,14 @@ class lbank(Exchange, ImplicitAPI):
|
|
2359
2606
|
# "code": 0
|
2360
2607
|
# }
|
2361
2608
|
#
|
2362
|
-
data = self.
|
2609
|
+
data = self.safe_list(response, 'data', [])
|
2363
2610
|
return self.parse_deposit_withdraw_fees(data, codes, 'coin')
|
2364
2611
|
|
2365
2612
|
async def fetch_public_deposit_withdraw_fees(self, codes=None, params={}):
|
2366
2613
|
# extremely incomplete response
|
2367
2614
|
# vast majority fees None
|
2368
2615
|
await self.load_markets()
|
2369
|
-
request = {}
|
2616
|
+
request: dict = {}
|
2370
2617
|
response = await self.spotPublicGetWithdrawConfigs(self.extend(request, params))
|
2371
2618
|
#
|
2372
2619
|
# {
|
@@ -2409,7 +2656,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
2409
2656
|
# ...
|
2410
2657
|
# ]
|
2411
2658
|
#
|
2412
|
-
result = {}
|
2659
|
+
result: dict = {}
|
2413
2660
|
for i in range(0, len(response)):
|
2414
2661
|
fee = response[i]
|
2415
2662
|
canWithdraw = self.safe_value(fee, 'canWithDraw')
|
@@ -2564,7 +2811,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
2564
2811
|
pem += self.secret[start:end] + "\n" # eslint-disable-line
|
2565
2812
|
return pem + '-----END PRIVATE KEY-----'
|
2566
2813
|
|
2567
|
-
def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
2814
|
+
def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
2568
2815
|
if response is None:
|
2569
2816
|
return None
|
2570
2817
|
success = self.safe_value(response, 'result')
|