github.com/InjectiveLabs/sdk-go@v1.53.0/examples/chain/authz/2_MsgExec/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 11 "github.com/InjectiveLabs/sdk-go/client" 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 chainclient "github.com/InjectiveLabs/sdk-go/client/chain" 17 rpchttp "github.com/cometbft/cometbft/rpc/client/http" 18 codectypes "github.com/cosmos/cosmos-sdk/codec/types" 19 sdk "github.com/cosmos/cosmos-sdk/types" 20 authztypes "github.com/cosmos/cosmos-sdk/x/authz" 21 ) 22 23 func main() { 24 network := common.LoadNetwork("testnet", "lb") 25 tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket") 26 if err != nil { 27 panic(err) 28 } 29 30 granterAddress, _, err := chainclient.InitCosmosKeyring( 31 os.Getenv("HOME")+"/.injectived", 32 "injectived", 33 "file", 34 "inj-user", 35 "12345678", 36 "5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided 37 false, 38 ) 39 40 if err != nil { 41 panic(err) 42 } 43 44 senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring( 45 os.Getenv("HOME")+"/.injectived", 46 "injectived", 47 "file", 48 "inj-user", 49 "12345678", 50 "f9db9bf330e23cb7839039e944adef6e9df447b90b503d5b4464c90bea9022f3", // keyring will be used if pk not provided 51 false, 52 ) 53 54 if err != nil { 55 panic(err) 56 } 57 58 clientCtx, err := chainclient.NewClientContext( 59 network.ChainId, 60 senderAddress.String(), 61 cosmosKeyring, 62 ) 63 64 if err != nil { 65 panic(err) 66 } 67 68 clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient) 69 70 exchangeClient, err := exchangeclient.NewExchangeClient(network) 71 if err != nil { 72 panic(err) 73 } 74 75 ctx := context.Background() 76 marketsAssistant, err := chainclient.NewMarketsAssistantInitializedFromChain(ctx, exchangeClient) 77 if err != nil { 78 panic(err) 79 } 80 81 txFactory := chainclient.NewTxFactory(clientCtx) 82 txFactory = txFactory.WithGasPrices(client.DefaultGasPriceWithDenom) 83 chainClient, err := chainclient.NewChainClient( 84 clientCtx, 85 network, 86 common.OptionTxFactory(&txFactory), 87 ) 88 89 if err != nil { 90 panic(err) 91 } 92 93 // note that we use grantee keyring to send the msg on behalf of granter here 94 // sender, subaccount are from granter 95 granter := granterAddress.String() 96 grantee := "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r" 97 defaultSubaccountID := chainClient.DefaultSubaccount(granterAddress) 98 99 marketId := "0x0511ddc4e6586f3bfe1acb2dd905f8b8a82c97e1edaef654b12ca7e6031ca0fa" 100 101 amount := decimal.NewFromFloat(2) 102 price := decimal.NewFromFloat(22.55) 103 order := chainClient.CreateSpotOrder( 104 defaultSubaccountID, 105 &chainclient.SpotOrderData{ 106 OrderType: exchangetypes.OrderType_BUY, 107 Quantity: amount, 108 Price: price, 109 FeeRecipient: senderAddress.String(), 110 MarketId: marketId, 111 }, 112 marketsAssistant, 113 ) 114 115 // manually pack msg into Any type 116 msg0 := exchangetypes.MsgCreateSpotLimitOrder{ 117 Sender: granter, 118 Order: *order, 119 } 120 msg0Bytes, _ := msg0.Marshal() 121 msg0Any := &codectypes.Any{} 122 msg0Any.TypeUrl = sdk.MsgTypeURL(&msg0) 123 msg0Any.Value = msg0Bytes 124 msg := &authztypes.MsgExec{ 125 Grantee: grantee, 126 Msgs: []*codectypes.Any{msg0Any}, 127 } 128 129 // AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg 130 err = chainClient.QueueBroadcastMsg(msg) 131 132 if err != nil { 133 fmt.Println(err) 134 } 135 136 time.Sleep(time.Second * 5) 137 138 gasFee, err := chainClient.GetGasFee() 139 140 if err != nil { 141 fmt.Println(err) 142 return 143 } 144 145 fmt.Println("gas fee:", gasFee, "INJ") 146 }