github.com/InjectiveLabs/sdk-go@v1.53.0/examples/chain/exchange/6_MsgCreateSpotLimitOrder/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 "github.com/InjectiveLabs/sdk-go/client" 13 "github.com/InjectiveLabs/sdk-go/client/common" 14 "github.com/shopspring/decimal" 15 16 exchangetypes "github.com/InjectiveLabs/sdk-go/chain/exchange/types" 17 chainclient "github.com/InjectiveLabs/sdk-go/client/chain" 18 rpchttp "github.com/cometbft/cometbft/rpc/client/http" 19 ) 20 21 func main() { 22 network := common.LoadNetwork("mainnet", "lb") 23 tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") 24 if err != nil { 25 panic(err) 26 } 27 28 senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( 29 os.Getenv("HOME")+"/.injectived", 30 "injectived", 31 "file", 32 "inj-user", 33 "12345678", 34 "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided 35 false, 36 ) 37 38 if err != nil { 39 panic(err) 40 } 41 42 clientCtx, err := chainclient.NewClientContext( 43 network.ChainId, 44 senderAddress.String(), 45 cosmosKeyring, 46 ) 47 if err != nil { 48 fmt.Println(err) 49 return 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 defaultSubaccountID := chainClient.DefaultSubaccount(senderAddress) 75 76 marketId := "0xa508cb32923323679f29a032c70342c147c17d0145625922b0ef22e955c844c0" 77 78 amount := decimal.NewFromFloat(2) 79 price := decimal.NewFromFloat(22.55) 80 81 order := chainClient.CreateSpotOrder( 82 defaultSubaccountID, 83 &chainclient.SpotOrderData{ 84 OrderType: exchangetypes.OrderType_BUY, //BUY SELL BUY_PO SELL_PO 85 Quantity: amount, 86 Price: price, 87 FeeRecipient: senderAddress.String(), 88 MarketId: marketId, 89 Cid: uuid.NewString(), 90 }, 91 marketsAssistant, 92 ) 93 94 msg := new(exchangetypes.MsgCreateSpotLimitOrder) 95 msg.Sender = senderAddress.String() 96 msg.Order = exchangetypes.SpotOrder(*order) 97 98 simRes, err := chainClient.SimulateMsg(clientCtx, msg) 99 100 if err != nil { 101 fmt.Println(err) 102 return 103 } 104 105 msgCreateSpotLimitOrderResponse := exchangetypes.MsgCreateSpotLimitOrderResponse{} 106 err = msgCreateSpotLimitOrderResponse.Unmarshal(simRes.Result.MsgResponses[0].Value) 107 108 if err != nil { 109 fmt.Println(err) 110 return 111 } 112 113 fmt.Println("simulated order hash: ", msgCreateSpotLimitOrderResponse.OrderHash) 114 115 // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg 116 err = chainClient.QueueBroadcastMsg(msg) 117 118 if err != nil { 119 fmt.Println(err) 120 return 121 } 122 123 time.Sleep(time.Second * 5) 124 125 gasFee, err := chainClient.GetGasFee() 126 127 if err != nil { 128 fmt.Println(err) 129 return 130 } 131 132 fmt.Println("gas fee:", gasFee, "INJ") 133 }