github.com/InjectiveLabs/sdk-go@v1.53.0/auth_vote/authz_vote.go (about)

     1  package main
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"os"
     7  
     8  	"github.com/InjectiveLabs/sdk-go/client"
     9  	chainclient "github.com/InjectiveLabs/sdk-go/client/chain"
    10  	"github.com/InjectiveLabs/sdk-go/client/common"
    11  	rpchttp "github.com/cometbft/cometbft/rpc/client/http"
    12  	codectypes "github.com/cosmos/cosmos-sdk/codec/types"
    13  	sdk "github.com/cosmos/cosmos-sdk/types"
    14  	authztypes "github.com/cosmos/cosmos-sdk/x/authz"
    15  	"github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1"
    16  )
    17  
    18  func main() {
    19  	network := common.LoadNetwork("testnet", "lb")
    20  	tmClient, err := rpchttp.New(network.TmEndpoint, "/websocket")
    21  	if err != nil {
    22  		panic(err)
    23  	}
    24  
    25  	if err != nil {
    26  		panic(err)
    27  	}
    28  
    29  	senderAddress, cosmosKeyring, err := chainclient.InitCosmosKeyring(
    30  		os.Getenv("HOME")+"/.injectived",
    31  		"injectived",
    32  		"file",
    33  		"gov_account",
    34  		"",
    35  		"", // keyring will be used if pk not provided
    36  		false,
    37  	)
    38  
    39  	if err != nil {
    40  		panic(err)
    41  	}
    42  
    43  	clientCtx, err := chainclient.NewClientContext(
    44  		network.ChainId,
    45  		senderAddress.String(),
    46  		cosmosKeyring,
    47  	)
    48  
    49  	if err != nil {
    50  		panic(err)
    51  	}
    52  
    53  	clientCtx = clientCtx.WithNodeURI(network.TmEndpoint).WithClient(tmClient)
    54  
    55  	txFactory := chainclient.NewTxFactory(clientCtx)
    56  	txFactory = txFactory.WithGasPrices(client.DefaultGasPriceWithDenom)
    57  	chainClient, err := chainclient.NewChainClient(
    58  		clientCtx,
    59  		network,
    60  		common.OptionTxFactory(&txFactory),
    61  	)
    62  
    63  	if err != nil {
    64  		panic(err)
    65  	}
    66  
    67  	// note that we use grantee keyring to send the msg on behalf of granter here
    68  	// sender, subaccount are from granter
    69  	validators := []string{"inj156t3yxd4udv0h9gwagfcmwnmm3quy0npqc7pks", "inj16nd8yqxe9p6ggnrz58qr7dxn5y2834yendward"}
    70  	grantee := senderAddress.String()
    71  	proposalId := uint64(375)
    72  	var msgs = make([]sdk.Msg, 0)
    73  
    74  	for _, validator := range validators {
    75  		msgVote := v1beta1.MsgVote{
    76  			ProposalId: proposalId,
    77  			Voter:      validator,
    78  			Option:     v1beta1.OptionYes,
    79  		}
    80  
    81  		msg0Bytes, _ := msgVote.Marshal()
    82  		msg0Any := &codectypes.Any{}
    83  		msg0Any.TypeUrl = sdk.MsgTypeURL(&msgVote)
    84  		msg0Any.Value = msg0Bytes
    85  
    86  		msg := &authztypes.MsgExec{
    87  			Grantee: grantee,
    88  			Msgs:    []*codectypes.Any{msg0Any},
    89  		}
    90  
    91  		sdkMsg := sdk.Msg(msg)
    92  		msgs = append(msgs, sdkMsg)
    93  	}
    94  
    95  	// AsyncBroadcastMsg, SyncBroadcastMsg, QueueBroadcastMsg
    96  	response, err := chainClient.AsyncBroadcastMsg(msgs...)
    97  
    98  	if err != nil {
    99  		panic(err)
   100  	}
   101  
   102  	str, _ := json.MarshalIndent(response, "", " ")
   103  	fmt.Print(string(str))
   104  }