Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Info

Low-level GraphQL query primitives over HTTP plus subscription transport over WebSocket. Subclass of API.

Setup

from dango.info import Info
from dango.utils.constants import MAINNET_API_URL
 
info = Info(MAINNET_API_URL)

Constructor

Info(
    base_url: str,
    *,
    skip_ws: bool = False,
    timeout: float | None = None,
    perps_contract: Addr | None = None,
) -> None

Configuration

base_urlstr. GraphQL endpoint URL.

skip_wsbool, optional. When True, the lazy WebsocketManager construction is suppressed and any subscribe_* call raises RuntimeError. Default: False.

timeoutfloat | None, optional. HTTP timeout in seconds. Default: no timeout.

perps_contractAddr | None, optional. Override the perps contract address. Default: PERPS_CONTRACT_MAINNET.

Methods

Chain queries

MethodDescription
query_statusChain ID and latest block info
query_appGeneric queryApp wrapper (raw envelope)
query_app_smartConvenience for {wasm_smart: ...} queries
query_app_multiAtomically run multiple queries at one height
simulateDry-run an UnsignedTx
broadcast_tx_syncSubmit a signed Tx

Perps contract queries

MethodDescription
perps_paramGlobal perps parameters
perps_stateGlobal perps runtime state
pair_paramOne pair's parameters
pair_paramsEnumerate per-pair parameters
pair_stateOne pair's runtime state
pair_statesEnumerate per-pair states
liquidity_depthAggregated bid/ask depth
user_stateUser margin, positions, vault shares
user_state_extendeduser_state plus computed equity/margin/PnL
orders_by_userAll resting orders for a user
orderOne resting order by id
volumeUser's cumulative trading volume

Indexer queries

MethodDescription
perps_candlesOHLCV candles (cursor-paginated)
perps_eventsEvent stream (cursor-paginated)
perps_pair_stats24h stats for one pair
all_perps_pair_stats24h stats for every active pair
perps_events_allIterate every matching event

Subscriptions

MethodDescription
subscribe_perps_tradesLive trade fills for one pair
subscribe_perps_candlesOHLCV candle stream
subscribe_query_appRe-run a queryApp every N blocks
subscribe_user_eventsPer-user event stream
subscribe_blockEvery newly-finalized block
unsubscribeDrop a subscription
disconnect_websocketClose the WebSocket cleanly

End-to-end example

import time
 
from dango.info import Info
from dango.utils.constants import MAINNET_API_URL
from dango.utils.types import Addr, CandleInterval, PairId
 
info = Info(MAINNET_API_URL)
 
# Public state
status = info.query_status()
pairs = info.pair_params()
stats = info.all_perps_pair_stats()
 
# Per-user state
user = Addr("0x...")
state = info.user_state(user)
orders = info.orders_by_user(user)
 
# Indexer
candles = info.perps_candles(PairId("perp/ethusd"), CandleInterval.ONE_MINUTE, first=10)
 
# Subscribe and drain for 30s
sid = info.subscribe_perps_trades(PairId("perp/ethusd"), print)
time.sleep(30)
info.unsubscribe(sid)
info.disconnect_websocket()

Notes

  • HTTP queries use a requests.Session — thread-safe for concurrent reads.
  • The WebsocketManager is created on the first subscribe_* call. Pass skip_ws=True if you never intend to subscribe.
  • The lazy manager is a daemon thread; call disconnect_websocket() on shutdown to close it cleanly.

See also