Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/polkadex v2 #6558

Merged
merged 6 commits into from Sep 7, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
@@ -1,13 +1,12 @@
import asyncio
from copy import copy, deepcopy
from typing import TYPE_CHECKING, Any, Dict, List, Optional

from hummingbot.connector.exchange.polkadex import polkadex_constants as CONSTANTS
from hummingbot.connector.exchange.polkadex.polkadex_data_source import PolkadexDataSource
from hummingbot.connector.exchange.polkadex.polkadex_events import PolkadexOrderBookEvent
from hummingbot.core.data_type.order_book_message import OrderBookMessage, OrderBookMessageType
from hummingbot.core.data_type.order_book_message import OrderBookMessage
from hummingbot.core.data_type.order_book_tracker_data_source import OrderBookTrackerDataSource
from hummingbot.core.event.event_forwarder import EventForwarder
from hummingbot.core.event.events import OrderBookEvent
from hummingbot.core.web_assistant.ws_assistant import WSAssistant

if TYPE_CHECKING:
Expand Down Expand Up @@ -67,43 +66,23 @@ async def _order_book_snapshot(self, trading_pair: str) -> OrderBookMessage:
async def _parse_trade_message(self, raw_message: OrderBookMessage, message_queue: asyncio.Queue):
# In Polkadex 'raw_message' is not a raw message, but the OrderBookMessage with type Trade created
# by the data source

message_content = deepcopy(raw_message.content)
message_content["trading_pair"] = await self._connector.trading_pair_associated_to_exchange_symbol(
symbol=message_content["trading_pair"]
)

trade_message = OrderBookMessage(
message_type=OrderBookMessageType.TRADE,
content=message_content,
timestamp=raw_message.timestamp,
)
message_queue.put_nowait(trade_message)
message_queue.put_nowait(raw_message)

async def _parse_order_book_diff_message(self, raw_message: OrderBookMessage, message_queue: asyncio.Queue):
# In Polkadex 'raw_message' is not a raw message, but the OrderBookMessage with type Trade created
# by the data source
message_content = copy(raw_message.content)
message_content["trading_pair"] = await self._connector.trading_pair_associated_to_exchange_symbol(
symbol=message_content["trading_pair"]
)
diff_message = OrderBookMessage(
message_type=OrderBookMessageType.DIFF,
content=message_content,
timestamp=raw_message.timestamp,
)
message_queue.put_nowait(diff_message)
message_queue.put_nowait(raw_message)

def _configure_event_forwarders(self):
event_forwarder = EventForwarder(to_function=self._process_order_book_event)
self._forwarders.append(event_forwarder)
self._data_source.add_listener(
event_tag=PolkadexOrderBookEvent.OrderBookDataSourceUpdateEvent, listener=event_forwarder
event_tag=OrderBookEvent.OrderBookDataSourceUpdateEvent, listener=event_forwarder
)

event_forwarder = EventForwarder(to_function=self._process_public_trade_event)
self._forwarders.append(event_forwarder)
self._data_source.add_listener(event_tag=PolkadexOrderBookEvent.PublicTradeEvent, listener=event_forwarder)
self._data_source.add_listener(event_tag=OrderBookEvent.TradeEvent, listener=event_forwarder)

def _process_order_book_event(self, order_book_diff: OrderBookMessage):
self._message_queue[self._diff_messages_queue_key].put_nowait(order_book_diff)
Expand Down
35 changes: 15 additions & 20 deletions hummingbot/connector/exchange/polkadex/polkadex_constants.py
Expand Up @@ -10,15 +10,12 @@
CLIENT_ID_PREFIX = "HBOT"

DEFAULT_DOMAIN = ""
TESTNET_DOMAIN = "testnet"

GRAPHQL_ENDPOINTS = {
DEFAULT_DOMAIN: "https://gu5xqmhhcnfeveotzwhe6ohfba.appsync-api.eu-central-1.amazonaws.com/graphql",
TESTNET_DOMAIN: "https://kckpespz5bb2rmdnuxycz6e7he.appsync-api.eu-central-1.amazonaws.com/graphql",
DEFAULT_DOMAIN: "https://yx375ldozvcvthjk2nczch3fhq.appsync-api.eu-central-1.amazonaws.com/graphql",
}
BLOCKCHAIN_URLS = {
DEFAULT_DOMAIN: "wss://mainnet.polkadex.trade",
TESTNET_DOMAIN: "wss://blockchain.polkadex.trade",
DEFAULT_DOMAIN: "wss://polkadex.public.curie.radiumblock.co/ws",
}
POLKADEX_SS58_PREFIX = 88

Expand All @@ -32,10 +29,12 @@
FIND_USER_LIMIT_ID = "FindUser"
PUBLIC_TRADES_LIMIT_ID = "RecentTrades"
ALL_BALANCES_LIMIT_ID = "AllBalances"
ALL_FILLS_LIMIT_ID = "AllFills"
PLACE_ORDER_LIMIT_ID = "PlaceOrder"
CANCEL_ORDER_LIMIT_ID = "CancelOrder"
BATCH_ORDER_UPDATES_LIMIT_ID = "BatchOrderUpdates"
ORDER_UPDATE_LIMIT_ID = "OrderUpdate"
LIST_OPEN_ORDERS_LIMIT_ID = "ListOpenOrders"

NO_LIMIT = sys.maxsize

Expand Down Expand Up @@ -70,6 +69,11 @@
limit=NO_LIMIT,
time_interval=SECOND,
),
RateLimit(
limit_id=ALL_FILLS_LIMIT_ID,
limit=NO_LIMIT,
time_interval=SECOND,
),
RateLimit(
limit_id=PLACE_ORDER_LIMIT_ID,
limit=NO_LIMIT,
Expand All @@ -90,6 +94,11 @@
limit=NO_LIMIT,
time_interval=SECOND,
),
RateLimit(
limit_id=LIST_OPEN_ORDERS_LIMIT_ID,
limit=NO_LIMIT,
time_interval=SECOND,
),
]


Expand Down Expand Up @@ -119,28 +128,14 @@
["timestamp", "i64"],
],
},
"CancelOrderPayload": {"type": "struct", "type_mapping": [["id", "String"]]},
"TradingPair": {
"type": "struct",
"type_mapping": [
["base_asset", "AssetId"],
["quote_asset", "AssetId"],
],
},
"order_id": "H256",
"OrderSide": {
"type": "enum",
"type_mapping": [
["Ask", "Null"],
["Bid", "Null"],
],
},
"AssetId": {
"type": "enum",
"type_mapping": [
["asset", "u128"],
["polkadex", "Null"],
],
},
"OrderType": {
"type": "enum",
"type_mapping": [
Expand Down