ccxt 4.2.77__py2.py3-none-any.whl → 4.4.49__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ccxt/__init__.py +36 -14
- ccxt/abstract/alpaca.py +4 -0
- ccxt/abstract/bigone.py +1 -1
- ccxt/abstract/binance.py +112 -48
- ccxt/abstract/binancecoinm.py +112 -48
- ccxt/abstract/binanceus.py +147 -83
- ccxt/abstract/binanceusdm.py +112 -48
- ccxt/abstract/bingx.py +133 -78
- ccxt/abstract/bitbank.py +5 -0
- ccxt/abstract/bitfinex.py +136 -65
- ccxt/abstract/bitfinex1.py +69 -0
- ccxt/abstract/bitflyer.py +1 -0
- ccxt/abstract/bitget.py +8 -1
- ccxt/abstract/bitmart.py +13 -1
- ccxt/abstract/bitopro.py +1 -0
- ccxt/abstract/bitpanda.py +0 -12
- ccxt/abstract/bitrue.py +3 -3
- ccxt/abstract/bitstamp.py +26 -3
- ccxt/abstract/blofin.py +24 -0
- ccxt/abstract/btcbox.py +1 -0
- ccxt/abstract/bybit.py +29 -14
- ccxt/abstract/cex.py +28 -29
- ccxt/abstract/coinbase.py +6 -0
- ccxt/abstract/coinbaseadvanced.py +94 -0
- ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/abstract/coincatch.py +94 -0
- ccxt/abstract/coinex.py +233 -123
- ccxt/abstract/coinmetro.py +1 -0
- ccxt/abstract/cryptocom.py +14 -0
- ccxt/abstract/defx.py +69 -0
- ccxt/abstract/deribit.py +1 -0
- ccxt/abstract/digifinex.py +1 -0
- ccxt/abstract/ellipx.py +25 -0
- ccxt/abstract/gate.py +20 -0
- ccxt/abstract/gateio.py +20 -0
- ccxt/abstract/gemini.py +1 -0
- ccxt/abstract/hashkey.py +67 -0
- ccxt/abstract/hyperliquid.py +1 -1
- ccxt/abstract/independentreserve.py +6 -0
- ccxt/abstract/kraken.py +4 -3
- ccxt/abstract/krakenfutures.py +4 -0
- ccxt/abstract/kucoin.py +24 -0
- ccxt/abstract/kucoinfutures.py +34 -0
- ccxt/abstract/luno.py +2 -0
- ccxt/abstract/mexc.py +4 -0
- ccxt/abstract/myokx.py +340 -0
- ccxt/abstract/oceanex.py +5 -0
- ccxt/abstract/okx.py +30 -0
- ccxt/abstract/onetrading.py +0 -12
- ccxt/abstract/oxfun.py +34 -0
- ccxt/abstract/paradex.py +40 -0
- ccxt/abstract/phemex.py +1 -0
- ccxt/abstract/upbit.py +4 -0
- ccxt/abstract/vertex.py +19 -0
- ccxt/abstract/whitebit.py +31 -1
- ccxt/abstract/woo.py +6 -2
- ccxt/abstract/woofipro.py +119 -0
- ccxt/abstract/xt.py +153 -0
- ccxt/abstract/zonda.py +6 -0
- ccxt/ace.py +164 -60
- ccxt/alpaca.py +727 -63
- ccxt/ascendex.py +395 -249
- ccxt/async_support/__init__.py +36 -14
- ccxt/async_support/ace.py +164 -60
- ccxt/async_support/alpaca.py +727 -63
- ccxt/async_support/ascendex.py +396 -249
- ccxt/async_support/base/exchange.py +531 -155
- ccxt/async_support/base/ws/aiohttp_client.py +28 -5
- ccxt/async_support/base/ws/cache.py +3 -2
- ccxt/async_support/base/ws/client.py +26 -5
- ccxt/async_support/base/ws/fast_client.py +4 -3
- ccxt/async_support/base/ws/functions.py +1 -1
- ccxt/async_support/base/ws/future.py +40 -31
- ccxt/async_support/base/ws/order_book_side.py +3 -0
- ccxt/async_support/bequant.py +1 -1
- ccxt/async_support/bigone.py +329 -202
- ccxt/async_support/binance.py +3030 -1087
- ccxt/async_support/binancecoinm.py +2 -1
- ccxt/async_support/binanceus.py +12 -1
- ccxt/async_support/binanceusdm.py +3 -1
- ccxt/async_support/bingx.py +3205 -937
- ccxt/async_support/bit2c.py +119 -38
- ccxt/async_support/bitbank.py +215 -76
- ccxt/async_support/bitbns.py +124 -53
- ccxt/async_support/bitfinex.py +3236 -1078
- ccxt/async_support/bitfinex1.py +1711 -0
- ccxt/async_support/bitflyer.py +238 -49
- ccxt/async_support/bitget.py +1525 -573
- ccxt/async_support/bithumb.py +199 -65
- ccxt/async_support/bitmart.py +1320 -435
- ccxt/async_support/bitmex.py +308 -111
- ccxt/async_support/bitopro.py +256 -96
- ccxt/async_support/bitrue.py +365 -233
- ccxt/async_support/bitso.py +201 -89
- ccxt/async_support/bitstamp.py +438 -269
- ccxt/async_support/bitteam.py +179 -73
- ccxt/async_support/bitvavo.py +180 -70
- ccxt/async_support/bl3p.py +92 -25
- ccxt/async_support/blockchaincom.py +193 -79
- ccxt/async_support/blofin.py +392 -148
- ccxt/async_support/btcalpha.py +161 -55
- ccxt/async_support/btcbox.py +250 -34
- ccxt/async_support/btcmarkets.py +232 -85
- ccxt/async_support/btcturk.py +159 -60
- ccxt/async_support/bybit.py +2231 -1193
- ccxt/async_support/cex.py +1409 -1329
- ccxt/async_support/coinbase.py +1454 -287
- ccxt/async_support/coinbaseadvanced.py +17 -0
- ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/async_support/coinbaseinternational.py +428 -88
- ccxt/async_support/coincatch.py +5152 -0
- ccxt/async_support/coincheck.py +121 -38
- ccxt/async_support/coinex.py +4020 -3339
- ccxt/async_support/coinlist.py +273 -116
- ccxt/async_support/coinmate.py +204 -97
- ccxt/async_support/coinmetro.py +203 -110
- ccxt/async_support/coinone.py +142 -68
- ccxt/async_support/coinsph.py +223 -97
- ccxt/async_support/coinspot.py +137 -62
- ccxt/async_support/cryptocom.py +515 -185
- ccxt/async_support/currencycom.py +203 -85
- ccxt/async_support/defx.py +2066 -0
- ccxt/async_support/delta.py +404 -109
- ccxt/async_support/deribit.py +639 -323
- ccxt/async_support/digifinex.py +465 -233
- ccxt/async_support/ellipx.py +1887 -0
- ccxt/async_support/exmo.py +317 -128
- ccxt/async_support/gate.py +1472 -463
- ccxt/async_support/gemini.py +206 -84
- ccxt/async_support/hashkey.py +4164 -0
- ccxt/async_support/hitbtc.py +433 -178
- ccxt/async_support/hollaex.py +207 -83
- ccxt/async_support/htx.py +1095 -563
- ccxt/async_support/huobijp.py +178 -56
- ccxt/async_support/hyperliquid.py +1678 -292
- ccxt/async_support/idex.py +219 -95
- ccxt/async_support/independentreserve.py +300 -31
- ccxt/async_support/indodax.py +226 -62
- ccxt/async_support/kraken.py +871 -354
- ccxt/async_support/krakenfutures.py +324 -100
- ccxt/async_support/kucoin.py +917 -357
- ccxt/async_support/kucoinfutures.py +1004 -149
- ccxt/async_support/kuna.py +198 -107
- ccxt/async_support/latoken.py +199 -79
- ccxt/async_support/lbank.py +360 -113
- ccxt/async_support/luno.py +185 -62
- ccxt/async_support/lykke.py +168 -55
- ccxt/async_support/mercado.py +101 -29
- ccxt/async_support/mexc.py +995 -429
- ccxt/async_support/myokx.py +53 -0
- ccxt/async_support/ndax.py +234 -82
- ccxt/async_support/novadax.py +195 -75
- ccxt/async_support/oceanex.py +244 -59
- ccxt/async_support/okcoin.py +301 -165
- ccxt/async_support/okx.py +1776 -454
- ccxt/async_support/onetrading.py +198 -414
- ccxt/async_support/oxfun.py +2898 -0
- ccxt/async_support/p2b.py +142 -52
- ccxt/async_support/paradex.py +2085 -0
- ccxt/async_support/paymium.py +56 -32
- ccxt/async_support/phemex.py +572 -196
- ccxt/async_support/poloniex.py +218 -95
- ccxt/async_support/poloniexfutures.py +260 -92
- ccxt/async_support/probit.py +143 -110
- ccxt/async_support/timex.py +123 -70
- ccxt/async_support/tokocrypto.py +129 -93
- ccxt/async_support/tradeogre.py +39 -25
- ccxt/async_support/upbit.py +322 -113
- ccxt/async_support/vertex.py +2983 -0
- ccxt/async_support/wavesexchange.py +227 -173
- ccxt/async_support/wazirx.py +145 -65
- ccxt/async_support/whitebit.py +533 -138
- ccxt/async_support/woo.py +1137 -296
- ccxt/async_support/woofipro.py +2716 -0
- ccxt/async_support/xt.py +4628 -0
- ccxt/async_support/yobit.py +160 -92
- ccxt/async_support/zaif.py +80 -33
- ccxt/async_support/zonda.py +140 -69
- ccxt/base/errors.py +51 -20
- ccxt/base/exchange.py +1722 -480
- ccxt/base/precise.py +10 -0
- ccxt/base/types.py +223 -4
- ccxt/bequant.py +1 -1
- ccxt/bigone.py +329 -202
- ccxt/binance.py +3030 -1087
- ccxt/binancecoinm.py +2 -1
- ccxt/binanceus.py +12 -1
- ccxt/binanceusdm.py +3 -1
- ccxt/bingx.py +3205 -937
- ccxt/bit2c.py +119 -38
- ccxt/bitbank.py +215 -76
- ccxt/bitbns.py +124 -53
- ccxt/bitfinex.py +3235 -1078
- ccxt/bitfinex1.py +1710 -0
- ccxt/bitflyer.py +238 -49
- ccxt/bitget.py +1525 -573
- ccxt/bithumb.py +198 -65
- ccxt/bitmart.py +1320 -435
- ccxt/bitmex.py +308 -111
- ccxt/bitopro.py +256 -96
- ccxt/bitrue.py +365 -233
- ccxt/bitso.py +201 -89
- ccxt/bitstamp.py +438 -269
- ccxt/bitteam.py +179 -73
- ccxt/bitvavo.py +180 -70
- ccxt/bl3p.py +92 -25
- ccxt/blockchaincom.py +193 -79
- ccxt/blofin.py +392 -148
- ccxt/btcalpha.py +161 -55
- ccxt/btcbox.py +250 -34
- ccxt/btcmarkets.py +232 -85
- ccxt/btcturk.py +159 -60
- ccxt/bybit.py +2231 -1193
- ccxt/cex.py +1408 -1329
- ccxt/coinbase.py +1454 -287
- ccxt/coinbaseadvanced.py +17 -0
- ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/coinbaseinternational.py +428 -88
- ccxt/coincatch.py +5152 -0
- ccxt/coincheck.py +121 -38
- ccxt/coinex.py +4020 -3339
- ccxt/coinlist.py +273 -116
- ccxt/coinmate.py +204 -97
- ccxt/coinmetro.py +203 -110
- ccxt/coinone.py +142 -68
- ccxt/coinsph.py +223 -97
- ccxt/coinspot.py +137 -62
- ccxt/cryptocom.py +515 -185
- ccxt/currencycom.py +203 -85
- ccxt/defx.py +2065 -0
- ccxt/delta.py +404 -109
- ccxt/deribit.py +639 -323
- ccxt/digifinex.py +465 -233
- ccxt/ellipx.py +1887 -0
- ccxt/exmo.py +317 -128
- ccxt/gate.py +1472 -463
- ccxt/gemini.py +206 -84
- ccxt/hashkey.py +4164 -0
- ccxt/hitbtc.py +433 -178
- ccxt/hollaex.py +207 -83
- ccxt/htx.py +1095 -563
- ccxt/huobijp.py +178 -56
- ccxt/hyperliquid.py +1677 -292
- ccxt/idex.py +219 -95
- ccxt/independentreserve.py +299 -31
- ccxt/indodax.py +226 -62
- ccxt/kraken.py +871 -354
- ccxt/krakenfutures.py +324 -100
- ccxt/kucoin.py +917 -357
- ccxt/kucoinfutures.py +1004 -149
- ccxt/kuna.py +198 -107
- ccxt/latoken.py +199 -79
- ccxt/lbank.py +360 -113
- ccxt/luno.py +185 -62
- ccxt/lykke.py +168 -55
- ccxt/mercado.py +101 -29
- ccxt/mexc.py +994 -429
- ccxt/myokx.py +53 -0
- ccxt/ndax.py +234 -82
- ccxt/novadax.py +195 -75
- ccxt/oceanex.py +244 -59
- ccxt/okcoin.py +301 -165
- ccxt/okx.py +1776 -454
- ccxt/onetrading.py +198 -414
- ccxt/oxfun.py +2897 -0
- ccxt/p2b.py +142 -52
- ccxt/paradex.py +2085 -0
- ccxt/paymium.py +56 -32
- ccxt/phemex.py +572 -196
- ccxt/poloniex.py +218 -95
- ccxt/poloniexfutures.py +260 -92
- ccxt/pro/__init__.py +29 -5
- ccxt/pro/alpaca.py +32 -17
- ccxt/pro/ascendex.py +62 -14
- ccxt/pro/bequant.py +4 -0
- ccxt/pro/binance.py +1596 -329
- ccxt/pro/binancecoinm.py +1 -0
- ccxt/pro/binanceus.py +2 -9
- ccxt/pro/binanceusdm.py +2 -0
- ccxt/pro/bingx.py +527 -134
- ccxt/pro/bitcoincom.py +4 -1
- ccxt/pro/bitfinex.py +731 -266
- ccxt/pro/bitfinex1.py +635 -0
- ccxt/pro/bitget.py +726 -357
- ccxt/pro/bithumb.py +380 -0
- ccxt/pro/bitmart.py +143 -39
- ccxt/pro/bitmex.py +199 -40
- ccxt/pro/bitopro.py +25 -13
- ccxt/pro/bitrue.py +31 -32
- ccxt/pro/bitstamp.py +7 -6
- ccxt/pro/bitvavo.py +203 -81
- ccxt/pro/blockchaincom.py +30 -17
- ccxt/pro/blofin.py +692 -0
- ccxt/pro/bybit.py +791 -82
- ccxt/pro/cex.py +99 -51
- ccxt/pro/coinbase.py +220 -30
- ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
- ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
- ccxt/pro/coinbaseinternational.py +193 -30
- ccxt/pro/coincatch.py +1464 -0
- ccxt/pro/coincheck.py +11 -6
- ccxt/pro/coinex.py +965 -665
- ccxt/pro/coinone.py +17 -10
- ccxt/pro/cryptocom.py +446 -66
- ccxt/pro/currencycom.py +11 -10
- ccxt/pro/defx.py +832 -0
- ccxt/pro/deribit.py +167 -31
- ccxt/pro/exmo.py +252 -20
- ccxt/pro/gate.py +729 -64
- ccxt/pro/gemini.py +44 -26
- ccxt/pro/hashkey.py +802 -0
- ccxt/pro/hitbtc.py +208 -103
- ccxt/pro/hollaex.py +25 -9
- ccxt/pro/htx.py +83 -39
- ccxt/pro/huobijp.py +17 -16
- ccxt/pro/hyperliquid.py +502 -31
- ccxt/pro/idex.py +28 -13
- ccxt/pro/independentreserve.py +21 -16
- ccxt/pro/kraken.py +298 -51
- ccxt/pro/krakenfutures.py +166 -75
- ccxt/pro/kucoin.py +395 -77
- ccxt/pro/kucoinfutures.py +400 -99
- ccxt/pro/lbank.py +52 -31
- ccxt/pro/luno.py +12 -10
- ccxt/pro/mexc.py +400 -50
- ccxt/pro/myokx.py +28 -0
- ccxt/pro/ndax.py +25 -12
- ccxt/pro/okcoin.py +28 -9
- ccxt/pro/okx.py +935 -124
- ccxt/pro/onetrading.py +41 -24
- ccxt/pro/oxfun.py +1054 -0
- ccxt/pro/p2b.py +100 -24
- ccxt/pro/paradex.py +352 -0
- ccxt/pro/phemex.py +92 -33
- ccxt/pro/poloniex.py +128 -49
- ccxt/pro/poloniexfutures.py +53 -32
- ccxt/pro/probit.py +92 -85
- ccxt/pro/upbit.py +401 -8
- ccxt/pro/vertex.py +943 -0
- ccxt/pro/wazirx.py +46 -28
- ccxt/pro/whitebit.py +65 -12
- ccxt/pro/woo.py +437 -65
- ccxt/pro/woofipro.py +1271 -0
- ccxt/pro/xt.py +1067 -0
- ccxt/probit.py +143 -110
- ccxt/static_dependencies/__init__.py +1 -1
- ccxt/static_dependencies/lark/__init__.py +38 -0
- ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
- ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
- ccxt/static_dependencies/lark/ast_utils.py +59 -0
- ccxt/static_dependencies/lark/common.py +86 -0
- ccxt/static_dependencies/lark/exceptions.py +292 -0
- ccxt/static_dependencies/lark/grammar.py +130 -0
- ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
- ccxt/static_dependencies/lark/indenter.py +143 -0
- ccxt/static_dependencies/lark/lark.py +658 -0
- ccxt/static_dependencies/lark/lexer.py +678 -0
- ccxt/static_dependencies/lark/load_grammar.py +1428 -0
- ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
- ccxt/static_dependencies/lark/parser_frontends.py +257 -0
- ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
- ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
- ccxt/static_dependencies/lark/parsers/earley.py +314 -0
- ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
- ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
- ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
- ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
- ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
- ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
- ccxt/static_dependencies/lark/py.typed +0 -0
- ccxt/static_dependencies/lark/reconstruct.py +107 -0
- ccxt/static_dependencies/lark/tools/__init__.py +70 -0
- ccxt/static_dependencies/lark/tools/nearley.py +202 -0
- ccxt/static_dependencies/lark/tools/serialize.py +32 -0
- ccxt/static_dependencies/lark/tools/standalone.py +196 -0
- ccxt/static_dependencies/lark/tree.py +267 -0
- ccxt/static_dependencies/lark/tree_matcher.py +186 -0
- ccxt/static_dependencies/lark/tree_templates.py +180 -0
- ccxt/static_dependencies/lark/utils.py +343 -0
- ccxt/static_dependencies/lark/visitors.py +596 -0
- ccxt/static_dependencies/marshmallow/__init__.py +81 -0
- ccxt/static_dependencies/marshmallow/base.py +65 -0
- ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
- ccxt/static_dependencies/marshmallow/decorators.py +231 -0
- ccxt/static_dependencies/marshmallow/error_store.py +60 -0
- ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
- ccxt/static_dependencies/marshmallow/fields.py +2114 -0
- ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
- ccxt/static_dependencies/marshmallow/py.typed +0 -0
- ccxt/static_dependencies/marshmallow/schema.py +1228 -0
- ccxt/static_dependencies/marshmallow/types.py +12 -0
- ccxt/static_dependencies/marshmallow/utils.py +378 -0
- ccxt/static_dependencies/marshmallow/validate.py +678 -0
- ccxt/static_dependencies/marshmallow/warnings.py +2 -0
- ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
- ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
- ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
- ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
- ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
- ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
- ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
- ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
- ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
- ccxt/static_dependencies/starknet/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
- ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
- ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
- ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
- ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
- ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
- ccxt/static_dependencies/starknet/common.py +15 -0
- ccxt/static_dependencies/starknet/constants.py +39 -0
- ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
- ccxt/static_dependencies/starknet/hash/address.py +79 -0
- ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
- ccxt/static_dependencies/starknet/hash/selector.py +16 -0
- ccxt/static_dependencies/starknet/hash/storage.py +12 -0
- ccxt/static_dependencies/starknet/hash/utils.py +78 -0
- ccxt/static_dependencies/starknet/models/__init__.py +0 -0
- ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
- ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
- ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
- ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
- ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
- ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
- ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
- ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
- ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
- ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
- ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
- ccxt/static_dependencies/starknet/utils/schema.py +13 -0
- ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
- ccxt/static_dependencies/starkware/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
- ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
- ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
- ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
- ccxt/static_dependencies/sympy/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
- ccxt/static_dependencies/sympy/external/__init__.py +0 -0
- ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
- ccxt/static_dependencies/sympy/external/importtools.py +187 -0
- ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
- ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
- ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
- ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
- ccxt/test/{test_async.py → tests_async.py} +456 -391
- ccxt/test/tests_helpers.py +285 -0
- ccxt/test/tests_init.py +39 -0
- ccxt/test/{test_sync.py → tests_sync.py} +456 -393
- ccxt/timex.py +123 -70
- ccxt/tokocrypto.py +129 -93
- ccxt/tradeogre.py +39 -25
- ccxt/upbit.py +322 -113
- ccxt/vertex.py +2983 -0
- ccxt/wavesexchange.py +227 -173
- ccxt/wazirx.py +145 -65
- ccxt/whitebit.py +533 -138
- ccxt/woo.py +1137 -296
- ccxt/woofipro.py +2716 -0
- ccxt/xt.py +4627 -0
- ccxt/yobit.py +159 -92
- ccxt/zaif.py +80 -33
- ccxt/zonda.py +140 -69
- ccxt-4.4.49.dist-info/LICENSE.txt +21 -0
- ccxt-4.4.49.dist-info/METADATA +646 -0
- ccxt-4.4.49.dist-info/RECORD +669 -0
- {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/WHEEL +1 -1
- ccxt/abstract/bitbay.py +0 -47
- ccxt/abstract/bitfinex2.py +0 -139
- ccxt/abstract/hitbtc3.py +0 -115
- ccxt/async_support/bitbay.py +0 -17
- ccxt/async_support/bitfinex2.py +0 -3496
- ccxt/async_support/flowbtc.py +0 -34
- ccxt/bitbay.py +0 -17
- ccxt/bitfinex2.py +0 -3496
- ccxt/flowbtc.py +0 -34
- ccxt/hitbtc3.py +0 -16
- ccxt/pro/bitfinex2.py +0 -1081
- ccxt/test/base/__init__.py +0 -28
- ccxt/test/base/test_account.py +0 -26
- ccxt/test/base/test_balance.py +0 -56
- ccxt/test/base/test_borrow_interest.py +0 -35
- ccxt/test/base/test_borrow_rate.py +0 -32
- ccxt/test/base/test_calculate_fee.py +0 -51
- ccxt/test/base/test_crypto.py +0 -127
- ccxt/test/base/test_currency.py +0 -76
- ccxt/test/base/test_datetime.py +0 -103
- ccxt/test/base/test_decimal_to_precision.py +0 -392
- ccxt/test/base/test_deep_extend.py +0 -68
- ccxt/test/base/test_deposit_withdrawal.py +0 -50
- ccxt/test/base/test_exchange_datetime_functions.py +0 -76
- ccxt/test/base/test_funding_rate_history.py +0 -29
- ccxt/test/base/test_last_price.py +0 -32
- ccxt/test/base/test_ledger_entry.py +0 -45
- ccxt/test/base/test_ledger_item.py +0 -48
- ccxt/test/base/test_leverage_tier.py +0 -33
- ccxt/test/base/test_margin_mode.py +0 -24
- ccxt/test/base/test_margin_modification.py +0 -35
- ccxt/test/base/test_market.py +0 -190
- ccxt/test/base/test_number.py +0 -411
- ccxt/test/base/test_ohlcv.py +0 -32
- ccxt/test/base/test_open_interest.py +0 -32
- ccxt/test/base/test_order.py +0 -64
- ccxt/test/base/test_order_book.py +0 -63
- ccxt/test/base/test_position.py +0 -60
- ccxt/test/base/test_shared_methods.py +0 -345
- ccxt/test/base/test_status.py +0 -24
- ccxt/test/base/test_throttle.py +0 -126
- ccxt/test/base/test_ticker.py +0 -86
- ccxt/test/base/test_trade.py +0 -47
- ccxt/test/base/test_trading_fee.py +0 -26
- ccxt/test/base/test_transaction.py +0 -39
- ccxt-4.2.77.dist-info/METADATA +0 -626
- ccxt-4.2.77.dist-info/RECORD +0 -534
- {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/top_level.txt +0 -0
@@ -5,9 +5,11 @@
|
|
5
5
|
|
6
6
|
from ccxt.async_support.base.exchange import Exchange
|
7
7
|
from ccxt.abstract.independentreserve import ImplicitAPI
|
8
|
+
import asyncio
|
8
9
|
import hashlib
|
9
|
-
from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Ticker, Trade
|
10
|
+
from ccxt.base.types import Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Ticker, Trade, TradingFees, Transaction
|
10
11
|
from typing import List
|
12
|
+
from ccxt.base.errors import BadRequest
|
11
13
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
12
14
|
from ccxt.base.precise import Precise
|
13
15
|
|
@@ -64,8 +66,11 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
64
66
|
'fetchOrder': True,
|
65
67
|
'fetchOrderBook': True,
|
66
68
|
'fetchPosition': False,
|
69
|
+
'fetchPositionHistory': False,
|
67
70
|
'fetchPositionMode': False,
|
68
71
|
'fetchPositions': False,
|
72
|
+
'fetchPositionsForSymbol': False,
|
73
|
+
'fetchPositionsHistory': False,
|
69
74
|
'fetchPositionsRisk': False,
|
70
75
|
'fetchPremiumIndexOHLCV': False,
|
71
76
|
'fetchTicker': True,
|
@@ -76,6 +81,7 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
76
81
|
'setLeverage': False,
|
77
82
|
'setMarginMode': False,
|
78
83
|
'setPositionMode': False,
|
84
|
+
'withdraw': True,
|
79
85
|
},
|
80
86
|
'urls': {
|
81
87
|
'logo': 'https://user-images.githubusercontent.com/51840849/87182090-1e9e9080-c2ec-11ea-8e49-563db9a38f37.jpg',
|
@@ -102,7 +108,10 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
102
108
|
'GetRecentTrades',
|
103
109
|
'GetFxRates',
|
104
110
|
'GetOrderMinimumVolumes',
|
105
|
-
'GetCryptoWithdrawalFees',
|
111
|
+
'GetCryptoWithdrawalFees', # deprecated - replaced by GetCryptoWithdrawalFees2(docs removed)
|
112
|
+
'GetCryptoWithdrawalFees2',
|
113
|
+
'GetNetworks',
|
114
|
+
'GetPrimaryCurrencyConfig2',
|
106
115
|
],
|
107
116
|
},
|
108
117
|
'private': {
|
@@ -114,8 +123,10 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
114
123
|
'GetAccounts',
|
115
124
|
'GetTransactions',
|
116
125
|
'GetFiatBankAccounts',
|
117
|
-
'GetDigitalCurrencyDepositAddress',
|
118
|
-
'
|
126
|
+
'GetDigitalCurrencyDepositAddress', # deprecated - replaced by GetDigitalCurrencyDepositAddress2(docs removed)
|
127
|
+
'GetDigitalCurrencyDepositAddress2',
|
128
|
+
'GetDigitalCurrencyDepositAddresses', # deprecated - replaced by GetDigitalCurrencyDepositAddresses2(docs removed)
|
129
|
+
'GetDigitalCurrencyDepositAddresses2',
|
119
130
|
'GetTrades',
|
120
131
|
'GetBrokerageFees',
|
121
132
|
'GetDigitalCurrencyWithdrawal',
|
@@ -125,7 +136,8 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
125
136
|
'SynchDigitalCurrencyDepositAddressWithBlockchain',
|
126
137
|
'RequestFiatWithdrawal',
|
127
138
|
'WithdrawFiatCurrency',
|
128
|
-
'WithdrawDigitalCurrency',
|
139
|
+
'WithdrawDigitalCurrency', # deprecated - replaced by WithdrawCrypto(docs removed)
|
140
|
+
'WithdrawCrypto',
|
129
141
|
],
|
130
142
|
},
|
131
143
|
},
|
@@ -137,23 +149,142 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
137
149
|
'tierBased': False,
|
138
150
|
},
|
139
151
|
},
|
152
|
+
'features': {
|
153
|
+
'spot': {
|
154
|
+
'sandbox': False,
|
155
|
+
'createOrder': {
|
156
|
+
'marginMode': False,
|
157
|
+
'triggerPrice': False,
|
158
|
+
'triggerPriceType': None,
|
159
|
+
'triggerDirection': False,
|
160
|
+
'stopLossPrice': False,
|
161
|
+
'takeProfitPrice': False,
|
162
|
+
'attachedStopLossTakeProfit': None,
|
163
|
+
'timeInForce': {
|
164
|
+
'IOC': False,
|
165
|
+
'FOK': False,
|
166
|
+
'PO': False,
|
167
|
+
'GTD': False,
|
168
|
+
},
|
169
|
+
'hedged': False,
|
170
|
+
'selfTradePrevention': False,
|
171
|
+
'trailing': False,
|
172
|
+
'leverage': False,
|
173
|
+
'marketBuyByCost': False,
|
174
|
+
'marketBuyRequiresPrice': False,
|
175
|
+
'iceberg': False,
|
176
|
+
},
|
177
|
+
'createOrders': None,
|
178
|
+
'fetchMyTrades': {
|
179
|
+
'marginMode': False,
|
180
|
+
'limit': 100, # todo
|
181
|
+
'daysBack': None,
|
182
|
+
'untilDays': None,
|
183
|
+
},
|
184
|
+
'fetchOrder': {
|
185
|
+
'marginMode': False,
|
186
|
+
'trigger': False,
|
187
|
+
'trailing': False,
|
188
|
+
},
|
189
|
+
'fetchOpenOrders': {
|
190
|
+
'marginMode': False,
|
191
|
+
'limit': 100, # todo
|
192
|
+
'trigger': False,
|
193
|
+
'trailing': False,
|
194
|
+
},
|
195
|
+
'fetchOrders': None,
|
196
|
+
'fetchClosedOrders': {
|
197
|
+
'marginMode': False,
|
198
|
+
'limit': 100, # todo
|
199
|
+
'daysBack': None,
|
200
|
+
'daysBackCanceled': None,
|
201
|
+
'untilDays': None,
|
202
|
+
'trigger': False,
|
203
|
+
'trailing': False,
|
204
|
+
},
|
205
|
+
'fetchOHLCV': None,
|
206
|
+
},
|
207
|
+
'swap': {
|
208
|
+
'linear': None,
|
209
|
+
'inverse': None,
|
210
|
+
},
|
211
|
+
'future': {
|
212
|
+
'linear': None,
|
213
|
+
'inverse': None,
|
214
|
+
},
|
215
|
+
},
|
140
216
|
'commonCurrencies': {
|
141
217
|
'PLA': 'PlayChip',
|
142
218
|
},
|
143
219
|
'precisionMode': TICK_SIZE,
|
220
|
+
'options': {
|
221
|
+
'defaultNetworks': {
|
222
|
+
'USDT': 'Ethereum',
|
223
|
+
'USDC': 'Ethereum',
|
224
|
+
'BTC': 'Bitcoin',
|
225
|
+
'BCH': 'BitcoinCash',
|
226
|
+
'ETH': 'Ethereum',
|
227
|
+
'LTC': 'Litecoin',
|
228
|
+
'XRP': 'XrpLedger',
|
229
|
+
'ZRX': 'Ethereum',
|
230
|
+
'EOS': 'EosIo',
|
231
|
+
'XLM': 'Stellar',
|
232
|
+
'BAT': 'Ethereum',
|
233
|
+
'ETC': 'EthereumClassic',
|
234
|
+
'LINK': 'Ethereum',
|
235
|
+
'MKR': 'Ethereum',
|
236
|
+
'DAI': 'Ethereum',
|
237
|
+
'COMP': 'Ethereum',
|
238
|
+
'SNX': 'Ethereum',
|
239
|
+
'YFI': 'Ethereum',
|
240
|
+
'AAVE': 'Ethereum',
|
241
|
+
'GRT': 'Ethereum',
|
242
|
+
'DOT': 'Polkadot',
|
243
|
+
'UNI': 'Ethereum',
|
244
|
+
'ADA': 'Cardano',
|
245
|
+
'MATIC': 'Ethereum',
|
246
|
+
'DOGE': 'Dogecoin',
|
247
|
+
'SOL': 'Solana',
|
248
|
+
'MANA': 'Ethereum',
|
249
|
+
'SAND': 'Ethereum',
|
250
|
+
'SHIB': 'Ethereum',
|
251
|
+
'TRX': 'Tron',
|
252
|
+
'RENDER': 'Solana',
|
253
|
+
'WIF': 'Solana',
|
254
|
+
'RLUSD': 'Ethereum',
|
255
|
+
'PEPE': 'Ethereum',
|
256
|
+
},
|
257
|
+
'networks': {
|
258
|
+
'BTC': 'Bitcoin',
|
259
|
+
'ETH': 'Ethereum',
|
260
|
+
'BCH': 'BitcoinCash',
|
261
|
+
'LTC': 'Litecoin',
|
262
|
+
'XRP': 'XrpLedger',
|
263
|
+
'EOS': 'EosIo',
|
264
|
+
'XLM': 'Stellar',
|
265
|
+
'ETC': 'EthereumClassic',
|
266
|
+
'BSV': 'BitcoinSV',
|
267
|
+
'DOGE': 'Dogecoin',
|
268
|
+
'DOT': 'Polkadot',
|
269
|
+
'ADA': 'Cardano',
|
270
|
+
'SOL': 'Solana',
|
271
|
+
'TRX': 'Tron',
|
272
|
+
},
|
273
|
+
},
|
144
274
|
})
|
145
275
|
|
146
|
-
async def fetch_markets(self, params={}):
|
276
|
+
async def fetch_markets(self, params={}) -> List[Market]:
|
147
277
|
"""
|
148
278
|
retrieves data on all markets for independentreserve
|
149
279
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
150
280
|
:returns dict[]: an array of objects representing market data
|
151
281
|
"""
|
152
|
-
|
282
|
+
baseCurrenciesPromise = self.publicGetGetValidPrimaryCurrencyCodes(params)
|
153
283
|
# ['Xbt', 'Eth', 'Usdt', ...]
|
154
|
-
|
284
|
+
quoteCurrenciesPromise = self.publicGetGetValidSecondaryCurrencyCodes(params)
|
155
285
|
# ['Aud', 'Usd', 'Nzd', 'Sgd']
|
156
|
-
|
286
|
+
limitsPromise = self.publicGetGetOrderMinimumVolumes(params)
|
287
|
+
baseCurrencies, quoteCurrencies, limits = await asyncio.gather(*[baseCurrenciesPromise, quoteCurrenciesPromise, limitsPromise])
|
157
288
|
#
|
158
289
|
# {
|
159
290
|
# "Xbt": 0.0001,
|
@@ -223,7 +354,7 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
223
354
|
return result
|
224
355
|
|
225
356
|
def parse_balance(self, response) -> Balances:
|
226
|
-
result = {'info': response}
|
357
|
+
result: dict = {'info': response}
|
227
358
|
for i in range(0, len(response)):
|
228
359
|
balance = response[i]
|
229
360
|
currencyId = self.safe_string(balance, 'CurrencyCode')
|
@@ -254,7 +385,7 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
254
385
|
"""
|
255
386
|
await self.load_markets()
|
256
387
|
market = self.market(symbol)
|
257
|
-
request = {
|
388
|
+
request: dict = {
|
258
389
|
'primaryCurrencyCode': market['baseId'],
|
259
390
|
'secondaryCurrencyCode': market['quoteId'],
|
260
391
|
}
|
@@ -262,7 +393,7 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
262
393
|
timestamp = self.parse8601(self.safe_string(response, 'CreatedTimestampUtc'))
|
263
394
|
return self.parse_order_book(response, market['symbol'], timestamp, 'BuyOrders', 'SellOrders', 'Price', 'Volume')
|
264
395
|
|
265
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
396
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
266
397
|
# {
|
267
398
|
# "DayHighestPrice":43489.49,
|
268
399
|
# "DayLowestPrice":41998.32,
|
@@ -317,7 +448,7 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
317
448
|
"""
|
318
449
|
await self.load_markets()
|
319
450
|
market = self.market(symbol)
|
320
|
-
request = {
|
451
|
+
request: dict = {
|
321
452
|
'primaryCurrencyCode': market['baseId'],
|
322
453
|
'secondaryCurrencyCode': market['quoteId'],
|
323
454
|
}
|
@@ -337,7 +468,7 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
337
468
|
# }
|
338
469
|
return self.parse_ticker(response, market)
|
339
470
|
|
340
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
471
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
341
472
|
#
|
342
473
|
# fetchOrder
|
343
474
|
#
|
@@ -372,6 +503,21 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
372
503
|
# "FeePercent": 0.005,
|
373
504
|
# }
|
374
505
|
#
|
506
|
+
# cancelOrder
|
507
|
+
#
|
508
|
+
# {
|
509
|
+
# "AvgPrice": 455.48,
|
510
|
+
# "CreatedTimestampUtc": "2022-08-05T06:42:11.3032208Z",
|
511
|
+
# "OrderGuid": "719c495c-a39e-4884-93ac-280b37245037",
|
512
|
+
# "Price": 485.76,
|
513
|
+
# "PrimaryCurrencyCode": "Xbt",
|
514
|
+
# "ReservedAmount": 0.358,
|
515
|
+
# "SecondaryCurrencyCode": "Usd",
|
516
|
+
# "Status": "Cancelled",
|
517
|
+
# "Type": "LimitOffer",
|
518
|
+
# "VolumeFilled": 0,
|
519
|
+
# "VolumeOrdered": 0.358
|
520
|
+
# }
|
375
521
|
symbol = None
|
376
522
|
baseId = self.safe_string(order, 'PrimaryCurrencyCode')
|
377
523
|
quoteId = self.safe_string(order, 'SecondaryCurrencyCode')
|
@@ -415,7 +561,6 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
415
561
|
'postOnly': None,
|
416
562
|
'side': side,
|
417
563
|
'price': self.safe_string(order, 'Price'),
|
418
|
-
'stopPrice': None,
|
419
564
|
'triggerPrice': None,
|
420
565
|
'cost': self.safe_string(order, 'Value'),
|
421
566
|
'average': self.safe_string(order, 'AvgPrice'),
|
@@ -431,8 +576,8 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
431
576
|
'trades': None,
|
432
577
|
}, market)
|
433
578
|
|
434
|
-
def parse_order_status(self, status):
|
435
|
-
statuses = {
|
579
|
+
def parse_order_status(self, status: Str):
|
580
|
+
statuses: dict = {
|
436
581
|
'Open': 'open',
|
437
582
|
'PartiallyFilled': 'open',
|
438
583
|
'Filled': 'closed',
|
@@ -446,6 +591,7 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
446
591
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
447
592
|
"""
|
448
593
|
fetches information on an order made by the user
|
594
|
+
:param str id: order id
|
449
595
|
:param str symbol: unified symbol of the market the order was made in
|
450
596
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
451
597
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -480,7 +626,7 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
480
626
|
request['pageIndex'] = 1
|
481
627
|
request['pageSize'] = limit
|
482
628
|
response = await self.privatePostGetOpenOrders(self.extend(request, params))
|
483
|
-
data = self.
|
629
|
+
data = self.safe_list(response, 'Data', [])
|
484
630
|
return self.parse_orders(data, market, since, limit)
|
485
631
|
|
486
632
|
async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
@@ -504,7 +650,7 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
504
650
|
request['pageIndex'] = 1
|
505
651
|
request['pageSize'] = limit
|
506
652
|
response = await self.privatePostGetClosedOrders(self.extend(request, params))
|
507
|
-
data = self.
|
653
|
+
data = self.safe_list(response, 'Data', [])
|
508
654
|
return self.parse_orders(data, market, since, limit)
|
509
655
|
|
510
656
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = 50, params={}):
|
@@ -530,7 +676,7 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
530
676
|
market = self.market(symbol)
|
531
677
|
return self.parse_trades(response['Data'], market, since, limit)
|
532
678
|
|
533
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
679
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
534
680
|
timestamp = self.parse8601(trade['TradeTimestampUtc'])
|
535
681
|
id = self.safe_string(trade, 'TradeGuid')
|
536
682
|
orderId = self.safe_string(trade, 'OrderGuid')
|
@@ -578,7 +724,7 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
578
724
|
"""
|
579
725
|
await self.load_markets()
|
580
726
|
market = self.market(symbol)
|
581
|
-
request = {
|
727
|
+
request: dict = {
|
582
728
|
'primaryCurrencyCode': market['baseId'],
|
583
729
|
'secondaryCurrencyCode': market['quoteId'],
|
584
730
|
'numberOfRecentTradesToRetrieve': 50, # max = 50
|
@@ -586,7 +732,7 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
586
732
|
response = await self.publicGetGetRecentTrades(self.extend(request, params))
|
587
733
|
return self.parse_trades(response['Trades'], market, since, limit)
|
588
734
|
|
589
|
-
async def fetch_trading_fees(self, params={}):
|
735
|
+
async def fetch_trading_fees(self, params={}) -> TradingFees:
|
590
736
|
"""
|
591
737
|
fetch the trading fees for multiple markets
|
592
738
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -603,7 +749,7 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
603
749
|
# ...
|
604
750
|
# ]
|
605
751
|
#
|
606
|
-
fees = {}
|
752
|
+
fees: dict = {}
|
607
753
|
for i in range(0, len(response)):
|
608
754
|
fee = response[i]
|
609
755
|
currencyId = self.safe_string(fee, 'CurrencyCode')
|
@@ -613,7 +759,7 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
613
759
|
'info': fee,
|
614
760
|
'fee': tradingFee,
|
615
761
|
}
|
616
|
-
result = {}
|
762
|
+
result: dict = {}
|
617
763
|
for i in range(0, len(self.symbols)):
|
618
764
|
symbol = self.symbols[i]
|
619
765
|
market = self.market(symbol)
|
@@ -635,7 +781,7 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
635
781
|
:param str type: 'market' or 'limit'
|
636
782
|
:param str side: 'buy' or 'sell'
|
637
783
|
:param float amount: how much of currency you want to trade in units of base currency
|
638
|
-
:param float [price]: the price at which the order is to be
|
784
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
639
785
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
640
786
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
641
787
|
"""
|
@@ -663,28 +809,49 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
663
809
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
664
810
|
"""
|
665
811
|
cancels an open order
|
812
|
+
|
813
|
+
https://www.independentreserve.com/features/api#CancelOrder
|
814
|
+
|
666
815
|
:param str id: order id
|
667
816
|
:param str symbol: unified symbol of the market the order was made in
|
668
817
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
669
818
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
670
819
|
"""
|
671
820
|
await self.load_markets()
|
672
|
-
request = {
|
821
|
+
request: dict = {
|
673
822
|
'orderGuid': id,
|
674
823
|
}
|
675
|
-
|
824
|
+
response = await self.privatePostCancelOrder(self.extend(request, params))
|
825
|
+
#
|
826
|
+
# {
|
827
|
+
# "AvgPrice": 455.48,
|
828
|
+
# "CreatedTimestampUtc": "2022-08-05T06:42:11.3032208Z",
|
829
|
+
# "OrderGuid": "719c495c-a39e-4884-93ac-280b37245037",
|
830
|
+
# "Price": 485.76,
|
831
|
+
# "PrimaryCurrencyCode": "Xbt",
|
832
|
+
# "ReservedAmount": 0.358,
|
833
|
+
# "SecondaryCurrencyCode": "Usd",
|
834
|
+
# "Status": "Cancelled",
|
835
|
+
# "Type": "LimitOffer",
|
836
|
+
# "VolumeFilled": 0,
|
837
|
+
# "VolumeOrdered": 0.358
|
838
|
+
# }
|
839
|
+
#
|
840
|
+
return self.parse_order(response)
|
676
841
|
|
677
|
-
async def fetch_deposit_address(self, code: str, params={}):
|
842
|
+
async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
|
678
843
|
"""
|
679
844
|
fetch the deposit address for a currency associated with self account
|
680
|
-
|
845
|
+
|
846
|
+
https://www.independentreserve.com/features/api#GetDigitalCurrencyDepositAddress
|
847
|
+
|
681
848
|
:param str code: unified currency code
|
682
849
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
683
850
|
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
|
684
851
|
"""
|
685
852
|
await self.load_markets()
|
686
853
|
currency = self.currency(code)
|
687
|
-
request = {
|
854
|
+
request: dict = {
|
688
855
|
'primaryCurrencyCode': currency['id'],
|
689
856
|
}
|
690
857
|
response = await self.privatePostGetDigitalCurrencyDepositAddress(self.extend(request, params))
|
@@ -698,7 +865,7 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
698
865
|
#
|
699
866
|
return self.parse_deposit_address(response)
|
700
867
|
|
701
|
-
def parse_deposit_address(self, depositAddress, currency: Currency = None):
|
868
|
+
def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
|
702
869
|
#
|
703
870
|
# {
|
704
871
|
# Tag: '3307446684',
|
@@ -712,9 +879,111 @@ class independentreserve(Exchange, ImplicitAPI):
|
|
712
879
|
return {
|
713
880
|
'info': depositAddress,
|
714
881
|
'currency': self.safe_string(currency, 'code'),
|
882
|
+
'network': None,
|
715
883
|
'address': address,
|
716
884
|
'tag': self.safe_string(depositAddress, 'Tag'),
|
885
|
+
}
|
886
|
+
|
887
|
+
async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
888
|
+
"""
|
889
|
+
make a withdrawal
|
890
|
+
|
891
|
+
https://www.independentreserve.com/features/api#WithdrawDigitalCurrency
|
892
|
+
|
893
|
+
:param str code: unified currency code
|
894
|
+
:param float amount: the amount to withdraw
|
895
|
+
:param str address: the address to withdraw to
|
896
|
+
:param str tag:
|
897
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
898
|
+
|
899
|
+
EXCHANGE SPECIFIC PARAMETERS
|
900
|
+
:param dict [params.comment]: withdrawal comment, should not exceed 500 characters
|
901
|
+
:returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
|
902
|
+
"""
|
903
|
+
tag, params = self.handle_withdraw_tag_and_params(tag, params)
|
904
|
+
await self.load_markets()
|
905
|
+
currency = self.currency(code)
|
906
|
+
request: dict = {
|
907
|
+
'primaryCurrencyCode': currency['id'],
|
908
|
+
'withdrawalAddress': address,
|
909
|
+
'amount': self.currency_to_precision(code, amount),
|
910
|
+
}
|
911
|
+
if tag is not None:
|
912
|
+
request['destinationTag'] = tag
|
913
|
+
networkCode = None
|
914
|
+
networkCode, params = self.handle_network_code_and_params(params)
|
915
|
+
if networkCode is not None:
|
916
|
+
raise BadRequest(self.id + ' withdraw() does not accept params["networkCode"]')
|
917
|
+
response = await self.privatePostWithdrawDigitalCurrency(self.extend(request, params))
|
918
|
+
#
|
919
|
+
# {
|
920
|
+
# "TransactionGuid": "dc932e19-562b-4c50-821e-a73fd048b93b",
|
921
|
+
# "PrimaryCurrencyCode": "Bch",
|
922
|
+
# "CreatedTimestampUtc": "2020-04-01T05:26:30.5093622+00:00",
|
923
|
+
# "Amount": {
|
924
|
+
# "Total": 0.1231,
|
925
|
+
# "Fee": 0.0001
|
926
|
+
# },
|
927
|
+
# "Destination": {
|
928
|
+
# "Address": "bc1qhpqxkjpvgkckw530yfmxyr53c94q8f4273a7ez",
|
929
|
+
# "Tag": null
|
930
|
+
# },
|
931
|
+
# "Status": "Pending",
|
932
|
+
# "Transaction": null
|
933
|
+
# }
|
934
|
+
#
|
935
|
+
return self.parse_transaction(response, currency)
|
936
|
+
|
937
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
938
|
+
#
|
939
|
+
# {
|
940
|
+
# "TransactionGuid": "dc932e19-562b-4c50-821e-a73fd048b93b",
|
941
|
+
# "PrimaryCurrencyCode": "Bch",
|
942
|
+
# "CreatedTimestampUtc": "2020-04-01T05:26:30.5093622+00:00",
|
943
|
+
# "Amount": {
|
944
|
+
# "Total": 0.1231,
|
945
|
+
# "Fee": 0.0001
|
946
|
+
# },
|
947
|
+
# "Destination": {
|
948
|
+
# "Address": "bc1qhpqxkjpvgkckw530yfmxyr53c94q8f4273a7ez",
|
949
|
+
# "Tag": null
|
950
|
+
# },
|
951
|
+
# "Status": "Pending",
|
952
|
+
# "Transaction": null
|
953
|
+
# }
|
954
|
+
#
|
955
|
+
amount = self.safe_dict(transaction, 'Amount')
|
956
|
+
destination = self.safe_dict(transaction, 'Destination')
|
957
|
+
currencyId = self.safe_string(transaction, 'PrimaryCurrencyCode')
|
958
|
+
datetime = self.safe_string(transaction, 'CreatedTimestampUtc')
|
959
|
+
address = self.safe_string(destination, 'Address')
|
960
|
+
tag = self.safe_string(destination, 'Tag')
|
961
|
+
code = self.safe_currency_code(currencyId, currency)
|
962
|
+
return {
|
963
|
+
'info': transaction,
|
964
|
+
'id': self.safe_string(transaction, 'TransactionGuid'),
|
965
|
+
'txid': None,
|
966
|
+
'type': 'withdraw',
|
967
|
+
'currency': code,
|
717
968
|
'network': None,
|
969
|
+
'amount': self.safe_number(amount, 'Total'),
|
970
|
+
'status': self.safe_string(transaction, 'Status'),
|
971
|
+
'timestamp': self.parse8601(datetime),
|
972
|
+
'datetime': datetime,
|
973
|
+
'address': address,
|
974
|
+
'addressFrom': None,
|
975
|
+
'addressTo': address,
|
976
|
+
'tag': tag,
|
977
|
+
'tagFrom': None,
|
978
|
+
'tagTo': tag,
|
979
|
+
'updated': None,
|
980
|
+
'comment': None,
|
981
|
+
'fee': {
|
982
|
+
'currency': code,
|
983
|
+
'cost': self.safe_number(amount, 'Fee'),
|
984
|
+
'rate': None,
|
985
|
+
},
|
986
|
+
'internal': False,
|
718
987
|
}
|
719
988
|
|
720
989
|
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|