github.com/InjectiveLabs/sdk-go@v1.53.0/examples/chain/exchange/9_MsgBatchUpdateOrders/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("testnet", "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 48 if err != nil { 49 fmt.Println(err) 50 return 51 } 52 53 clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) 54 55 exchangeClient, err := exchangeclient.NewExchangeClient(network) 56 if err != nil { 57 panic(err) 58 } 59 60 ctx := context.Background() 61 marketsAssistant, err := chainclient.NewMarketsAssistantInitializedFromChain(ctx, exchangeClient) 62 if err != nil { 63 panic(err) 64 } 65 66 chainClient, err := chainclient.NewChainClient( 67 clientCtx, 68 network, 69 common.OptionGasPrices(client.DefaultGasPriceWithDenom), 70 ) 71 72 if err != nil { 73 fmt.Println(err) 74 return 75 } 76 77 defaultSubaccountID := chainClient.DefaultSubaccount(senderAddress) 78 79 smarketId := "0x0511ddc4e6586f3bfe1acb2dd905f8b8a82c97e1edaef654b12ca7e6031ca0fa" 80 samount := decimal.NewFromFloat(2) 81 sprice := decimal.NewFromFloat(22.5) 82 smarketIds := []string{"0xa508cb32923323679f29a032c70342c147c17d0145625922b0ef22e955c844c0"} 83 84 spot_order := chainClient.CreateSpotOrder( 85 defaultSubaccountID, 86 &chainclient.SpotOrderData{ 87 OrderType: exchangetypes.OrderType_BUY, //BUY SELL BUY_PO SELL_PO 88 Quantity: samount, 89 Price: sprice, 90 FeeRecipient: senderAddress.String(), 91 MarketId: smarketId, 92 Cid: uuid.NewString(), 93 }, 94 marketsAssistant, 95 ) 96 97 dmarketId := "0x4ca0f92fc28be0c9761326016b5a1a2177dd6375558365116b5bdda9abc229ce" 98 damount := decimal.NewFromFloat(0.01) 99 dprice := decimal.RequireFromString("31000") //31,000 100 dleverage := decimal.RequireFromString("2") 101 dmarketIds := []string{"0x4ca0f92fc28be0c9761326016b5a1a2177dd6375558365116b5bdda9abc229ce"} 102 103 derivative_order := chainClient.CreateDerivativeOrder( 104 defaultSubaccountID, 105 &chainclient.DerivativeOrderData{ 106 OrderType: exchangetypes.OrderType_BUY, //BUY SELL BUY_PO SELL_PO 107 Quantity: damount, 108 Price: dprice, 109 Leverage: dleverage, 110 FeeRecipient: senderAddress.String(), 111 MarketId: dmarketId, 112 IsReduceOnly: false, 113 Cid: uuid.NewString(), 114 }, 115 marketsAssistant, 116 ) 117 118 msg := new(exchangetypes.MsgBatchUpdateOrders) 119 msg.Sender = senderAddress.String() 120 msg.SubaccountId = defaultSubaccountID.Hex() 121 msg.SpotOrdersToCreate = []*exchangetypes.SpotOrder{spot_order} 122 msg.DerivativeOrdersToCreate = []*exchangetypes.DerivativeOrder{derivative_order} 123 msg.SpotMarketIdsToCancelAll = smarketIds 124 msg.DerivativeMarketIdsToCancelAll = dmarketIds 125 126 simRes, err := chainClient.SimulateMsg(clientCtx, msg) 127 128 if err != nil { 129 fmt.Println(err) 130 return 131 } 132 133 MsgBatchUpdateOrdersResponse := exchangetypes.MsgBatchUpdateOrdersResponse{} 134 MsgBatchUpdateOrdersResponse.Unmarshal(simRes.Result.MsgResponses[0].Value) 135 136 fmt.Println("simulated spot order hashes", MsgBatchUpdateOrdersResponse.SpotOrderHashes) 137 138 fmt.Println("simulated derivative order hashes", MsgBatchUpdateOrdersResponse.DerivativeOrderHashes) 139 140 // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg 141 err = chainClient.QueueBroadcastMsg(msg) 142 143 if err != nil { 144 fmt.Println(err) 145 return 146 } 147 148 time.Sleep(time.Second * 5) 149 150 gasFee, err := chainClient.GetGasFee() 151 152 if err != nil { 153 fmt.Println(err) 154 return 155 } 156 157 fmt.Println("gas fee:", gasFee, "INJ") 158 }