github.com/InjectiveLabs/sdk-go@v1.53.0/examples/chain/13_BroadcastMsgWithoutSimulation/example.go (about)

     1  package main
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"os"
     7  
     8  	"github.com/InjectiveLabs/sdk-go/client"
     9  	"github.com/InjectiveLabs/sdk-go/client/common"
    10  	exchangeclient "github.com/InjectiveLabs/sdk-go/client/exchange"
    11  	"github.com/google/uuid"
    12  	"github.com/shopspring/decimal"
    13  
    14  	exchangetypes "github.com/InjectiveLabs/sdk-go/chain/exchange/types"
    15  	chainclient "github.com/InjectiveLabs/sdk-go/client/chain"
    16  	rpchttp "github.com/cometbft/cometbft/rpc/client/http"
    17  )
    18  
    19  func main() {
    20  	network := common.LoadNetwork("testnet", "lb")
    21  	tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket")
    22  	if err != nil {
    23  		panic(err)
    24  	}
    25  
    26  	senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring(
    27  		os.Getenv("HOME")+"/.injectived",
    28  		"injectived",
    29  		"file",
    30  		"inj-user",
    31  		"12345678",
    32  		"f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3", // keyring will be used if pk not provided
    33  		false,
    34  	)
    35  
    36  	if err != nil {
    37  		panic(err)
    38  	}
    39  
    40  	clientCtx, err := chainclient.NewClientContext(
    41  		network.ChainId,
    42  		senderAddress.String(),
    43  		cosmosKeyring,
    44  	)
    45  	if err != nil {
    46  		fmt.Println(err)
    47  		return
    48  	}
    49  	clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient).WithSimulation(false)
    50  
    51  	exchangeClient, err := exchangeclient.NewExchangeClient(network)
    52  	if err != nil {
    53  		panic(err)
    54  	}
    55  
    56  	ctx := context.Background()
    57  	marketsAssistant, err := chainclient.NewMarketsAssistantInitializedFromChain(ctx, exchangeClient)
    58  	if err != nil {
    59  		panic(err)
    60  	}
    61  
    62  	txFactory := chainclient.NewTxFactory(clientCtx)
    63  	txFactory = txFactory.WithGasPrices(client.DefaultGasPriceWithDenom)
    64  	txFactory = txFactory.WithGas(uint64(txFactory.GasAdjustment() * 140000))
    65  
    66  	clientInstance, err := chainclient.NewChainClient(
    67  		clientCtx,
    68  		network,
    69  		common.OptionTxFactory(&txFactory),
    70  	)
    71  
    72  	if err != nil {
    73  		panic(err)
    74  	}
    75  
    76  	defaultSubaccountID := clientInstance.DefaultSubaccount(senderAddress)
    77  
    78  	marketId := "0x0611780ba69656949525013d947713300f56c37b6175e02f26bffa495c3208fe"
    79  
    80  	amount := decimal.NewFromFloat(1)
    81  	price := decimal.NewFromFloat(4.55)
    82  
    83  	order := clientInstance.CreateSpotOrder(
    84  		defaultSubaccountID,
    85  		&chainclient.SpotOrderData{
    86  			OrderType:    exchangetypes.OrderType_BUY, //BUY SELL BUY_PO SELL_PO
    87  			Quantity:     amount,
    88  			Price:        price,
    89  			FeeRecipient: senderAddress.String(),
    90  			MarketId:     marketId,
    91  			Cid:          uuid.NewString(),
    92  		},
    93  		marketsAssistant,
    94  	)
    95  
    96  	msg := new(exchangetypes.MsgCreateSpotLimitOrder)
    97  	msg.Sender = senderAddress.String()
    98  	msg.Order = exchangetypes.SpotOrder(*order)
    99  
   100  	result, err := clientInstance.SyncBroadcastMsg(msg)
   101  
   102  	if err != nil {
   103  		panic(err)
   104  	}
   105  
   106  	fmt.Printf("Broadcast result: %s\n", result)
   107  
   108  }