github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/wasm/client/cli/gov_custom.go (about)

     1  package cli
     2  
     3  import (
     4  	"bufio"
     5  	"fmt"
     6  	"sort"
     7  	"strings"
     8  
     9  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context"
    10  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec"
    11  	interfacetypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec/types"
    12  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    13  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth"
    14  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/auth/client/utils"
    15  	"github.com/fibonacci-chain/fbc/x/gov"
    16  	govcli "github.com/fibonacci-chain/fbc/x/gov/client/cli"
    17  	"github.com/fibonacci-chain/fbc/x/wasm/types"
    18  	"github.com/spf13/cobra"
    19  	"github.com/spf13/viper"
    20  )
    21  
    22  func ProposalUpdateDeploymentWhitelistCmd(cdcP *codec.CodecProxy, reg interfacetypes.InterfaceRegistry) *cobra.Command {
    23  	cmd := &cobra.Command{
    24  		Use:   "update-wasm-deployment-whitelist [comma-separated addresses]",
    25  		Short: "Submit an update wasm contract deployment whitelist proposal",
    26  		Args:  cobra.ExactArgs(1),
    27  		RunE: func(cmd *cobra.Command, args []string) error {
    28  			cdc := cdcP.GetCdc()
    29  			inBuf := bufio.NewReader(cmd.InOrStdin())
    30  			txBldr := auth.NewTxBuilderFromCLI(inBuf).WithTxEncoder(utils.GetTxEncoder(cdc))
    31  			cliCtx := context.NewCLIContext().WithCodec(cdc)
    32  
    33  			proposalTitle, err := cmd.Flags().GetString(govcli.FlagTitle)
    34  			if err != nil {
    35  				return fmt.Errorf("proposal title: %s", err)
    36  			}
    37  			proposalDescr, err := cmd.Flags().GetString(govcli.FlagDescription)
    38  			if err != nil {
    39  				return fmt.Errorf("proposal description: %s", err)
    40  			}
    41  			addrs := strings.Split(strings.TrimSpace(args[0]), ",")
    42  			sort.Strings(addrs)
    43  
    44  			proposal := types.UpdateDeploymentWhitelistProposal{
    45  				Title:            proposalTitle,
    46  				Description:      proposalDescr,
    47  				DistributorAddrs: addrs,
    48  			}
    49  
    50  			err = proposal.ValidateBasic()
    51  			if err != nil {
    52  				return err
    53  			}
    54  
    55  			deposit, err := sdk.ParseCoins(viper.GetString(govcli.FlagDeposit))
    56  			if err != nil {
    57  				return err
    58  			}
    59  
    60  			msg := gov.NewMsgSubmitProposal(&proposal, deposit, cliCtx.GetFromAddress())
    61  			return utils.GenerateOrBroadcastMsgs(cliCtx, txBldr, []sdk.Msg{msg})
    62  		},
    63  	}
    64  
    65  	// proposal flags
    66  	cmd.Flags().String(govcli.FlagTitle, "", "Title of proposal")
    67  	cmd.Flags().String(govcli.FlagDescription, "", "Description of proposal")
    68  	cmd.Flags().String(govcli.FlagDeposit, "", "Deposit of proposal")
    69  
    70  	return cmd
    71  }
    72  
    73  const isDelete = "delete"
    74  
    75  func ProposalUpdateWASMContractMethodBlockedListCmd(cdcP *codec.CodecProxy, reg interfacetypes.InterfaceRegistry) *cobra.Command {
    76  	cmd := &cobra.Command{
    77  		Use:   "update-wasm-contract-method-blocked-list [contract address] [comma-separated methods]",
    78  		Short: "Submit an update wasm contract deployment whitelist proposal",
    79  		Args:  cobra.ExactArgs(2),
    80  		RunE: func(cmd *cobra.Command, args []string) error {
    81  			cdc := cdcP.GetCdc()
    82  			inBuf := bufio.NewReader(cmd.InOrStdin())
    83  			txBldr := auth.NewTxBuilderFromCLI(inBuf).WithTxEncoder(utils.GetTxEncoder(cdc))
    84  			cliCtx := context.NewCLIContext().WithCodec(cdc)
    85  
    86  			methods := strings.Split(strings.TrimSpace(args[1]), ",")
    87  			sort.Strings(methods)
    88  			var extraMethods []*types.Method
    89  			for _, m := range methods {
    90  				extraMethods = append(extraMethods, &types.Method{
    91  					Name: m,
    92  				})
    93  			}
    94  
    95  			proposal := types.UpdateWASMContractMethodBlockedListProposal{
    96  				Title:       viper.GetString(govcli.FlagTitle),
    97  				Description: viper.GetString(govcli.FlagDescription),
    98  				BlockedMethods: &types.ContractMethods{
    99  					ContractAddr: args[0],
   100  					Methods:      extraMethods,
   101  				},
   102  				IsDelete: viper.GetBool(isDelete),
   103  			}
   104  
   105  			if err := proposal.ValidateBasic(); err != nil {
   106  				return err
   107  			}
   108  
   109  			deposit, err := sdk.ParseCoins(viper.GetString(govcli.FlagDeposit))
   110  			if err != nil {
   111  				return err
   112  			}
   113  
   114  			msg := gov.NewMsgSubmitProposal(&proposal, deposit, cliCtx.GetFromAddress())
   115  			return utils.GenerateOrBroadcastMsgs(cliCtx, txBldr, []sdk.Msg{msg})
   116  		},
   117  	}
   118  
   119  	// proposal flags
   120  	cmd.Flags().String(govcli.FlagTitle, "", "Title of proposal")
   121  	cmd.Flags().String(govcli.FlagDescription, "", "Description of proposal")
   122  	cmd.Flags().String(govcli.FlagDeposit, "", "Deposit of proposal")
   123  	cmd.Flags().Bool(isDelete, false, "True to delete methods and default to add")
   124  
   125  	return cmd
   126  }