github.com/InjectiveLabs/sdk-go@v1.53.0/examples/chain/12_ChainStream/example.go (about)

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"encoding/json"
     6  	"fmt"
     7  
     8  	chainStreamModule "github.com/InjectiveLabs/sdk-go/chain/stream/types"
     9  	"github.com/InjectiveLabs/sdk-go/client"
    10  	chainclient "github.com/InjectiveLabs/sdk-go/client/chain"
    11  	"github.com/InjectiveLabs/sdk-go/client/common"
    12  )
    13  
    14  func main() {
    15  	network := common.LoadNetwork("testnet", "lb")
    16  
    17  	clientCtx, err := chainclient.NewClientContext(
    18  		network.ChainId,
    19  		"",
    20  		nil,
    21  	)
    22  	if err != nil {
    23  		panic(err)
    24  	}
    25  	clientCtx = clientCtx.WithNodeURI(network.TmEndpoint)
    26  
    27  	chainClient, err := chainclient.NewChainClient(
    28  		clientCtx,
    29  		network,
    30  		common.OptionGasPrices(client.DefaultGasPriceWithDenom),
    31  	)
    32  
    33  	if err != nil {
    34  		panic(err)
    35  	}
    36  
    37  	subaccountId := "0xbdaedec95d563fb05240d6e01821008454c24c36000000000000000000000000"
    38  
    39  	injUsdtMarket := "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe"
    40  	injUsdtPerpMarket := "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6"
    41  
    42  	req := chainStreamModule.StreamRequest{
    43  		BankBalancesFilter: &chainStreamModule.BankBalancesFilter{
    44  			Accounts: []string{"*"},
    45  		},
    46  		SpotOrdersFilter: &chainStreamModule.OrdersFilter{
    47  			MarketIds:     []string{injUsdtMarket},
    48  			SubaccountIds: []string{subaccountId},
    49  		},
    50  		DerivativeOrdersFilter: &chainStreamModule.OrdersFilter{
    51  			MarketIds:     []string{injUsdtPerpMarket},
    52  			SubaccountIds: []string{subaccountId},
    53  		},
    54  		SpotTradesFilter: &chainStreamModule.TradesFilter{
    55  			MarketIds:     []string{injUsdtMarket},
    56  			SubaccountIds: []string{"*"},
    57  		},
    58  		SubaccountDepositsFilter: &chainStreamModule.SubaccountDepositsFilter{
    59  			SubaccountIds: []string{subaccountId},
    60  		},
    61  		DerivativeOrderbooksFilter: &chainStreamModule.OrderbookFilter{
    62  			MarketIds: []string{injUsdtPerpMarket},
    63  		},
    64  		SpotOrderbooksFilter: &chainStreamModule.OrderbookFilter{
    65  			MarketIds: []string{injUsdtMarket},
    66  		},
    67  		PositionsFilter: &chainStreamModule.PositionsFilter{
    68  			SubaccountIds: []string{subaccountId},
    69  			MarketIds:     []string{injUsdtPerpMarket},
    70  		},
    71  		DerivativeTradesFilter: &chainStreamModule.TradesFilter{
    72  			SubaccountIds: []string{"*"},
    73  			MarketIds:     []string{injUsdtPerpMarket},
    74  		},
    75  		OraclePriceFilter: &chainStreamModule.OraclePriceFilter{
    76  			Symbol: []string{"INJ", "USDT"},
    77  		},
    78  	}
    79  
    80  	ctx := context.Background()
    81  
    82  	stream, err := chainClient.ChainStream(ctx, req)
    83  	if err != nil {
    84  		panic(err)
    85  	}
    86  
    87  	for {
    88  		select {
    89  		case <-ctx.Done():
    90  			return
    91  		default:
    92  			res, err := stream.Recv()
    93  			if err != nil {
    94  				panic(err)
    95  				return
    96  			}
    97  			str, _ := json.MarshalIndent(res, "", " ")
    98  			fmt.Print(string(str))
    99  		}
   100  	}
   101  }