github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/x/mint/client/cli/tx.go (about)

     1  package cli
     2  
     3  import (
     4  	"bufio"
     5  	"fmt"
     6  	"strings"
     7  
     8  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/client/context"
     9  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec"
    10  	interfacetypes "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec/types"
    11  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
    12  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/version"
    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  	utils2 "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/mint/client/utils"
    16  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/x/mint/internal/types"
    17  	"github.com/fibonacci-chain/fbc/x/gov"
    18  	"github.com/spf13/cobra"
    19  )
    20  
    21  // GetCmdManageTreasuresProposal implements a command handler for submitting a manage treasures proposal transaction
    22  func GetCmdManageTreasuresProposal(cdcP *codec.CodecProxy, reg interfacetypes.InterfaceRegistry) *cobra.Command {
    23  	return &cobra.Command{
    24  		Use:   "treasures [proposal-file]",
    25  		Args:  cobra.ExactArgs(1),
    26  		Short: "Submit an update treasures proposal",
    27  		Long: strings.TrimSpace(
    28  			fmt.Sprintf(`Submit an update treasures proposal along with an initial deposit.
    29  The proposal details must be supplied via a JSON file.
    30  
    31  Example:
    32  $ %s tx gov submit-proposal treasures <path/to/proposal.json> --from=<key_or_address>
    33  
    34  Where proposal.json contains:
    35  
    36  {
    37      "title":"update treasures",
    38      "description":"update treasures",
    39      "treasures":[
    40          {
    41              "address": "0xA6931Ac6b58E3Db85DFbE1aD408F5096c9736fAE",
    42              "proportion":"0.1000000000000000"
    43          }, {
    44              "address": "0xA6931Ac6b58E3Db85DFbE1aD408F5096c9736fAE",
    45              "proportion":"0.2000000000000000"
    46          },{
    47              "address": "0xA6931Ac6b58E3Db85DFbE1aD408F5096c9736fAE",
    48              "proportion":"0.2000000000000000"
    49          }
    50      ],
    51      "is_added":true,
    52      "deposit":[
    53          {
    54              "denom":"%s",
    55              "amount":"100.000000000000000000"
    56          }
    57      ]
    58  }
    59  `, version.ClientName, sdk.DefaultBondDenom,
    60  			)),
    61  		RunE: func(cmd *cobra.Command, args []string) error {
    62  			cdc := cdcP.GetCdc()
    63  			inBuf := bufio.NewReader(cmd.InOrStdin())
    64  			txBldr := auth.NewTxBuilderFromCLI(inBuf).WithTxEncoder(utils.GetTxEncoder(cdc))
    65  			cliCtx := context.NewCLIContext().WithCodec(cdc)
    66  
    67  			proposal, err := utils2.ParseManageTreasuresProposalJSON(cdc, args[0])
    68  			if err != nil {
    69  				return err
    70  			}
    71  
    72  			content := types.NewManageTreasuresProposal(
    73  				proposal.Title,
    74  				proposal.Description,
    75  				proposal.Treasures,
    76  				proposal.IsAdded,
    77  			)
    78  
    79  			err = content.ValidateBasic()
    80  			if err != nil {
    81  				return err
    82  			}
    83  
    84  			msg := gov.NewMsgSubmitProposal(content, proposal.Deposit, cliCtx.GetFromAddress())
    85  			return utils.GenerateOrBroadcastMsgs(cliCtx, txBldr, []sdk.Msg{msg})
    86  		},
    87  	}
    88  }
    89  
    90  // GetCmdModifyNextBlockUpdateProposal implements a command handler for submitting modify next block update proposal transaction
    91  func GetCmdModifyNextBlockUpdateProposal(cdcP *codec.CodecProxy, reg interfacetypes.InterfaceRegistry) *cobra.Command {
    92  	return &cobra.Command{
    93  		Use:   "next-block-update [proposal-file]",
    94  		Args:  cobra.ExactArgs(1),
    95  		Short: "Submit a proposal for modifying the next block update.",
    96  		Long: strings.TrimSpace(
    97  			fmt.Sprintf(`Submit a proposal for modifying the next block update along with an initial deposit.
    98  The proposal details must be supplied via a JSON file.
    99  Example:
   100  $ %s tx gov submit-proposal next-block-update <path/to/proposal.json> --from=<key_or_address>
   101  Where proposal.json contains:
   102  {
   103      "title":"modify next block to update",
   104      "description":"modify next block to update",
   105      "block_num":123456,
   106      "deposit":[
   107          {
   108              "denom":"%s",
   109              "amount":"100.000000000000000000"
   110          }
   111      ]
   112  }
   113  `, version.ClientName, sdk.DefaultBondDenom,
   114  			)),
   115  		RunE: func(cmd *cobra.Command, args []string) error {
   116  			cdc := cdcP.GetCdc()
   117  			inBuf := bufio.NewReader(cmd.InOrStdin())
   118  			txBldr := auth.NewTxBuilderFromCLI(inBuf).WithTxEncoder(utils.GetTxEncoder(cdc))
   119  			cliCtx := context.NewCLIContext().WithCodec(cdc)
   120  
   121  			proposal, err := utils2.ParseModifyNextBlockUpdateProposalJSON(cdc, args[0])
   122  			if err != nil {
   123  				return err
   124  			}
   125  
   126  			content := types.NewModifyNextBlockUpdateProposal(
   127  				proposal.Title,
   128  				proposal.Description,
   129  				proposal.BlockNum,
   130  			)
   131  
   132  			err = content.ValidateBasic()
   133  			if err != nil {
   134  				return err
   135  			}
   136  
   137  			msg := gov.NewMsgSubmitProposal(content, proposal.Deposit, cliCtx.GetFromAddress())
   138  			return utils.GenerateOrBroadcastMsgs(cliCtx, txBldr, []sdk.Msg{msg})
   139  		},
   140  	}
   141  }