ccxt 4.2.76__py2.py3-none-any.whl → 4.4.48__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 +25 -0
- ccxt/abstract/kucoinfutures.py +35 -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 +3513 -1511
- 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 +3105 -881
- 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 +239 -50
- ccxt/async_support/bitget.py +1513 -563
- ccxt/async_support/bithumb.py +201 -67
- 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 +403 -150
- 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 +2326 -1255
- ccxt/async_support/cex.py +1409 -1329
- ccxt/async_support/coinbase.py +1455 -288
- 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 +206 -89
- 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 +467 -158
- ccxt/async_support/deribit.py +558 -324
- ccxt/async_support/digifinex.py +340 -223
- ccxt/async_support/ellipx.py +1826 -0
- ccxt/async_support/exmo.py +259 -128
- ccxt/async_support/gate.py +1473 -464
- ccxt/async_support/gemini.py +206 -84
- ccxt/async_support/hashkey.py +4164 -0
- ccxt/async_support/hitbtc.py +334 -178
- ccxt/async_support/hollaex.py +134 -83
- ccxt/async_support/htx.py +1095 -563
- ccxt/async_support/huobijp.py +105 -56
- ccxt/async_support/hyperliquid.py +1634 -269
- ccxt/async_support/idex.py +148 -95
- ccxt/async_support/independentreserve.py +236 -31
- ccxt/async_support/indodax.py +165 -62
- ccxt/async_support/kraken.py +871 -354
- ccxt/async_support/krakenfutures.py +324 -100
- ccxt/async_support/kucoin.py +1050 -355
- ccxt/async_support/kucoinfutures.py +1004 -149
- ccxt/async_support/kuna.py +138 -106
- ccxt/async_support/latoken.py +135 -79
- ccxt/async_support/lbank.py +290 -113
- ccxt/async_support/luno.py +112 -62
- ccxt/async_support/lykke.py +104 -55
- ccxt/async_support/mercado.py +36 -29
- ccxt/async_support/mexc.py +995 -429
- ccxt/async_support/myokx.py +43 -0
- ccxt/async_support/ndax.py +163 -82
- ccxt/async_support/novadax.py +121 -75
- ccxt/async_support/oceanex.py +175 -59
- ccxt/async_support/okcoin.py +222 -163
- ccxt/async_support/okx.py +1777 -455
- ccxt/async_support/onetrading.py +132 -414
- ccxt/async_support/oxfun.py +2832 -0
- ccxt/async_support/p2b.py +79 -51
- ccxt/async_support/paradex.py +2017 -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 +1155 -295
- 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 +1729 -482
- 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 +3513 -1511
- ccxt/binancecoinm.py +2 -1
- ccxt/binanceus.py +12 -1
- ccxt/binanceusdm.py +3 -1
- ccxt/bingx.py +3105 -881
- 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 +239 -50
- ccxt/bitget.py +1513 -563
- ccxt/bithumb.py +200 -67
- 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 +403 -150
- ccxt/btcalpha.py +161 -55
- ccxt/btcbox.py +250 -34
- ccxt/btcmarkets.py +232 -85
- ccxt/btcturk.py +159 -60
- ccxt/bybit.py +2326 -1255
- ccxt/cex.py +1408 -1329
- ccxt/coinbase.py +1455 -288
- 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 +206 -89
- ccxt/coinspot.py +137 -62
- ccxt/cryptocom.py +515 -185
- ccxt/currencycom.py +203 -85
- ccxt/defx.py +2065 -0
- ccxt/delta.py +467 -158
- ccxt/deribit.py +558 -324
- ccxt/digifinex.py +340 -223
- ccxt/ellipx.py +1826 -0
- ccxt/exmo.py +259 -128
- ccxt/gate.py +1473 -464
- ccxt/gemini.py +206 -84
- ccxt/hashkey.py +4164 -0
- ccxt/hitbtc.py +334 -178
- ccxt/hollaex.py +134 -83
- ccxt/htx.py +1095 -563
- ccxt/huobijp.py +105 -56
- ccxt/hyperliquid.py +1633 -269
- ccxt/idex.py +148 -95
- ccxt/independentreserve.py +235 -31
- ccxt/indodax.py +165 -62
- ccxt/kraken.py +871 -354
- ccxt/krakenfutures.py +324 -100
- ccxt/kucoin.py +1050 -355
- ccxt/kucoinfutures.py +1004 -149
- ccxt/kuna.py +138 -106
- ccxt/latoken.py +135 -79
- ccxt/lbank.py +290 -113
- ccxt/luno.py +112 -62
- ccxt/lykke.py +104 -55
- ccxt/mercado.py +36 -29
- ccxt/mexc.py +994 -429
- ccxt/myokx.py +43 -0
- ccxt/ndax.py +163 -82
- ccxt/novadax.py +121 -75
- ccxt/oceanex.py +175 -59
- ccxt/okcoin.py +222 -163
- ccxt/okx.py +1777 -455
- ccxt/onetrading.py +132 -414
- ccxt/oxfun.py +2831 -0
- ccxt/p2b.py +79 -51
- ccxt/paradex.py +2017 -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 +63 -15
- 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 +138 -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 +204 -82
- 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 +967 -661
- 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 +168 -32
- ccxt/pro/exmo.py +253 -21
- 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 +93 -34
- ccxt/pro/poloniex.py +129 -50
- ccxt/pro/poloniexfutures.py +53 -32
- ccxt/pro/probit.py +93 -86
- 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 +486 -70
- 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} +465 -407
- ccxt/test/tests_helpers.py +285 -0
- ccxt/test/tests_init.py +39 -0
- ccxt/test/{test_sync.py → tests_sync.py} +465 -409
- 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 +1155 -295
- 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.48.dist-info/LICENSE.txt +21 -0
- ccxt-4.4.48.dist-info/METADATA +646 -0
- ccxt-4.4.48.dist-info/RECORD +669 -0
- {ccxt-4.2.76.dist-info → ccxt-4.4.48.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.76.dist-info/METADATA +0 -626
- ccxt-4.2.76.dist-info/RECORD +0 -534
- {ccxt-4.2.76.dist-info → ccxt-4.4.48.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
|
},
|
@@ -311,8 +314,10 @@ class lbank(Exchange, ImplicitAPI):
|
|
311
314
|
async def fetch_time(self, params={}):
|
312
315
|
"""
|
313
316
|
fetches the current integer timestamp in milliseconds from the exchange server
|
314
|
-
|
315
|
-
|
317
|
+
|
318
|
+
https://www.lbank.com/en-US/docs/index.html#get-timestamp
|
319
|
+
https://www.lbank.com/en-US/docs/contract.html#get-the-current-time
|
320
|
+
|
316
321
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
317
322
|
:returns int: the current integer timestamp in milliseconds from the exchange server
|
318
323
|
"""
|
@@ -345,11 +350,13 @@ class lbank(Exchange, ImplicitAPI):
|
|
345
350
|
#
|
346
351
|
return self.safe_integer(response, 'data')
|
347
352
|
|
348
|
-
async def fetch_markets(self, params={}):
|
353
|
+
async def fetch_markets(self, params={}) -> List[Market]:
|
349
354
|
"""
|
350
355
|
retrieves data on all markets for lbank
|
351
|
-
|
352
|
-
|
356
|
+
|
357
|
+
https://www.lbank.com/en-US/docs/index.html#trading-pairs
|
358
|
+
https://www.lbank.com/en-US/docs/contract.html#query-contract-information-list
|
359
|
+
|
353
360
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
354
361
|
:returns dict[]: an array of objects representing market data
|
355
362
|
"""
|
@@ -440,7 +447,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
440
447
|
return result
|
441
448
|
|
442
449
|
async def fetch_swap_markets(self, params={}):
|
443
|
-
request = {
|
450
|
+
request: dict = {
|
444
451
|
'productGroup': 'SwapU',
|
445
452
|
}
|
446
453
|
response = await self.contractPublicGetCfdOpenApiV1PubInstrument(self.extend(request, params))
|
@@ -535,7 +542,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
535
542
|
})
|
536
543
|
return result
|
537
544
|
|
538
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
545
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
539
546
|
#
|
540
547
|
# spot: fetchTicker, fetchTickers
|
541
548
|
#
|
@@ -598,7 +605,9 @@ class lbank(Exchange, ImplicitAPI):
|
|
598
605
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
599
606
|
"""
|
600
607
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
601
|
-
|
608
|
+
|
609
|
+
https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
|
610
|
+
|
602
611
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
603
612
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
604
613
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -608,7 +617,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
608
617
|
if market['swap']:
|
609
618
|
responseForSwap = await self.fetch_tickers([market['symbol']], params)
|
610
619
|
return self.safe_value(responseForSwap, market['symbol'])
|
611
|
-
request = {
|
620
|
+
request: dict = {
|
612
621
|
'symbol': market['id'],
|
613
622
|
}
|
614
623
|
response = await self.spotPublicGetTicker24hr(self.extend(request, params))
|
@@ -634,14 +643,16 @@ class lbank(Exchange, ImplicitAPI):
|
|
634
643
|
# }
|
635
644
|
#
|
636
645
|
data = self.safe_value(response, 'data', [])
|
637
|
-
first = self.
|
646
|
+
first = self.safe_dict(data, 0, {})
|
638
647
|
return self.parse_ticker(first, market)
|
639
648
|
|
640
649
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
641
650
|
"""
|
642
651
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
643
|
-
|
644
|
-
|
652
|
+
|
653
|
+
https://www.lbank.com/en-US/docs/index.html#query-current-market-data-new
|
654
|
+
https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
|
655
|
+
|
645
656
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
646
657
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
647
658
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -653,7 +664,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
653
664
|
symbolsLength = len(symbols)
|
654
665
|
if symbolsLength > 0:
|
655
666
|
market = self.market(symbols[0])
|
656
|
-
request = {}
|
667
|
+
request: dict = {}
|
657
668
|
type = None
|
658
669
|
type, params = self.handle_market_type_and_params('fetchTickers', market, params)
|
659
670
|
response = None
|
@@ -708,14 +719,16 @@ class lbank(Exchange, ImplicitAPI):
|
|
708
719
|
# "success": True
|
709
720
|
# }
|
710
721
|
#
|
711
|
-
data = self.
|
722
|
+
data = self.safe_list(response, 'data', [])
|
712
723
|
return self.parse_tickers(data, symbols)
|
713
724
|
|
714
725
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
715
726
|
"""
|
716
727
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
717
|
-
|
718
|
-
|
728
|
+
|
729
|
+
https://www.lbank.com/en-US/docs/index.html#query-market-depth
|
730
|
+
https://www.lbank.com/en-US/docs/contract.html#get-handicap
|
731
|
+
|
719
732
|
:param str symbol: unified symbol of the market to fetch the order book for
|
720
733
|
:param int [limit]: the maximum amount of order book entries to return
|
721
734
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -725,7 +738,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
725
738
|
market = self.market(symbol)
|
726
739
|
if limit is None:
|
727
740
|
limit = 60
|
728
|
-
request = {
|
741
|
+
request: dict = {
|
729
742
|
'symbol': market['id'],
|
730
743
|
}
|
731
744
|
type = None
|
@@ -791,7 +804,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
791
804
|
return self.parse_order_book(orderbook, market['symbol'], timestamp, 'bids', 'asks', 'price', 'volume')
|
792
805
|
return self.parse_order_book(orderbook, market['symbol'], timestamp)
|
793
806
|
|
794
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
807
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
795
808
|
#
|
796
809
|
# fetchTrades(old) spotPublicGetTrades
|
797
810
|
#
|
@@ -887,8 +900,10 @@ class lbank(Exchange, ImplicitAPI):
|
|
887
900
|
async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
888
901
|
"""
|
889
902
|
get the list of most recent trades for a particular symbol
|
890
|
-
|
891
|
-
|
903
|
+
|
904
|
+
https://www.lbank.com/en-US/docs/index.html#query-historical-transactions
|
905
|
+
https://www.lbank.com/en-US/docs/index.html#recent-transactions-list
|
906
|
+
|
892
907
|
:param str symbol: unified symbol of the market to fetch trades for
|
893
908
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
894
909
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -897,7 +912,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
897
912
|
"""
|
898
913
|
await self.load_markets()
|
899
914
|
market = self.market(symbol)
|
900
|
-
request = {
|
915
|
+
request: dict = {
|
901
916
|
'symbol': market['id'],
|
902
917
|
}
|
903
918
|
if since is not None:
|
@@ -931,7 +946,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
931
946
|
# "ts":1647021999308
|
932
947
|
# }
|
933
948
|
#
|
934
|
-
trades = self.
|
949
|
+
trades = self.safe_list(response, 'data', [])
|
935
950
|
return self.parse_trades(trades, market, since, limit)
|
936
951
|
|
937
952
|
def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
|
@@ -957,7 +972,9 @@ class lbank(Exchange, ImplicitAPI):
|
|
957
972
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
958
973
|
"""
|
959
974
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
960
|
-
|
975
|
+
|
976
|
+
https://www.lbank.com/en-US/docs/index.html#query-k-bar-data
|
977
|
+
|
961
978
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
962
979
|
:param str timeframe: the length of time each candle represents
|
963
980
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
@@ -970,17 +987,19 @@ class lbank(Exchange, ImplicitAPI):
|
|
970
987
|
market = self.market(symbol)
|
971
988
|
if limit is None:
|
972
989
|
limit = 100
|
990
|
+
else:
|
991
|
+
limit = min(limit, 2000)
|
973
992
|
if since is None:
|
974
993
|
duration = self.parse_timeframe(timeframe)
|
975
|
-
since = self.milliseconds() - duration * 1000 * limit
|
976
|
-
request = {
|
994
|
+
since = self.milliseconds() - (duration * 1000 * limit)
|
995
|
+
request: dict = {
|
977
996
|
'symbol': market['id'],
|
978
997
|
'type': self.safe_string(self.timeframes, timeframe, timeframe),
|
979
998
|
'time': self.parse_to_int(since / 1000),
|
980
|
-
'size': limit, # max 2000
|
999
|
+
'size': min(limit + 1, 2000), # max 2000
|
981
1000
|
}
|
982
1001
|
response = await self.spotPublicGetKline(self.extend(request, params))
|
983
|
-
ohlcvs = self.
|
1002
|
+
ohlcvs = self.safe_list(response, 'data', [])
|
984
1003
|
#
|
985
1004
|
#
|
986
1005
|
# [
|
@@ -1083,7 +1102,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1083
1102
|
# ]
|
1084
1103
|
#
|
1085
1104
|
timestamp = self.safe_integer(response, 'ts')
|
1086
|
-
result = {
|
1105
|
+
result: dict = {
|
1087
1106
|
'info': response,
|
1088
1107
|
'timestamp': timestamp,
|
1089
1108
|
'datetime': self.iso8601(timestamp),
|
@@ -1129,12 +1148,117 @@ class lbank(Exchange, ImplicitAPI):
|
|
1129
1148
|
return self.safe_balance(result)
|
1130
1149
|
return None
|
1131
1150
|
|
1151
|
+
def parse_funding_rate(self, ticker, market: Market = None) -> FundingRate:
|
1152
|
+
# {
|
1153
|
+
# "symbol": "BTCUSDT",
|
1154
|
+
# "highestPrice": "69495.5",
|
1155
|
+
# "underlyingPrice": "68455.904",
|
1156
|
+
# "lowestPrice": "68182.1",
|
1157
|
+
# "openPrice": "68762.4",
|
1158
|
+
# "positionFeeRate": "0.0001",
|
1159
|
+
# "volume": "33534.2858",
|
1160
|
+
# "markedPrice": "68434.1",
|
1161
|
+
# "turnover": "1200636218.210558",
|
1162
|
+
# "positionFeeTime": "28800",
|
1163
|
+
# "lastPrice": "68427.3",
|
1164
|
+
# "nextFeeTime": "1730736000000",
|
1165
|
+
# "fundingRate": "0.0001",
|
1166
|
+
# }
|
1167
|
+
marketId = self.safe_string(ticker, 'symbol')
|
1168
|
+
symbol = self.safe_symbol(marketId, market)
|
1169
|
+
markPrice = self.safe_number(ticker, 'markedPrice')
|
1170
|
+
indexPrice = self.safe_number(ticker, 'underlyingPrice')
|
1171
|
+
fundingRate = self.safe_number(ticker, 'fundingRate')
|
1172
|
+
fundingTime = self.safe_integer(ticker, 'nextFeeTime')
|
1173
|
+
positionFeeTime = self.safe_integer(ticker, 'positionFeeTime')
|
1174
|
+
intervalString = None
|
1175
|
+
if positionFeeTime is not None:
|
1176
|
+
interval = self.parse_to_int(positionFeeTime / 60 / 60)
|
1177
|
+
intervalString = str(interval) + 'h'
|
1178
|
+
return {
|
1179
|
+
'info': ticker,
|
1180
|
+
'symbol': symbol,
|
1181
|
+
'markPrice': markPrice,
|
1182
|
+
'indexPrice': indexPrice,
|
1183
|
+
'fundingRate': fundingRate,
|
1184
|
+
'fundingTimestamp': fundingTime,
|
1185
|
+
'fundingDatetime': self.iso8601(fundingTime),
|
1186
|
+
'timestamp': None,
|
1187
|
+
'datetime': None,
|
1188
|
+
'nextFundingRate': None,
|
1189
|
+
'nextFundingTimestamp': None,
|
1190
|
+
'nextFundingDatetime': None,
|
1191
|
+
'previousFundingRate': None,
|
1192
|
+
'previousFundingTimestamp': None,
|
1193
|
+
'previousFundingDatetime': None,
|
1194
|
+
'interval': intervalString,
|
1195
|
+
}
|
1196
|
+
|
1197
|
+
async def fetch_funding_rate(self, symbol: str, params={}) -> FundingRate:
|
1198
|
+
"""
|
1199
|
+
fetch the current funding rate
|
1200
|
+
|
1201
|
+
https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
|
1202
|
+
|
1203
|
+
:param str symbol: unified market symbol
|
1204
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1205
|
+
:returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
|
1206
|
+
"""
|
1207
|
+
await self.load_markets()
|
1208
|
+
market = self.market(symbol)
|
1209
|
+
responseForSwap = await self.fetch_funding_rates([market['symbol']], params)
|
1210
|
+
return self.safe_value(responseForSwap, market['symbol'])
|
1211
|
+
|
1212
|
+
async def fetch_funding_rates(self, symbols: Strings = None, params={}) -> FundingRates:
|
1213
|
+
"""
|
1214
|
+
fetch the funding rate for multiple markets
|
1215
|
+
|
1216
|
+
https://www.lbank.com/en-US/docs/contract.html#query-contract-market-list
|
1217
|
+
|
1218
|
+
:param str[]|None symbols: list of unified market symbols
|
1219
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1220
|
+
:returns dict: a dictionary of `funding rate structures <https://docs.ccxt.com/#/?id=funding-rates-structure>`, indexed by market symbols
|
1221
|
+
"""
|
1222
|
+
await self.load_markets()
|
1223
|
+
symbols = self.market_symbols(symbols)
|
1224
|
+
request: dict = {
|
1225
|
+
'productGroup': 'SwapU',
|
1226
|
+
}
|
1227
|
+
response = await self.contractPublicGetCfdOpenApiV1PubMarketData(self.extend(request, params))
|
1228
|
+
# {
|
1229
|
+
# "data": [
|
1230
|
+
# {
|
1231
|
+
# "symbol": "BTCUSDT",
|
1232
|
+
# "highestPrice": "69495.5",
|
1233
|
+
# "underlyingPrice": "68455.904",
|
1234
|
+
# "lowestPrice": "68182.1",
|
1235
|
+
# "openPrice": "68762.4",
|
1236
|
+
# "positionFeeRate": "0.0001",
|
1237
|
+
# "volume": "33534.2858",
|
1238
|
+
# "markedPrice": "68434.1",
|
1239
|
+
# "turnover": "1200636218.210558",
|
1240
|
+
# "positionFeeTime": "28800",
|
1241
|
+
# "lastPrice": "68427.3",
|
1242
|
+
# "nextFeeTime": "1730736000000",
|
1243
|
+
# "fundingRate": "0.0001",
|
1244
|
+
# }
|
1245
|
+
# ],
|
1246
|
+
# "error_code": "0",
|
1247
|
+
# "msg": "Success",
|
1248
|
+
# "result": "true",
|
1249
|
+
# "success": True,
|
1250
|
+
# }
|
1251
|
+
data = self.safe_list(response, 'data', [])
|
1252
|
+
return self.parse_funding_rates(data, symbols)
|
1253
|
+
|
1132
1254
|
async def fetch_balance(self, params={}) -> Balances:
|
1133
1255
|
"""
|
1134
1256
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
1135
|
-
|
1136
|
-
|
1137
|
-
|
1257
|
+
|
1258
|
+
https://www.lbank.com/en-US/docs/index.html#asset-information
|
1259
|
+
https://www.lbank.com/en-US/docs/index.html#account-information
|
1260
|
+
https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
|
1261
|
+
|
1138
1262
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1139
1263
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
1140
1264
|
"""
|
@@ -1181,7 +1305,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1181
1305
|
#
|
1182
1306
|
return self.parse_balance(response)
|
1183
1307
|
|
1184
|
-
def parse_trading_fee(self, fee, market: Market = None):
|
1308
|
+
def parse_trading_fee(self, fee: dict, market: Market = None) -> TradingFeeInterface:
|
1185
1309
|
#
|
1186
1310
|
# {
|
1187
1311
|
# "symbol":"skt_usdt",
|
@@ -1196,32 +1320,38 @@ class lbank(Exchange, ImplicitAPI):
|
|
1196
1320
|
'symbol': symbol,
|
1197
1321
|
'maker': self.safe_number(fee, 'makerCommission'),
|
1198
1322
|
'taker': self.safe_number(fee, 'takerCommission'),
|
1323
|
+
'percentage': None,
|
1324
|
+
'tierBased': None,
|
1199
1325
|
}
|
1200
1326
|
|
1201
|
-
async def fetch_trading_fee(self, symbol: str, params={}):
|
1327
|
+
async def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
|
1202
1328
|
"""
|
1203
1329
|
fetch the trading fees for a market
|
1204
|
-
|
1330
|
+
|
1331
|
+
https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
|
1332
|
+
|
1205
1333
|
:param str symbol: unified market symbol
|
1206
1334
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1207
1335
|
:returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
|
1208
1336
|
"""
|
1209
1337
|
market = self.market(symbol)
|
1210
1338
|
result = await self.fetch_trading_fees(self.extend(params, {'category': market['id']}))
|
1211
|
-
return result
|
1339
|
+
return self.safe_dict(result, symbol)
|
1212
1340
|
|
1213
|
-
async def fetch_trading_fees(self, params={}):
|
1341
|
+
async def fetch_trading_fees(self, params={}) -> TradingFees:
|
1214
1342
|
"""
|
1215
1343
|
fetch the trading fees for multiple markets
|
1216
|
-
|
1344
|
+
|
1345
|
+
https://www.lbank.com/en-US/docs/index.html#transaction-fee-rate-query
|
1346
|
+
|
1217
1347
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1218
1348
|
:returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
|
1219
1349
|
"""
|
1220
1350
|
await self.load_markets()
|
1221
|
-
request = {}
|
1351
|
+
request: dict = {}
|
1222
1352
|
response = await self.spotPrivatePostSupplementCustomerTradeFee(self.extend(request, params))
|
1223
1353
|
fees = self.safe_value(response, 'data', [])
|
1224
|
-
result = {}
|
1354
|
+
result: dict = {}
|
1225
1355
|
for i in range(0, len(fees)):
|
1226
1356
|
fee = self.parse_trading_fee(fees[i])
|
1227
1357
|
symbol = fee['symbol']
|
@@ -1231,8 +1361,10 @@ class lbank(Exchange, ImplicitAPI):
|
|
1231
1361
|
async def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
|
1232
1362
|
"""
|
1233
1363
|
create a market buy order by providing the symbol and cost
|
1234
|
-
|
1235
|
-
|
1364
|
+
|
1365
|
+
https://www.lbank.com/en-US/docs/index.html#place-order
|
1366
|
+
https://www.lbank.com/en-US/docs/index.html#place-an-order
|
1367
|
+
|
1236
1368
|
:param str symbol: unified symbol of the market to create an order in
|
1237
1369
|
:param float cost: how much you want to trade in units of the quote currency
|
1238
1370
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1248,13 +1380,15 @@ class lbank(Exchange, ImplicitAPI):
|
|
1248
1380
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1249
1381
|
"""
|
1250
1382
|
create a trade order
|
1251
|
-
|
1252
|
-
|
1383
|
+
|
1384
|
+
https://www.lbank.com/en-US/docs/index.html#place-order
|
1385
|
+
https://www.lbank.com/en-US/docs/index.html#place-an-order
|
1386
|
+
|
1253
1387
|
:param str symbol: unified symbol of the market to create an order in
|
1254
1388
|
:param str type: 'market' or 'limit'
|
1255
1389
|
:param str side: 'buy' or 'sell'
|
1256
1390
|
: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
|
1391
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1258
1392
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1259
1393
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1260
1394
|
"""
|
@@ -1264,7 +1398,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1264
1398
|
postOnly = self.safe_bool(params, 'postOnly', False)
|
1265
1399
|
timeInForce = self.safe_string_upper(params, 'timeInForce')
|
1266
1400
|
params = self.omit(params, ['custom_id', 'clientOrderId', 'timeInForce', 'postOnly'])
|
1267
|
-
request = {
|
1401
|
+
request: dict = {
|
1268
1402
|
'symbol': market['id'],
|
1269
1403
|
}
|
1270
1404
|
ioc = (timeInForce == 'IOC')
|
@@ -1335,8 +1469,8 @@ class lbank(Exchange, ImplicitAPI):
|
|
1335
1469
|
'info': result,
|
1336
1470
|
}, market)
|
1337
1471
|
|
1338
|
-
def parse_order_status(self, status):
|
1339
|
-
statuses = {
|
1472
|
+
def parse_order_status(self, status: Str):
|
1473
|
+
statuses: dict = {
|
1340
1474
|
'-1': 'canceled', # canceled
|
1341
1475
|
'0': 'open', # not traded
|
1342
1476
|
'1': 'open', # partial deal
|
@@ -1346,7 +1480,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1346
1480
|
}
|
1347
1481
|
return self.safe_string(statuses, status, status)
|
1348
1482
|
|
1349
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
1483
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1350
1484
|
#
|
1351
1485
|
# fetchOrderSupplement(private)
|
1352
1486
|
#
|
@@ -1413,6 +1547,27 @@ class lbank(Exchange, ImplicitAPI):
|
|
1413
1547
|
# "status":-1
|
1414
1548
|
# }
|
1415
1549
|
#
|
1550
|
+
# cancelOrder
|
1551
|
+
#
|
1552
|
+
# {
|
1553
|
+
# "executedQty":0.0,
|
1554
|
+
# "price":0.05,
|
1555
|
+
# "origQty":100.0,
|
1556
|
+
# "tradeType":"buy",
|
1557
|
+
# "status":0
|
1558
|
+
# }
|
1559
|
+
#
|
1560
|
+
# cancelAllOrders
|
1561
|
+
#
|
1562
|
+
# {
|
1563
|
+
# "executedQty":0.00000000000000000000,
|
1564
|
+
# "orderId":"293ef71b-3e67-4962-af93-aa06990a045f",
|
1565
|
+
# "price":0.05000000000000000000,
|
1566
|
+
# "origQty":100.00000000000000000000,
|
1567
|
+
# "tradeType":"buy",
|
1568
|
+
# "status":0
|
1569
|
+
# }
|
1570
|
+
#
|
1416
1571
|
id = self.safe_string_2(order, 'orderId', 'order_id')
|
1417
1572
|
clientOrderId = self.safe_string_2(order, 'clientOrderId', 'custom_id')
|
1418
1573
|
timestamp = self.safe_integer_2(order, 'time', 'create_time')
|
@@ -1422,7 +1577,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1422
1577
|
timeInForce = None
|
1423
1578
|
postOnly = False
|
1424
1579
|
type = 'limit'
|
1425
|
-
rawType = self.
|
1580
|
+
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
1581
|
parts = rawType.split('_')
|
1427
1582
|
side = self.safe_string(parts, 0)
|
1428
1583
|
typePart = self.safe_string(parts, 1) # market, maker, ioc, fok or None(limit)
|
@@ -1454,7 +1609,6 @@ class lbank(Exchange, ImplicitAPI):
|
|
1454
1609
|
'postOnly': postOnly,
|
1455
1610
|
'side': side,
|
1456
1611
|
'price': price,
|
1457
|
-
'stopPrice': None,
|
1458
1612
|
'triggerPrice': None,
|
1459
1613
|
'cost': costString,
|
1460
1614
|
'amount': amountString,
|
@@ -1469,8 +1623,11 @@ class lbank(Exchange, ImplicitAPI):
|
|
1469
1623
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
1470
1624
|
"""
|
1471
1625
|
fetches information on an order made by the user
|
1472
|
-
|
1473
|
-
|
1626
|
+
|
1627
|
+
https://www.lbank.com/en-US/docs/index.html#query-order
|
1628
|
+
https://www.lbank.com/en-US/docs/index.html#query-order-new
|
1629
|
+
|
1630
|
+
:param str id: order id
|
1474
1631
|
:param str symbol: unified symbol of the market the order was made in
|
1475
1632
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1476
1633
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -1489,7 +1646,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1489
1646
|
raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
|
1490
1647
|
await self.load_markets()
|
1491
1648
|
market = self.market(symbol)
|
1492
|
-
request = {
|
1649
|
+
request: dict = {
|
1493
1650
|
'symbol': market['id'],
|
1494
1651
|
'orderId': id,
|
1495
1652
|
}
|
@@ -1515,7 +1672,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1515
1672
|
# "ts":1648164471827
|
1516
1673
|
# }
|
1517
1674
|
#
|
1518
|
-
result = self.
|
1675
|
+
result = self.safe_dict(response, 'data', {})
|
1519
1676
|
return self.parse_order(result)
|
1520
1677
|
|
1521
1678
|
async def fetch_order_default(self, id: str, symbol: Str = None, params={}):
|
@@ -1524,7 +1681,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1524
1681
|
raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
|
1525
1682
|
await self.load_markets()
|
1526
1683
|
market = self.market(symbol)
|
1527
|
-
request = {
|
1684
|
+
request: dict = {
|
1528
1685
|
'symbol': market['id'],
|
1529
1686
|
'order_id': id,
|
1530
1687
|
}
|
@@ -1565,7 +1722,9 @@ class lbank(Exchange, ImplicitAPI):
|
|
1565
1722
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
1566
1723
|
"""
|
1567
1724
|
fetch all trades made by the user
|
1568
|
-
|
1725
|
+
|
1726
|
+
https://www.lbank.com/en-US/docs/index.html#past-transaction-details
|
1727
|
+
|
1569
1728
|
:param str symbol: unified market symbol
|
1570
1729
|
:param int [since]: the earliest time in ms to fetch trades for
|
1571
1730
|
:param int [limit]: the maximum number of trade structures to retrieve
|
@@ -1578,7 +1737,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1578
1737
|
market = self.market(symbol)
|
1579
1738
|
since = self.safe_value(params, 'start_date', since)
|
1580
1739
|
params = self.omit(params, 'start_date')
|
1581
|
-
request = {
|
1740
|
+
request: dict = {
|
1582
1741
|
'symbol': market['id'],
|
1583
1742
|
# 'start_date' Start time yyyy-mm-dd, the maximum is today, the default is yesterday
|
1584
1743
|
# 'end_date' Finish time yyyy-mm-dd, the maximum is today, the default is today
|
@@ -1613,13 +1772,15 @@ class lbank(Exchange, ImplicitAPI):
|
|
1613
1772
|
# "ts":1648509742164
|
1614
1773
|
# }
|
1615
1774
|
#
|
1616
|
-
trades = self.
|
1775
|
+
trades = self.safe_list(response, 'data', [])
|
1617
1776
|
return self.parse_trades(trades, market, since, limit)
|
1618
1777
|
|
1619
1778
|
async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1620
1779
|
"""
|
1621
1780
|
fetches information on multiple orders made by the user
|
1622
|
-
|
1781
|
+
|
1782
|
+
https://www.lbank.com/en-US/docs/index.html#query-all-orders
|
1783
|
+
|
1623
1784
|
:param str symbol: unified market symbol of the market orders were made in
|
1624
1785
|
:param int [since]: the earliest time in ms to fetch orders for
|
1625
1786
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -1634,7 +1795,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1634
1795
|
market = self.market(symbol)
|
1635
1796
|
if limit is None:
|
1636
1797
|
limit = 100
|
1637
|
-
request = {
|
1798
|
+
request: dict = {
|
1638
1799
|
'symbol': market['id'],
|
1639
1800
|
'current_page': 1,
|
1640
1801
|
'page_length': limit,
|
@@ -1669,13 +1830,15 @@ class lbank(Exchange, ImplicitAPI):
|
|
1669
1830
|
# }
|
1670
1831
|
#
|
1671
1832
|
result = self.safe_value(response, 'data', {})
|
1672
|
-
orders = self.
|
1833
|
+
orders = self.safe_list(result, 'orders', [])
|
1673
1834
|
return self.parse_orders(orders, market, since, limit)
|
1674
1835
|
|
1675
1836
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1676
1837
|
"""
|
1677
1838
|
fetch all unfilled currently open orders
|
1678
|
-
|
1839
|
+
|
1840
|
+
https://www.lbank.com/en-US/docs/index.html#current-pending-order
|
1841
|
+
|
1679
1842
|
:param str symbol: unified market symbol
|
1680
1843
|
:param int [since]: the earliest time in ms to fetch open orders for
|
1681
1844
|
:param int [limit]: the maximum number of open order structures to retrieve
|
@@ -1688,7 +1851,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1688
1851
|
market = self.market(symbol)
|
1689
1852
|
if limit is None:
|
1690
1853
|
limit = 100
|
1691
|
-
request = {
|
1854
|
+
request: dict = {
|
1692
1855
|
'symbol': market['id'],
|
1693
1856
|
'current_page': 1,
|
1694
1857
|
'page_length': limit,
|
@@ -1722,13 +1885,15 @@ class lbank(Exchange, ImplicitAPI):
|
|
1722
1885
|
# }
|
1723
1886
|
#
|
1724
1887
|
result = self.safe_value(response, 'data', {})
|
1725
|
-
orders = self.
|
1888
|
+
orders = self.safe_list(result, 'orders', [])
|
1726
1889
|
return self.parse_orders(orders, market, since, limit)
|
1727
1890
|
|
1728
1891
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
1729
1892
|
"""
|
1730
1893
|
cancels an open order
|
1731
|
-
|
1894
|
+
|
1895
|
+
https://www.lbank.com/en-US/docs/index.html#cancel-order-new
|
1896
|
+
|
1732
1897
|
:param str id: order id
|
1733
1898
|
:param str symbol: unified symbol of the market the order was made in
|
1734
1899
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1740,7 +1905,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1740
1905
|
clientOrderId = self.safe_string_2(params, 'origClientOrderId', 'clientOrderId')
|
1741
1906
|
params = self.omit(params, ['origClientOrderId', 'clientOrderId'])
|
1742
1907
|
market = self.market(symbol)
|
1743
|
-
request = {
|
1908
|
+
request: dict = {
|
1744
1909
|
'symbol': market['id'],
|
1745
1910
|
'orderId': id,
|
1746
1911
|
}
|
@@ -1756,17 +1921,19 @@ class lbank(Exchange, ImplicitAPI):
|
|
1756
1921
|
# "origQty":100.0,
|
1757
1922
|
# "tradeType":"buy",
|
1758
1923
|
# "status":0
|
1759
|
-
#
|
1924
|
+
# },
|
1760
1925
|
# "error_code":0,
|
1761
1926
|
# "ts":1648501286196
|
1762
1927
|
# }
|
1763
|
-
|
1764
|
-
return
|
1928
|
+
data = self.safe_dict(response, 'data', {})
|
1929
|
+
return self.parse_order(data)
|
1765
1930
|
|
1766
1931
|
async def cancel_all_orders(self, symbol: Str = None, params={}):
|
1767
1932
|
"""
|
1768
1933
|
cancel all open orders in a market
|
1769
|
-
|
1934
|
+
|
1935
|
+
https://www.lbank.com/en-US/docs/index.html#cancel-all-pending-orders-for-a-single-trading-pair
|
1936
|
+
|
1770
1937
|
:param str symbol: unified market symbol of the market to cancel orders in
|
1771
1938
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1772
1939
|
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -1775,7 +1942,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1775
1942
|
raise ArgumentsRequired(self.id + ' cancelAllOrders() requires a symbol argument')
|
1776
1943
|
await self.load_markets()
|
1777
1944
|
market = self.market(symbol)
|
1778
|
-
request = {
|
1945
|
+
request: dict = {
|
1779
1946
|
'symbol': market['id'],
|
1780
1947
|
}
|
1781
1948
|
response = await self.spotPrivatePostSupplementCancelOrderBySymbol(self.extend(request, params))
|
@@ -1796,8 +1963,8 @@ class lbank(Exchange, ImplicitAPI):
|
|
1796
1963
|
# "ts":1648506641469
|
1797
1964
|
# }
|
1798
1965
|
#
|
1799
|
-
|
1800
|
-
return
|
1966
|
+
data = self.safe_list(response, 'data', [])
|
1967
|
+
return self.parse_orders(data)
|
1801
1968
|
|
1802
1969
|
def get_network_code_for_currency(self, currencyCode, params):
|
1803
1970
|
defaultNetworks = self.safe_value(self.options, 'defaultNetworks')
|
@@ -1807,11 +1974,13 @@ class lbank(Exchange, ImplicitAPI):
|
|
1807
1974
|
network = self.safe_string(networks, network, network) # handle ERC20>ETH alias
|
1808
1975
|
return network
|
1809
1976
|
|
1810
|
-
async def fetch_deposit_address(self, code: str, params={}):
|
1977
|
+
async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
|
1811
1978
|
"""
|
1812
1979
|
fetch the deposit address for a currency associated with self account
|
1813
|
-
|
1814
|
-
|
1980
|
+
|
1981
|
+
https://www.lbank.com/en-US/docs/index.html#get-deposit-address
|
1982
|
+
https://www.lbank.com/en-US/docs/index.html#the-user-obtains-the-deposit-address
|
1983
|
+
|
1815
1984
|
:param str code: unified currency code
|
1816
1985
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1817
1986
|
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
|
@@ -1828,10 +1997,10 @@ class lbank(Exchange, ImplicitAPI):
|
|
1828
1997
|
response = await self.fetch_deposit_address_default(code, params)
|
1829
1998
|
return response
|
1830
1999
|
|
1831
|
-
async def fetch_deposit_address_default(self, code: str, params={}):
|
2000
|
+
async def fetch_deposit_address_default(self, code: str, params={}) -> DepositAddress:
|
1832
2001
|
await self.load_markets()
|
1833
2002
|
currency = self.currency(code)
|
1834
|
-
request = {
|
2003
|
+
request: dict = {
|
1835
2004
|
'assetCode': currency['id'],
|
1836
2005
|
}
|
1837
2006
|
network = self.get_network_code_for_currency(code, params)
|
@@ -1859,18 +2028,18 @@ class lbank(Exchange, ImplicitAPI):
|
|
1859
2028
|
inverseNetworks = self.safe_value(self.options, 'inverse-networks', {})
|
1860
2029
|
networkCode = self.safe_string_upper(inverseNetworks, networkId, networkId)
|
1861
2030
|
return {
|
2031
|
+
'info': response,
|
1862
2032
|
'currency': code,
|
2033
|
+
'network': networkCode,
|
1863
2034
|
'address': address,
|
1864
2035
|
'tag': tag,
|
1865
|
-
'network': networkCode,
|
1866
|
-
'info': response,
|
1867
2036
|
}
|
1868
2037
|
|
1869
|
-
async def fetch_deposit_address_supplement(self, code: str, params={}):
|
2038
|
+
async def fetch_deposit_address_supplement(self, code: str, params={}) -> DepositAddress:
|
1870
2039
|
# returns the address for whatever the default network is...
|
1871
2040
|
await self.load_markets()
|
1872
2041
|
currency = self.currency(code)
|
1873
|
-
request = {
|
2042
|
+
request: dict = {
|
1874
2043
|
'coin': currency['id'],
|
1875
2044
|
}
|
1876
2045
|
networks = self.safe_value(self.options, 'networks')
|
@@ -1898,17 +2067,19 @@ class lbank(Exchange, ImplicitAPI):
|
|
1898
2067
|
inverseNetworks = self.safe_value(self.options, 'inverse-networks', {})
|
1899
2068
|
networkCode = self.safe_string_upper(inverseNetworks, network, network)
|
1900
2069
|
return {
|
2070
|
+
'info': response,
|
1901
2071
|
'currency': code,
|
2072
|
+
'network': networkCode, # will be None if not specified in request
|
1902
2073
|
'address': address,
|
1903
2074
|
'tag': tag,
|
1904
|
-
'network': networkCode, # will be None if not specified in request
|
1905
|
-
'info': response,
|
1906
2075
|
}
|
1907
2076
|
|
1908
|
-
async def withdraw(self, code: str, amount: float, address, tag=None, params={}) -> Transaction:
|
2077
|
+
async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
1909
2078
|
"""
|
1910
2079
|
make a withdrawal
|
1911
|
-
|
2080
|
+
|
2081
|
+
https://www.lbank.com/en-US/docs/index.html#withdrawal
|
2082
|
+
|
1912
2083
|
:param str code: unified currency code
|
1913
2084
|
:param float amount: the amount to withdraw
|
1914
2085
|
:param str address: the address to withdraw to
|
@@ -1924,7 +2095,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1924
2095
|
# 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
2096
|
self.check_required_argument('withdraw', fee, 'fee')
|
1926
2097
|
currency = self.currency(code)
|
1927
|
-
request = {
|
2098
|
+
request: dict = {
|
1928
2099
|
'address': address,
|
1929
2100
|
'coin': currency['id'],
|
1930
2101
|
'amount': amount,
|
@@ -1963,7 +2134,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1963
2134
|
}
|
1964
2135
|
|
1965
2136
|
def parse_transaction_status(self, status, type):
|
1966
|
-
statuses = {
|
2137
|
+
statuses: dict = {
|
1967
2138
|
'deposit': {
|
1968
2139
|
'1': 'pending',
|
1969
2140
|
'2': 'ok',
|
@@ -1980,7 +2151,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
1980
2151
|
}
|
1981
2152
|
return self.safe_string(self.safe_value(statuses, type, {}), status, status)
|
1982
2153
|
|
1983
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
2154
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
1984
2155
|
#
|
1985
2156
|
# fetchDeposits(private)
|
1986
2157
|
#
|
@@ -2065,7 +2236,9 @@ class lbank(Exchange, ImplicitAPI):
|
|
2065
2236
|
async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
2066
2237
|
"""
|
2067
2238
|
fetch all deposits made to an account
|
2068
|
-
|
2239
|
+
|
2240
|
+
https://www.lbank.com/en-US/docs/index.html#get-recharge-history
|
2241
|
+
|
2069
2242
|
:param str code: unified currency code
|
2070
2243
|
:param int [since]: the earliest time in ms to fetch deposits for
|
2071
2244
|
:param int [limit]: the maximum number of deposits structures to retrieve
|
@@ -2073,7 +2246,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
2073
2246
|
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
|
2074
2247
|
"""
|
2075
2248
|
await self.load_markets()
|
2076
|
-
request = {
|
2249
|
+
request: dict = {
|
2077
2250
|
# 'status': Recharge status: ("1","Applying"),("2","Recharge successful"),("3","Recharge failed"),("4","Already Cancel"),("5", "Transfer")
|
2078
2251
|
# 'endTime': end time, timestamp in milliseconds, default now
|
2079
2252
|
}
|
@@ -2108,13 +2281,15 @@ class lbank(Exchange, ImplicitAPI):
|
|
2108
2281
|
# }
|
2109
2282
|
#
|
2110
2283
|
data = self.safe_value(response, 'data', {})
|
2111
|
-
deposits = self.
|
2284
|
+
deposits = self.safe_list(data, 'depositOrders', [])
|
2112
2285
|
return self.parse_transactions(deposits, currency, since, limit)
|
2113
2286
|
|
2114
2287
|
async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
2115
2288
|
"""
|
2116
2289
|
fetch all withdrawals made from an account
|
2117
|
-
|
2290
|
+
|
2291
|
+
https://www.lbank.com/en-US/docs/index.html#get-withdrawal-history
|
2292
|
+
|
2118
2293
|
:param str code: unified currency code
|
2119
2294
|
:param int [since]: the earliest time in ms to fetch withdrawals for
|
2120
2295
|
:param int [limit]: the maximum number of withdrawals structures to retrieve
|
@@ -2122,7 +2297,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
2122
2297
|
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
|
2123
2298
|
"""
|
2124
2299
|
await self.load_markets()
|
2125
|
-
request = {
|
2300
|
+
request: dict = {
|
2126
2301
|
# 'status': Recharge status: ("1","Applying"),("2","Recharge successful"),("3","Recharge failed"),("4","Already Cancel"),("5", "Transfer")
|
2127
2302
|
# 'endTime': end time, timestamp in milliseconds, default now
|
2128
2303
|
# 'withdrawOrderId': Custom withdrawal id
|
@@ -2161,12 +2336,12 @@ class lbank(Exchange, ImplicitAPI):
|
|
2161
2336
|
# }
|
2162
2337
|
#
|
2163
2338
|
data = self.safe_value(response, 'data', {})
|
2164
|
-
withdraws = self.
|
2339
|
+
withdraws = self.safe_list(data, 'withdraws', [])
|
2165
2340
|
return self.parse_transactions(withdraws, currency, since, limit)
|
2166
2341
|
|
2167
|
-
async def fetch_transaction_fees(self, codes:
|
2342
|
+
async def fetch_transaction_fees(self, codes: Strings = None, params={}):
|
2168
2343
|
"""
|
2169
|
-
|
2344
|
+
@deprecated
|
2170
2345
|
please use fetchDepositWithdrawFees instead
|
2171
2346
|
:param str[]|None codes: not used by lbank fetchTransactionFees()
|
2172
2347
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -2225,7 +2400,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
2225
2400
|
# }
|
2226
2401
|
#
|
2227
2402
|
result = self.safe_value(response, 'data', [])
|
2228
|
-
withdrawFees = {}
|
2403
|
+
withdrawFees: dict = {}
|
2229
2404
|
for i in range(0, len(result)):
|
2230
2405
|
entry = result[i]
|
2231
2406
|
currencyId = self.safe_string(entry, 'coin')
|
@@ -2251,7 +2426,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
2251
2426
|
await self.load_markets()
|
2252
2427
|
code = self.safe_string_2(params, 'coin', 'assetCode')
|
2253
2428
|
params = self.omit(params, ['coin', 'assetCode'])
|
2254
|
-
request = {}
|
2429
|
+
request: dict = {}
|
2255
2430
|
if code is not None:
|
2256
2431
|
currency = self.currency(code)
|
2257
2432
|
request['assetCode'] = currency['id']
|
@@ -2278,7 +2453,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
2278
2453
|
# }
|
2279
2454
|
#
|
2280
2455
|
result = self.safe_value(response, 'data', [])
|
2281
|
-
withdrawFees = {}
|
2456
|
+
withdrawFees: dict = {}
|
2282
2457
|
for i in range(0, len(result)):
|
2283
2458
|
item = result[i]
|
2284
2459
|
canWithdraw = self.safe_value(item, 'canWithDraw')
|
@@ -2302,9 +2477,11 @@ class lbank(Exchange, ImplicitAPI):
|
|
2302
2477
|
async def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
|
2303
2478
|
"""
|
2304
2479
|
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
|
-
|
2480
|
+
|
2481
|
+
https://www.lbank.com/en-US/docs/index.html#get-all-coins-information
|
2482
|
+
https://www.lbank.com/en-US/docs/index.html#withdrawal-configurations
|
2483
|
+
|
2484
|
+
:param str[] [codes]: array of unified currency codes
|
2308
2485
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2309
2486
|
:returns dict: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
|
2310
2487
|
"""
|
@@ -2317,11 +2494,11 @@ class lbank(Exchange, ImplicitAPI):
|
|
2317
2494
|
method = self.safe_string(params, 'method', defaultMethod)
|
2318
2495
|
params = self.omit(params, 'method')
|
2319
2496
|
if method == 'fetchPublicDepositWithdrawFees':
|
2320
|
-
await self.fetch_public_deposit_withdraw_fees(codes, params)
|
2497
|
+
response = await self.fetch_public_deposit_withdraw_fees(codes, params)
|
2321
2498
|
else:
|
2322
|
-
await self.fetch_private_deposit_withdraw_fees(codes, params)
|
2499
|
+
response = await self.fetch_private_deposit_withdraw_fees(codes, params)
|
2323
2500
|
else:
|
2324
|
-
await self.fetch_public_deposit_withdraw_fees(codes, params)
|
2501
|
+
response = await self.fetch_public_deposit_withdraw_fees(codes, params)
|
2325
2502
|
return response
|
2326
2503
|
|
2327
2504
|
async def fetch_private_deposit_withdraw_fees(self, codes=None, params={}):
|
@@ -2359,14 +2536,14 @@ class lbank(Exchange, ImplicitAPI):
|
|
2359
2536
|
# "code": 0
|
2360
2537
|
# }
|
2361
2538
|
#
|
2362
|
-
data = self.
|
2539
|
+
data = self.safe_list(response, 'data', [])
|
2363
2540
|
return self.parse_deposit_withdraw_fees(data, codes, 'coin')
|
2364
2541
|
|
2365
2542
|
async def fetch_public_deposit_withdraw_fees(self, codes=None, params={}):
|
2366
2543
|
# extremely incomplete response
|
2367
2544
|
# vast majority fees None
|
2368
2545
|
await self.load_markets()
|
2369
|
-
request = {}
|
2546
|
+
request: dict = {}
|
2370
2547
|
response = await self.spotPublicGetWithdrawConfigs(self.extend(request, params))
|
2371
2548
|
#
|
2372
2549
|
# {
|
@@ -2409,7 +2586,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
2409
2586
|
# ...
|
2410
2587
|
# ]
|
2411
2588
|
#
|
2412
|
-
result = {}
|
2589
|
+
result: dict = {}
|
2413
2590
|
for i in range(0, len(response)):
|
2414
2591
|
fee = response[i]
|
2415
2592
|
canWithdraw = self.safe_value(fee, 'canWithDraw')
|
@@ -2564,7 +2741,7 @@ class lbank(Exchange, ImplicitAPI):
|
|
2564
2741
|
pem += self.secret[start:end] + "\n" # eslint-disable-line
|
2565
2742
|
return pem + '-----END PRIVATE KEY-----'
|
2566
2743
|
|
2567
|
-
def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
2744
|
+
def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
2568
2745
|
if response is None:
|
2569
2746
|
return None
|
2570
2747
|
success = self.safe_value(response, 'result')
|