Skip to content

Commit

Permalink
added tx
Browse files Browse the repository at this point in the history
  • Loading branch information
stackman27 committed Nov 24, 2022
1 parent 9a565a6 commit 1a0ea7d
Show file tree
Hide file tree
Showing 2 changed files with 111 additions and 0 deletions.
25 changes: 25 additions & 0 deletions osmoutils/cli_helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,3 +47,28 @@ func ParseSdkIntFromString(s string, separator string) ([]sdk.Int, error) {
}
return parsedInts, nil
}

func ParseSdkDecFromString(s string, separator string) ([]sdk.Dec, error) {
var parsedDec []sdk.Dec
for _, weightStr := range strings.Split(s, separator) {
weightStr = strings.TrimSpace(weightStr)

parsed, err := sdk.NewDecFromStr(weightStr)
if err != nil {
return parsedDec, err
}

parsedDec = append(parsedDec, parsed)
}
return parsedDec, nil
}

func ParseSdkValAddressFromString(s string, separator string) []sdk.ValAddress {
var parsedAddr []sdk.ValAddress
for _, addr := range strings.Split(s, separator) {
valAddr := sdk.ValAddress([]byte(addr))
parsedAddr = append(parsedAddr, valAddr)
}

return parsedAddr
}
86 changes: 86 additions & 0 deletions x/valset-pref/client/cli/tx.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package valsetprefcli

import (
"fmt"

"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/flags"
"github.com/cosmos/cosmos-sdk/client/tx"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/osmosis-labs/osmosis/v13/osmoutils"
"github.com/osmosis-labs/osmosis/v13/x/valset-pref/types"
"github.com/spf13/cobra"
)

func NewTxCmd() *cobra.Command {
txCmd := &cobra.Command{
Use: types.ModuleName,
Short: "Generalized automated market maker transaction subcommands",
DisableFlagParsing: true,
SuggestionsMinimumDistance: 2,
RunE: client.ValidateCmd,
}

txCmd.AddCommand(
NewSetValSetCmd(),
)

return txCmd
}

func NewSetValSetCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "set-valset [delegator_addr] [validators] [weights]",
Short: "Creates a new validator set for the delegator with valOperAddress and weight",
Example: "osmosisd tx valset-pref set-valset osmo1... osmovaloper1abc...,osmovaloper1def... 0.56,0.44",

Args: cobra.ExactArgs(3),
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientTxContext(cmd)
if err != nil {
return err
}

txf := tx.NewFactoryCLI(clientCtx, cmd.Flags()).WithTxConfig(clientCtx.TxConfig).WithAccountRetriever(clientCtx.AccountRetriever)

delAddr, err := sdk.AccAddressFromBech32(args[0])
if err != nil {
return err
}

valAddrs := osmoutils.ParseSdkValAddressFromString(args[1], ",")

weights, err := osmoutils.ParseSdkDecFromString(args[2], ",")
if err != nil {
return err
}

if len(valAddrs) != len(weights) {
return fmt.Errorf("the length of validator addresses and weights not matched")
}

if len(valAddrs) == 0 {
return fmt.Errorf("records is empty")
}

var valset []types.ValidatorPreference
for i, val := range valAddrs {
valset = append(valset, types.ValidatorPreference{
Weight: weights[i],
ValOperAddress: val.String(),
})
}

msg := types.NewMsgSetValidatorSetPreference(
delAddr,
valset,
)

return tx.GenerateOrBroadcastTxWithFactory(clientCtx, txf, msg)
},
}

flags.AddTxFlagsToCmd(cmd)

return cmd
}

0 comments on commit 1a0ea7d

Please sign in to comment.