diff --git a/app/app.go b/app/app.go index 321ef2f7d..706592a60 100644 --- a/app/app.go +++ b/app/app.go @@ -1,7 +1,10 @@ package app import ( + "cosmossdk.io/client/v2/autocli" + "cosmossdk.io/core/appmodule" "encoding/json" + authcodec "github.com/cosmos/cosmos-sdk/x/auth/codec" "io" abci "github.com/cometbft/cometbft/abci/types" @@ -362,6 +365,26 @@ func (app *IrisApp) Init() { iristypes.InjectCodec(app.legacyAmino, app.interfaceRegistry) } +// AutoCliOpts returns the autocli options for the app. +func (app *IrisApp) AutoCliOpts() autocli.AppOptions { + modules := make(map[string]appmodule.AppModule, 0) + for _, m := range app.mm.Modules { + if moduleWithName, ok := m.(module.HasName); ok { + moduleName := moduleWithName.Name() + if appModule, ok := moduleWithName.(appmodule.AppModule); ok { + modules[moduleName] = appModule + } + } + } + + return autocli.AppOptions{ + Modules: modules, + AddressCodec: authcodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()), + ValidatorAddressCodec: authcodec.NewBech32Codec(sdk.GetConfig().GetBech32ValidatorAddrPrefix()), + ConsensusAddressCodec: authcodec.NewBech32Codec(sdk.GetConfig().GetBech32ConsensusAddrPrefix()), + } +} + // NoOpMempoolOption returns a function that sets up a no-op mempool for the given BaseApp. // // The function takes a pointer to a BaseApp as a parameter and returns nothing. diff --git a/cmd/iris/cmd/root.go b/cmd/iris/cmd/root.go index 0549f463f..8c29ed5b9 100644 --- a/cmd/iris/cmd/root.go +++ b/cmd/iris/cmd/root.go @@ -3,6 +3,9 @@ package cmd import ( "errors" "fmt" + addresscodec "github.com/cosmos/cosmos-sdk/codec/address" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/irisnet/irishub/v4/testutil" "io" "os" @@ -11,6 +14,7 @@ import ( tmcfg "github.com/cometbft/cometbft/config" tmcli "github.com/cometbft/cometbft/libs/cli" + "cosmossdk.io/client/v2/autocli" "cosmossdk.io/log" dbm "github.com/cosmos/cosmos-db" "github.com/cosmos/cosmos-sdk/client" @@ -38,6 +42,9 @@ import ( // NewRootCmd creates a new root command for simd. It is called once in the // main function. func NewRootCmd() (*cobra.Command, params.EncodingConfig) { + + tempApplication := app.NewIrisApp(log.NewNopLogger(), dbm.NewMemDB(), nil, true, app.RegisterEncodingConfig(), testutil.EmptyAppOptions{}) + encodingConfig := app.RegisterEncodingConfig() initClientCtx := client.Context{}. WithCodec(encodingConfig.Marshaler). @@ -87,9 +94,24 @@ func NewRootCmd() (*cobra.Command, params.EncodingConfig) { initRootCmd(rootCmd, encodingConfig) + autoCliOpts := enrichAutoCliOpts(tempApplication.AutoCliOpts(), initClientCtx) + if err := autoCliOpts.EnhanceRootCommand(rootCmd); err != nil { + panic(err) + } + return rootCmd, encodingConfig } +func enrichAutoCliOpts(autoCliOpts autocli.AppOptions, clientCtx client.Context) autocli.AppOptions { + autoCliOpts.AddressCodec = addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32AccountAddrPrefix()) + autoCliOpts.ValidatorAddressCodec = addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32ValidatorAddrPrefix()) + autoCliOpts.ConsensusAddressCodec = addresscodec.NewBech32Codec(sdk.GetConfig().GetBech32ConsensusAddrPrefix()) + + autoCliOpts.ClientCtx = clientCtx + + return autoCliOpts +} + // initTendermintConfig helps to override default Tendermint Config values. // return tmcfg.DefaultConfig if no custom configuration is required for the application. func initTendermintConfig() *tmcfg.Config { diff --git a/go.mod b/go.mod index 2ba3045ea..bbda93398 100644 --- a/go.mod +++ b/go.mod @@ -46,6 +46,8 @@ require ( ) require ( + cosmossdk.io/client/v2 v2.0.0-beta.6 + cosmossdk.io/core v0.11.1 cosmossdk.io/log v1.4.1 cosmossdk.io/store v1.1.1 cosmossdk.io/x/evidence v0.1.1 @@ -70,9 +72,7 @@ require ( cloud.google.com/go/auth v0.6.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect cloud.google.com/go/compute/metadata v0.3.0 // indirect - cosmossdk.io/client/v2 v2.0.0-beta.3 // indirect cosmossdk.io/collections v0.4.0 // indirect - cosmossdk.io/core v0.11.1 // indirect cosmossdk.io/simapp v0.0.0-20240118210941-3897926e722e // indirect cosmossdk.io/tools/rosetta v0.2.1-0.20230613133644-0a778132a60f // indirect cosmossdk.io/x/circuit v0.1.1 // indirect @@ -266,6 +266,7 @@ require ( ) replace ( + cosmossdk.io/api => github.com/informalsystems/cosmos-sdk/api v0.7.5-lsm github.com/cosmos/cosmos-sdk => github.com/cosmos/cosmos-sdk v0.50.10-lsm // use bianjieai fork of ethermint github.com/evmos/ethermint => github.com/bianjieai/ethermint v0.22.0-irishub-20240512.0.20241209074239-dfcd609c9182 diff --git a/go.sum b/go.sum index bb8b38d21..0c8c7a17f 100644 --- a/go.sum +++ b/go.sum @@ -190,10 +190,8 @@ cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuW cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= -cosmossdk.io/api v0.7.5 h1:eMPTReoNmGUm8DeiQL9DyM8sYDjEhWzL1+nLbI9DqtQ= -cosmossdk.io/api v0.7.5/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= -cosmossdk.io/client/v2 v2.0.0-beta.3 h1:+TTuH0DwQYsUq2JFAl3fDZzKq5gQG7nt3dAattkjFDU= -cosmossdk.io/client/v2 v2.0.0-beta.3/go.mod h1:CZcL41HpJPOOayTCO28j8weNBQprG+SRiKX39votypo= +cosmossdk.io/client/v2 v2.0.0-beta.6 h1:CygEwABxbwFmqgLINBb3WGVwzaN4yRgB9ZtIGQzhRNQ= +cosmossdk.io/client/v2 v2.0.0-beta.6/go.mod h1:4p0P6o0ro+FizakJUYS9SeM94RNbv0thLmkHRw5o5as= cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= cosmossdk.io/core v0.11.1 h1:h9WfBey7NAiFfIcUhDVNS503I2P2HdZLebJlUIs8LPA= @@ -886,6 +884,8 @@ github.com/influxdata/promql/v2 v2.12.0/go.mod h1:fxOPu+DY0bqCTCECchSRtWfc+0X19y github.com/influxdata/roaring v0.4.13-0.20180809181101-fc520f41fab6/go.mod h1:bSgUQ7q5ZLSO+bKBGqJiCBGAl+9DxyW63zLTujjUlOE= github.com/influxdata/tdigest v0.0.0-20181121200506-bf2b5ad3c0a9/go.mod h1:Js0mqiSBE6Ffsg94weZZ2c+v/ciT8QRHFOap7EKDrR0= github.com/influxdata/usage-client v0.0.0-20160829180054-6d3895376368/go.mod h1:Wbbw6tYNvwa5dlB6304Sd+82Z3f7PmVZHVKU637d4po= +github.com/informalsystems/cosmos-sdk/api v0.7.5-lsm h1:M0+CQZLf2yS41TiWaiKw8nF5vlPaFDmVfwfyMHViRZk= +github.com/informalsystems/cosmos-sdk/api v0.7.5-lsm/go.mod h1:IcxpYS5fMemZGqyYtErK7OqvdM0C8kdW3dq8Q/XIG38= github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= github.com/jackpal/go-nat-pmp v1.0.2/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU=