Skip to content

Commit 059f890

Browse files
authored
feat(hip-3-pusher): Support SEDA pass-through field types (#3460)
1 parent fe4808e commit 059f890

5 files changed

Lines changed: 36 additions & 2 deletions

File tree

apps/hip-3-pusher/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "hip-3-pusher"
3-
version = "0.2.10"
3+
version = "0.2.11"
44
description = "Hyperliquid HIP-3 market oracle pusher"
55
readme = "README.md"
66
requires-python = "==3.13.*"

apps/hip-3-pusher/src/pusher/main.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ async def main() -> None:
6464
price_state.seda_state,
6565
price_state.seda_last_state,
6666
price_state.seda_ema_state,
67+
price_state.seda_oracle_state,
68+
price_state.seda_mark_state,
69+
price_state.seda_external_state,
6770
)
6871
user_limit_listener = UserLimitListener(
6972
config, metrics, publisher.user_limit_address

apps/hip-3-pusher/src/pusher/price_state.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,9 @@ class PriceState:
122122
SEDA = "seda"
123123
SEDA_LAST = "seda_last"
124124
SEDA_EMA = "seda_ema"
125+
SEDA_ORACLE = "seda_oracle"
126+
SEDA_MARK = "seda_mark"
127+
SEDA_EXTERNAL = "seda_external"
125128

126129
def __init__(self, config: Config) -> None:
127130
self.market_name = config.hyperliquid.market_name
@@ -138,6 +141,9 @@ def __init__(self, config: Config) -> None:
138141
self.seda_state = PriceSourceState(self.SEDA)
139142
self.seda_last_state = PriceSourceState(self.SEDA_LAST)
140143
self.seda_ema_state = PriceSourceState(self.SEDA_EMA)
144+
self.seda_oracle_state = PriceSourceState(self.SEDA_ORACLE)
145+
self.seda_mark_state = PriceSourceState(self.SEDA_MARK)
146+
self.seda_external_state = PriceSourceState(self.SEDA_EXTERNAL)
141147

142148
# Map source names to state objects for dynamic lookup
143149
self.all_states: dict[str, PriceSourceState] = {
@@ -149,6 +155,9 @@ def __init__(self, config: Config) -> None:
149155
self.SEDA: self.seda_state,
150156
self.SEDA_LAST: self.seda_last_state,
151157
self.SEDA_EMA: self.seda_ema_state,
158+
self.SEDA_ORACLE: self.seda_oracle_state,
159+
self.SEDA_MARK: self.seda_mark_state,
160+
self.SEDA_EXTERNAL: self.seda_external_state,
152161
}
153162

154163
def get_all_prices(self) -> OracleUpdate:

apps/hip-3-pusher/src/pusher/seda_listener.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,13 +59,19 @@ class SedaListener:
5959
"""
6060

6161
SOURCE_NAME = "seda"
62+
ORACLE_PX_FIELD = "oracle_px"
63+
MARK_PXS_FIELD = "mark_pxs"
64+
EXT_PERP_PX_FIELD = "ext_perp_px"
6265

6366
def __init__(
6467
self,
6568
config: Config,
6669
seda_state: PriceSourceState,
6770
seda_last_state: PriceSourceState,
6871
seda_ema_state: PriceSourceState,
72+
seda_oracle_state: PriceSourceState,
73+
seda_mark_state: PriceSourceState,
74+
seda_external_state: PriceSourceState,
6975
api_key_override: str | None = None,
7076
) -> None:
7177
self.url = config.seda.url
@@ -81,6 +87,9 @@ def __init__(
8187
self.seda_state = seda_state
8288
self.seda_last_state = seda_last_state
8389
self.seda_ema_state = seda_ema_state
90+
self.seda_oracle_state = seda_oracle_state
91+
self.seda_mark_state = seda_mark_state
92+
self.seda_external_state = seda_external_state
8493

8594
self.price_field = config.seda.price_field
8695
self.timestamp_field = config.seda.timestamp_field
@@ -224,6 +233,19 @@ def _parse_seda_message(self, feed_name: str, message: dict[str, Any]) -> None:
224233
feed_name, PriceUpdate(ema_price, timestamp, session_flag)
225234
)
226235

236+
# new format with exact pass-through data
237+
oracle_px = result.get(self.ORACLE_PX_FIELD)
238+
logger.debug("SEDA feed: {} oracle_px: {}", feed_name, oracle_px)
239+
self.seda_oracle_state.put(feed_name, PriceUpdate(oracle_px, timestamp))
240+
241+
mark_pxs = result.get(self.MARK_PXS_FIELD)
242+
logger.debug("SEDA feed: {} mark_pxs: {}", feed_name, mark_pxs)
243+
self.seda_mark_state.put(feed_name, PriceUpdate(mark_pxs, timestamp))
244+
245+
ext_perp_px = result.get(self.EXT_PERP_PX_FIELD)
246+
logger.debug("SEDA feed: {} ext_perp_px: {}", feed_name, ext_perp_px)
247+
self.seda_external_state.put(feed_name, PriceUpdate(ext_perp_px, timestamp))
248+
227249
def get_parsed_result(self, feed_name: str) -> dict[str, Any] | None:
228250
"""
229251
Get parsed result for a feed from state.

apps/hip-3-pusher/uv.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)