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 }