ccxt 4.2.77__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 +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 +3104 -880
- 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 +1513 -563
- 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 +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 +404 -109
- ccxt/async_support/deribit.py +557 -323
- 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 +1472 -463
- 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 +1633 -268
- 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 +917 -357
- 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 +1776 -454
- 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 +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 +3104 -880
- 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 +1513 -563
- 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 +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 +404 -109
- ccxt/deribit.py +557 -323
- ccxt/digifinex.py +340 -223
- ccxt/ellipx.py +1826 -0
- ccxt/exmo.py +259 -128
- ccxt/gate.py +1472 -463
- 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 +1632 -268
- 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 +917 -357
- 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 +1776 -454
- 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 +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 +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 +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.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.77.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.77.dist-info/METADATA +0 -626
- ccxt-4.2.77.dist-info/RECORD +0 -534
- {ccxt-4.2.77.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
ccxt/bitso.py
CHANGED
@@ -6,15 +6,15 @@
|
|
6
6
|
from ccxt.base.exchange import Exchange
|
7
7
|
from ccxt.abstract.bitso import ImplicitAPI
|
8
8
|
import hashlib
|
9
|
-
from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Trade, Transaction
|
9
|
+
from ccxt.base.types import Balances, Currency, DepositAddress, Int, LedgerEntry, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Trade, 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 ArgumentsRequired
|
13
14
|
from ccxt.base.errors import BadRequest
|
14
15
|
from ccxt.base.errors import OrderNotFound
|
15
16
|
from ccxt.base.errors import NotSupported
|
16
17
|
from ccxt.base.errors import InvalidNonce
|
17
|
-
from ccxt.base.errors import AuthenticationError
|
18
18
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
19
19
|
from ccxt.base.precise import Precise
|
20
20
|
|
@@ -53,6 +53,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
53
53
|
'fetchDeposit': True,
|
54
54
|
'fetchDepositAddress': True,
|
55
55
|
'fetchDepositAddresses': False,
|
56
|
+
'fetchDepositAddressesByNetwork': False,
|
56
57
|
'fetchDeposits': True,
|
57
58
|
'fetchDepositsWithdrawals': False,
|
58
59
|
'fetchDepositWithdrawFee': 'emulated',
|
@@ -77,8 +78,11 @@ class bitso(Exchange, ImplicitAPI):
|
|
77
78
|
'fetchOrderBook': True,
|
78
79
|
'fetchOrderTrades': True,
|
79
80
|
'fetchPosition': False,
|
81
|
+
'fetchPositionHistory': False,
|
80
82
|
'fetchPositionMode': False,
|
81
83
|
'fetchPositions': False,
|
84
|
+
'fetchPositionsForSymbol': False,
|
85
|
+
'fetchPositionsHistory': False,
|
82
86
|
'fetchPositionsRisk': False,
|
83
87
|
'fetchPremiumIndexOHLCV': False,
|
84
88
|
'fetchTicker': True,
|
@@ -100,9 +104,12 @@ class bitso(Exchange, ImplicitAPI):
|
|
100
104
|
'withdraw': True,
|
101
105
|
},
|
102
106
|
'urls': {
|
103
|
-
'logo': 'https://
|
107
|
+
'logo': 'https://github.com/user-attachments/assets/178c8e56-9054-4107-b192-5e5053d4f975',
|
104
108
|
'api': {
|
105
|
-
'rest': 'https://
|
109
|
+
'rest': 'https://bitso.com/api',
|
110
|
+
},
|
111
|
+
'test': {
|
112
|
+
'rest': 'https://stage.bitso.com/api',
|
106
113
|
},
|
107
114
|
'www': 'https://bitso.com',
|
108
115
|
'doc': 'https://bitso.com/api_info',
|
@@ -117,6 +124,12 @@ class bitso(Exchange, ImplicitAPI):
|
|
117
124
|
'TUSD': 0.01,
|
118
125
|
},
|
119
126
|
'defaultPrecision': 0.00000001,
|
127
|
+
'networks': {
|
128
|
+
'TRC20': 'trx',
|
129
|
+
'ERC20': 'erc20',
|
130
|
+
'BEP20': 'bsc',
|
131
|
+
'BEP2': 'bep2',
|
132
|
+
},
|
120
133
|
},
|
121
134
|
'timeframes': {
|
122
135
|
'1m': '60',
|
@@ -182,6 +195,65 @@ class bitso(Exchange, ImplicitAPI):
|
|
182
195
|
],
|
183
196
|
},
|
184
197
|
},
|
198
|
+
'features': {
|
199
|
+
'spot': {
|
200
|
+
'sandbox': False,
|
201
|
+
'createOrder': {
|
202
|
+
'marginMode': False,
|
203
|
+
'triggerPrice': True, # todo implementation
|
204
|
+
'triggerPriceType': None,
|
205
|
+
'triggerDirection': None,
|
206
|
+
'stopLossPrice': False, # todo
|
207
|
+
'takeProfitPrice': False, # todo
|
208
|
+
'attachedStopLossTakeProfit': None,
|
209
|
+
# todo: implementation for TIF
|
210
|
+
'timeInForce': {
|
211
|
+
'IOC': True,
|
212
|
+
'FOK': True,
|
213
|
+
'PO': True,
|
214
|
+
'GTD': False,
|
215
|
+
},
|
216
|
+
'hedged': False,
|
217
|
+
'trailing': False,
|
218
|
+
'leverage': False,
|
219
|
+
'marketBuyRequiresPrice': False,
|
220
|
+
'marketBuyByCost': False,
|
221
|
+
'selfTradePrevention': False,
|
222
|
+
'iceberg': False,
|
223
|
+
},
|
224
|
+
'createOrders': None,
|
225
|
+
'fetchMyTrades': {
|
226
|
+
'marginMode': False,
|
227
|
+
'limit': 100,
|
228
|
+
'daysBack': None,
|
229
|
+
'untilDays': None,
|
230
|
+
},
|
231
|
+
'fetchOrder': {
|
232
|
+
'marginMode': False,
|
233
|
+
'trigger': False,
|
234
|
+
'trailing': False,
|
235
|
+
},
|
236
|
+
'fetchOpenOrders': {
|
237
|
+
'marginMode': False,
|
238
|
+
'limit': 500,
|
239
|
+
'trigger': False,
|
240
|
+
'trailing': False,
|
241
|
+
},
|
242
|
+
'fetchOrders': None,
|
243
|
+
'fetchClosedOrders': None,
|
244
|
+
'fetchOHLCV': {
|
245
|
+
'limit': 300,
|
246
|
+
},
|
247
|
+
},
|
248
|
+
'swap': {
|
249
|
+
'linear': None,
|
250
|
+
'inverse': None,
|
251
|
+
},
|
252
|
+
'future': {
|
253
|
+
'linear': None,
|
254
|
+
'inverse': None,
|
255
|
+
},
|
256
|
+
},
|
185
257
|
'exceptions': {
|
186
258
|
'0201': AuthenticationError, # Invalid Nonce or Invalid Credentials
|
187
259
|
'104': InvalidNonce, # Cannot perform request - nonce must be higher than 1520307203724237
|
@@ -189,16 +261,16 @@ class bitso(Exchange, ImplicitAPI):
|
|
189
261
|
},
|
190
262
|
})
|
191
263
|
|
192
|
-
def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
264
|
+
def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
|
193
265
|
"""
|
194
|
-
fetch the history of changes, actions done by the user or operations that altered balance of the user
|
195
|
-
:param str code: unified currency code, default is None
|
266
|
+
fetch the history of changes, actions done by the user or operations that altered the balance of the user
|
267
|
+
:param str [code]: unified currency code, default is None
|
196
268
|
:param int [since]: timestamp in ms of the earliest ledger entry, default is None
|
197
|
-
:param int [limit]: max number of ledger
|
269
|
+
:param int [limit]: max number of ledger entries to return, default is None
|
198
270
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
199
|
-
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger
|
271
|
+
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
|
200
272
|
"""
|
201
|
-
request = {}
|
273
|
+
request: dict = {}
|
202
274
|
if limit is not None:
|
203
275
|
request['limit'] = limit
|
204
276
|
response = self.privateGetLedger(self.extend(request, params))
|
@@ -230,7 +302,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
230
302
|
return self.parse_ledger(payload, currency, since, limit)
|
231
303
|
|
232
304
|
def parse_ledger_entry_type(self, type):
|
233
|
-
types = {
|
305
|
+
types: dict = {
|
234
306
|
'funding': 'transaction',
|
235
307
|
'withdrawal': 'transaction',
|
236
308
|
'trade': 'trade',
|
@@ -238,7 +310,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
238
310
|
}
|
239
311
|
return self.safe_string(types, type, type)
|
240
312
|
|
241
|
-
def parse_ledger_entry(self, item, currency: Currency = None):
|
313
|
+
def parse_ledger_entry(self, item: dict, currency: Currency = None) -> LedgerEntry:
|
242
314
|
#
|
243
315
|
# {
|
244
316
|
# "eid": "2510b3e2bc1c87f584500a18084f35ed",
|
@@ -302,6 +374,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
302
374
|
amount = self.safe_string(firstBalance, 'amount')
|
303
375
|
currencyId = self.safe_string(firstBalance, 'currency')
|
304
376
|
code = self.safe_currency_code(currencyId, currency)
|
377
|
+
currency = self.safe_currency(currencyId, currency)
|
305
378
|
details = self.safe_value(item, 'details', {})
|
306
379
|
referenceId = self.safe_string_2(details, 'fid', 'wid')
|
307
380
|
if referenceId is None:
|
@@ -321,6 +394,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
321
394
|
}
|
322
395
|
timestamp = self.parse8601(self.safe_string(item, 'created_at'))
|
323
396
|
return self.safe_ledger_entry({
|
397
|
+
'info': item,
|
324
398
|
'id': self.safe_string(item, 'eid'),
|
325
399
|
'direction': direction,
|
326
400
|
'account': None,
|
@@ -335,13 +409,14 @@ class bitso(Exchange, ImplicitAPI):
|
|
335
409
|
'after': None,
|
336
410
|
'status': 'ok',
|
337
411
|
'fee': fee,
|
338
|
-
'info': item,
|
339
412
|
}, currency)
|
340
413
|
|
341
|
-
def fetch_markets(self, params={}):
|
414
|
+
def fetch_markets(self, params={}) -> List[Market]:
|
342
415
|
"""
|
343
416
|
retrieves data on all markets for bitso
|
344
|
-
|
417
|
+
|
418
|
+
https://docs.bitso.com/bitso-api/docs/list-available-books
|
419
|
+
|
345
420
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
346
421
|
:returns dict[]: an array of objects representing market data
|
347
422
|
"""
|
@@ -413,7 +488,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
413
488
|
if j == 0:
|
414
489
|
fee['taker'] = takerFee
|
415
490
|
fee['maker'] = makerFee
|
416
|
-
tiers = {
|
491
|
+
tiers: dict = {
|
417
492
|
'taker': takerFees,
|
418
493
|
'maker': makerFees,
|
419
494
|
}
|
@@ -476,7 +551,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
476
551
|
def parse_balance(self, response) -> Balances:
|
477
552
|
payload = self.safe_value(response, 'payload', {})
|
478
553
|
balances = self.safe_value(payload, 'balances', [])
|
479
|
-
result = {
|
554
|
+
result: dict = {
|
480
555
|
'info': response,
|
481
556
|
'timestamp': None,
|
482
557
|
'datetime': None,
|
@@ -495,7 +570,9 @@ class bitso(Exchange, ImplicitAPI):
|
|
495
570
|
def fetch_balance(self, params={}) -> Balances:
|
496
571
|
"""
|
497
572
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
498
|
-
|
573
|
+
|
574
|
+
https://docs.bitso.com/bitso-api/docs/get-account-balance
|
575
|
+
|
499
576
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
500
577
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
501
578
|
"""
|
@@ -531,7 +608,9 @@ class bitso(Exchange, ImplicitAPI):
|
|
531
608
|
def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
532
609
|
"""
|
533
610
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
534
|
-
|
611
|
+
|
612
|
+
https://docs.bitso.com/bitso-api/docs/list-order-book
|
613
|
+
|
535
614
|
:param str symbol: unified symbol of the market to fetch the order book for
|
536
615
|
:param int [limit]: the maximum amount of order book entries to return
|
537
616
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -539,7 +618,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
539
618
|
"""
|
540
619
|
self.load_markets()
|
541
620
|
market = self.market(symbol)
|
542
|
-
request = {
|
621
|
+
request: dict = {
|
543
622
|
'book': market['id'],
|
544
623
|
}
|
545
624
|
response = self.publicGetOrderBook(self.extend(request, params))
|
@@ -547,7 +626,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
547
626
|
timestamp = self.parse8601(self.safe_string(orderbook, 'updated_at'))
|
548
627
|
return self.parse_order_book(orderbook, market['symbol'], timestamp, 'bids', 'asks', 'price', 'amount')
|
549
628
|
|
550
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
629
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
551
630
|
#
|
552
631
|
# {
|
553
632
|
# "high":"37446.85",
|
@@ -594,14 +673,16 @@ class bitso(Exchange, ImplicitAPI):
|
|
594
673
|
def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
595
674
|
"""
|
596
675
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
597
|
-
|
676
|
+
|
677
|
+
https://docs.bitso.com/bitso-api/docs/ticker
|
678
|
+
|
598
679
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
599
680
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
600
681
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
601
682
|
"""
|
602
683
|
self.load_markets()
|
603
684
|
market = self.market(symbol)
|
604
|
-
request = {
|
685
|
+
request: dict = {
|
605
686
|
'book': market['id'],
|
606
687
|
}
|
607
688
|
response = self.publicGetTicker(self.extend(request, params))
|
@@ -637,7 +718,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
637
718
|
"""
|
638
719
|
self.load_markets()
|
639
720
|
market = self.market(symbol)
|
640
|
-
request = {
|
721
|
+
request: dict = {
|
641
722
|
'book': market['id'],
|
642
723
|
'time_bucket': self.safe_string(self.timeframes, timeframe, timeframe),
|
643
724
|
}
|
@@ -670,7 +751,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
670
751
|
# ]
|
671
752
|
# }
|
672
753
|
#
|
673
|
-
payload = self.
|
754
|
+
payload = self.safe_list(response, 'payload', [])
|
674
755
|
return self.parse_ohlcvs(payload, market, timeframe, since, limit)
|
675
756
|
|
676
757
|
def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
|
@@ -697,7 +778,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
697
778
|
self.safe_number(ohlcv, 'volume'),
|
698
779
|
]
|
699
780
|
|
700
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
781
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
701
782
|
#
|
702
783
|
# fetchTrades(public)
|
703
784
|
#
|
@@ -799,7 +880,9 @@ class bitso(Exchange, ImplicitAPI):
|
|
799
880
|
def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
800
881
|
"""
|
801
882
|
get the list of most recent trades for a particular symbol
|
802
|
-
|
883
|
+
|
884
|
+
https://docs.bitso.com/bitso-api/docs/list-trades
|
885
|
+
|
803
886
|
:param str symbol: unified symbol of the market to fetch trades for
|
804
887
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
805
888
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -808,16 +891,18 @@ class bitso(Exchange, ImplicitAPI):
|
|
808
891
|
"""
|
809
892
|
self.load_markets()
|
810
893
|
market = self.market(symbol)
|
811
|
-
request = {
|
894
|
+
request: dict = {
|
812
895
|
'book': market['id'],
|
813
896
|
}
|
814
897
|
response = self.publicGetTrades(self.extend(request, params))
|
815
898
|
return self.parse_trades(response['payload'], market, since, limit)
|
816
899
|
|
817
|
-
def fetch_trading_fees(self, params={}):
|
900
|
+
def fetch_trading_fees(self, params={}) -> TradingFees:
|
818
901
|
"""
|
819
902
|
fetch the trading fees for multiple markets
|
820
|
-
|
903
|
+
|
904
|
+
https://docs.bitso.com/bitso-api/docs/list-fees
|
905
|
+
|
821
906
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
822
907
|
:returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
|
823
908
|
"""
|
@@ -868,7 +953,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
868
953
|
#
|
869
954
|
payload = self.safe_value(response, 'payload', {})
|
870
955
|
fees = self.safe_value(payload, 'fees', [])
|
871
|
-
result = {}
|
956
|
+
result: dict = {}
|
872
957
|
for i in range(0, len(fees)):
|
873
958
|
fee = fees[i]
|
874
959
|
marketId = self.safe_string(fee, 'book')
|
@@ -886,7 +971,9 @@ class bitso(Exchange, ImplicitAPI):
|
|
886
971
|
def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = 25, params={}):
|
887
972
|
"""
|
888
973
|
fetch all trades made by the user
|
889
|
-
|
974
|
+
|
975
|
+
https://docs.bitso.com/bitso-api/docs/user-trades
|
976
|
+
|
890
977
|
:param str symbol: unified market symbol
|
891
978
|
:param int [since]: the earliest time in ms to fetch trades for
|
892
979
|
:param int [limit]: the maximum number of trades structures to retrieve
|
@@ -908,7 +995,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
908
995
|
params = self.extend(params, {
|
909
996
|
'marker': int(params['marker']),
|
910
997
|
})
|
911
|
-
request = {
|
998
|
+
request: dict = {
|
912
999
|
'book': market['id'],
|
913
1000
|
'limit': limit, # default = 25, max = 100
|
914
1001
|
# 'sort': 'desc', # default = desc
|
@@ -920,18 +1007,20 @@ class bitso(Exchange, ImplicitAPI):
|
|
920
1007
|
def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
921
1008
|
"""
|
922
1009
|
create a trade order
|
923
|
-
|
1010
|
+
|
1011
|
+
https://docs.bitso.com/bitso-api/docs/place-an-order
|
1012
|
+
|
924
1013
|
:param str symbol: unified symbol of the market to create an order in
|
925
1014
|
:param str type: 'market' or 'limit'
|
926
1015
|
:param str side: 'buy' or 'sell'
|
927
1016
|
:param float amount: how much of currency you want to trade in units of base currency
|
928
|
-
:param float [price]: the price at which the order is to be
|
1017
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
929
1018
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
930
1019
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
931
1020
|
"""
|
932
1021
|
self.load_markets()
|
933
1022
|
market = self.market(symbol)
|
934
|
-
request = {
|
1023
|
+
request: dict = {
|
935
1024
|
'book': market['id'],
|
936
1025
|
'side': side,
|
937
1026
|
'type': type,
|
@@ -949,22 +1038,38 @@ class bitso(Exchange, ImplicitAPI):
|
|
949
1038
|
def cancel_order(self, id: str, symbol: Str = None, params={}):
|
950
1039
|
"""
|
951
1040
|
cancels an open order
|
952
|
-
|
1041
|
+
|
1042
|
+
https://docs.bitso.com/bitso-api/docs/cancel-an-order
|
1043
|
+
|
953
1044
|
:param str id: order id
|
954
1045
|
:param str symbol: not used by bitso cancelOrder()
|
955
1046
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
956
1047
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
957
1048
|
"""
|
958
1049
|
self.load_markets()
|
959
|
-
request = {
|
1050
|
+
request: dict = {
|
960
1051
|
'oid': id,
|
961
1052
|
}
|
962
|
-
|
1053
|
+
response = self.privateDeleteOrdersOid(self.extend(request, params))
|
1054
|
+
#
|
1055
|
+
# {
|
1056
|
+
# "success": True,
|
1057
|
+
# "payload": ["yWTQGxDMZ0VimZgZ"]
|
1058
|
+
# }
|
1059
|
+
#
|
1060
|
+
payload = self.safe_list(response, 'payload', [])
|
1061
|
+
orderId = self.safe_string(payload, 0)
|
1062
|
+
return self.safe_order({
|
1063
|
+
'info': response,
|
1064
|
+
'id': orderId,
|
1065
|
+
})
|
963
1066
|
|
964
1067
|
def cancel_orders(self, ids, symbol: Str = None, params={}):
|
965
1068
|
"""
|
966
1069
|
cancel multiple orders
|
967
|
-
|
1070
|
+
|
1071
|
+
https://docs.bitso.com/bitso-api/docs/cancel-an-order
|
1072
|
+
|
968
1073
|
:param str[] ids: order ids
|
969
1074
|
:param str symbol: unified market symbol
|
970
1075
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -976,7 +1081,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
976
1081
|
if symbol is not None:
|
977
1082
|
market = self.market(symbol)
|
978
1083
|
oids = ','.join(ids)
|
979
|
-
request = {
|
1084
|
+
request: dict = {
|
980
1085
|
'oids': oids,
|
981
1086
|
}
|
982
1087
|
response = self.privateDeleteOrders(self.extend(request, params))
|
@@ -996,7 +1101,9 @@ class bitso(Exchange, ImplicitAPI):
|
|
996
1101
|
def cancel_all_orders(self, symbol: Str = None, params={}):
|
997
1102
|
"""
|
998
1103
|
cancel all open orders
|
999
|
-
|
1104
|
+
|
1105
|
+
https://docs.bitso.com/bitso-api/docs/cancel-an-order
|
1106
|
+
|
1000
1107
|
:param None symbol: bitso does not support canceling orders for only a specific market
|
1001
1108
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1002
1109
|
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -1017,8 +1124,8 @@ class bitso(Exchange, ImplicitAPI):
|
|
1017
1124
|
canceledOrders.append(order)
|
1018
1125
|
return canceledOrders
|
1019
1126
|
|
1020
|
-
def parse_order_status(self, status):
|
1021
|
-
statuses = {
|
1127
|
+
def parse_order_status(self, status: Str):
|
1128
|
+
statuses: dict = {
|
1022
1129
|
'partial-fill': 'open', # self is a common substitution in ccxt
|
1023
1130
|
'partially filled': 'open',
|
1024
1131
|
'queued': 'open',
|
@@ -1026,7 +1133,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
1026
1133
|
}
|
1027
1134
|
return self.safe_string(statuses, status, status)
|
1028
1135
|
|
1029
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
1136
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1030
1137
|
#
|
1031
1138
|
#
|
1032
1139
|
# canceledOrder
|
@@ -1060,7 +1167,6 @@ class bitso(Exchange, ImplicitAPI):
|
|
1060
1167
|
'postOnly': None,
|
1061
1168
|
'side': side,
|
1062
1169
|
'price': price,
|
1063
|
-
'stopPrice': None,
|
1064
1170
|
'triggerPrice': None,
|
1065
1171
|
'amount': amount,
|
1066
1172
|
'cost': None,
|
@@ -1075,7 +1181,9 @@ class bitso(Exchange, ImplicitAPI):
|
|
1075
1181
|
def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = 25, params={}) -> List[Order]:
|
1076
1182
|
"""
|
1077
1183
|
fetch all unfilled currently open orders
|
1078
|
-
|
1184
|
+
|
1185
|
+
https://docs.bitso.com/bitso-api/docs/list-open-orders
|
1186
|
+
|
1079
1187
|
:param str symbol: unified market symbol
|
1080
1188
|
:param int [since]: the earliest time in ms to fetch open orders for
|
1081
1189
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
@@ -1097,7 +1205,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
1097
1205
|
params = self.extend(params, {
|
1098
1206
|
'marker': int(params['marker']),
|
1099
1207
|
})
|
1100
|
-
request = {
|
1208
|
+
request: dict = {
|
1101
1209
|
'book': market['id'],
|
1102
1210
|
'limit': limit, # default = 25, max = 100
|
1103
1211
|
# 'sort': 'desc', # default = desc
|
@@ -1110,7 +1218,10 @@ class bitso(Exchange, ImplicitAPI):
|
|
1110
1218
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
1111
1219
|
"""
|
1112
1220
|
fetches information on an order made by the user
|
1113
|
-
|
1221
|
+
|
1222
|
+
https://docs.bitso.com/bitso-api/docs/look-up-orders
|
1223
|
+
|
1224
|
+
:param str id: the order id
|
1114
1225
|
:param str symbol: not used by bitso fetchOrder
|
1115
1226
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1116
1227
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -1129,7 +1240,9 @@ class bitso(Exchange, ImplicitAPI):
|
|
1129
1240
|
def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
1130
1241
|
"""
|
1131
1242
|
fetch all the trades made from a single order
|
1132
|
-
|
1243
|
+
|
1244
|
+
https://docs.bitso.com/bitso-api/docs/list-user-trades
|
1245
|
+
|
1133
1246
|
:param str id: order id
|
1134
1247
|
:param str symbol: unified market symbol
|
1135
1248
|
:param int [since]: the earliest time in ms to fetch trades for
|
@@ -1139,7 +1252,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
1139
1252
|
"""
|
1140
1253
|
self.load_markets()
|
1141
1254
|
market = self.market(symbol)
|
1142
|
-
request = {
|
1255
|
+
request: dict = {
|
1143
1256
|
'oid': id,
|
1144
1257
|
}
|
1145
1258
|
response = self.privateGetOrderTradesOid(self.extend(request, params))
|
@@ -1148,14 +1261,16 @@ class bitso(Exchange, ImplicitAPI):
|
|
1148
1261
|
def fetch_deposit(self, id: str, code: Str = None, params={}):
|
1149
1262
|
"""
|
1150
1263
|
fetch information on a deposit
|
1151
|
-
|
1264
|
+
|
1265
|
+
https://docs.bitso.com/bitso-payouts-funding/docs/fundings
|
1266
|
+
|
1152
1267
|
:param str id: deposit id
|
1153
1268
|
:param str code: bitso does not support filtering by currency code and will ignore self argument
|
1154
1269
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1155
1270
|
:returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
|
1156
1271
|
"""
|
1157
1272
|
self.load_markets()
|
1158
|
-
request = {
|
1273
|
+
request: dict = {
|
1159
1274
|
'fid': id,
|
1160
1275
|
}
|
1161
1276
|
response = self.privateGetFundingsFid(self.extend(request, params))
|
@@ -1183,13 +1298,15 @@ class bitso(Exchange, ImplicitAPI):
|
|
1183
1298
|
# }
|
1184
1299
|
#
|
1185
1300
|
transactions = self.safe_value(response, 'payload', [])
|
1186
|
-
first = self.
|
1301
|
+
first = self.safe_dict(transactions, 0, {})
|
1187
1302
|
return self.parse_transaction(first)
|
1188
1303
|
|
1189
1304
|
def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
1190
1305
|
"""
|
1191
1306
|
fetch all deposits made to an account
|
1192
|
-
|
1307
|
+
|
1308
|
+
https://docs.bitso.com/bitso-payouts-funding/docs/fundings
|
1309
|
+
|
1193
1310
|
:param str code: unified currency code
|
1194
1311
|
:param int [since]: the earliest time in ms to fetch deposits for
|
1195
1312
|
:param int [limit]: the maximum number of deposits structures to retrieve
|
@@ -1224,10 +1341,10 @@ class bitso(Exchange, ImplicitAPI):
|
|
1224
1341
|
# }]
|
1225
1342
|
# }
|
1226
1343
|
#
|
1227
|
-
transactions = self.
|
1344
|
+
transactions = self.safe_list(response, 'payload', [])
|
1228
1345
|
return self.parse_transactions(transactions, currency, since, limit, params)
|
1229
1346
|
|
1230
|
-
def fetch_deposit_address(self, code: str, params={}):
|
1347
|
+
def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
|
1231
1348
|
"""
|
1232
1349
|
fetch the deposit address for a currency associated with self account
|
1233
1350
|
:param str code: unified currency code
|
@@ -1236,7 +1353,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
1236
1353
|
"""
|
1237
1354
|
self.load_markets()
|
1238
1355
|
currency = self.currency(code)
|
1239
|
-
request = {
|
1356
|
+
request: dict = {
|
1240
1357
|
'fund_currency': currency['id'],
|
1241
1358
|
}
|
1242
1359
|
response = self.privateGetFundingDestination(self.extend(request, params))
|
@@ -1248,18 +1365,20 @@ class bitso(Exchange, ImplicitAPI):
|
|
1248
1365
|
tag = self.safe_string(parts, 1)
|
1249
1366
|
self.check_address(address)
|
1250
1367
|
return {
|
1368
|
+
'info': response,
|
1251
1369
|
'currency': code,
|
1370
|
+
'network': None,
|
1252
1371
|
'address': address,
|
1253
1372
|
'tag': tag,
|
1254
|
-
'network': None,
|
1255
|
-
'info': response,
|
1256
1373
|
}
|
1257
1374
|
|
1258
|
-
def fetch_transaction_fees(self, codes:
|
1375
|
+
def fetch_transaction_fees(self, codes: Strings = None, params={}):
|
1259
1376
|
"""
|
1260
|
-
|
1377
|
+
@deprecated
|
1261
1378
|
please use fetchDepositWithdrawFees instead
|
1262
|
-
|
1379
|
+
|
1380
|
+
https://docs.bitso.com/bitso-api/docs/list-fees
|
1381
|
+
|
1263
1382
|
:param str[]|None codes: list of unified currency codes
|
1264
1383
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1265
1384
|
:returns dict[]: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
|
@@ -1309,7 +1428,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
1309
1428
|
# }
|
1310
1429
|
# }
|
1311
1430
|
#
|
1312
|
-
result = {}
|
1431
|
+
result: dict = {}
|
1313
1432
|
payload = self.safe_value(response, 'payload', {})
|
1314
1433
|
depositFees = self.safe_value(payload, 'deposit_fees', [])
|
1315
1434
|
for i in range(0, len(depositFees)):
|
@@ -1346,7 +1465,9 @@ class bitso(Exchange, ImplicitAPI):
|
|
1346
1465
|
def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
|
1347
1466
|
"""
|
1348
1467
|
fetch deposit and withdraw fees
|
1349
|
-
|
1468
|
+
|
1469
|
+
https://docs.bitso.com/bitso-api/docs/list-fees
|
1470
|
+
|
1350
1471
|
:param str[]|None codes: list of unified currency codes
|
1351
1472
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1352
1473
|
:returns dict[]: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
|
@@ -1396,7 +1517,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
1396
1517
|
# }
|
1397
1518
|
# }
|
1398
1519
|
#
|
1399
|
-
payload = self.
|
1520
|
+
payload = self.safe_list(response, 'payload', [])
|
1400
1521
|
return self.parse_deposit_withdraw_fees(payload, codes)
|
1401
1522
|
|
1402
1523
|
def parse_deposit_withdraw_fees(self, response, codes=None, currencyIdKey=None):
|
@@ -1440,7 +1561,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
1440
1561
|
# }
|
1441
1562
|
# }
|
1442
1563
|
#
|
1443
|
-
result = {}
|
1564
|
+
result: dict = {}
|
1444
1565
|
depositResponse = self.safe_value(response, 'deposit_fees', [])
|
1445
1566
|
withdrawalResponse = self.safe_value(response, 'withdrawal_fees', [])
|
1446
1567
|
for i in range(0, len(depositResponse)):
|
@@ -1473,7 +1594,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
1473
1594
|
result[code]['info'][code] = withdrawFee
|
1474
1595
|
return result
|
1475
1596
|
|
1476
|
-
def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
1597
|
+
def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
1477
1598
|
"""
|
1478
1599
|
make a withdrawal
|
1479
1600
|
:param str code: unified currency code
|
@@ -1486,7 +1607,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
1486
1607
|
tag, params = self.handle_withdraw_tag_and_params(tag, params)
|
1487
1608
|
self.check_address(address)
|
1488
1609
|
self.load_markets()
|
1489
|
-
methods = {
|
1610
|
+
methods: dict = {
|
1490
1611
|
'BTC': 'Bitcoin',
|
1491
1612
|
'ETH': 'Ether',
|
1492
1613
|
'XRP': 'Ripple',
|
@@ -1497,7 +1618,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
1497
1618
|
method = methods[code] if (code in methods) else None
|
1498
1619
|
if method is None:
|
1499
1620
|
raise ExchangeError(self.id + ' not valid withdraw coin: ' + code)
|
1500
|
-
request = {
|
1621
|
+
request: dict = {
|
1501
1622
|
'amount': amount,
|
1502
1623
|
'address': address,
|
1503
1624
|
'destination_tag': tag,
|
@@ -1524,22 +1645,10 @@ class bitso(Exchange, ImplicitAPI):
|
|
1524
1645
|
# }
|
1525
1646
|
#
|
1526
1647
|
payload = self.safe_value(response, 'payload', [])
|
1527
|
-
first = self.
|
1648
|
+
first = self.safe_dict(payload, 0)
|
1528
1649
|
return self.parse_transaction(first, currency)
|
1529
1650
|
|
1530
|
-
def
|
1531
|
-
if networkId is None:
|
1532
|
-
return None
|
1533
|
-
networkId = networkId.upper()
|
1534
|
-
networksById = {
|
1535
|
-
'trx': 'TRC20',
|
1536
|
-
'erc20': 'ERC20',
|
1537
|
-
'bsc': 'BEP20',
|
1538
|
-
'bep2': 'BEP2',
|
1539
|
-
}
|
1540
|
-
return self.safe_string(networksById, networkId, networkId)
|
1541
|
-
|
1542
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
1651
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
1543
1652
|
#
|
1544
1653
|
# deposit
|
1545
1654
|
# {
|
@@ -1585,12 +1694,14 @@ class bitso(Exchange, ImplicitAPI):
|
|
1585
1694
|
networkId = self.safe_string_2(transaction, 'network', 'method')
|
1586
1695
|
status = self.safe_string(transaction, 'status')
|
1587
1696
|
withdrawId = self.safe_string(transaction, 'wid')
|
1697
|
+
networkCode = self.network_id_to_code(networkId)
|
1698
|
+
networkCodeUpper = networkCode.upper() if (networkCode is not None) else None
|
1588
1699
|
return {
|
1589
1700
|
'id': self.safe_string_2(transaction, 'wid', 'fid'),
|
1590
1701
|
'txid': self.safe_string(details, 'tx_hash'),
|
1591
1702
|
'timestamp': self.parse8601(datetime),
|
1592
1703
|
'datetime': datetime,
|
1593
|
-
'network':
|
1704
|
+
'network': networkCodeUpper,
|
1594
1705
|
'addressFrom': receivingAddress,
|
1595
1706
|
'address': withdrawalAddress if (withdrawalAddress is not None) else receivingAddress,
|
1596
1707
|
'addressTo': withdrawalAddress,
|
@@ -1608,8 +1719,8 @@ class bitso(Exchange, ImplicitAPI):
|
|
1608
1719
|
'info': transaction,
|
1609
1720
|
}
|
1610
1721
|
|
1611
|
-
def parse_transaction_status(self, status):
|
1612
|
-
statuses = {
|
1722
|
+
def parse_transaction_status(self, status: Str):
|
1723
|
+
statuses: dict = {
|
1613
1724
|
'pending': 'pending',
|
1614
1725
|
'in_progress': 'pending',
|
1615
1726
|
'complete': 'ok',
|
@@ -1630,6 +1741,7 @@ class bitso(Exchange, ImplicitAPI):
|
|
1630
1741
|
if api == 'private':
|
1631
1742
|
self.check_required_credentials()
|
1632
1743
|
nonce = str(self.nonce())
|
1744
|
+
endpoint = '/api' + endpoint
|
1633
1745
|
request = ''.join([nonce, method, endpoint])
|
1634
1746
|
if method != 'GET' and method != 'DELETE':
|
1635
1747
|
if query:
|
@@ -1639,11 +1751,11 @@ class bitso(Exchange, ImplicitAPI):
|
|
1639
1751
|
auth = self.apiKey + ':' + nonce + ':' + signature
|
1640
1752
|
headers = {
|
1641
1753
|
'Authorization': 'Bitso ' + auth,
|
1642
|
-
'Content-Type': 'application/json',
|
1754
|
+
# 'Content-Type': 'application/json',
|
1643
1755
|
}
|
1644
1756
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
1645
1757
|
|
1646
|
-
def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
1758
|
+
def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
1647
1759
|
if response is None:
|
1648
1760
|
return None # fallback to default error handler
|
1649
1761
|
if 'success' in response:
|