From 6b59134b5aede6d55ac94c5333d5dc8e0c59001e Mon Sep 17 00:00:00 2001 From: HaoyangLiu Date: Mon, 5 Aug 2019 15:52:53 +0800 Subject: [PATCH] Resolve comment --- plugins/account/client/cli/account_flags.go | 44 ++++++++++----------- plugins/account/client/cli/utils.go | 21 ++++++++++ 2 files changed, 42 insertions(+), 23 deletions(-) create mode 100644 plugins/account/client/cli/utils.go diff --git a/plugins/account/client/cli/account_flags.go b/plugins/account/client/cli/account_flags.go index a9526218c..4525e76f8 100644 --- a/plugins/account/client/cli/account_flags.go +++ b/plugins/account/client/cli/account_flags.go @@ -9,8 +9,6 @@ import ( "github.com/spf13/viper" clientFlags "github.com/cosmos/cosmos-sdk/client" - "github.com/cosmos/cosmos-sdk/client/context" - authcmd "github.com/cosmos/cosmos-sdk/x/auth/client/cli" "github.com/binance-chain/node/common/client" "github.com/binance-chain/node/common/types" @@ -44,6 +42,21 @@ func setAccountFlagsCmd(cdc *wire.Codec) *cobra.Command { if err != nil { return err } + if !viper.GetBool(clientFlags.FlagOffline) { + acc, err := cliCtx.GetAccount(from) + if err != nil { + return err + } + appAccount, ok := acc.(types.NamedAccount) + if !ok { + return fmt.Errorf("unexpected account type") + } + flags := appAccount.GetFlags() + + if flags == accountFlags { + return fmt.Errorf("the specified account flags is identical to its current value") + } + } // build message msg := account.NewSetAccountFlagsMsg(from, accountFlags) err = msg.ValidateBasic() @@ -85,13 +98,6 @@ func enableMemoCheckFlagCmd(cdc *wire.Codec) *cobra.Command { return err } } else { - cliCtx := context.NewCLIContext(). - WithCodec(cdc). - WithAccountDecoder(authcmd.GetAccountDecoder(cdc)) - - if err := cliCtx.EnsureAccountExistsFromAddr(from); err != nil { - return err - } acc, err := cliCtx.GetAccount(from) if err != nil { return err @@ -102,10 +108,10 @@ func enableMemoCheckFlagCmd(cdc *wire.Codec) *cobra.Command { } flags = appAccount.GetFlags() } - if flags == (flags | scripts.TransferMemoCheckerFlag) { - return fmt.Errorf("transfer memo checker flag has already been enabled") + flags, err = enableFlag(flags, scripts.TransferMemoCheckerFlag) + if err != nil { + return err } - flags = flags | scripts.TransferMemoCheckerFlag // build message msg := account.NewSetAccountFlagsMsg(from, flags) err = msg.ValidateBasic() @@ -147,13 +153,6 @@ func disableMemoCheckFlagCmd(cdc *wire.Codec) *cobra.Command { return err } } else { - cliCtx := context.NewCLIContext(). - WithCodec(cdc). - WithAccountDecoder(authcmd.GetAccountDecoder(cdc)) - - if err := cliCtx.EnsureAccountExistsFromAddr(from); err != nil { - return err - } acc, err := cliCtx.GetAccount(from) if err != nil { return err @@ -164,11 +163,10 @@ func disableMemoCheckFlagCmd(cdc *wire.Codec) *cobra.Command { } flags = appAccount.GetFlags() } - invMemoCheck := ^scripts.TransferMemoCheckerFlag - if flags == (flags & invMemoCheck) { - return fmt.Errorf("transfer memo checker flag has already been disabled") + flags, err = disableFlag(flags, scripts.TransferMemoCheckerFlag) + if err != nil { + return err } - flags = flags & invMemoCheck // build message msg := account.NewSetAccountFlagsMsg(from, flags) err = msg.ValidateBasic() diff --git a/plugins/account/client/cli/utils.go b/plugins/account/client/cli/utils.go new file mode 100644 index 000000000..edbb7a5c5 --- /dev/null +++ b/plugins/account/client/cli/utils.go @@ -0,0 +1,21 @@ +package cli + +import "fmt" + + +func enableFlag(flags uint64, targetFlag uint64) (uint64, error) { + enabledFlags := flags | targetFlag + if flags == enabledFlags { + return 0, fmt.Errorf("flag %x has already been enabled", targetFlag) + } + return enabledFlags, nil +} + +func disableFlag(flags uint64, targetFlag uint64) (uint64, error) { + inv := ^targetFlag + disabledFlags := flags & inv + if flags == disabledFlags { + return 0, fmt.Errorf("flag %x has already been disabled", targetFlag) + } + return disabledFlags, nil +}