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