跳转到主要内容
使用 StreamManagerV2 从 Indexer 流式获取衍生品市场模块相关数据的示例代码。

使用 gRPC Stream 与 StreamManagerV2

流式获取订单簿更新

import { getNetworkEndpoints, Network } from '@injectivelabs/networks'
import { 
  StreamManagerV2,
  IndexerGrpcDerivativesStreamV2 
} from '@injectivelabs/sdk-ts/client/indexer'

const endpoints = getNetworkEndpoints(Network.Testnet)
const stream = new IndexerGrpcDerivativesStreamV2(endpoints.indexer)

const streamManager = new StreamManagerV2({
  id: 'derivatives-orderbook-updates',
  streamFactory: () => stream.streamOrderbookUpdates({ 
    marketIds: ['0x...'],
    callback: (response) => {
      streamManager.emit('data', response)
    }
  }),
  onData: (orderbookUpdates) => {
    console.log(orderbookUpdates)
  },
  retryConfig: { enabled: true }
})

streamManager.on('connect', () => console.log('Stream connected'))
streamManager.start()

流式获取衍生品订单

import { getNetworkEndpoints, Network } from '@injectivelabs/networks'
import { OrderSide } from '@injectivelabs/sdk-ts/types'
import { 
  StreamManagerV2,
  IndexerGrpcDerivativesStreamV2 
} from '@injectivelabs/sdk-ts/client/indexer'

const endpoints = getNetworkEndpoints(Network.Testnet)
const stream = new IndexerGrpcDerivativesStreamV2(endpoints.indexer)

const streamManager = new StreamManagerV2({
  id: 'derivatives-orders',
  streamFactory: () => stream.streamOrders({
    marketId: '0x...',
    subaccountId: '0x...', // 可选
    orderSide: OrderSide.Buy, // 可选
    callback: (response) => {
      streamManager.emit('data', response)
    }
  }),
  onData: (orders) => {
    console.log(orders)
  },
  retryConfig: { enabled: true }
})

streamManager.on('connect', () => console.log('Stream connected'))
streamManager.start()

流式获取衍生品订单历史

import { getNetworkEndpoints, Network } from '@injectivelabs/networks'
import {
  TradeDirection,
  TradeExecutionType,
} from '@injectivelabs/sdk-ts/types'
import { 
  StreamManagerV2,
  IndexerGrpcDerivativesStreamV2 
} from '@injectivelabs/sdk-ts/client/indexer'

const endpoints = getNetworkEndpoints(Network.Testnet)
const stream = new IndexerGrpcDerivativesStreamV2(endpoints.indexer)

const streamManager = new StreamManagerV2({
  id: 'derivatives-order-history',
  streamFactory: () => stream.streamOrdersHistory({
    marketId: '0x...', // 可选
    subaccountId: '0x...', // 可选
    direction: TradeDirection.Buy, // 可选
    executionTypes: [TradeExecutionType.Market], // 可选
    callback: (response) => {
      streamManager.emit('data', response)
    }
  }),
  onData: (orderHistory) => {
    console.log(orderHistory)
  },
  retryConfig: { enabled: true }
})

streamManager.on('connect', () => console.log('Stream connected'))
streamManager.start()

流式获取衍生品交易

import { getNetworkEndpoints, Network } from '@injectivelabs/networks'
import { TradeDirection } from '@injectivelabs/sdk-ts/types'
import { 
  StreamManagerV2,
  IndexerGrpcDerivativesStreamV2 
} from '@injectivelabs/sdk-ts/client/indexer'

const endpoints = getNetworkEndpoints(Network.Testnet)
const stream = new IndexerGrpcDerivativesStreamV2(endpoints.indexer)

const streamManager = new StreamManagerV2({
  id: 'derivatives-trades',
  streamFactory: () => stream.streamTrades({
    marketIds: ['0x...'], // 可选
    subaccountId: '0x...', // 可选
    direction: TradeDirection.Buy, // 可选
    callback: (response) => {
      streamManager.emit('data', response)
    }
  }),
  onData: (trades) => {
    console.log(trades)
  },
  retryConfig: { enabled: true }
})

streamManager.on('connect', () => console.log('Stream connected'))
streamManager.start()

流式获取衍生品持仓

import { getNetworkEndpoints, Network } from '@injectivelabs/networks'
import { 
  StreamManagerV2,
  IndexerGrpcDerivativesStreamV2 
} from '@injectivelabs/sdk-ts/client/indexer'

const endpoints = getNetworkEndpoints(Network.Testnet)
const stream = new IndexerGrpcDerivativesStreamV2(endpoints.indexer)

const streamManager = new StreamManagerV2({
  id: 'derivatives-positions',
  streamFactory: () => stream.streamPositions({
    marketId: '0x...', // 可选
    subaccountId: '0x...', // 可选
    callback: (response) => {
      streamManager.emit('data', response)
    }
  }),
  onData: (positions) => {
    console.log(positions)
  },
  retryConfig: { enabled: true }
})

streamManager.on('connect', () => console.log('Stream connected'))
streamManager.start()

流式获取衍生品市场

import { getNetworkEndpoints, Network } from '@injectivelabs/networks'
import { 
  StreamManagerV2,
  IndexerGrpcDerivativesStreamV2 
} from '@injectivelabs/sdk-ts/client/indexer'

const endpoints = getNetworkEndpoints(Network.Testnet)
const stream = new IndexerGrpcDerivativesStreamV2(endpoints.indexer)

const streamManager = new StreamManagerV2({
  id: 'derivatives-markets',
  streamFactory: () => stream.streamMarkets({
    marketIds: ['0x...'], // 可选
    callback: (response) => {
      streamManager.emit('data', response)
    }
  }),
  onData: (markets) => {
    console.log(markets)
  },
  retryConfig: { enabled: true }
})

streamManager.on('connect', () => console.log('Stream connected'))
streamManager.start()