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  }