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

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"os"
     7  	"time"
     8  
     9  	exchangeclient "github.com/InjectiveLabs/sdk-go/client/exchange"
    10  	"github.com/google/uuid"
    11  
    12  	exchangetypes "github.com/InjectiveLabs/sdk-go/chain/exchange/types"
    13  	"github.com/InjectiveLabs/sdk-go/client"
    14  	chainclient "github.com/InjectiveLabs/sdk-go/client/chain"
    15  	"github.com/InjectiveLabs/sdk-go/client/common"
    16  	rpchttp "github.com/cometbft/cometbft/rpc/client/http"
    17  	"github.com/shopspring/decimal"
    18  )
    19  
    20  func main() {
    21  	network := common.LoadNetwork("testnet", "lb")
    22  	tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket")
    23  	if err != nil {
    24  		panic(err)
    25  	}
    26  
    27  	senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring(
    28  		os.Getenv("HOME")+"/.injectived",
    29  		"injectived",
    30  		"file",
    31  		"inj-user",
    32  		"12345678",
    33  		"5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided
    34  		false,
    35  	)
    36  	if err != nil {
    37  		panic(err)
    38  	}
    39  
    40  	// initialize grpc client
    41  	clientCtx, err := chainclient.NewClientContext(
    42  		network.ChainId,
    43  		senderAddress.String(),
    44  		cosmosKeyring,
    45  	)
    46  
    47  	if err != nil {
    48  		panic(err)
    49  	}
    50  
    51  	clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient)
    52  
    53  	exchangeClient, err := exchangeclient.NewExchangeClient(network)
    54  	if err != nil {
    55  		panic(err)
    56  	}
    57  
    58  	ctx := context.Background()
    59  	marketsAssistant, err := chainclient.NewMarketsAssistantInitializedFromChain(ctx, exchangeClient)
    60  	if err != nil {
    61  		panic(err)
    62  	}
    63  
    64  	chainClient, err := chainclient.NewChainClient(
    65  		clientCtx,
    66  		network,
    67  		common.OptionGasPrices(client.DefaultGasPriceWithDenom),
    68  	)
    69  
    70  	if err != nil {
    71  		panic(err)
    72  	}
    73  
    74  	// prepare tx msg
    75  	defaultSubaccountID := chainClient.Subaccount(senderAddress, 1)
    76  
    77  	spotOrder := chainClient.CreateSpotOrder(
    78  		defaultSubaccountID,
    79  		&chainclient.SpotOrderData{
    80  			OrderType:    exchangetypes.OrderType_BUY,
    81  			Quantity:     decimal.NewFromFloat(2),
    82  			Price:        decimal.NewFromFloat(22.55),
    83  			FeeRecipient: senderAddress.String(),
    84  			MarketId:     "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe",
    85  			Cid:          uuid.NewString(),
    86  		},
    87  		marketsAssistant,
    88  	)
    89  
    90  	derivativeOrder := chainClient.CreateDerivativeOrder(
    91  		defaultSubaccountID,
    92  		&chainclient.DerivativeOrderData{
    93  			OrderType:    exchangetypes.OrderType_BUY,
    94  			Quantity:     decimal.NewFromFloat(2),
    95  			Price:        decimal.RequireFromString("31"),
    96  			Leverage:     decimal.RequireFromString("2.5"),
    97  			FeeRecipient: senderAddress.String(),
    98  			MarketId:     "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6",
    99  			Cid:          uuid.NewString(),
   100  		},
   101  		marketsAssistant,
   102  	)
   103  
   104  	msg := new(exchangetypes.MsgBatchCreateSpotLimitOrders)
   105  	msg.Sender = senderAddress.String()
   106  	msg.Orders = []exchangetypes.SpotOrder{*spotOrder}
   107  
   108  	msg1 := new(exchangetypes.MsgBatchCreateDerivativeLimitOrders)
   109  	msg1.Sender = senderAddress.String()
   110  	msg1.Orders = []exchangetypes.DerivativeOrder{*derivativeOrder, *derivativeOrder}
   111  
   112  	// compute local order hashes
   113  	orderHashes, err := chainClient.ComputeOrderHashes(msg.Orders, msg1.Orders, defaultSubaccountID)
   114  
   115  	if err != nil {
   116  		fmt.Println(err)
   117  	}
   118  
   119  	fmt.Println("computed spot order hashes: ", orderHashes.Spot)
   120  	fmt.Println("computed derivative order hashes: ", orderHashes.Derivative)
   121  
   122  	// AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg
   123  	err = chainClient.QueueBroadcastMsg(msg, msg1)
   124  
   125  	if err != nil {
   126  		fmt.Println(err)
   127  	}
   128  
   129  	time.Sleep(time.Second * 5)
   130  
   131  	gasFee, err := chainClient.GetGasFee()
   132  
   133  	if err != nil {
   134  		fmt.Println(err)
   135  		return
   136  	}
   137  
   138  	fmt.Println("gas fee:", gasFee, "INJ")
   139  }