github.com/InjectiveLabs/sdk-go@v1.53.0/examples/chain/bank/2_MsgMultiSend/example.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"time"
     7  
     8  	"cosmossdk.io/math"
     9  
    10  	"github.com/InjectiveLabs/sdk-go/client"
    11  	"github.com/InjectiveLabs/sdk-go/client/common"
    12  
    13  	chainclient "github.com/InjectiveLabs/sdk-go/client/chain"
    14  	rpchttp "github.com/cometbft/cometbft/rpc/client/http"
    15  	sdktypes "github.com/cosmos/cosmos-sdk/types"
    16  	banktypes "github.com/cosmos/cosmos-sdk/x/bank/types"
    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  		"5d386fbdbf11f1141010f81a46b40f94887367562bd33b452bbaa6ce1cd1381e", // keyring will be used if pk not provided
    33  		false,
    34  	)
    35  
    36  	if err != nil {
    37  		panic(err)
    38  	}
    39  
    40  	// initialize grpc client
    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  	chainClient, err := chainclient.NewChainClient(
    55  		clientCtx,
    56  		network,
    57  		common.OptionGasPrices(client.DefaultGasPriceWithDenom),
    58  	)
    59  
    60  	if err != nil {
    61  		panic(err)
    62  	}
    63  
    64  	// prepare tx msg
    65  
    66  	msg := &banktypes.MsgMultiSend{
    67  		Inputs: []banktypes.Input{
    68  			{
    69  				Address: senderAddress.String(),
    70  				Coins: []sdktypes.Coin{{
    71  					Denom: "inj", Amount: math.NewInt(1000000000000000000)}, // 1 INJ
    72  				},
    73  			},
    74  			{
    75  				Address: senderAddress.String(),
    76  				Coins: []sdktypes.Coin{{
    77  					Denom: "peggy0x87aB3B4C8661e07D6372361211B96ed4Dc36B1B5", Amount: math.NewInt(1000000)}, // 1 USDT
    78  				},
    79  			},
    80  		},
    81  		Outputs: []banktypes.Output{
    82  			{
    83  				Address: "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r",
    84  				Coins: []sdktypes.Coin{{
    85  					Denom: "inj", Amount: math.NewInt(1000000000000000000)}, // 1 INJ
    86  				},
    87  			},
    88  			{
    89  				Address: "inj1hkhdaj2a2clmq5jq6mspsggqs32vynpk228q3r",
    90  				Coins: []sdktypes.Coin{{
    91  					Denom: "peggy0x87aB3B4C8661e07D6372361211B96ed4Dc36B1B5", Amount: math.NewInt(1000000)}, // 1 USDT
    92  				},
    93  			},
    94  		},
    95  	}
    96  
    97  	// AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg
    98  	err = chainClient.QueueBroadcastMsg(msg)
    99  
   100  	if err != nil {
   101  		fmt.Println(err)
   102  	}
   103  
   104  	time.Sleep(time.Second * 5)
   105  
   106  	gasFee, err := chainClient.GetGasFee()
   107  
   108  	if err != nil {
   109  		fmt.Println(err)
   110  		return
   111  	}
   112  
   113  	fmt.Println("gas fee:", gasFee, "INJ")
   114  }