github.com/InjectiveLabs/sdk-go@v1.53.0/examples/chain/exchange/16_MsgLiquidatePosition/example.go (about) 1 package main 2 3 import ( 4 "context" 5 "encoding/json" 6 "fmt" 7 "os" 8 9 exchangeclient "github.com/InjectiveLabs/sdk-go/client/exchange" 10 "github.com/google/uuid" 11 12 "github.com/InjectiveLabs/sdk-go/client/common" 13 "github.com/shopspring/decimal" 14 15 exchangetypes "github.com/InjectiveLabs/sdk-go/chain/exchange/types" 16 "github.com/InjectiveLabs/sdk-go/client" 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 panic(err) 50 } 51 52 clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) 53 54 exchangeClient, err := exchangeclient.NewExchangeClient(network) 55 if err != nil { 56 panic(err) 57 } 58 59 ctx := context.Background() 60 marketsAssistant, err := chainclient.NewMarketsAssistantInitializedFromChain(ctx, exchangeClient) 61 if err != nil { 62 panic(err) 63 } 64 65 chainClient, err := chainclient.NewChainClient( 66 clientCtx, 67 network, 68 common.OptionGasPrices(client.DefaultGasPriceWithDenom), 69 ) 70 71 if err != nil { 72 panic(err) 73 } 74 75 defaultSubaccountID := chainClient.DefaultSubaccount(senderAddress) 76 77 marketId := "0x17ef48032cb24375ba7c2e39f384e56433bcab20cbee9a7357e4cba2eb00abe6" 78 amount := decimal.NewFromFloat(0.147) 79 price := decimal.RequireFromString("39.01") 80 leverage := decimal.RequireFromString("1") 81 82 order := chainClient.CreateDerivativeOrder( 83 defaultSubaccountID, 84 &chainclient.DerivativeOrderData{ 85 OrderType: exchangetypes.OrderType_SELL, 86 Quantity: amount, 87 Price: price, 88 Leverage: leverage, 89 FeeRecipient: senderAddress.String(), 90 MarketId: marketId, 91 Cid: uuid.NewString(), 92 }, 93 marketsAssistant, 94 ) 95 96 msg := &exchangetypes.MsgLiquidatePosition{ 97 Sender: senderAddress.String(), 98 SubaccountId: "0x156df4d5bc8e7dd9191433e54bd6a11eeb390921000000000000000000000000", 99 MarketId: marketId, 100 Order: order, 101 } 102 103 // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg 104 response, err := chainClient.AsyncBroadcastMsg(msg) 105 106 if err != nil { 107 panic(err) 108 } 109 110 str, _ := json.MarshalIndent(response, "", " ") 111 fmt.Print(string(str)) 112 }