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/bigone.py
CHANGED
@@ -6,9 +6,10 @@
|
|
6
6
|
from ccxt.async_support.base.exchange import Exchange
|
7
7
|
from ccxt.abstract.bigone import ImplicitAPI
|
8
8
|
import asyncio
|
9
|
-
from ccxt.base.types import Balances, Bool, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
|
9
|
+
from ccxt.base.types import Balances, Bool, Currencies, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
|
10
10
|
from typing import List
|
11
11
|
from ccxt.base.errors import ExchangeError
|
12
|
+
from ccxt.base.errors import AuthenticationError
|
12
13
|
from ccxt.base.errors import PermissionDenied
|
13
14
|
from ccxt.base.errors import ArgumentsRequired
|
14
15
|
from ccxt.base.errors import BadRequest
|
@@ -17,7 +18,6 @@ from ccxt.base.errors import InsufficientFunds
|
|
17
18
|
from ccxt.base.errors import InvalidOrder
|
18
19
|
from ccxt.base.errors import NotSupported
|
19
20
|
from ccxt.base.errors import RateLimitExceeded
|
20
|
-
from ccxt.base.errors import AuthenticationError
|
21
21
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
22
22
|
from ccxt.base.precise import Precise
|
23
23
|
|
@@ -30,7 +30,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
30
30
|
'name': 'BigONE',
|
31
31
|
'countries': ['CN'],
|
32
32
|
'version': 'v3',
|
33
|
-
'rateLimit':
|
33
|
+
'rateLimit': 20, # 500 requests per 10 seconds
|
34
34
|
'has': {
|
35
35
|
'CORS': None,
|
36
36
|
'spot': True,
|
@@ -52,8 +52,13 @@ class bigone(Exchange, ImplicitAPI):
|
|
52
52
|
'fetchClosedOrders': True,
|
53
53
|
'fetchCurrencies': True,
|
54
54
|
'fetchDepositAddress': True,
|
55
|
+
'fetchDepositAddresses': False,
|
56
|
+
'fetchDepositAddressesByNetwork': False,
|
55
57
|
'fetchDeposits': True,
|
58
|
+
'fetchFundingHistory': False,
|
56
59
|
'fetchFundingRate': False,
|
60
|
+
'fetchFundingRateHistory': False,
|
61
|
+
'fetchFundingRates': False,
|
57
62
|
'fetchMarkets': True,
|
58
63
|
'fetchMyTrades': True,
|
59
64
|
'fetchOHLCV': True,
|
@@ -88,7 +93,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
88
93
|
},
|
89
94
|
'hostname': 'big.one', # or 'bigone.com'
|
90
95
|
'urls': {
|
91
|
-
'logo': 'https://
|
96
|
+
'logo': 'https://github.com/user-attachments/assets/4e5cfd53-98cc-4b90-92cd-0d7b512653d1',
|
92
97
|
'api': {
|
93
98
|
'public': 'https://{hostname}/api/v3',
|
94
99
|
'private': 'https://{hostname}/api/v3/viewer',
|
@@ -168,7 +173,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
168
173
|
},
|
169
174
|
'webExchange': {
|
170
175
|
'get': [
|
171
|
-
'
|
176
|
+
'v3/assets',
|
172
177
|
],
|
173
178
|
},
|
174
179
|
},
|
@@ -301,6 +306,105 @@ class bigone(Exchange, ImplicitAPI):
|
|
301
306
|
# undetermined: XinFin, YAS, Ycash
|
302
307
|
},
|
303
308
|
},
|
309
|
+
'features': {
|
310
|
+
'default': {
|
311
|
+
'sandbox': False,
|
312
|
+
'createOrder': {
|
313
|
+
'marginMode': False,
|
314
|
+
'triggerPrice': True,
|
315
|
+
'triggerPriceType': None,
|
316
|
+
'triggerDirection': True, # todo implement
|
317
|
+
'stopLossPrice': False, # todo by trigger
|
318
|
+
'takeProfitPrice': False, # todo by trigger
|
319
|
+
'attachedStopLossTakeProfit': None,
|
320
|
+
'timeInForce': {
|
321
|
+
'IOC': True,
|
322
|
+
'FOK': False,
|
323
|
+
'PO': True,
|
324
|
+
'GTD': False,
|
325
|
+
},
|
326
|
+
'hedged': False,
|
327
|
+
'trailing': False,
|
328
|
+
'leverage': False,
|
329
|
+
'marketBuyRequiresPrice': True,
|
330
|
+
'marketBuyByCost': True,
|
331
|
+
'selfTradePrevention': False,
|
332
|
+
'iceberg': False,
|
333
|
+
},
|
334
|
+
'createOrders': None, # todo: implement
|
335
|
+
'fetchMyTrades': {
|
336
|
+
'marginMode': False,
|
337
|
+
'limit': 200,
|
338
|
+
'daysBack': None,
|
339
|
+
'untilDays': None,
|
340
|
+
},
|
341
|
+
'fetchOrder': {
|
342
|
+
'marginMode': False,
|
343
|
+
'trigger': False,
|
344
|
+
'trailing': False,
|
345
|
+
},
|
346
|
+
'fetchOpenOrders': {
|
347
|
+
'marginMode': False,
|
348
|
+
'limit': 200,
|
349
|
+
'trigger': False,
|
350
|
+
'trailing': False,
|
351
|
+
},
|
352
|
+
'fetchOrders': {
|
353
|
+
'marginMode': False,
|
354
|
+
'limit': 200,
|
355
|
+
'daysBack': None,
|
356
|
+
'untilDays': None,
|
357
|
+
'trigger': False,
|
358
|
+
'trailing': False,
|
359
|
+
},
|
360
|
+
'fetchClosedOrders': {
|
361
|
+
'marginMode': False,
|
362
|
+
'limit': 200,
|
363
|
+
'daysBack': None,
|
364
|
+
'daysBackCanceled': None,
|
365
|
+
'untilDays': None,
|
366
|
+
'trigger': False,
|
367
|
+
'trailing': False,
|
368
|
+
},
|
369
|
+
'fetchOHLCV': {
|
370
|
+
'limit': 500,
|
371
|
+
},
|
372
|
+
},
|
373
|
+
'spot': {
|
374
|
+
'extends': 'default',
|
375
|
+
},
|
376
|
+
'forDerivatives': {
|
377
|
+
'extends': 'default',
|
378
|
+
'createOrder': {
|
379
|
+
# todo: implement
|
380
|
+
'triggerPriceType': {
|
381
|
+
'mark': True,
|
382
|
+
'index': True,
|
383
|
+
'last': True,
|
384
|
+
},
|
385
|
+
},
|
386
|
+
'fetchOrders': {
|
387
|
+
'daysBack': 100000,
|
388
|
+
'untilDays': 100000,
|
389
|
+
},
|
390
|
+
'fetchClosedOrders': {
|
391
|
+
'daysBack': 100000,
|
392
|
+
'untilDays': 100000,
|
393
|
+
},
|
394
|
+
},
|
395
|
+
'swap': {
|
396
|
+
'linear': {
|
397
|
+
'extends': 'forDerivatives',
|
398
|
+
},
|
399
|
+
'inverse': {
|
400
|
+
'extends': 'forDerivatives',
|
401
|
+
},
|
402
|
+
},
|
403
|
+
'future': {
|
404
|
+
'linear': None,
|
405
|
+
'inverse': None,
|
406
|
+
},
|
407
|
+
},
|
304
408
|
'precisionMode': TICK_SIZE,
|
305
409
|
'exceptions': {
|
306
410
|
'exact': {
|
@@ -340,14 +444,14 @@ class bigone(Exchange, ImplicitAPI):
|
|
340
444
|
},
|
341
445
|
})
|
342
446
|
|
343
|
-
async def fetch_currencies(self, params={}):
|
447
|
+
async def fetch_currencies(self, params={}) -> Currencies:
|
344
448
|
"""
|
345
449
|
fetches all available currencies on an exchange
|
346
450
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
347
451
|
:returns dict: an associative dictionary of currencies
|
348
452
|
"""
|
349
453
|
# we use undocumented link(possible, less informative alternative is : https://big.one/api/uc/v3/assets/accounts)
|
350
|
-
data = await self.fetch_web_endpoint('fetchCurrencies', '
|
454
|
+
data = await self.fetch_web_endpoint('fetchCurrencies', 'webExchangeGetV3Assets', True)
|
351
455
|
if data is None:
|
352
456
|
return None
|
353
457
|
#
|
@@ -356,105 +460,54 @@ class bigone(Exchange, ImplicitAPI):
|
|
356
460
|
# "message": "",
|
357
461
|
# "data": [
|
358
462
|
# {
|
359
|
-
#
|
360
|
-
#
|
361
|
-
#
|
362
|
-
#
|
363
|
-
#
|
364
|
-
#
|
365
|
-
#
|
366
|
-
#
|
367
|
-
#
|
368
|
-
#
|
369
|
-
#
|
370
|
-
#
|
463
|
+
# "uuid": "17082d1c-0195-4fb6-8779-2cdbcb9eeb3c",
|
464
|
+
# "symbol": "USDT",
|
465
|
+
# "name": "TetherUS",
|
466
|
+
# "scale": 12,
|
467
|
+
# "is_fiat": False,
|
468
|
+
# "is_transfer_enabled": True,
|
469
|
+
# "transfer_scale": 12,
|
470
|
+
# "binding_gateways": [
|
471
|
+
# {
|
472
|
+
# "guid": "07efc37f-d1ec-4bc9-8339-a745256ea2ba",
|
473
|
+
# "is_deposit_enabled": True,
|
474
|
+
# "gateway_name": "Ethereum",
|
475
|
+
# "min_withdrawal_amount": "0.000001",
|
476
|
+
# "withdrawal_fee": "5.71",
|
477
|
+
# "is_withdrawal_enabled": True,
|
478
|
+
# "min_deposit_amount": "0.000001",
|
479
|
+
# "is_memo_required": False,
|
480
|
+
# "withdrawal_scale": 6,
|
481
|
+
# "scale": 12
|
482
|
+
# },
|
483
|
+
# {
|
484
|
+
# "guid": "4e387a9a-a480-40a3-b4ae-ed1773c2db5a",
|
485
|
+
# "is_deposit_enabled": True,
|
486
|
+
# "gateway_name": "BinanceSmartChain",
|
487
|
+
# "min_withdrawal_amount": "10",
|
488
|
+
# "withdrawal_fee": "5",
|
489
|
+
# "is_withdrawal_enabled": False,
|
490
|
+
# "min_deposit_amount": "1",
|
491
|
+
# "is_memo_required": False,
|
492
|
+
# "withdrawal_scale": 8,
|
493
|
+
# "scale": 12
|
494
|
+
# }
|
495
|
+
# ]
|
371
496
|
# },
|
372
|
-
# "info_link": null,
|
373
|
-
# "scale": "12",
|
374
|
-
# "default_gateway": ..., # one object from "gateways"
|
375
|
-
# "gateways": [
|
376
|
-
# {
|
377
|
-
# "uuid": "f0fa5a85-7f65-428a-b7b7-13aad55c2837",
|
378
|
-
# "name": "Mixin",
|
379
|
-
# "kind": "CHAIN",
|
380
|
-
# "required_confirmations": "0",
|
381
|
-
# },
|
382
|
-
# {
|
383
|
-
# "uuid": "b75446c6-1446-4c8d-b3d1-39f385b0a926",
|
384
|
-
# "name": "Ethereum",
|
385
|
-
# "kind": "CHAIN",
|
386
|
-
# "required_confirmations": "18",
|
387
|
-
# },
|
388
|
-
# {
|
389
|
-
# "uuid": "fe9b1b0b-e55c-4017-b5ce-16f524df5fc0",
|
390
|
-
# "name": "Tron",
|
391
|
-
# "kind": "CHAIN",
|
392
|
-
# "required_confirmations": "1",
|
393
|
-
# },
|
394
|
-
# ...
|
395
|
-
# ],
|
396
|
-
# "payments": [],
|
397
|
-
# "uuid": "17082d1c-0195-4fb6-8779-2cdbcb9eeb3c",
|
398
|
-
# "binding_gateways": [
|
399
|
-
# {
|
400
|
-
# "guid": "07efc37f-d1ec-4bc9-8339-a745256ea2ba",
|
401
|
-
# "contract_address": "0xdac17f958d2ee523a2206206994597c13d831ec7",
|
402
|
-
# "is_deposit_enabled": True,
|
403
|
-
# "display_name": "Ethereum(ERC20)",
|
404
|
-
# "gateway_name": "Ethereum",
|
405
|
-
# "min_withdrawal_amount": "0.000001",
|
406
|
-
# "min_internal_withdrawal_amount": "0.00000001",
|
407
|
-
# "withdrawal_fee": "14",
|
408
|
-
# "is_withdrawal_enabled": True,
|
409
|
-
# "min_deposit_amount": "0.000001",
|
410
|
-
# "is_memo_required": False,
|
411
|
-
# "withdrawal_scale": "2",
|
412
|
-
# "gateway": {
|
413
|
-
# "uuid": "b75446c6-1446-4c8d-b3d1-39f385b0a926",
|
414
|
-
# "name": "Ethereum",
|
415
|
-
# "kind": "CHAIN",
|
416
|
-
# "required_confirmations": "18",
|
417
|
-
# },
|
418
|
-
# "scale": "12",
|
419
|
-
# },
|
420
|
-
# {
|
421
|
-
# "guid": "b80a4d13-cac7-4319-842d-b33c3bfab8ec",
|
422
|
-
# "contract_address": "TR7NHqjeKQxGTCi8q8ZY4pL8otSzgjLj6t",
|
423
|
-
# "is_deposit_enabled": True,
|
424
|
-
# "display_name": "Tron(TRC20)",
|
425
|
-
# "gateway_name": "Tron",
|
426
|
-
# "min_withdrawal_amount": "0.000001",
|
427
|
-
# "min_internal_withdrawal_amount": "0.00000001",
|
428
|
-
# "withdrawal_fee": "1",
|
429
|
-
# "is_withdrawal_enabled": True,
|
430
|
-
# "min_deposit_amount": "0.000001",
|
431
|
-
# "is_memo_required": False,
|
432
|
-
# "withdrawal_scale": "6",
|
433
|
-
# "gateway": {
|
434
|
-
# "uuid": "fe9b1b0b-e55c-4017-b5ce-16f524df5fc0",
|
435
|
-
# "name": "Tron",
|
436
|
-
# "kind": "CHAIN",
|
437
|
-
# "required_confirmations": "1",
|
438
|
-
# },
|
439
|
-
# "scale": "12",
|
440
|
-
# },
|
441
|
-
# ...
|
442
|
-
# ],
|
443
|
-
# },
|
444
497
|
# ...
|
445
498
|
# ],
|
446
499
|
# }
|
447
500
|
#
|
448
|
-
currenciesData = self.
|
449
|
-
result = {}
|
501
|
+
currenciesData = self.safe_list(data, 'data', [])
|
502
|
+
result: dict = {}
|
450
503
|
for i in range(0, len(currenciesData)):
|
451
504
|
currency = currenciesData[i]
|
452
505
|
id = self.safe_string(currency, 'symbol')
|
453
506
|
code = self.safe_currency_code(id)
|
454
507
|
name = self.safe_string(currency, 'name')
|
455
|
-
type = 'fiat' if self.
|
456
|
-
networks = {}
|
457
|
-
chains = self.
|
508
|
+
type = 'fiat' if self.safe_bool(currency, 'is_fiat') else 'crypto'
|
509
|
+
networks: dict = {}
|
510
|
+
chains = self.safe_list(currency, 'binding_gateways', [])
|
458
511
|
currencyMaxPrecision = self.parse_precision(self.safe_string_2(currency, 'withdrawal_scale', 'scale'))
|
459
512
|
currencyDepositEnabled: Bool = None
|
460
513
|
currencyWithdrawEnabled: Bool = None
|
@@ -462,8 +515,8 @@ class bigone(Exchange, ImplicitAPI):
|
|
462
515
|
chain = chains[j]
|
463
516
|
networkId = self.safe_string(chain, 'gateway_name')
|
464
517
|
networkCode = self.network_id_to_code(networkId)
|
465
|
-
deposit = self.
|
466
|
-
withdraw = self.
|
518
|
+
deposit = self.safe_bool(chain, 'is_deposit_enabled')
|
519
|
+
withdraw = self.safe_bool(chain, 'is_withdrawal_enabled')
|
467
520
|
isActive = (deposit and withdraw)
|
468
521
|
minDepositAmount = self.safe_string(chain, 'min_deposit_amount')
|
469
522
|
minWithdrawalAmount = self.safe_string(chain, 'min_withdrawal_amount')
|
@@ -519,10 +572,12 @@ class bigone(Exchange, ImplicitAPI):
|
|
519
572
|
}
|
520
573
|
return result
|
521
574
|
|
522
|
-
async def fetch_markets(self, params={}):
|
575
|
+
async def fetch_markets(self, params={}) -> List[Market]:
|
523
576
|
"""
|
524
577
|
retrieves data on all markets for bigone
|
525
|
-
|
578
|
+
|
579
|
+
https://open.big.one/docs/spot_asset_pair.html
|
580
|
+
|
526
581
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
527
582
|
:returns dict[]: an array of objects representing market data
|
528
583
|
"""
|
@@ -582,12 +637,12 @@ class bigone(Exchange, ImplicitAPI):
|
|
582
637
|
# ...
|
583
638
|
# ]
|
584
639
|
#
|
585
|
-
markets = self.
|
640
|
+
markets = self.safe_list(response, 'data', [])
|
586
641
|
result = []
|
587
642
|
for i in range(0, len(markets)):
|
588
643
|
market = markets[i]
|
589
|
-
baseAsset = self.
|
590
|
-
quoteAsset = self.
|
644
|
+
baseAsset = self.safe_dict(market, 'base_asset', {})
|
645
|
+
quoteAsset = self.safe_dict(market, 'quote_asset', {})
|
591
646
|
baseId = self.safe_string(baseAsset, 'symbol')
|
592
647
|
quoteId = self.safe_string(quoteAsset, 'symbol')
|
593
648
|
base = self.safe_currency_code(baseId)
|
@@ -651,7 +706,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
651
706
|
base = self.safe_currency_code(baseId)
|
652
707
|
quote = self.safe_currency_code(quoteId)
|
653
708
|
settle = self.safe_currency_code(settleId)
|
654
|
-
inverse = self.
|
709
|
+
inverse = self.safe_bool(market, 'isInverse')
|
655
710
|
result.append(self.safe_market_structure({
|
656
711
|
'id': marketId,
|
657
712
|
'symbol': base + '/' + quote + ':' + settle,
|
@@ -667,7 +722,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
667
722
|
'swap': True,
|
668
723
|
'future': False,
|
669
724
|
'option': False,
|
670
|
-
'active': self.
|
725
|
+
'active': self.safe_bool(market, 'enable'),
|
671
726
|
'contract': True,
|
672
727
|
'linear': not inverse,
|
673
728
|
'inverse': inverse,
|
@@ -702,7 +757,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
702
757
|
}))
|
703
758
|
return result
|
704
759
|
|
705
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
760
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
706
761
|
#
|
707
762
|
# spot
|
708
763
|
#
|
@@ -753,8 +808,8 @@ class bigone(Exchange, ImplicitAPI):
|
|
753
808
|
marketId = self.safe_string_2(ticker, 'asset_pair_name', 'symbol')
|
754
809
|
symbol = self.safe_symbol(marketId, market, '-', marketType)
|
755
810
|
close = self.safe_string_2(ticker, 'close', 'latestPrice')
|
756
|
-
bid = self.
|
757
|
-
ask = self.
|
811
|
+
bid = self.safe_dict(ticker, 'bid', {})
|
812
|
+
ask = self.safe_dict(ticker, 'ask', {})
|
758
813
|
return self.safe_ticker({
|
759
814
|
'symbol': symbol,
|
760
815
|
'timestamp': None,
|
@@ -775,13 +830,17 @@ class bigone(Exchange, ImplicitAPI):
|
|
775
830
|
'average': None,
|
776
831
|
'baseVolume': self.safe_string_2(ticker, 'volume', 'volume24h'),
|
777
832
|
'quoteVolume': self.safe_string(ticker, 'volume24hInUsd'),
|
833
|
+
'markPrice': self.safe_string(ticker, 'markPrice'),
|
834
|
+
'indexPrice': self.safe_string(ticker, 'indexPrice'),
|
778
835
|
'info': ticker,
|
779
836
|
}, market)
|
780
837
|
|
781
838
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
782
839
|
"""
|
783
840
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
784
|
-
|
841
|
+
|
842
|
+
https://open.big.one/docs/spot_tickers.html
|
843
|
+
|
785
844
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
786
845
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
787
846
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -791,7 +850,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
791
850
|
type = None
|
792
851
|
type, params = self.handle_market_type_and_params('fetchTicker', market, params)
|
793
852
|
if type == 'spot':
|
794
|
-
request = {
|
853
|
+
request: dict = {
|
795
854
|
'asset_pair_name': market['id'],
|
796
855
|
}
|
797
856
|
response = await self.publicGetAssetPairsAssetPairNameTicker(self.extend(request, params))
|
@@ -811,7 +870,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
811
870
|
# }
|
812
871
|
# }
|
813
872
|
#
|
814
|
-
ticker = self.
|
873
|
+
ticker = self.safe_dict(response, 'data', {})
|
815
874
|
return self.parse_ticker(ticker, market)
|
816
875
|
else:
|
817
876
|
tickers = await self.fetch_tickers([symbol], params)
|
@@ -820,7 +879,9 @@ class bigone(Exchange, ImplicitAPI):
|
|
820
879
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
821
880
|
"""
|
822
881
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
823
|
-
|
882
|
+
|
883
|
+
https://open.big.one/docs/spot_tickers.html
|
884
|
+
|
824
885
|
:param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
825
886
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
826
887
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -833,7 +894,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
833
894
|
type = None
|
834
895
|
type, params = self.handle_market_type_and_params('fetchTickers', market, params)
|
835
896
|
isSpot = type == 'spot'
|
836
|
-
request = {}
|
897
|
+
request: dict = {}
|
837
898
|
symbols = self.market_symbols(symbols)
|
838
899
|
data = None
|
839
900
|
if isSpot:
|
@@ -868,7 +929,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
868
929
|
# ]
|
869
930
|
# }
|
870
931
|
#
|
871
|
-
data = self.
|
932
|
+
data = self.safe_list(response, 'data', [])
|
872
933
|
else:
|
873
934
|
data = await self.contractPublicGetInstruments(params)
|
874
935
|
#
|
@@ -902,7 +963,9 @@ class bigone(Exchange, ImplicitAPI):
|
|
902
963
|
async def fetch_time(self, params={}):
|
903
964
|
"""
|
904
965
|
fetches the current integer timestamp in milliseconds from the exchange server
|
905
|
-
|
966
|
+
|
967
|
+
https://open.big.one/docs/spot_ping.html
|
968
|
+
|
906
969
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
907
970
|
:returns int: the current integer timestamp in milliseconds from the exchange server
|
908
971
|
"""
|
@@ -914,14 +977,16 @@ class bigone(Exchange, ImplicitAPI):
|
|
914
977
|
# }
|
915
978
|
# }
|
916
979
|
#
|
917
|
-
data = self.
|
980
|
+
data = self.safe_dict(response, 'data', {})
|
918
981
|
timestamp = self.safe_integer(data, 'Timestamp')
|
919
982
|
return self.parse_to_int(timestamp / 1000000)
|
920
983
|
|
921
984
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
922
985
|
"""
|
923
986
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
924
|
-
|
987
|
+
|
988
|
+
https://open.big.one/docs/contract_misc.html#get-orderbook-snapshot
|
989
|
+
|
925
990
|
:param str symbol: unified symbol of the market to fetch the order book for
|
926
991
|
:param int [limit]: the maximum amount of order book entries to return
|
927
992
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -931,7 +996,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
931
996
|
market = self.market(symbol)
|
932
997
|
response = None
|
933
998
|
if market['contract']:
|
934
|
-
request = {
|
999
|
+
request: dict = {
|
935
1000
|
'symbol': market['id'],
|
936
1001
|
}
|
937
1002
|
response = await self.contractPublicGetDepthSymbolSnapshot(self.extend(request, params))
|
@@ -964,7 +1029,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
964
1029
|
#
|
965
1030
|
return self.parse_contract_order_book(response, market['symbol'], limit)
|
966
1031
|
else:
|
967
|
-
request = {
|
1032
|
+
request: dict = {
|
968
1033
|
'asset_pair_name': market['id'],
|
969
1034
|
}
|
970
1035
|
if limit is not None:
|
@@ -984,7 +1049,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
984
1049
|
# }
|
985
1050
|
# }
|
986
1051
|
#
|
987
|
-
orderbook = self.
|
1052
|
+
orderbook = self.safe_dict(response, 'data', {})
|
988
1053
|
return self.parse_order_book(orderbook, market['symbol'], None, 'bids', 'asks', 'price', 'quantity')
|
989
1054
|
|
990
1055
|
def parse_contract_bids_asks(self, bidsAsks):
|
@@ -1010,7 +1075,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
1010
1075
|
'nonce': None,
|
1011
1076
|
}
|
1012
1077
|
|
1013
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
1078
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
1014
1079
|
#
|
1015
1080
|
# fetchTrades(public)
|
1016
1081
|
#
|
@@ -1079,7 +1144,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
1079
1144
|
elif takerOrderId is not None:
|
1080
1145
|
orderId = takerOrderId
|
1081
1146
|
id = self.safe_string(trade, 'id')
|
1082
|
-
result = {
|
1147
|
+
result: dict = {
|
1083
1148
|
'id': id,
|
1084
1149
|
'timestamp': timestamp,
|
1085
1150
|
'datetime': self.iso8601(timestamp),
|
@@ -1136,7 +1201,9 @@ class bigone(Exchange, ImplicitAPI):
|
|
1136
1201
|
async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
1137
1202
|
"""
|
1138
1203
|
get the list of most recent trades for a particular symbol
|
1139
|
-
|
1204
|
+
|
1205
|
+
https://open.big.one/docs/spot_asset_pair_trade.html
|
1206
|
+
|
1140
1207
|
:param str symbol: unified symbol of the market to fetch trades for
|
1141
1208
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
1142
1209
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -1147,7 +1214,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
1147
1214
|
market = self.market(symbol)
|
1148
1215
|
if market['contract']:
|
1149
1216
|
raise BadRequest(self.id + ' fetchTrades() can only fetch trades for spot markets')
|
1150
|
-
request = {
|
1217
|
+
request: dict = {
|
1151
1218
|
'asset_pair_name': market['id'],
|
1152
1219
|
}
|
1153
1220
|
response = await self.publicGetAssetPairsAssetPairNameTrades(self.extend(request, params))
|
@@ -1172,7 +1239,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
1172
1239
|
# ]
|
1173
1240
|
# }
|
1174
1241
|
#
|
1175
|
-
trades = self.
|
1242
|
+
trades = self.safe_list(response, 'data', [])
|
1176
1243
|
return self.parse_trades(trades, market, since, limit)
|
1177
1244
|
|
1178
1245
|
def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
|
@@ -1198,30 +1265,42 @@ class bigone(Exchange, ImplicitAPI):
|
|
1198
1265
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
1199
1266
|
"""
|
1200
1267
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
1201
|
-
|
1268
|
+
|
1269
|
+
https://open.big.one/docs/spot_asset_pair_candle.html
|
1270
|
+
|
1202
1271
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
1203
1272
|
:param str timeframe: the length of time each candle represents
|
1204
1273
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
1205
1274
|
:param int [limit]: the maximum amount of candles to fetch
|
1206
1275
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1276
|
+
:param int [params.until]: timestamp in ms of the earliest candle to fetch
|
1207
1277
|
:returns int[][]: A list of candles ordered, open, high, low, close, volume
|
1208
1278
|
"""
|
1209
1279
|
await self.load_markets()
|
1210
1280
|
market = self.market(symbol)
|
1211
1281
|
if market['contract']:
|
1212
1282
|
raise BadRequest(self.id + ' fetchOHLCV() can only fetch ohlcvs for spot markets')
|
1283
|
+
until = self.safe_integer(params, 'until')
|
1284
|
+
untilIsDefined = (until is not None)
|
1285
|
+
sinceIsDefined = (since is not None)
|
1213
1286
|
if limit is None:
|
1214
|
-
limit = 100 # default 100, max 500
|
1215
|
-
request = {
|
1287
|
+
limit = 500 if (sinceIsDefined and untilIsDefined) else 100 # default 100, max 500, if since and limit defined then fetch all the candles between them unless it exceeds the max of 500
|
1288
|
+
request: dict = {
|
1216
1289
|
'asset_pair_name': market['id'],
|
1217
1290
|
'period': self.safe_string(self.timeframes, timeframe, timeframe),
|
1218
1291
|
'limit': limit,
|
1219
1292
|
}
|
1220
|
-
if
|
1293
|
+
if sinceIsDefined:
|
1221
1294
|
# start = self.parse_to_int(since / 1000)
|
1222
1295
|
duration = self.parse_timeframe(timeframe)
|
1223
|
-
|
1224
|
-
|
1296
|
+
endByLimit = self.sum(since, limit * duration * 1000)
|
1297
|
+
if untilIsDefined:
|
1298
|
+
request['time'] = self.iso8601(min(endByLimit, until + 1))
|
1299
|
+
else:
|
1300
|
+
request['time'] = self.iso8601(endByLimit)
|
1301
|
+
elif untilIsDefined:
|
1302
|
+
request['time'] = self.iso8601(until + 1)
|
1303
|
+
params = self.omit(params, 'until')
|
1225
1304
|
response = await self.publicGetAssetPairsAssetPairNameCandles(self.extend(request, params))
|
1226
1305
|
#
|
1227
1306
|
# {
|
@@ -1246,16 +1325,16 @@ class bigone(Exchange, ImplicitAPI):
|
|
1246
1325
|
# ]
|
1247
1326
|
# }
|
1248
1327
|
#
|
1249
|
-
data = self.
|
1328
|
+
data = self.safe_list(response, 'data', [])
|
1250
1329
|
return self.parse_ohlcvs(data, market, timeframe, since, limit)
|
1251
1330
|
|
1252
1331
|
def parse_balance(self, response) -> Balances:
|
1253
|
-
result = {
|
1332
|
+
result: dict = {
|
1254
1333
|
'info': response,
|
1255
1334
|
'timestamp': None,
|
1256
1335
|
'datetime': None,
|
1257
1336
|
}
|
1258
|
-
balances = self.
|
1337
|
+
balances = self.safe_list(response, 'data', [])
|
1259
1338
|
for i in range(0, len(balances)):
|
1260
1339
|
balance = balances[i]
|
1261
1340
|
symbol = self.safe_string(balance, 'asset_symbol')
|
@@ -1269,8 +1348,10 @@ class bigone(Exchange, ImplicitAPI):
|
|
1269
1348
|
async def fetch_balance(self, params={}) -> Balances:
|
1270
1349
|
"""
|
1271
1350
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
1272
|
-
|
1273
|
-
|
1351
|
+
|
1352
|
+
https://open.big.one/docs/fund_accounts.html
|
1353
|
+
https://open.big.one/docs/spot_accounts.html
|
1354
|
+
|
1274
1355
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1275
1356
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
1276
1357
|
"""
|
@@ -1295,7 +1376,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
1295
1376
|
return self.parse_balance(response)
|
1296
1377
|
|
1297
1378
|
def parse_type(self, type: str):
|
1298
|
-
types = {
|
1379
|
+
types: dict = {
|
1299
1380
|
'STOP_LIMIT': 'limit',
|
1300
1381
|
'STOP_MARKET': 'market',
|
1301
1382
|
'LIMIT': 'limit',
|
@@ -1303,7 +1384,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
1303
1384
|
}
|
1304
1385
|
return self.safe_string(types, type, type)
|
1305
1386
|
|
1306
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
1387
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1307
1388
|
#
|
1308
1389
|
# {
|
1309
1390
|
# "id": "42154072251",
|
@@ -1335,7 +1416,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
1335
1416
|
triggerPrice = self.safe_string(order, 'stop_price')
|
1336
1417
|
if Precise.string_eq(triggerPrice, '0'):
|
1337
1418
|
triggerPrice = None
|
1338
|
-
immediateOrCancel = self.
|
1419
|
+
immediateOrCancel = self.safe_bool(order, 'immediate_or_cancel')
|
1339
1420
|
timeInForce = None
|
1340
1421
|
if immediateOrCancel:
|
1341
1422
|
timeInForce = 'IOC'
|
@@ -1359,10 +1440,9 @@ class bigone(Exchange, ImplicitAPI):
|
|
1359
1440
|
'symbol': symbol,
|
1360
1441
|
'type': type,
|
1361
1442
|
'timeInForce': timeInForce,
|
1362
|
-
'postOnly': self.
|
1443
|
+
'postOnly': self.safe_bool(order, 'post_only'),
|
1363
1444
|
'side': side,
|
1364
1445
|
'price': price,
|
1365
|
-
'stopPrice': triggerPrice,
|
1366
1446
|
'triggerPrice': triggerPrice,
|
1367
1447
|
'amount': amount,
|
1368
1448
|
'cost': cost,
|
@@ -1377,7 +1457,9 @@ class bigone(Exchange, ImplicitAPI):
|
|
1377
1457
|
async def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
|
1378
1458
|
"""
|
1379
1459
|
create a market buy order by providing the symbol and cost
|
1380
|
-
|
1460
|
+
|
1461
|
+
https://open.big.one/docs/spot_orders.html#create-order
|
1462
|
+
|
1381
1463
|
:param str symbol: unified symbol of the market to create an order in
|
1382
1464
|
:param float cost: how much you want to trade in units of the quote currency
|
1383
1465
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1393,21 +1475,23 @@ class bigone(Exchange, ImplicitAPI):
|
|
1393
1475
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1394
1476
|
"""
|
1395
1477
|
create a trade order
|
1396
|
-
|
1478
|
+
|
1479
|
+
https://open.big.one/docs/spot_orders.html#create-order
|
1480
|
+
|
1397
1481
|
:param str symbol: unified symbol of the market to create an order in
|
1398
1482
|
:param str type: 'market' or 'limit'
|
1399
1483
|
:param str side: 'buy' or 'sell'
|
1400
1484
|
:param float amount: how much of currency you want to trade in units of base currency
|
1401
|
-
:param float [price]: the price at which the order is to be
|
1485
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1402
1486
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1403
1487
|
:param float [params.triggerPrice]: the price at which a trigger order is triggered at
|
1404
1488
|
:param bool [params.postOnly]: if True, the order will only be posted to the order book and not executed immediately
|
1405
1489
|
:param str [params.timeInForce]: "GTC", "IOC", or "PO"
|
1406
1490
|
:param float [params.cost]: *spot market buy only* the quote quantity that can be used alternative for the amount
|
1407
|
-
|
1408
|
-
|
1409
|
-
:param str operator: *stop order only* GTE or LTE(default)
|
1410
|
-
:param str client_order_id: must match ^[a-zA-Z0-9-_]{1,36}$ self regex. client_order_id is unique in 24 hours, If created 24 hours later and the order closed, it will be released and can be reused
|
1491
|
+
|
1492
|
+
EXCHANGE SPECIFIC PARAMETERS
|
1493
|
+
:param str [params.operator]: *stop order only* GTE or LTE(default)
|
1494
|
+
:param str [params.client_order_id]: must match ^[a-zA-Z0-9-_]{1,36}$ self regex. client_order_id is unique in 24 hours, If created 24 hours later and the order closed, it will be released and can be reused
|
1411
1495
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1412
1496
|
"""
|
1413
1497
|
await self.load_markets()
|
@@ -1420,7 +1504,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
1420
1504
|
postOnly = None
|
1421
1505
|
postOnly, params = self.handle_post_only((uppercaseType == 'MARKET'), exchangeSpecificParam, params)
|
1422
1506
|
triggerPrice = self.safe_string_n(params, ['triggerPrice', 'stopPrice', 'stop_price'])
|
1423
|
-
request = {
|
1507
|
+
request: dict = {
|
1424
1508
|
'asset_pair_name': market['id'], # asset pair name BTC-USDT, required
|
1425
1509
|
'side': requestSide, # order side one of "ASK"/"BID", required
|
1426
1510
|
'amount': self.amount_to_precision(symbol, amount), # order amount, string, required
|
@@ -1484,20 +1568,22 @@ class bigone(Exchange, ImplicitAPI):
|
|
1484
1568
|
# "updated_at":"2019-01-29T06:05:56Z"
|
1485
1569
|
# }
|
1486
1570
|
#
|
1487
|
-
order = self.
|
1571
|
+
order = self.safe_dict(response, 'data')
|
1488
1572
|
return self.parse_order(order, market)
|
1489
1573
|
|
1490
1574
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
1491
1575
|
"""
|
1492
1576
|
cancels an open order
|
1493
|
-
|
1577
|
+
|
1578
|
+
https://open.big.one/docs/spot_orders.html#cancel-order
|
1579
|
+
|
1494
1580
|
:param str id: order id
|
1495
1581
|
:param str symbol: Not used by bigone cancelOrder()
|
1496
1582
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1497
1583
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1498
1584
|
"""
|
1499
1585
|
await self.load_markets()
|
1500
|
-
request = {'id': id}
|
1586
|
+
request: dict = {'id': id}
|
1501
1587
|
response = await self.privatePostOrdersIdCancel(self.extend(request, params))
|
1502
1588
|
# {
|
1503
1589
|
# "id": 10,
|
@@ -1511,20 +1597,22 @@ class bigone(Exchange, ImplicitAPI):
|
|
1511
1597
|
# "created_at":"2019-01-29T06:05:56Z",
|
1512
1598
|
# "updated_at":"2019-01-29T06:05:56Z"
|
1513
1599
|
# }
|
1514
|
-
order = self.
|
1600
|
+
order = self.safe_dict(response, 'data')
|
1515
1601
|
return self.parse_order(order)
|
1516
1602
|
|
1517
1603
|
async def cancel_all_orders(self, symbol: Str = None, params={}):
|
1518
1604
|
"""
|
1519
1605
|
cancel all open orders
|
1520
|
-
|
1606
|
+
|
1607
|
+
https://open.big.one/docs/spot_orders.html#cancel-all-orders
|
1608
|
+
|
1521
1609
|
:param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
|
1522
1610
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1523
1611
|
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1524
1612
|
"""
|
1525
1613
|
await self.load_markets()
|
1526
1614
|
market = self.market(symbol)
|
1527
|
-
request = {
|
1615
|
+
request: dict = {
|
1528
1616
|
'asset_pair_name': market['id'],
|
1529
1617
|
}
|
1530
1618
|
response = await self.privatePostOrdersCancel(self.extend(request, params))
|
@@ -1540,26 +1628,49 @@ class bigone(Exchange, ImplicitAPI):
|
|
1540
1628
|
# }
|
1541
1629
|
# }
|
1542
1630
|
#
|
1543
|
-
|
1631
|
+
data = self.safe_dict(response, 'data', {})
|
1632
|
+
cancelled = self.safe_list(data, 'cancelled', [])
|
1633
|
+
failed = self.safe_list(data, 'failed', [])
|
1634
|
+
result = []
|
1635
|
+
for i in range(0, len(cancelled)):
|
1636
|
+
orderId = cancelled[i]
|
1637
|
+
result.append(self.safe_order({
|
1638
|
+
'info': orderId,
|
1639
|
+
'id': orderId,
|
1640
|
+
'status': 'canceled',
|
1641
|
+
}))
|
1642
|
+
for i in range(0, len(failed)):
|
1643
|
+
orderId = failed[i]
|
1644
|
+
result.append(self.safe_order({
|
1645
|
+
'info': orderId,
|
1646
|
+
'id': orderId,
|
1647
|
+
'status': 'failed',
|
1648
|
+
}))
|
1649
|
+
return result
|
1544
1650
|
|
1545
1651
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
1546
1652
|
"""
|
1547
1653
|
fetches information on an order made by the user
|
1548
|
-
|
1654
|
+
|
1655
|
+
https://open.big.one/docs/spot_orders.html#get-one-order
|
1656
|
+
|
1657
|
+
:param str id: the order id
|
1549
1658
|
:param str symbol: not used by bigone fetchOrder
|
1550
1659
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1551
1660
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1552
1661
|
"""
|
1553
1662
|
await self.load_markets()
|
1554
|
-
request = {'id': id}
|
1663
|
+
request: dict = {'id': id}
|
1555
1664
|
response = await self.privateGetOrdersId(self.extend(request, params))
|
1556
|
-
order = self.
|
1665
|
+
order = self.safe_dict(response, 'data', {})
|
1557
1666
|
return self.parse_order(order)
|
1558
1667
|
|
1559
1668
|
async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1560
1669
|
"""
|
1561
1670
|
fetches information on multiple orders made by the user
|
1562
|
-
|
1671
|
+
|
1672
|
+
https://open.big.one/docs/spot_orders.html#get-user-orders-in-one-asset-pair
|
1673
|
+
|
1563
1674
|
:param str symbol: unified market symbol of the market orders were made in
|
1564
1675
|
:param int [since]: the earliest time in ms to fetch orders for
|
1565
1676
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -1570,7 +1681,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
1570
1681
|
raise ArgumentsRequired(self.id + ' fetchOrders() requires a symbol argument')
|
1571
1682
|
await self.load_markets()
|
1572
1683
|
market = self.market(symbol)
|
1573
|
-
request = {
|
1684
|
+
request: dict = {
|
1574
1685
|
'asset_pair_name': market['id'],
|
1575
1686
|
# 'page_token': 'dxzef', # request page after self page token
|
1576
1687
|
# 'side': 'ASK', # 'ASK' or 'BID', optional
|
@@ -1600,13 +1711,15 @@ class bigone(Exchange, ImplicitAPI):
|
|
1600
1711
|
# "page_token":"dxzef",
|
1601
1712
|
# }
|
1602
1713
|
#
|
1603
|
-
orders = self.
|
1714
|
+
orders = self.safe_list(response, 'data', [])
|
1604
1715
|
return self.parse_orders(orders, market, since, limit)
|
1605
1716
|
|
1606
1717
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
1607
1718
|
"""
|
1608
1719
|
fetch all trades made by the user
|
1609
|
-
|
1720
|
+
|
1721
|
+
https://open.big.one/docs/spot_trade.html#trades-of-user
|
1722
|
+
|
1610
1723
|
:param str symbol: unified market symbol
|
1611
1724
|
:param int [since]: the earliest time in ms to fetch trades for
|
1612
1725
|
:param int [limit]: the maximum number of trades structures to retrieve
|
@@ -1617,7 +1730,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
1617
1730
|
raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol argument')
|
1618
1731
|
await self.load_markets()
|
1619
1732
|
market = self.market(symbol)
|
1620
|
-
request = {
|
1733
|
+
request: dict = {
|
1621
1734
|
'asset_pair_name': market['id'],
|
1622
1735
|
# 'page_token': 'dxzef', # request page after self page token
|
1623
1736
|
}
|
@@ -1658,11 +1771,11 @@ class bigone(Exchange, ImplicitAPI):
|
|
1658
1771
|
# "page_token":"dxfv"
|
1659
1772
|
# }
|
1660
1773
|
#
|
1661
|
-
trades = self.
|
1774
|
+
trades = self.safe_list(response, 'data', [])
|
1662
1775
|
return self.parse_trades(trades, market, since, limit)
|
1663
1776
|
|
1664
|
-
def parse_order_status(self, status):
|
1665
|
-
statuses = {
|
1777
|
+
def parse_order_status(self, status: Str):
|
1778
|
+
statuses: dict = {
|
1666
1779
|
'PENDING': 'open',
|
1667
1780
|
'FILLED': 'closed',
|
1668
1781
|
'CANCELLED': 'canceled',
|
@@ -1672,14 +1785,16 @@ class bigone(Exchange, ImplicitAPI):
|
|
1672
1785
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1673
1786
|
"""
|
1674
1787
|
fetch all unfilled currently open orders
|
1675
|
-
|
1788
|
+
|
1789
|
+
https://open.big.one/docs/spot_orders.html#get-user-orders-in-one-asset-pair
|
1790
|
+
|
1676
1791
|
:param str symbol: unified market symbol
|
1677
1792
|
:param int [since]: the earliest time in ms to fetch open orders for
|
1678
1793
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
1679
1794
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1680
1795
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1681
1796
|
"""
|
1682
|
-
request = {
|
1797
|
+
request: dict = {
|
1683
1798
|
'state': 'PENDING',
|
1684
1799
|
}
|
1685
1800
|
return await self.fetch_orders(symbol, since, limit, self.extend(request, params))
|
@@ -1687,14 +1802,16 @@ class bigone(Exchange, ImplicitAPI):
|
|
1687
1802
|
async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1688
1803
|
"""
|
1689
1804
|
fetches information on multiple closed orders made by the user
|
1690
|
-
|
1805
|
+
|
1806
|
+
https://open.big.one/docs/spot_orders.html#get-user-orders-in-one-asset-pair
|
1807
|
+
|
1691
1808
|
:param str symbol: unified market symbol of the market orders were made in
|
1692
1809
|
:param int [since]: the earliest time in ms to fetch orders for
|
1693
1810
|
:param int [limit]: the maximum number of order structures to retrieve
|
1694
1811
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1695
1812
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1696
1813
|
"""
|
1697
|
-
request = {
|
1814
|
+
request: dict = {
|
1698
1815
|
'state': 'FILLED',
|
1699
1816
|
}
|
1700
1817
|
return await self.fetch_orders(symbol, since, limit, self.extend(request, params))
|
@@ -1714,7 +1831,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
1714
1831
|
else:
|
1715
1832
|
self.check_required_credentials()
|
1716
1833
|
nonce = str(self.nonce())
|
1717
|
-
request = {
|
1834
|
+
request: dict = {
|
1718
1835
|
'type': 'OpenAPIV2',
|
1719
1836
|
'sub': self.apiKey,
|
1720
1837
|
'nonce': nonce,
|
@@ -1731,17 +1848,19 @@ class bigone(Exchange, ImplicitAPI):
|
|
1731
1848
|
headers['User-Agent'] = 'ccxt/' + self.id + '-' + self.version
|
1732
1849
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
1733
1850
|
|
1734
|
-
async def fetch_deposit_address(self, code: str, params={}):
|
1851
|
+
async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
|
1735
1852
|
"""
|
1736
1853
|
fetch the deposit address for a currency associated with self account
|
1737
|
-
|
1854
|
+
|
1855
|
+
https://open.big.one/docs/spot_deposit.html#get-deposite-address-of-one-asset-of-user
|
1856
|
+
|
1738
1857
|
:param str code: unified currency code
|
1739
1858
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1740
1859
|
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
|
1741
1860
|
"""
|
1742
1861
|
await self.load_markets()
|
1743
1862
|
currency = self.currency(code)
|
1744
|
-
request = {
|
1863
|
+
request: dict = {
|
1745
1864
|
'asset_symbol': currency['id'],
|
1746
1865
|
}
|
1747
1866
|
networkCode, paramsOmitted = self.handle_network_code_and_params(params)
|
@@ -1763,26 +1882,26 @@ class bigone(Exchange, ImplicitAPI):
|
|
1763
1882
|
# ]
|
1764
1883
|
# }
|
1765
1884
|
#
|
1766
|
-
data = self.
|
1885
|
+
data = self.safe_list(response, 'data', [])
|
1767
1886
|
dataLength = len(data)
|
1768
1887
|
if dataLength < 1:
|
1769
1888
|
raise ExchangeError(self.id + ' fetchDepositAddress() returned empty address response')
|
1770
1889
|
chainsIndexedById = self.index_by(data, 'chain')
|
1771
1890
|
selectedNetworkId = self.select_network_id_from_raw_networks(code, networkCode, chainsIndexedById)
|
1772
|
-
addressObject = self.
|
1891
|
+
addressObject = self.safe_dict(chainsIndexedById, selectedNetworkId, {})
|
1773
1892
|
address = self.safe_string(addressObject, 'value')
|
1774
1893
|
tag = self.safe_string(addressObject, 'memo')
|
1775
1894
|
self.check_address(address)
|
1776
1895
|
return {
|
1896
|
+
'info': response,
|
1777
1897
|
'currency': code,
|
1898
|
+
'network': self.network_id_to_code(selectedNetworkId),
|
1778
1899
|
'address': address,
|
1779
1900
|
'tag': tag,
|
1780
|
-
'network': self.network_id_to_code(selectedNetworkId),
|
1781
|
-
'info': response,
|
1782
1901
|
}
|
1783
1902
|
|
1784
|
-
def parse_transaction_status(self, status):
|
1785
|
-
statuses = {
|
1903
|
+
def parse_transaction_status(self, status: Str):
|
1904
|
+
statuses: dict = {
|
1786
1905
|
# what are other statuses here?
|
1787
1906
|
'WITHHOLD': 'ok', # deposits
|
1788
1907
|
'UNCONFIRMED': 'pending',
|
@@ -1792,7 +1911,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
1792
1911
|
}
|
1793
1912
|
return self.safe_string(statuses, status, status)
|
1794
1913
|
|
1795
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
1914
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
1796
1915
|
#
|
1797
1916
|
# fetchDeposits
|
1798
1917
|
#
|
@@ -1855,7 +1974,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
1855
1974
|
address = self.safe_string(transaction, 'target_address')
|
1856
1975
|
tag = self.safe_string(transaction, 'memo')
|
1857
1976
|
type = 'withdrawal' if ('customer_id' in transaction) else 'deposit'
|
1858
|
-
internal = self.
|
1977
|
+
internal = self.safe_bool(transaction, 'is_internal')
|
1859
1978
|
return {
|
1860
1979
|
'info': transaction,
|
1861
1980
|
'id': id,
|
@@ -1882,7 +2001,9 @@ class bigone(Exchange, ImplicitAPI):
|
|
1882
2001
|
async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
1883
2002
|
"""
|
1884
2003
|
fetch all deposits made to an account
|
1885
|
-
|
2004
|
+
|
2005
|
+
https://open.big.one/docs/spot_deposit.html#deposit-of-user
|
2006
|
+
|
1886
2007
|
:param str code: unified currency code
|
1887
2008
|
:param int [since]: the earliest time in ms to fetch deposits for
|
1888
2009
|
:param int [limit]: the maximum number of deposits structures to retrieve
|
@@ -1890,7 +2011,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
1890
2011
|
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
|
1891
2012
|
"""
|
1892
2013
|
await self.load_markets()
|
1893
|
-
request = {
|
2014
|
+
request: dict = {
|
1894
2015
|
# 'page_token': 'dxzef', # request page after self page token
|
1895
2016
|
# 'limit': 50, # optional, default 50
|
1896
2017
|
# 'kind': 'string', # optional - air_drop, big_holder_dividend, default, eosc_to_eos, internal, equally_airdrop, referral_mining, one_holder_dividend, single_customer, snapshotted_airdrop, trade_mining
|
@@ -1924,13 +2045,15 @@ class bigone(Exchange, ImplicitAPI):
|
|
1924
2045
|
# ]
|
1925
2046
|
# }
|
1926
2047
|
#
|
1927
|
-
deposits = self.
|
2048
|
+
deposits = self.safe_list(response, 'data', [])
|
1928
2049
|
return self.parse_transactions(deposits, currency, since, limit)
|
1929
2050
|
|
1930
2051
|
async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
1931
2052
|
"""
|
1932
2053
|
fetch all withdrawals made from an account
|
1933
|
-
|
2054
|
+
|
2055
|
+
https://open.big.one/docs/spot_withdrawal.html#get-withdrawals-of-user
|
2056
|
+
|
1934
2057
|
:param str code: unified currency code
|
1935
2058
|
:param int [since]: the earliest time in ms to fetch withdrawals for
|
1936
2059
|
:param int [limit]: the maximum number of withdrawals structures to retrieve
|
@@ -1938,7 +2061,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
1938
2061
|
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
|
1939
2062
|
"""
|
1940
2063
|
await self.load_markets()
|
1941
|
-
request = {
|
2064
|
+
request: dict = {
|
1942
2065
|
# 'page_token': 'dxzef', # request page after self page token
|
1943
2066
|
# 'limit': 50, # optional, default 50
|
1944
2067
|
# 'kind': 'string', # optional - air_drop, big_holder_dividend, default, eosc_to_eos, internal, equally_airdrop, referral_mining, one_holder_dividend, single_customer, snapshotted_airdrop, trade_mining
|
@@ -1972,13 +2095,15 @@ class bigone(Exchange, ImplicitAPI):
|
|
1972
2095
|
# "page_token":"dxvf"
|
1973
2096
|
# }
|
1974
2097
|
#
|
1975
|
-
withdrawals = self.
|
2098
|
+
withdrawals = self.safe_list(response, 'data', [])
|
1976
2099
|
return self.parse_transactions(withdrawals, currency, since, limit)
|
1977
2100
|
|
1978
2101
|
async def transfer(self, code: str, amount: float, fromAccount: str, toAccount: str, params={}) -> TransferEntry:
|
1979
2102
|
"""
|
1980
2103
|
transfer currency internally between wallets on the same account
|
1981
|
-
|
2104
|
+
|
2105
|
+
https://open.big.one/docs/spot_transfer.html#transfer-of-user
|
2106
|
+
|
1982
2107
|
:param str code: unified currency code
|
1983
2108
|
:param float amount: amount to transfer
|
1984
2109
|
:param str fromAccount: 'SPOT', 'FUND', or 'CONTRACT'
|
@@ -1988,11 +2113,11 @@ class bigone(Exchange, ImplicitAPI):
|
|
1988
2113
|
"""
|
1989
2114
|
await self.load_markets()
|
1990
2115
|
currency = self.currency(code)
|
1991
|
-
accountsByType = self.
|
2116
|
+
accountsByType = self.safe_dict(self.options, 'accountsByType', {})
|
1992
2117
|
fromId = self.safe_string(accountsByType, fromAccount, fromAccount)
|
1993
2118
|
toId = self.safe_string(accountsByType, toAccount, toAccount)
|
1994
2119
|
guid = self.safe_string(params, 'guid', self.uuid())
|
1995
|
-
request = {
|
2120
|
+
request: dict = {
|
1996
2121
|
'symbol': currency['id'],
|
1997
2122
|
'amount': self.currency_to_precision(code, amount),
|
1998
2123
|
'from': fromId,
|
@@ -2009,7 +2134,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
2009
2134
|
# }
|
2010
2135
|
#
|
2011
2136
|
transfer = self.parse_transfer(response, currency)
|
2012
|
-
transferOptions = self.
|
2137
|
+
transferOptions = self.safe_dict(self.options, 'transfer', {})
|
2013
2138
|
fillResponseFromRequest = self.safe_bool(transferOptions, 'fillResponseFromRequest', True)
|
2014
2139
|
if fillResponseFromRequest:
|
2015
2140
|
transfer['fromAccount'] = fromAccount
|
@@ -2018,14 +2143,14 @@ class bigone(Exchange, ImplicitAPI):
|
|
2018
2143
|
transfer['id'] = guid
|
2019
2144
|
return transfer
|
2020
2145
|
|
2021
|
-
def parse_transfer(self, transfer, currency: Currency = None):
|
2146
|
+
def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
|
2022
2147
|
#
|
2023
2148
|
# {
|
2024
2149
|
# "code": 0,
|
2025
2150
|
# "data": null
|
2026
2151
|
# }
|
2027
2152
|
#
|
2028
|
-
code = self.
|
2153
|
+
code = self.safe_string(transfer, 'code')
|
2029
2154
|
return {
|
2030
2155
|
'info': transfer,
|
2031
2156
|
'id': None,
|
@@ -2038,16 +2163,18 @@ class bigone(Exchange, ImplicitAPI):
|
|
2038
2163
|
'status': self.parse_transfer_status(code),
|
2039
2164
|
}
|
2040
2165
|
|
2041
|
-
def parse_transfer_status(self, status):
|
2042
|
-
statuses = {
|
2166
|
+
def parse_transfer_status(self, status: Str) -> Str:
|
2167
|
+
statuses: dict = {
|
2043
2168
|
'0': 'ok',
|
2044
2169
|
}
|
2045
2170
|
return self.safe_string(statuses, status, 'failed')
|
2046
2171
|
|
2047
|
-
async def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
2172
|
+
async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
2048
2173
|
"""
|
2049
2174
|
make a withdrawal
|
2050
|
-
|
2175
|
+
|
2176
|
+
https://open.big.one/docs/spot_withdrawal.html#create-withdrawal-of-user
|
2177
|
+
|
2051
2178
|
:param str code: unified currency code
|
2052
2179
|
:param float amount: the amount to withdraw
|
2053
2180
|
:param str address: the address to withdraw to
|
@@ -2058,7 +2185,7 @@ class bigone(Exchange, ImplicitAPI):
|
|
2058
2185
|
tag, params = self.handle_withdraw_tag_and_params(tag, params)
|
2059
2186
|
await self.load_markets()
|
2060
2187
|
currency = self.currency(code)
|
2061
|
-
request = {
|
2188
|
+
request: dict = {
|
2062
2189
|
'symbol': currency['id'],
|
2063
2190
|
'target_address': address,
|
2064
2191
|
'amount': self.currency_to_precision(code, amount),
|
@@ -2092,10 +2219,10 @@ class bigone(Exchange, ImplicitAPI):
|
|
2092
2219
|
# }
|
2093
2220
|
# }
|
2094
2221
|
#
|
2095
|
-
data = self.
|
2222
|
+
data = self.safe_dict(response, 'data', {})
|
2096
2223
|
return self.parse_transaction(data, currency)
|
2097
2224
|
|
2098
|
-
def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
2225
|
+
def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
2099
2226
|
if response is None:
|
2100
2227
|
return None # fallback to default error handler
|
2101
2228
|
#
|