Replace viper in cli

This commit is contained in:
Alex Peters
2020-12-18 12:37:24 +01:00
parent 03b31b22dc
commit be1927bcff
7 changed files with 202 additions and 89 deletions

View File

@@ -19,7 +19,6 @@ import (
"github.com/cosmos/cosmos-sdk/x/genutil"
genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types"
"github.com/spf13/cobra"
"github.com/spf13/viper"
"github.com/tendermint/tendermint/crypto"
)
@@ -29,12 +28,12 @@ func GenesisStoreCodeCmd(defaultNodeHome string) *cobra.Command {
Short: "Upload a wasm binary",
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
senderAddr, err := getActorAddress(cmd, viper.GetString(flagRunAs))
senderAddr, err := getActorAddress(cmd)
if err != nil {
return err
}
msg, err := parseStoreCodeArgs(args[0], senderAddr)
msg, err := parseStoreCodeArgs(args[0], senderAddr, cmd.Flags())
if err != nil {
return err
}
@@ -70,12 +69,12 @@ func GenesisInstantiateContractCmd(defaultNodeHome string) *cobra.Command {
Short: "Instantiate a wasm contract",
Args: cobra.ExactArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
senderAddr, err := getActorAddress(cmd, viper.GetString(flagRunAs))
senderAddr, err := getActorAddress(cmd)
if err != nil {
return err
}
msg, err := parseInstantiateArgs(args[0], args[1], senderAddr)
msg, err := parseInstantiateArgs(args[0], args[1], senderAddr, cmd.Flags())
if err != nil {
return err
}
@@ -114,12 +113,12 @@ func GenesisExecuteContractCmd(defaultNodeHome string) *cobra.Command {
Short: "Execute a command on a wasm contract",
Args: cobra.ExactArgs(2),
RunE: func(cmd *cobra.Command, args []string) error {
senderAddr, err := getActorAddress(cmd, viper.GetString(flagRunAs))
senderAddr, err := getActorAddress(cmd)
if err != nil {
return err
}
msg, err := parseExecuteArgs(args[0], args[1], senderAddr)
msg, err := parseExecuteArgs(args[0], args[1], senderAddr, cmd.Flags())
if err != nil {
return err
}
@@ -210,7 +209,7 @@ func GenesisListContractsCmd(defaultNodeHome string) *cobra.Command {
func GenesisListCodesCmd(defaultNodeHome string) *cobra.Command {
cmd := &cobra.Command{
Use: "list-codes ",
Short: "Lists all codes from genesis contract dump and queued messages",
Short: "Lists all codes from genesis code dump and queued messages",
Args: cobra.ExactArgs(0),
RunE: func(cmd *cobra.Command, args []string) error {
type CodeMeta struct {
@@ -353,7 +352,11 @@ func codeSeqValue(state *types.GenesisState) uint64 {
return seq
}
func getActorAddress(cmd *cobra.Command, actorArg string) (sdk.AccAddress, error) {
func getActorAddress(cmd *cobra.Command) (sdk.AccAddress, error) {
actorArg, err := cmd.Flags().GetString(flagRunAs)
if err != nil {
return nil, fmt.Errorf("run-as: %s", err.Error())
}
if len(actorArg) == 0 {
return nil, errors.New("run-as address is required")
}

View File

@@ -1,6 +1,8 @@
package cli
import (
"fmt"
"github.com/CosmWasm/wasmd/x/wasm/internal/types"
"github.com/cosmos/cosmos-sdk/client"
"github.com/cosmos/cosmos-sdk/client/tx"
@@ -9,7 +11,6 @@ import (
govtypes "github.com/cosmos/cosmos-sdk/x/gov/types"
"github.com/pkg/errors"
"github.com/spf13/cobra"
"github.com/spf13/viper"
)
func ProposalStoreCodeCmd() *cobra.Command {
@@ -23,27 +24,44 @@ func ProposalStoreCodeCmd() *cobra.Command {
return err
}
src, err := parseStoreCodeArgs(args[0], clientCtx.FromAddress)
src, err := parseStoreCodeArgs(args[0], clientCtx.FromAddress, cmd.Flags())
if err != nil {
return err
}
if len(viper.GetString(flagRunAs)) == 0 {
runAs, err := cmd.Flags().GetString(flagRunAs)
if err != nil {
return fmt.Errorf("run-as: %s", err)
}
if len(runAs) == 0 {
return errors.New("run-as address is required")
}
proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle)
if err != nil {
return fmt.Errorf("proposal title: %s", err)
}
proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription)
if err != nil {
return fmt.Errorf("proposal description: %s", err)
}
depositArg, err := cmd.Flags().GetString(cli.FlagDeposit)
if err != nil {
return err
}
deposit, err := sdk.ParseCoinsNormalized(depositArg)
if err != nil {
return err
}
content := types.StoreCodeProposal{
Title: viper.GetString(cli.FlagTitle),
Description: viper.GetString(cli.FlagDescription),
RunAs: viper.GetString(flagRunAs),
Title: proposalTitle,
Description: proposalDescr,
RunAs: runAs,
WASMByteCode: src.WASMByteCode,
Source: src.Source,
Builder: src.Builder,
InstantiatePermission: src.InstantiatePermission,
}
deposit, err := sdk.ParseCoinsNormalized(viper.GetString(cli.FlagDeposit))
if err != nil {
return err
}
msg, err := govtypes.NewMsgSubmitProposal(&content, deposit, clientCtx.GetFromAddress())
if err != nil {
return err
@@ -83,17 +101,39 @@ func ProposalInstantiateContractCmd() *cobra.Command {
return err
}
src, err := parseInstantiateArgs(args[0], args[1], clientCtx.FromAddress)
src, err := parseInstantiateArgs(args[0], args[1], clientCtx.FromAddress, cmd.Flags())
if err != nil {
return err
}
if len(viper.GetString(flagRunAs)) == 0 {
return errors.New("creator address is required")
runAs, err := cmd.Flags().GetString(flagRunAs)
if err != nil {
return fmt.Errorf("run-as: %s", err)
}
if len(runAs) == 0 {
return errors.New("run-as address is required")
}
proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle)
if err != nil {
return fmt.Errorf("proposal title: %s", err)
}
proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription)
if err != nil {
return fmt.Errorf("proposal description: %s", err)
}
depositArg, err := cmd.Flags().GetString(cli.FlagDeposit)
if err != nil {
return err
}
deposit, err := sdk.ParseCoinsNormalized(depositArg)
if err != nil {
return err
}
content := types.InstantiateContractProposal{
Title: viper.GetString(cli.FlagTitle),
Description: viper.GetString(cli.FlagDescription),
RunAs: viper.GetString(flagRunAs),
Title: proposalTitle,
Description: proposalDescr,
RunAs: runAs,
Admin: src.Admin,
CodeID: src.CodeID,
Label: src.Label,
@@ -101,11 +141,6 @@ func ProposalInstantiateContractCmd() *cobra.Command {
InitFunds: src.InitFunds,
}
deposit, err := sdk.ParseCoinsNormalized(viper.GetString(cli.FlagDeposit))
if err != nil {
return err
}
msg, err := govtypes.NewMsgSubmitProposal(&content, deposit, clientCtx.GetFromAddress())
if err != nil {
return err
@@ -148,22 +183,37 @@ func ProposalMigrateContractCmd() *cobra.Command {
return err
}
if len(viper.GetString(flagRunAs)) == 0 {
runAs, err := cmd.Flags().GetString(flagRunAs)
if err != nil {
return fmt.Errorf("run-as: %s", err)
}
if len(runAs) == 0 {
return errors.New("run-as address is required")
}
proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle)
if err != nil {
return fmt.Errorf("proposal title: %s", err)
}
proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription)
if err != nil {
return fmt.Errorf("proposal description: %s", err)
}
depositArg, err := cmd.Flags().GetString(cli.FlagDeposit)
if err != nil {
return err
}
deposit, err := sdk.ParseCoinsNormalized(depositArg)
if err != nil {
return err
}
content := types.MigrateContractProposal{
Title: viper.GetString(cli.FlagTitle),
Description: viper.GetString(cli.FlagDescription),
Title: proposalTitle,
Description: proposalDescr,
Contract: src.Contract,
CodeID: src.CodeID,
MigrateMsg: src.MigrateMsg,
RunAs: viper.GetString(flagRunAs),
}
deposit, err := sdk.ParseCoinsNormalized(viper.GetString(cli.FlagDeposit))
if err != nil {
return err
RunAs: runAs,
}
msg, err := govtypes.NewMsgSubmitProposal(&content, deposit, clientCtx.GetFromAddress())
@@ -205,18 +255,30 @@ func ProposalUpdateContractAdminCmd() *cobra.Command {
return err
}
content := types.UpdateAdminProposal{
Title: viper.GetString(cli.FlagTitle),
Description: viper.GetString(cli.FlagDescription),
Contract: src.Contract,
NewAdmin: src.NewAdmin,
proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle)
if err != nil {
return fmt.Errorf("proposal title: %s", err)
}
deposit, err := sdk.ParseCoinsNormalized(viper.GetString(cli.FlagDeposit))
proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription)
if err != nil {
return fmt.Errorf("proposal description: %s", err)
}
depositArg, err := cmd.Flags().GetString(cli.FlagDeposit)
if err != nil {
return fmt.Errorf("deposit: %s", err)
}
deposit, err := sdk.ParseCoinsNormalized(depositArg)
if err != nil {
return err
}
content := types.UpdateAdminProposal{
Title: proposalTitle,
Description: proposalDescr,
Contract: src.Contract,
NewAdmin: src.NewAdmin,
}
msg, err := govtypes.NewMsgSubmitProposal(&content, deposit, clientCtx.GetFromAddress())
if err != nil {
return err
@@ -249,17 +311,29 @@ func ProposalClearContractAdminCmd() *cobra.Command {
return err
}
content := types.ClearAdminProposal{
Title: viper.GetString(cli.FlagTitle),
Description: viper.GetString(cli.FlagDescription),
Contract: args[0],
proposalTitle, err := cmd.Flags().GetString(cli.FlagTitle)
if err != nil {
return fmt.Errorf("proposal title: %s", err)
}
deposit, err := sdk.ParseCoinsNormalized(viper.GetString(cli.FlagDeposit))
proposalDescr, err := cmd.Flags().GetString(cli.FlagDescription)
if err != nil {
return fmt.Errorf("proposal description: %s", err)
}
depositArg, err := cmd.Flags().GetString(cli.FlagDeposit)
if err != nil {
return fmt.Errorf("deposit: %s", err)
}
deposit, err := sdk.ParseCoinsNormalized(depositArg)
if err != nil {
return err
}
content := types.ClearAdminProposal{
Title: proposalTitle,
Description: proposalDescr,
Contract: args[0],
}
msg, err := govtypes.NewMsgSubmitProposal(&content, deposit, clientCtx.GetFromAddress())
if err != nil {
return err

View File

@@ -1,6 +1,7 @@
package cli
import (
"errors"
"fmt"
"io/ioutil"
"strconv"
@@ -13,7 +14,7 @@ import (
sdk "github.com/cosmos/cosmos-sdk/types"
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
"github.com/spf13/cobra"
"github.com/spf13/viper"
flag "github.com/spf13/pflag"
)
const (
@@ -56,7 +57,7 @@ func StoreCodeCmd() *cobra.Command {
Args: cobra.ExactArgs(1),
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientTxContext(cmd)
msg, err := parseStoreCodeArgs(args[0], clientCtx.GetFromAddress())
msg, err := parseStoreCodeArgs(args[0], clientCtx.GetFromAddress(), cmd.Flags())
if err != nil {
return err
}
@@ -75,7 +76,7 @@ func StoreCodeCmd() *cobra.Command {
return cmd
}
func parseStoreCodeArgs(file string, sender sdk.AccAddress) (types.MsgStoreCode, error) {
func parseStoreCodeArgs(file string, sender sdk.AccAddress, flags *flag.FlagSet) (types.MsgStoreCode, error) {
wasm, err := ioutil.ReadFile(file)
if err != nil {
return types.MsgStoreCode{}, err
@@ -93,23 +94,48 @@ func parseStoreCodeArgs(file string, sender sdk.AccAddress) (types.MsgStoreCode,
}
var perm *types.AccessConfig
if onlyAddrStr := viper.GetString(flagInstantiateByAddress); onlyAddrStr != "" {
onlyAddrStr, err := flags.GetString(flagInstantiateByAddress)
if err != nil {
return types.MsgStoreCode{}, fmt.Errorf("instantiate by address: %s", err)
}
if onlyAddrStr != "" {
allowedAddr, err := sdk.AccAddressFromBech32(onlyAddrStr)
if err != nil {
return types.MsgStoreCode{}, sdkerrors.Wrap(err, flagInstantiateByAddress)
}
x := types.AccessTypeOnlyAddress.With(allowedAddr)
perm = &x
} else if everybody := viper.GetBool(flagInstantiateByEverybody); everybody {
perm = &types.AllowEverybody
} else {
everybodyStr, err := flags.GetString(flagInstantiateByEverybody)
if err != nil {
return types.MsgStoreCode{}, fmt.Errorf("instantiate by everybody: %s", err)
}
if everybodyStr != "" {
ok, err := strconv.ParseBool(everybodyStr)
if err != nil {
return types.MsgStoreCode{}, fmt.Errorf("boolean value expected for instantiate by everybody: %s", err)
}
if ok {
perm = &types.AllowEverybody
}
}
}
// build and sign the transaction, then broadcast to Tendermint
source, err := flags.GetString(flagSource)
if err != nil {
return types.MsgStoreCode{}, fmt.Errorf("source: %s", err)
}
builder, err := flags.GetString(flagBuilder)
if err != nil {
return types.MsgStoreCode{}, fmt.Errorf("builder: %s", err)
}
msg := types.MsgStoreCode{
Sender: sender.String(),
WASMByteCode: wasm,
Source: viper.GetString(flagSource),
Builder: viper.GetString(flagBuilder),
Source: source,
Builder: builder,
InstantiatePermission: perm,
}
return msg, nil
@@ -125,7 +151,7 @@ func InstantiateContractCmd() *cobra.Command {
clientCtx, err := client.GetClientTxContext(cmd)
msg, err := parseInstantiateArgs(args[0], args[1], clientCtx.GetFromAddress())
msg, err := parseInstantiateArgs(args[0], args[1], clientCtx.GetFromAddress(), cmd.Flags())
if err != nil {
return err
}
@@ -143,25 +169,33 @@ func InstantiateContractCmd() *cobra.Command {
return cmd
}
func parseInstantiateArgs(rawCodeID, initMsg string, sender sdk.AccAddress) (types.MsgInstantiateContract, error) {
func parseInstantiateArgs(rawCodeID, initMsg string, sender sdk.AccAddress, flags *flag.FlagSet) (types.MsgInstantiateContract, error) {
// get the id of the code to instantiate
codeID, err := strconv.ParseUint(rawCodeID, 10, 64)
if err != nil {
return types.MsgInstantiateContract{}, err
}
amounstStr := viper.GetString(flagAmount)
amount, err := sdk.ParseCoinsNormalized(amounstStr)
amountStr, err := flags.GetString(flagAmount)
if err != nil {
return types.MsgInstantiateContract{}, err
return types.MsgInstantiateContract{}, fmt.Errorf("amount: %s", err)
}
amount, err := sdk.ParseCoinsNormalized(amountStr)
if err != nil {
return types.MsgInstantiateContract{}, fmt.Errorf("amount: %s", err)
}
label, err := flags.GetString(flagLabel)
if err != nil {
return types.MsgInstantiateContract{}, fmt.Errorf("label: %s", err)
}
label := viper.GetString(flagLabel)
if label == "" {
return types.MsgInstantiateContract{}, fmt.Errorf("Label is required on all contracts")
return types.MsgInstantiateContract{}, errors.New("label is required on all contracts")
}
adminStr, err := flags.GetString(flagAdmin)
if err != nil {
return types.MsgInstantiateContract{}, fmt.Errorf("admin: %s", err)
}
adminStr := viper.GetString(flagAdmin)
// build and sign the transaction, then broadcast to Tendermint
msg := types.MsgInstantiateContract{
Sender: sender.String(),
@@ -183,7 +217,7 @@ func ExecuteContractCmd() *cobra.Command {
RunE: func(cmd *cobra.Command, args []string) error {
clientCtx, err := client.GetClientTxContext(cmd)
msg, err := parseExecuteArgs(args[0], args[1], clientCtx.GetFromAddress())
msg, err := parseExecuteArgs(args[0], args[1], clientCtx.GetFromAddress(), cmd.Flags())
if err != nil {
return err
}
@@ -199,9 +233,13 @@ func ExecuteContractCmd() *cobra.Command {
return cmd
}
func parseExecuteArgs(contractAddr string, execMsg string, sender sdk.AccAddress) (types.MsgExecuteContract, error) {
amounstStr := viper.GetString(flagAmount)
amount, err := sdk.ParseCoinsNormalized(amounstStr)
func parseExecuteArgs(contractAddr string, execMsg string, sender sdk.AccAddress, flags *flag.FlagSet) (types.MsgExecuteContract, error) {
amountStr, err := flags.GetString(flagAmount)
if err != nil {
return types.MsgExecuteContract{}, fmt.Errorf("amount: %s", err)
}
amount, err := sdk.ParseCoinsNormalized(amountStr)
if err != nil {
return types.MsgExecuteContract{}, err
}

View File

@@ -30,7 +30,7 @@ func TestGovRestHandlers(t *testing.T) {
"fees": []dict{{"denom": "ustake", "amount": "1000000"}},
}
)
encodingConfig := keeper.MakeEncodingConfig()
encodingConfig := keeper.MakeEncodingConfig(t)
clientCtx := client.Context{}.
WithJSONMarshaler(encodingConfig.Marshaler).
WithTxConfig(encodingConfig.TxConfig).

View File

@@ -542,7 +542,7 @@ func setupKeeper(t *testing.T) (*Keeper, sdk.Context, []sdk.StoreKey) {
Time: time.Date(2020, time.April, 22, 12, 0, 0, 0, time.UTC),
}, false, log.NewNopLogger())
encodingConfig := MakeEncodingConfig()
encodingConfig := MakeEncodingConfig(t)
wasmConfig := wasmTypes.DefaultWasmConfig()
pk := paramskeeper.NewKeeper(encodingConfig.Marshaler, encodingConfig.Amino, keyParams, tkeyParams)

View File

@@ -72,7 +72,7 @@ func mustParse(t *testing.T, data []byte, res interface{}) {
const MaskFeatures = "staking,mask"
func TestMaskReflectContractSend(t *testing.T) {
cdc := MakeTestCodec()
cdc := MakeTestCodec(t)
ctx, keepers := CreateTestInput(t, false, MaskFeatures, maskEncoders(cdc), nil)
accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper
@@ -154,7 +154,7 @@ func TestMaskReflectContractSend(t *testing.T) {
}
func TestMaskReflectCustomMsg(t *testing.T) {
cdc := MakeTestCodec()
cdc := MakeTestCodec(t)
ctx, keepers := CreateTestInput(t, false, MaskFeatures, maskEncoders(cdc), maskPlugins())
accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper
@@ -248,7 +248,7 @@ func TestMaskReflectCustomMsg(t *testing.T) {
}
func TestMaskReflectCustomQuery(t *testing.T) {
cdc := MakeTestCodec()
cdc := MakeTestCodec(t)
ctx, keepers := CreateTestInput(t, false, MaskFeatures, maskEncoders(cdc), maskPlugins())
accKeeper, keeper, bankKeeper := keepers.AccountKeeper, keepers.WasmKeeper, keepers.BankKeeper
@@ -302,7 +302,7 @@ type maskState struct {
}
func TestMaskReflectWasmQueries(t *testing.T) {
ctx, keepers := CreateTestInput(t, false, MaskFeatures, maskEncoders(MakeTestCodec()), nil)
ctx, keepers := CreateTestInput(t, false, MaskFeatures, maskEncoders(MakeTestCodec(t)), nil)
accKeeper, keeper := keepers.AccountKeeper, keepers.WasmKeeper
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))
@@ -373,7 +373,7 @@ func TestMaskReflectWasmQueries(t *testing.T) {
}
func TestWasmRawQueryWithNil(t *testing.T) {
ctx, keepers := CreateTestInput(t, false, MaskFeatures, maskEncoders(MakeTestCodec()), nil)
ctx, keepers := CreateTestInput(t, false, MaskFeatures, maskEncoders(MakeTestCodec(t)), nil)
accKeeper, keeper := keepers.AccountKeeper, keepers.WasmKeeper
deposit := sdk.NewCoins(sdk.NewInt64Coin("denom", 100000))

View File

@@ -6,7 +6,6 @@ import (
"encoding/json"
"fmt"
"io/ioutil"
"os"
"testing"
"time"
@@ -84,10 +83,11 @@ var ModuleBasics = module.NewBasicManager(
transfer.AppModuleBasic{},
)
func MakeTestCodec() codec.Marshaler {
return MakeEncodingConfig().Marshaler
func MakeTestCodec(t *testing.T) codec.Marshaler {
return MakeEncodingConfig(t).Marshaler
}
func MakeEncodingConfig() params2.EncodingConfig {
func MakeEncodingConfig(_ *testing.T) params2.EncodingConfig {
amino := codec.NewLegacyAmino()
interfaceRegistry := codectypes.NewInterfaceRegistry()
marshaler := codec.NewProtoCodec(interfaceRegistry)
@@ -125,9 +125,7 @@ type TestKeepers struct {
// encoders can be nil to accept the defaults, or set it to override some of the message handlers (like default)
func CreateTestInput(t *testing.T, isCheckTx bool, supportedFeatures string, encoders *MessageEncoders, queriers *QueryPlugins) (sdk.Context, TestKeepers) {
tempDir, err := ioutil.TempDir("", "wasm")
require.NoError(t, err)
t.Cleanup(func() { os.RemoveAll(tempDir) })
tempDir := t.TempDir()
keyWasm := sdk.NewKVStoreKey(types.StoreKey)
keyAcc := sdk.NewKVStoreKey(authtypes.StoreKey)
@@ -154,7 +152,7 @@ func CreateTestInput(t *testing.T, isCheckTx bool, supportedFeatures string, enc
Height: 1234567,
Time: time.Date(2020, time.April, 22, 12, 0, 0, 0, time.UTC),
}, isCheckTx, log.NewNopLogger())
encodingConfig := MakeEncodingConfig()
encodingConfig := MakeEncodingConfig(t)
appCodec, legacyAmino := encodingConfig.Marshaler, encodingConfig.Amino
paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, keyParams, tkeyParams)
@@ -216,7 +214,7 @@ func CreateTestInput(t *testing.T, isCheckTx bool, supportedFeatures string, enc
// set some funds ot pay out validatores, based on code from:
// https://github.com/cosmos/cosmos-sdk/blob/fea231556aee4d549d7551a6190389c4328194eb/x/distribution/keeper/keeper_test.go#L50-L57
distrAcc := distKeeper.GetDistributionAccount(ctx)
err = bankKeeper.SetBalances(ctx, distrAcc.GetAddress(), sdk.NewCoins(
err := bankKeeper.SetBalances(ctx, distrAcc.GetAddress(), sdk.NewCoins(
sdk.NewCoin("stake", sdk.NewInt(2000000)),
))
require.NoError(t, err)