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
@@ -4,11 +4,12 @@
|
|
4
4
|
# https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
5
5
|
|
6
6
|
from ccxt.async_support.base.exchange import Exchange
|
7
|
-
from ccxt.abstract.
|
7
|
+
from ccxt.abstract.coinbaseexchange import ImplicitAPI
|
8
8
|
import hashlib
|
9
|
-
from ccxt.base.types import Account, Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
|
9
|
+
from ccxt.base.types import Account, Balances, Currencies, Currency, Int, LedgerEntry, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction
|
10
10
|
from typing import List
|
11
11
|
from ccxt.base.errors import ExchangeError
|
12
|
+
from ccxt.base.errors import AuthenticationError
|
12
13
|
from ccxt.base.errors import PermissionDenied
|
13
14
|
from ccxt.base.errors import ArgumentsRequired
|
14
15
|
from ccxt.base.errors import InsufficientFunds
|
@@ -17,17 +18,16 @@ from ccxt.base.errors import InvalidOrder
|
|
17
18
|
from ccxt.base.errors import OrderNotFound
|
18
19
|
from ccxt.base.errors import RateLimitExceeded
|
19
20
|
from ccxt.base.errors import OnMaintenance
|
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
|
|
24
24
|
|
25
|
-
class
|
25
|
+
class coinbaseexchange(Exchange, ImplicitAPI):
|
26
26
|
|
27
27
|
def describe(self):
|
28
|
-
return self.deep_extend(super(
|
29
|
-
'id': '
|
30
|
-
'name': 'Coinbase
|
28
|
+
return self.deep_extend(super(coinbaseexchange, self).describe(), {
|
29
|
+
'id': 'coinbaseexchange',
|
30
|
+
'name': 'Coinbase Exchange',
|
31
31
|
'countries': ['US'],
|
32
32
|
'rateLimit': 100,
|
33
33
|
'userAgent': self.userAgents['chrome'],
|
@@ -53,7 +53,10 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
53
53
|
'fetchDepositAddress': False, # the exchange does not have self method, only createDepositAddress, see https://github.com/ccxt/ccxt/pull/7405
|
54
54
|
'fetchDeposits': True,
|
55
55
|
'fetchDepositsWithdrawals': True,
|
56
|
+
'fetchFundingHistory': False,
|
56
57
|
'fetchFundingRate': False,
|
58
|
+
'fetchFundingRateHistory': False,
|
59
|
+
'fetchFundingRates': False,
|
57
60
|
'fetchLedger': True,
|
58
61
|
'fetchMarginMode': False,
|
59
62
|
'fetchMarkets': True,
|
@@ -64,7 +67,13 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
64
67
|
'fetchOrderBook': True,
|
65
68
|
'fetchOrders': True,
|
66
69
|
'fetchOrderTrades': True,
|
70
|
+
'fetchPosition': False,
|
71
|
+
'fetchPositionHistory': False,
|
67
72
|
'fetchPositionMode': False,
|
73
|
+
'fetchPositions': False,
|
74
|
+
'fetchPositionsForSymbol': False,
|
75
|
+
'fetchPositionsHistory': False,
|
76
|
+
'fetchPositionsRisk': False,
|
68
77
|
'fetchTicker': True,
|
69
78
|
'fetchTickers': True,
|
70
79
|
'fetchTime': True,
|
@@ -83,19 +92,19 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
83
92
|
'6h': 21600,
|
84
93
|
'1d': 86400,
|
85
94
|
},
|
86
|
-
'hostname': '
|
95
|
+
'hostname': 'exchange.coinbase.com',
|
87
96
|
'urls': {
|
88
97
|
'test': {
|
89
|
-
'public': 'https://api-public.sandbox.
|
90
|
-
'private': 'https://api-public.sandbox.
|
98
|
+
'public': 'https://api-public.sandbox.exchange.coinbase.com',
|
99
|
+
'private': 'https://api-public.sandbox.exchange.coinbase.com',
|
91
100
|
},
|
92
|
-
'logo': 'https://
|
101
|
+
'logo': 'https://github.com/ccxt/ccxt/assets/43336371/34a65553-88aa-4a38-a714-064bd228b97e',
|
93
102
|
'api': {
|
94
103
|
'public': 'https://api.{hostname}',
|
95
104
|
'private': 'https://api.{hostname}',
|
96
105
|
},
|
97
|
-
'www': 'https://
|
98
|
-
'doc': 'https://docs.
|
106
|
+
'www': 'https://coinbase.com/',
|
107
|
+
'doc': 'https://docs.cloud.coinbase.com/exchange/docs/',
|
99
108
|
'fees': [
|
100
109
|
'https://docs.pro.coinbase.com/#fees',
|
101
110
|
'https://support.pro.coinbase.com/customer/en/portal/articles/2945310-fees',
|
@@ -118,7 +127,8 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
118
127
|
'products/{id}/ticker',
|
119
128
|
'products/{id}/trades',
|
120
129
|
'time',
|
121
|
-
'products/spark-lines', # experimental
|
130
|
+
'products/spark-lines', # experimental,
|
131
|
+
'products/volume-summary',
|
122
132
|
],
|
123
133
|
},
|
124
134
|
'private': {
|
@@ -215,6 +225,82 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
215
225
|
},
|
216
226
|
},
|
217
227
|
},
|
228
|
+
'features': {
|
229
|
+
'default': {
|
230
|
+
'sandbox': True,
|
231
|
+
'createOrder': {
|
232
|
+
'marginMode': True,
|
233
|
+
'triggerPrice': True,
|
234
|
+
'triggerPriceType': None,
|
235
|
+
'triggerDirection': False,
|
236
|
+
'stopLossPrice': False, # todo
|
237
|
+
'takeProfitPrice': False, # todo
|
238
|
+
'attachedStopLossTakeProfit': None,
|
239
|
+
'timeInForce': {
|
240
|
+
'IOC': True,
|
241
|
+
'FOK': True,
|
242
|
+
'PO': True,
|
243
|
+
'GTD': True,
|
244
|
+
},
|
245
|
+
'hedged': False,
|
246
|
+
'trailing': False,
|
247
|
+
'leverage': False,
|
248
|
+
'marketBuyByCost': False,
|
249
|
+
'marketBuyRequiresPrice': False,
|
250
|
+
'selfTradePrevention': False,
|
251
|
+
'iceberg': True, # todo: implement
|
252
|
+
},
|
253
|
+
'createOrders': None,
|
254
|
+
'fetchMyTrades': {
|
255
|
+
'marginMode': False,
|
256
|
+
'limit': 100,
|
257
|
+
'daysBack': 100000,
|
258
|
+
'untilDays': 100000,
|
259
|
+
},
|
260
|
+
'fetchOrder': {
|
261
|
+
'marginMode': False,
|
262
|
+
'trigger': False,
|
263
|
+
'trailing': False,
|
264
|
+
},
|
265
|
+
'fetchOpenOrders': {
|
266
|
+
'marginMode': False,
|
267
|
+
'limit': 100,
|
268
|
+
'trigger': False,
|
269
|
+
'trailing': False,
|
270
|
+
},
|
271
|
+
'fetchOrders': {
|
272
|
+
'marginMode': False,
|
273
|
+
'limit': 100,
|
274
|
+
'daysBack': 100000,
|
275
|
+
'untilDays': 100000,
|
276
|
+
'trigger': False,
|
277
|
+
'trailing': False,
|
278
|
+
},
|
279
|
+
'fetchClosedOrders': {
|
280
|
+
'marginMode': False,
|
281
|
+
'limit': 100,
|
282
|
+
'daysBack': 100000,
|
283
|
+
'daysBackCanceled': 1,
|
284
|
+
'untilDays': 100000,
|
285
|
+
'trigger': False,
|
286
|
+
'trailing': False,
|
287
|
+
},
|
288
|
+
'fetchOHLCV': {
|
289
|
+
'limit': 300,
|
290
|
+
},
|
291
|
+
},
|
292
|
+
'spot': {
|
293
|
+
'extends': 'default',
|
294
|
+
},
|
295
|
+
'swap': {
|
296
|
+
'linear': None,
|
297
|
+
'inverse': None,
|
298
|
+
},
|
299
|
+
'future': {
|
300
|
+
'linear': None,
|
301
|
+
'inverse': None,
|
302
|
+
},
|
303
|
+
},
|
218
304
|
'exceptions': {
|
219
305
|
'exact': {
|
220
306
|
'Insufficient funds': InsufficientFunds,
|
@@ -239,10 +325,12 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
239
325
|
},
|
240
326
|
})
|
241
327
|
|
242
|
-
async def fetch_currencies(self, params={}):
|
328
|
+
async def fetch_currencies(self, params={}) -> Currencies:
|
243
329
|
"""
|
244
330
|
fetches all available currencies on an exchange
|
245
|
-
|
331
|
+
|
332
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getcurrencies
|
333
|
+
|
246
334
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
247
335
|
:returns dict: an associative dictionary of currencies
|
248
336
|
"""
|
@@ -273,7 +361,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
273
361
|
# }
|
274
362
|
# ]
|
275
363
|
#
|
276
|
-
result = {}
|
364
|
+
result: dict = {}
|
277
365
|
for i in range(0, len(response)):
|
278
366
|
currency = response[i]
|
279
367
|
id = self.safe_string(currency, 'id')
|
@@ -307,10 +395,12 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
307
395
|
}
|
308
396
|
return result
|
309
397
|
|
310
|
-
async def fetch_markets(self, params={}):
|
398
|
+
async def fetch_markets(self, params={}) -> List[Market]:
|
311
399
|
"""
|
312
|
-
retrieves data on all markets for
|
313
|
-
|
400
|
+
retrieves data on all markets for coinbaseexchange
|
401
|
+
|
402
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getproducts
|
403
|
+
|
314
404
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
315
405
|
:returns dict[]: an array of objects representing market data
|
316
406
|
"""
|
@@ -428,7 +518,9 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
428
518
|
async def fetch_accounts(self, params={}) -> List[Account]:
|
429
519
|
"""
|
430
520
|
fetch all the accounts associated with a profile
|
431
|
-
|
521
|
+
|
522
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getaccounts
|
523
|
+
|
432
524
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
433
525
|
:returns dict: a dictionary of `account structures <https://docs.ccxt.com/#/?id=account-structure>` indexed by the account type
|
434
526
|
"""
|
@@ -476,7 +568,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
476
568
|
}
|
477
569
|
|
478
570
|
def parse_balance(self, response) -> Balances:
|
479
|
-
result = {'info': response}
|
571
|
+
result: dict = {'info': response}
|
480
572
|
for i in range(0, len(response)):
|
481
573
|
balance = response[i]
|
482
574
|
currencyId = self.safe_string(balance, 'currency')
|
@@ -491,7 +583,9 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
491
583
|
async def fetch_balance(self, params={}) -> Balances:
|
492
584
|
"""
|
493
585
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
494
|
-
|
586
|
+
|
587
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getaccounts
|
588
|
+
|
495
589
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
496
590
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
497
591
|
"""
|
@@ -501,7 +595,9 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
501
595
|
|
502
596
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
503
597
|
"""
|
504
|
-
|
598
|
+
|
599
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getproductbook
|
600
|
+
|
505
601
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
506
602
|
:param str symbol: unified symbol of the market to fetch the order book for
|
507
603
|
:param int [limit]: the maximum amount of order book entries to return
|
@@ -512,7 +608,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
512
608
|
# level 1 - only the best bid and ask
|
513
609
|
# level 2 - top 50 bids and asks(aggregated)
|
514
610
|
# level 3 - full order book(non aggregated)
|
515
|
-
request = {
|
611
|
+
request: dict = {
|
516
612
|
'id': self.market_id(symbol),
|
517
613
|
'level': 2, # 1 best bidask, 2 aggregated, 3 full
|
518
614
|
}
|
@@ -536,7 +632,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
536
632
|
orderbook['nonce'] = self.safe_integer(response, 'sequence')
|
537
633
|
return orderbook
|
538
634
|
|
539
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
635
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
540
636
|
#
|
541
637
|
# fetchTickers
|
542
638
|
#
|
@@ -618,14 +714,16 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
618
714
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
619
715
|
"""
|
620
716
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
621
|
-
|
717
|
+
|
718
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getproduct
|
719
|
+
|
622
720
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
623
721
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
624
722
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
625
723
|
"""
|
626
724
|
await self.load_markets()
|
627
725
|
symbols = self.market_symbols(symbols)
|
628
|
-
request = {}
|
726
|
+
request: dict = {}
|
629
727
|
response = await self.publicGetProductsSparkLines(self.extend(request, params))
|
630
728
|
#
|
631
729
|
# {
|
@@ -647,7 +745,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
647
745
|
# ]
|
648
746
|
# }
|
649
747
|
#
|
650
|
-
result = {}
|
748
|
+
result: dict = {}
|
651
749
|
marketIds = list(response.keys())
|
652
750
|
delimiter = '-'
|
653
751
|
for i in range(0, len(marketIds)):
|
@@ -661,7 +759,9 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
661
759
|
|
662
760
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
663
761
|
"""
|
664
|
-
|
762
|
+
|
763
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getproductticker
|
764
|
+
|
665
765
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
666
766
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
667
767
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -669,7 +769,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
669
769
|
"""
|
670
770
|
await self.load_markets()
|
671
771
|
market = self.market(symbol)
|
672
|
-
request = {
|
772
|
+
request: dict = {
|
673
773
|
'id': market['id'],
|
674
774
|
}
|
675
775
|
# publicGetProductsIdTicker or publicGetProductsIdStats
|
@@ -699,7 +799,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
699
799
|
#
|
700
800
|
return self.parse_ticker(response, market)
|
701
801
|
|
702
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
802
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
703
803
|
#
|
704
804
|
# {
|
705
805
|
# "type": "match",
|
@@ -770,7 +870,9 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
770
870
|
|
771
871
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
772
872
|
"""
|
773
|
-
|
873
|
+
|
874
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getfills
|
875
|
+
|
774
876
|
fetch all trades made by the user
|
775
877
|
:param str symbol: unified market symbol
|
776
878
|
:param int [since]: the earliest time in ms to fetch trades for
|
@@ -788,7 +890,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
788
890
|
return await self.fetch_paginated_call_dynamic('fetchMyTrades', symbol, since, limit, params, 100)
|
789
891
|
await self.load_markets()
|
790
892
|
market = self.market(symbol)
|
791
|
-
request = {
|
893
|
+
request: dict = {
|
792
894
|
'product_id': market['id'],
|
793
895
|
}
|
794
896
|
if limit is not None:
|
@@ -804,7 +906,9 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
804
906
|
|
805
907
|
async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
806
908
|
"""
|
807
|
-
|
909
|
+
|
910
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getproducttrades
|
911
|
+
|
808
912
|
get the list of most recent trades for a particular symbol
|
809
913
|
:param str symbol: unified symbol of the market to fetch trades for
|
810
914
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
@@ -814,7 +918,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
814
918
|
"""
|
815
919
|
await self.load_markets()
|
816
920
|
market = self.market(symbol)
|
817
|
-
request = {
|
921
|
+
request: dict = {
|
818
922
|
'id': market['id'], # fixes issue #2
|
819
923
|
}
|
820
924
|
if limit is not None:
|
@@ -833,10 +937,12 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
833
937
|
#
|
834
938
|
return self.parse_trades(response, market, since, limit)
|
835
939
|
|
836
|
-
async def fetch_trading_fees(self, params={}):
|
940
|
+
async def fetch_trading_fees(self, params={}) -> TradingFees:
|
837
941
|
"""
|
838
942
|
fetch the trading fees for multiple markets
|
839
|
-
|
943
|
+
|
944
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getfees
|
945
|
+
|
840
946
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
841
947
|
:returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
|
842
948
|
"""
|
@@ -851,7 +957,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
851
957
|
#
|
852
958
|
maker = self.safe_number(response, 'maker_fee_rate')
|
853
959
|
taker = self.safe_number(response, 'taker_fee_rate')
|
854
|
-
result = {}
|
960
|
+
result: dict = {}
|
855
961
|
for i in range(0, len(self.symbols)):
|
856
962
|
symbol = self.symbols[i]
|
857
963
|
result[symbol] = {
|
@@ -886,7 +992,9 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
886
992
|
|
887
993
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
888
994
|
"""
|
889
|
-
|
995
|
+
|
996
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getproductcandles
|
997
|
+
|
890
998
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
891
999
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
892
1000
|
:param str timeframe: the length of time each candle represents
|
@@ -904,7 +1012,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
904
1012
|
return await self.fetch_paginated_call_deterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 300)
|
905
1013
|
market = self.market(symbol)
|
906
1014
|
parsedTimeframe = self.safe_integer(self.timeframes, timeframe)
|
907
|
-
request = {
|
1015
|
+
request: dict = {
|
908
1016
|
'id': market['id'],
|
909
1017
|
}
|
910
1018
|
if parsedTimeframe is not None:
|
@@ -953,8 +1061,8 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
953
1061
|
#
|
954
1062
|
return self.safe_timestamp(response, 'epoch')
|
955
1063
|
|
956
|
-
def parse_order_status(self, status):
|
957
|
-
statuses = {
|
1064
|
+
def parse_order_status(self, status: Str):
|
1065
|
+
statuses: dict = {
|
958
1066
|
'pending': 'open',
|
959
1067
|
'active': 'open',
|
960
1068
|
'open': 'open',
|
@@ -964,7 +1072,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
964
1072
|
}
|
965
1073
|
return self.safe_string(statuses, status, status)
|
966
1074
|
|
967
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
1075
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
968
1076
|
#
|
969
1077
|
# createOrder
|
970
1078
|
#
|
@@ -1010,7 +1118,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1010
1118
|
side = self.safe_string(order, 'side')
|
1011
1119
|
timeInForce = self.safe_string(order, 'time_in_force')
|
1012
1120
|
postOnly = self.safe_value(order, 'post_only')
|
1013
|
-
|
1121
|
+
triggerPrice = self.safe_number(order, 'stop_price')
|
1014
1122
|
clientOrderId = self.safe_string(order, 'client_oid')
|
1015
1123
|
return self.safe_order({
|
1016
1124
|
'id': id,
|
@@ -1026,8 +1134,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1026
1134
|
'postOnly': postOnly,
|
1027
1135
|
'side': side,
|
1028
1136
|
'price': price,
|
1029
|
-
'
|
1030
|
-
'triggerPrice': stopPrice,
|
1137
|
+
'triggerPrice': triggerPrice,
|
1031
1138
|
'cost': cost,
|
1032
1139
|
'amount': amount,
|
1033
1140
|
'filled': filled,
|
@@ -1039,14 +1146,17 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1039
1146
|
|
1040
1147
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
1041
1148
|
"""
|
1042
|
-
|
1149
|
+
|
1150
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getorder
|
1151
|
+
|
1043
1152
|
fetches information on an order made by the user
|
1044
|
-
:param str
|
1153
|
+
:param str id: the order id
|
1154
|
+
:param str symbol: not used by coinbaseexchange fetchOrder
|
1045
1155
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1046
1156
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1047
1157
|
"""
|
1048
1158
|
await self.load_markets()
|
1049
|
-
request = {}
|
1159
|
+
request: dict = {}
|
1050
1160
|
clientOrderId = self.safe_string_2(params, 'clientOrderId', 'client_oid')
|
1051
1161
|
method = None
|
1052
1162
|
if clientOrderId is None:
|
@@ -1073,7 +1183,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1073
1183
|
market = None
|
1074
1184
|
if symbol is not None:
|
1075
1185
|
market = self.market(symbol)
|
1076
|
-
request = {
|
1186
|
+
request: dict = {
|
1077
1187
|
'order_id': id,
|
1078
1188
|
}
|
1079
1189
|
response = await self.privateGetFills(self.extend(request, params))
|
@@ -1081,7 +1191,9 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1081
1191
|
|
1082
1192
|
async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1083
1193
|
"""
|
1084
|
-
|
1194
|
+
|
1195
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getorders
|
1196
|
+
|
1085
1197
|
fetches information on multiple orders made by the user
|
1086
1198
|
:param str symbol: unified market symbol of the market orders were made in
|
1087
1199
|
:param int [since]: the earliest time in ms to fetch orders for
|
@@ -1090,14 +1202,16 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1090
1202
|
:param int [params.until]: the latest time in ms to fetch open orders for
|
1091
1203
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1092
1204
|
"""
|
1093
|
-
request = {
|
1205
|
+
request: dict = {
|
1094
1206
|
'status': 'all',
|
1095
1207
|
}
|
1096
1208
|
return await self.fetch_open_orders(symbol, since, limit, self.extend(request, params))
|
1097
1209
|
|
1098
1210
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1099
1211
|
"""
|
1100
|
-
|
1212
|
+
|
1213
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getorders
|
1214
|
+
|
1101
1215
|
fetch all unfilled currently open orders
|
1102
1216
|
:param str symbol: unified market symbol
|
1103
1217
|
:param int [since]: the earliest time in ms to fetch open orders for
|
@@ -1112,7 +1226,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1112
1226
|
paginate, params = self.handle_option_and_params(params, 'fetchOpenOrders', 'paginate')
|
1113
1227
|
if paginate:
|
1114
1228
|
return await self.fetch_paginated_call_dynamic('fetchOpenOrders', symbol, since, limit, params, 100)
|
1115
|
-
request = {}
|
1229
|
+
request: dict = {}
|
1116
1230
|
market = None
|
1117
1231
|
if symbol is not None:
|
1118
1232
|
market = self.market(symbol)
|
@@ -1130,7 +1244,9 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1130
1244
|
|
1131
1245
|
async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1132
1246
|
"""
|
1133
|
-
|
1247
|
+
|
1248
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getorders
|
1249
|
+
|
1134
1250
|
fetches information on multiple closed orders made by the user
|
1135
1251
|
:param str symbol: unified market symbol of the market orders were made in
|
1136
1252
|
:param int [since]: the earliest time in ms to fetch orders for
|
@@ -1139,26 +1255,28 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1139
1255
|
:param int [params.until]: the latest time in ms to fetch open orders for
|
1140
1256
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1141
1257
|
"""
|
1142
|
-
request = {
|
1258
|
+
request: dict = {
|
1143
1259
|
'status': 'done',
|
1144
1260
|
}
|
1145
1261
|
return await self.fetch_open_orders(symbol, since, limit, self.extend(request, params))
|
1146
1262
|
|
1147
1263
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1148
1264
|
"""
|
1149
|
-
|
1265
|
+
|
1266
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_postorders
|
1267
|
+
|
1150
1268
|
create a trade order
|
1151
1269
|
:param str symbol: unified symbol of the market to create an order in
|
1152
1270
|
:param str type: 'market' or 'limit'
|
1153
1271
|
:param str side: 'buy' or 'sell'
|
1154
1272
|
:param float amount: how much of currency you want to trade in units of base currency
|
1155
|
-
:param float [price]: the price at which the order is to be
|
1273
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1156
1274
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1157
1275
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1158
1276
|
"""
|
1159
1277
|
await self.load_markets()
|
1160
1278
|
market = self.market(symbol)
|
1161
|
-
request = {
|
1279
|
+
request: dict = {
|
1162
1280
|
# common params --------------------------------------------------
|
1163
1281
|
# 'client_oid': clientOrderId,
|
1164
1282
|
'type': type,
|
@@ -1181,9 +1299,9 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1181
1299
|
clientOrderId = self.safe_string_2(params, 'clientOrderId', 'client_oid')
|
1182
1300
|
if clientOrderId is not None:
|
1183
1301
|
request['client_oid'] = clientOrderId
|
1184
|
-
|
1185
|
-
if
|
1186
|
-
request['stop_price'] = self.price_to_precision(symbol,
|
1302
|
+
triggerPrice = self.safe_number_n(params, ['stopPrice', 'stop_price', 'triggerPrice'])
|
1303
|
+
if triggerPrice is not None:
|
1304
|
+
request['stop_price'] = self.price_to_precision(symbol, triggerPrice)
|
1187
1305
|
timeInForce = self.safe_string_2(params, 'timeInForce', 'time_in_force')
|
1188
1306
|
if timeInForce is not None:
|
1189
1307
|
request['time_in_force'] = timeInForce
|
@@ -1229,7 +1347,9 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1229
1347
|
|
1230
1348
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
1231
1349
|
"""
|
1232
|
-
|
1350
|
+
|
1351
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_deleteorder
|
1352
|
+
|
1233
1353
|
cancels an open order
|
1234
1354
|
:param str id: order id
|
1235
1355
|
:param str symbol: unified symbol of the market the order was made in
|
@@ -1237,7 +1357,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1237
1357
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1238
1358
|
"""
|
1239
1359
|
await self.load_markets()
|
1240
|
-
request = {
|
1360
|
+
request: dict = {
|
1241
1361
|
# 'product_id': market['id'], # the request will be more performant if you include it
|
1242
1362
|
}
|
1243
1363
|
clientOrderId = self.safe_string_2(params, 'clientOrderId', 'client_oid')
|
@@ -1257,14 +1377,16 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1257
1377
|
|
1258
1378
|
async def cancel_all_orders(self, symbol: Str = None, params={}):
|
1259
1379
|
"""
|
1260
|
-
|
1380
|
+
|
1381
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_deleteorders
|
1382
|
+
|
1261
1383
|
cancel all open orders
|
1262
1384
|
:param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
|
1263
1385
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1264
1386
|
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1265
1387
|
"""
|
1266
1388
|
await self.load_markets()
|
1267
|
-
request = {}
|
1389
|
+
request: dict = {}
|
1268
1390
|
market = None
|
1269
1391
|
if symbol is not None:
|
1270
1392
|
market = self.market(symbol)
|
@@ -1274,11 +1396,13 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1274
1396
|
async def fetch_payment_methods(self, params={}):
|
1275
1397
|
return await self.privateGetPaymentMethods(params)
|
1276
1398
|
|
1277
|
-
async def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
1399
|
+
async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
1278
1400
|
"""
|
1279
1401
|
make a withdrawal
|
1280
|
-
|
1281
|
-
|
1402
|
+
|
1403
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_postwithdrawpaymentmethod
|
1404
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_postwithdrawcoinbaseaccount
|
1405
|
+
|
1282
1406
|
:param str code: unified currency code
|
1283
1407
|
:param float amount: the amount to withdraw
|
1284
1408
|
:param str address: the address to withdraw to
|
@@ -1290,7 +1414,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1290
1414
|
self.check_address(address)
|
1291
1415
|
await self.load_markets()
|
1292
1416
|
currency = self.currency(code)
|
1293
|
-
request = {
|
1417
|
+
request: dict = {
|
1294
1418
|
'currency': currency['id'],
|
1295
1419
|
'amount': amount,
|
1296
1420
|
}
|
@@ -1310,7 +1434,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1310
1434
|
return self.parse_transaction(response, currency)
|
1311
1435
|
|
1312
1436
|
def parse_ledger_entry_type(self, type):
|
1313
|
-
types = {
|
1437
|
+
types: dict = {
|
1314
1438
|
'transfer': 'transfer', # Funds moved between portfolios
|
1315
1439
|
'match': 'trade', # Funds moved result of a trade
|
1316
1440
|
'fee': 'fee', # Fee result of a trade
|
@@ -1319,7 +1443,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1319
1443
|
}
|
1320
1444
|
return self.safe_string(types, type, type)
|
1321
1445
|
|
1322
|
-
def parse_ledger_entry(self, item, currency: Currency = None):
|
1446
|
+
def parse_ledger_entry(self, item: dict, currency: Currency = None) -> LedgerEntry:
|
1323
1447
|
# {
|
1324
1448
|
# "id": "12087495079",
|
1325
1449
|
# "amount": "-0.0100000000000000",
|
@@ -1371,34 +1495,36 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1371
1495
|
else:
|
1372
1496
|
referenceId = self.safe_string(details, 'order_id')
|
1373
1497
|
status = 'ok'
|
1374
|
-
return {
|
1498
|
+
return self.safe_ledger_entry({
|
1499
|
+
'info': item,
|
1375
1500
|
'id': id,
|
1376
|
-
'
|
1501
|
+
'timestamp': timestamp,
|
1502
|
+
'datetime': self.iso8601(timestamp),
|
1503
|
+
'direction': direction,
|
1377
1504
|
'account': account,
|
1378
1505
|
'referenceAccount': referenceAccount,
|
1379
1506
|
'referenceId': referenceId,
|
1380
|
-
'
|
1507
|
+
'type': type,
|
1508
|
+
'currency': code,
|
1381
1509
|
'amount': amount,
|
1382
1510
|
'before': before,
|
1383
1511
|
'after': after,
|
1512
|
+
'status': status,
|
1384
1513
|
'fee': None,
|
1385
|
-
|
1386
|
-
'timestamp': timestamp,
|
1387
|
-
'datetime': self.iso8601(timestamp),
|
1388
|
-
'type': type,
|
1389
|
-
'info': item,
|
1390
|
-
}
|
1514
|
+
}, currency)
|
1391
1515
|
|
1392
|
-
async def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
1516
|
+
async def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
|
1393
1517
|
"""
|
1394
|
-
|
1395
|
-
|
1518
|
+
fetch the history of changes, actions done by the user or operations that altered the balance of the user
|
1519
|
+
|
1520
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getaccountledger
|
1521
|
+
|
1396
1522
|
:param str code: unified currency code, default is None
|
1397
1523
|
:param int [since]: timestamp in ms of the earliest ledger entry, default is None
|
1398
|
-
:param int [limit]: max number of ledger
|
1524
|
+
:param int [limit]: max number of ledger entries to return, default is None
|
1399
1525
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1400
1526
|
:param int [params.until]: the latest time in ms to fetch trades for
|
1401
|
-
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger
|
1527
|
+
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
|
1402
1528
|
"""
|
1403
1529
|
# https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getaccountledger
|
1404
1530
|
if code is None:
|
@@ -1410,7 +1536,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1410
1536
|
account = self.safe_value(accountsByCurrencyCode, code)
|
1411
1537
|
if account is None:
|
1412
1538
|
raise ExchangeError(self.id + ' fetchLedger() could not find account id for ' + code)
|
1413
|
-
request = {
|
1539
|
+
request: dict = {
|
1414
1540
|
'id': account['id'],
|
1415
1541
|
# 'start_date': self.iso8601(since),
|
1416
1542
|
# 'end_date': self.iso8601(self.milliseconds()),
|
@@ -1435,8 +1561,10 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1435
1561
|
async def fetch_deposits_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
1436
1562
|
"""
|
1437
1563
|
fetch history of deposits and withdrawals
|
1438
|
-
|
1439
|
-
|
1564
|
+
|
1565
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_gettransfers
|
1566
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getaccounttransfers
|
1567
|
+
|
1440
1568
|
:param str [code]: unified currency code for the currency of the deposit/withdrawals, default is None
|
1441
1569
|
:param int [since]: timestamp in ms of the earliest deposit/withdrawal, default is None
|
1442
1570
|
:param int [limit]: max number of deposit/withdrawals to return, default is None
|
@@ -1456,7 +1584,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1456
1584
|
if account is None:
|
1457
1585
|
raise ExchangeError(self.id + ' fetchDepositsWithdrawals() could not find account id for ' + code)
|
1458
1586
|
id = account['id']
|
1459
|
-
request = {}
|
1587
|
+
request: dict = {}
|
1460
1588
|
if id is not None:
|
1461
1589
|
request['id'] = id
|
1462
1590
|
if limit is not None:
|
@@ -1532,8 +1660,10 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1532
1660
|
async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
1533
1661
|
"""
|
1534
1662
|
fetch all deposits made to an account
|
1535
|
-
|
1536
|
-
|
1663
|
+
|
1664
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_gettransfers
|
1665
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getaccounttransfers
|
1666
|
+
|
1537
1667
|
:param str code: unified currency code
|
1538
1668
|
:param int [since]: the earliest time in ms to fetch deposits for
|
1539
1669
|
:param int [limit]: the maximum number of deposits structures to retrieve
|
@@ -1545,8 +1675,10 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1545
1675
|
async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
1546
1676
|
"""
|
1547
1677
|
fetch all withdrawals made from an account
|
1548
|
-
|
1549
|
-
|
1678
|
+
|
1679
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_gettransfers
|
1680
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_getaccounttransfers
|
1681
|
+
|
1550
1682
|
:param str code: unified currency code
|
1551
1683
|
:param int [since]: the earliest time in ms to fetch withdrawals for
|
1552
1684
|
:param int [limit]: the maximum number of withdrawals structures to retrieve
|
@@ -1568,7 +1700,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1568
1700
|
else:
|
1569
1701
|
return 'pending'
|
1570
1702
|
|
1571
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
1703
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
1572
1704
|
#
|
1573
1705
|
# privateGetTransfers
|
1574
1706
|
#
|
@@ -1648,7 +1780,9 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1648
1780
|
async def create_deposit_address(self, code: str, params={}):
|
1649
1781
|
"""
|
1650
1782
|
create a currency deposit address
|
1651
|
-
|
1783
|
+
|
1784
|
+
https://docs.cloud.coinbase.com/exchange/reference/exchangerestapi_postcoinbaseaccountaddresses
|
1785
|
+
|
1652
1786
|
:param str code: unified currency code of the currency for the deposit address
|
1653
1787
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1654
1788
|
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
|
@@ -1665,7 +1799,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1665
1799
|
if account is None:
|
1666
1800
|
# eslint-disable-next-line quotes
|
1667
1801
|
raise InvalidAddress(self.id + " createDepositAddress() could not find currency code " + code + " with id = " + currencyId + " in self.options['coinbaseAccountsByCurrencyId']")
|
1668
|
-
request = {
|
1802
|
+
request: dict = {
|
1669
1803
|
'id': account['id'],
|
1670
1804
|
}
|
1671
1805
|
response = await self.privatePostCoinbaseAccountsIdAddresses(self.extend(request, params))
|
@@ -1709,7 +1843,7 @@ class coinbasepro(Exchange, ImplicitAPI):
|
|
1709
1843
|
}
|
1710
1844
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
1711
1845
|
|
1712
|
-
def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
1846
|
+
def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
1713
1847
|
if (code == 400) or (code == 404):
|
1714
1848
|
if body[0] == '{':
|
1715
1849
|
message = self.safe_string(response, 'message')
|