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  }