refactor(simapp,runtime): audit changes (#21310)
This commit is contained in:
parent
8e0efbdff9
commit
03d3a93991
20
UPGRADING.md
20
UPGRADING.md
@ -119,8 +119,22 @@ need to remove them both from your app.go code, they will yield to unresolvable
|
||||
|
||||
The Cosmos SDK now supports unordered transactions. This means that transactions
|
||||
can be executed in any order and doesn't require the client to deal with or manage
|
||||
nonces. This also means the order of execution is not guaranteed. To enable unordered
|
||||
transactions in your application:
|
||||
nonces. This also means the order of execution is not guaranteed.
|
||||
|
||||
Unordered transactions are automatically enabled when using `depinject` / app di, simply supply the `servertypes.AppOptions` in `app.go`:
|
||||
|
||||
```diff
|
||||
depinject.Supply(
|
||||
+ // supply the application options
|
||||
+ appOpts,
|
||||
// supply the logger
|
||||
logger,
|
||||
)
|
||||
```
|
||||
|
||||
<details>
|
||||
<summary>Step-by-step Wiring </summary>
|
||||
If you are still using the legacy wiring, you must enable unordered transactions manually:
|
||||
|
||||
* Update the `App` constructor to create, load, and save the unordered transaction
|
||||
manager.
|
||||
@ -184,6 +198,8 @@ transactions in your application:
|
||||
}
|
||||
```
|
||||
|
||||
</details>
|
||||
|
||||
To submit an unordered transaction, the client must set the `unordered` flag to
|
||||
`true` and ensure a reasonable `timeout_height` is set. The `timeout_height` is
|
||||
used as a TTL for the transaction and is used to provide replay protection. See
|
||||
|
||||
@ -13,6 +13,7 @@ import (
|
||||
"cosmossdk.io/core/legacy"
|
||||
"cosmossdk.io/log"
|
||||
storetypes "cosmossdk.io/store/types"
|
||||
"cosmossdk.io/x/auth/ante/unorderedtx"
|
||||
authtx "cosmossdk.io/x/auth/tx"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/baseapp"
|
||||
@ -41,7 +42,9 @@ import (
|
||||
type App struct {
|
||||
*baseapp.BaseApp
|
||||
|
||||
ModuleManager *module.Manager
|
||||
ModuleManager *module.Manager
|
||||
UnorderedTxManager *unorderedtx.Manager
|
||||
|
||||
configurator module.Configurator // nolint:staticcheck // SA1019: Configurator is deprecated but still used in runtime v1.
|
||||
config *runtimev1alpha1.Module
|
||||
storeKeys []storetypes.StoreKey
|
||||
@ -154,6 +157,20 @@ func (a *App) Load(loadLatest bool) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Close closes all necessary application resources.
|
||||
// It implements servertypes.Application.
|
||||
func (a *App) Close() error {
|
||||
// the unordered tx manager could be nil (unlikely but possible)
|
||||
// if the app has no app options supplied.
|
||||
if a.UnorderedTxManager != nil {
|
||||
if err := a.UnorderedTxManager.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return a.BaseApp.Close()
|
||||
}
|
||||
|
||||
// PreBlocker application updates every pre block
|
||||
func (a *App) PreBlocker(ctx sdk.Context, _ *abci.FinalizeBlockRequest) error {
|
||||
return a.ModuleManager.PreBlock(ctx)
|
||||
@ -171,16 +188,14 @@ func (a *App) EndBlocker(ctx sdk.Context) (sdk.EndBlock, error) {
|
||||
|
||||
// Precommiter application updates every commit
|
||||
func (a *App) Precommiter(ctx sdk.Context) {
|
||||
err := a.ModuleManager.Precommit(ctx)
|
||||
if err != nil {
|
||||
if err := a.ModuleManager.Precommit(ctx); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
// PrepareCheckStater application updates every commit
|
||||
func (a *App) PrepareCheckStater(ctx sdk.Context) {
|
||||
err := a.ModuleManager.PrepareCheckState(ctx)
|
||||
if err != nil {
|
||||
if err := a.ModuleManager.PrepareCheckState(ctx); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
@ -247,11 +262,6 @@ func (a *App) DefaultGenesis() map[string]json.RawMessage {
|
||||
return a.ModuleManager.DefaultGenesis()
|
||||
}
|
||||
|
||||
// GetStoreKeys returns all the stored store keys.
|
||||
func (a *App) GetStoreKeys() []storetypes.StoreKey {
|
||||
return a.storeKeys
|
||||
}
|
||||
|
||||
// SetInitChainer sets the init chainer function
|
||||
// It wraps `BaseApp.SetInitChainer` to allow setting a custom init chainer from an app.
|
||||
func (a *App) SetInitChainer(initChainer sdk.InitChainer) {
|
||||
@ -259,6 +269,23 @@ func (a *App) SetInitChainer(initChainer sdk.InitChainer) {
|
||||
a.BaseApp.SetInitChainer(initChainer)
|
||||
}
|
||||
|
||||
// GetStoreKeys returns all the stored store keys.
|
||||
func (a *App) GetStoreKeys() []storetypes.StoreKey {
|
||||
return a.storeKeys
|
||||
}
|
||||
|
||||
// GetKey returns the KVStoreKey for the provided store key.
|
||||
//
|
||||
// NOTE: This should only be used in testing.
|
||||
func (a *App) GetKey(storeKey string) *storetypes.KVStoreKey {
|
||||
sk := a.UnsafeFindStoreKey(storeKey)
|
||||
kvStoreKey, ok := sk.(*storetypes.KVStoreKey)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return kvStoreKey
|
||||
}
|
||||
|
||||
// UnsafeFindStoreKey fetches a registered StoreKey from the App in linear time.
|
||||
//
|
||||
// NOTE: This should only be used in testing.
|
||||
|
||||
@ -2,11 +2,19 @@ package runtime
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io"
|
||||
"path/filepath"
|
||||
|
||||
dbm "github.com/cosmos/cosmos-db"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
storetypes "cosmossdk.io/store/types"
|
||||
"cosmossdk.io/x/auth/ante/unorderedtx"
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/baseapp"
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
servertypes "github.com/cosmos/cosmos-sdk/server/types"
|
||||
"github.com/cosmos/cosmos-sdk/types/module"
|
||||
"github.com/cosmos/cosmos-sdk/version"
|
||||
)
|
||||
@ -16,6 +24,8 @@ import (
|
||||
// the existing app.go initialization conventions.
|
||||
type AppBuilder struct {
|
||||
app *App
|
||||
|
||||
appOptions servertypes.AppOptions
|
||||
}
|
||||
|
||||
// DefaultGenesis returns a default genesis from the registered modules.
|
||||
@ -40,9 +50,63 @@ func (a *AppBuilder) Build(db dbm.DB, traceStore io.Writer, baseAppOptions ...fu
|
||||
a.app.BaseApp = bApp
|
||||
a.app.configurator = module.NewConfigurator(a.app.cdc, a.app.MsgServiceRouter(), a.app.GRPCQueryRouter())
|
||||
|
||||
if a.appOptions != nil {
|
||||
// register unordered tx manager
|
||||
if err := a.registerUnorderedTxManager(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// register indexer if enabled
|
||||
if err := a.registerIndexer(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
// register services
|
||||
if err := a.app.ModuleManager.RegisterServices(a.app.configurator); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return a.app
|
||||
}
|
||||
|
||||
// register unordered tx manager
|
||||
func (a *AppBuilder) registerUnorderedTxManager() error {
|
||||
// create, start, and load the unordered tx manager
|
||||
utxDataDir := filepath.Join(cast.ToString(a.appOptions.Get(flags.FlagHome)), "data")
|
||||
a.app.UnorderedTxManager = unorderedtx.NewManager(utxDataDir)
|
||||
a.app.UnorderedTxManager.Start()
|
||||
|
||||
if err := a.app.UnorderedTxManager.OnInit(); err != nil {
|
||||
return fmt.Errorf("failed to initialize unordered tx manager: %w", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// register indexer
|
||||
func (a *AppBuilder) registerIndexer() error {
|
||||
// if we have indexer options in app.toml, then enable the built-in indexer framework
|
||||
if indexerOpts := a.appOptions.Get("indexer"); indexerOpts != nil {
|
||||
moduleSet := map[string]any{}
|
||||
for modName, mod := range a.app.ModuleManager.Modules {
|
||||
moduleSet[modName] = mod
|
||||
}
|
||||
|
||||
return a.app.EnableIndexer(indexerOpts, a.kvStoreKeys(), moduleSet)
|
||||
}
|
||||
|
||||
// register legacy streaming services if we don't have the built-in indexer enabled
|
||||
return a.app.RegisterStreamingServices(a.appOptions, a.kvStoreKeys())
|
||||
}
|
||||
|
||||
func (a *AppBuilder) kvStoreKeys() map[string]*storetypes.KVStoreKey {
|
||||
keys := make(map[string]*storetypes.KVStoreKey)
|
||||
for _, k := range a.app.GetStoreKeys() {
|
||||
if kv, ok := k.(*storetypes.KVStoreKey); ok {
|
||||
keys[kv.Name()] = kv
|
||||
}
|
||||
}
|
||||
|
||||
return keys
|
||||
}
|
||||
|
||||
@ -25,6 +25,7 @@ import (
|
||||
"github.com/cosmos/cosmos-sdk/baseapp"
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
servertypes "github.com/cosmos/cosmos-sdk/server/types"
|
||||
"github.com/cosmos/cosmos-sdk/std"
|
||||
"github.com/cosmos/cosmos-sdk/types/module"
|
||||
"github.com/cosmos/cosmos-sdk/types/msgservice"
|
||||
@ -120,7 +121,6 @@ func ProvideApp(
|
||||
appmodule.AppModule,
|
||||
protodesc.Resolver,
|
||||
protoregistry.MessageTypeResolver,
|
||||
error,
|
||||
) {
|
||||
protoFiles := proto.HybridResolver
|
||||
protoTypes := protoregistry.GlobalTypes
|
||||
@ -145,9 +145,9 @@ func ProvideApp(
|
||||
msgServiceRouter: msgServiceRouter,
|
||||
grpcQueryRouter: grpcQueryRouter,
|
||||
}
|
||||
appBuilder := &AppBuilder{app}
|
||||
appBuilder := &AppBuilder{app: app}
|
||||
|
||||
return appBuilder, msgServiceRouter, grpcQueryRouter, appModule{app}, protoFiles, protoTypes, nil
|
||||
return appBuilder, msgServiceRouter, grpcQueryRouter, appModule{app}, protoFiles, protoTypes
|
||||
}
|
||||
|
||||
type AppInputs struct {
|
||||
@ -160,6 +160,7 @@ type AppInputs struct {
|
||||
BaseAppOptions []BaseAppOption
|
||||
InterfaceRegistry codectypes.InterfaceRegistry
|
||||
LegacyAmino legacy.Amino
|
||||
AppOptions servertypes.AppOptions `optional:"true"` // can be nil in client wiring
|
||||
}
|
||||
|
||||
func SetupAppBuilder(inputs AppInputs) {
|
||||
@ -170,6 +171,10 @@ func SetupAppBuilder(inputs AppInputs) {
|
||||
app.ModuleManager = inputs.ModuleManager
|
||||
app.ModuleManager.RegisterInterfaces(inputs.InterfaceRegistry)
|
||||
app.ModuleManager.RegisterLegacyAminoCodec(inputs.LegacyAmino)
|
||||
|
||||
if inputs.AppOptions != nil {
|
||||
inputs.AppBuilder.appOptions = inputs.AppOptions
|
||||
}
|
||||
}
|
||||
|
||||
func registerStoreKey(wrapper *AppBuilder, key storetypes.StoreKey) {
|
||||
|
||||
@ -124,17 +124,15 @@ func (a *AppBuilder[T]) Build(opts ...AppBuilderOption[T]) (*App[T], error) {
|
||||
}
|
||||
a.app.stf = stf
|
||||
|
||||
v := a.viper
|
||||
home := v.GetString(FlagHome)
|
||||
|
||||
storeOpts := rootstore.DefaultStoreOptions()
|
||||
if s := v.Sub("store.options"); s != nil {
|
||||
if s := a.viper.Sub("store.options"); s != nil {
|
||||
if err := s.Unmarshal(&storeOpts); err != nil {
|
||||
return nil, fmt.Errorf("failed to store options: %w", err)
|
||||
}
|
||||
}
|
||||
|
||||
scRawDb, err := db.NewDB(db.DBType(v.GetString("store.app-db-backend")), "application", filepath.Join(home, "data"), nil)
|
||||
home := a.viper.GetString(FlagHome)
|
||||
scRawDb, err := db.NewDB(db.DBType(a.viper.GetString("store.app-db-backend")), "application", filepath.Join(home, "data"), nil)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
@ -148,7 +148,7 @@ type AppInputs struct {
|
||||
InterfaceRegistrar registry.InterfaceRegistrar
|
||||
LegacyAmino legacy.Amino
|
||||
Logger log.Logger
|
||||
Viper *viper.Viper `optional:"true"`
|
||||
Viper *viper.Viper `optional:"true"` // can be nil in client wiring
|
||||
}
|
||||
|
||||
func SetupAppBuilder(inputs AppInputs) {
|
||||
|
||||
@ -45,8 +45,9 @@ import (
|
||||
// a command's Context.
|
||||
const ServerContextKey = sdk.ContextKey("server.context")
|
||||
|
||||
// Context server context
|
||||
// Deprecated: Do not use since we use viper to track all config
|
||||
// Context is the server context.
|
||||
// Prefer using we use viper a it tracks track all config.
|
||||
// See core/context/server_context.go.
|
||||
type Context struct {
|
||||
Viper *viper.Viper
|
||||
Config *cmtcfg.Config
|
||||
|
||||
@ -32,10 +32,19 @@ It is an exautive list of changes that completes the SimApp section in the [UPGR
|
||||
|
||||
Always refer to the [UPGRADING.md](https://github.com/cosmos/cosmos-sdk/blob/main/UPGRADING.md) to understand the changes.
|
||||
|
||||
* Update module path to new vanity url.
|
||||
* Wire new SDK modules (`epochs`, `accounts`, `protocolpool`).
|
||||
* Remove the crisis module from simapp.
|
||||
* Update `export` function to make use of the new module collections API.
|
||||
* Add example of how to define a custom mint function in `simapp/mint_fn.go`.
|
||||
* Add address codec in client context and signing context.
|
||||
* Update testnet command to match new module APIs.
|
||||
* [#20409](https://github.com/cosmos/cosmos-sdk/pull/20409) Add `tx` as `SkipStoreKeys` in `app_config.go`.
|
||||
* [#20485](https://github.com/cosmos/cosmos-sdk/pull/20485) The signature of `x/upgrade/types.UpgradeHandler` has changed to accept `appmodule.VersionMap` from `module.VersionMap`. These types are interchangeable, but usages of `UpradeKeeper.SetUpgradeHandler` may need to adjust their usages to match the new signature.
|
||||
* [#20740](https://github.com/cosmos/cosmos-sdk/pull/20740) Update `genutilcli.Commands` to use the genutil modules from the module manager.
|
||||
* [#20771](https://github.com/cosmos/cosmos-sdk/pull/20771) Use client/v2 `GetNodeHomeDirectory` helper in `app.go` and use the `DefaultNodeHome` constant everywhere in the app.
|
||||
* [#20490](https://github.com/cosmos/cosmos-sdk/pull/20490) Refactor simulations to make use of `testutil/sims` instead of `runsims`.
|
||||
* [#19726](https://github.com/cosmos/cosmos-sdk/pull/19726) Update APIs to match CometBFT v1.
|
||||
|
||||
<!-- TODO: move changelog.md elements to here -->
|
||||
|
||||
|
||||
@ -14,7 +14,6 @@ import (
|
||||
type HandlerOptions struct {
|
||||
ante.HandlerOptions
|
||||
CircuitKeeper circuitante.CircuitBreaker
|
||||
TxManager *unorderedtx.Manager
|
||||
}
|
||||
|
||||
// NewAnteHandler returns an AnteHandler that checks and increments sequence
|
||||
@ -39,7 +38,7 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) {
|
||||
ante.NewExtensionOptionsDecorator(options.ExtensionOptionChecker),
|
||||
ante.NewValidateBasicDecorator(options.Environment),
|
||||
ante.NewTxTimeoutHeightDecorator(options.Environment),
|
||||
ante.NewUnorderedTxDecorator(unorderedtx.DefaultMaxTimeoutDuration, options.TxManager, options.Environment, ante.DefaultSha256Cost),
|
||||
ante.NewUnorderedTxDecorator(unorderedtx.DefaultMaxTimeoutDuration, options.UnorderedTxManager, options.Environment, ante.DefaultSha256Cost),
|
||||
ante.NewValidateMemoDecorator(options.AccountKeeper),
|
||||
ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper),
|
||||
ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker),
|
||||
|
||||
@ -638,9 +638,9 @@ func (app *SimApp) setAnteHandler(txConfig client.TxConfig) {
|
||||
SignModeHandler: txConfig.SignModeHandler(),
|
||||
FeegrantKeeper: app.FeeGrantKeeper,
|
||||
SigGasConsumer: ante.DefaultSigVerificationGasConsumer,
|
||||
UnorderedTxManager: app.UnorderedTxManager,
|
||||
},
|
||||
&app.CircuitKeeper,
|
||||
app.UnorderedTxManager,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
@ -662,9 +662,13 @@ func (app *SimApp) setPostHandler() {
|
||||
app.SetPostHandler(postHandler)
|
||||
}
|
||||
|
||||
// Close implements the Application interface and closes all necessary application
|
||||
// resources.
|
||||
// Close closes all necessary application resources.
|
||||
// It implements servertypes.Application.
|
||||
func (app *SimApp) Close() error {
|
||||
if err := app.BaseApp.Close(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return app.UnorderedTxManager.Close()
|
||||
}
|
||||
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
//nolint:unused,nolintlint // ignore unused code linting and directive `//nolint:unused // ignore unused code linting` is unused for linter "unused"
|
||||
//nolint:unused,nolintlint // ignore unused code linting
|
||||
package simapp
|
||||
|
||||
import (
|
||||
|
||||
@ -6,17 +6,14 @@ import (
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"io"
|
||||
"path/filepath"
|
||||
|
||||
dbm "github.com/cosmos/cosmos-db"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
clienthelpers "cosmossdk.io/client/v2/helpers"
|
||||
"cosmossdk.io/core/appmodule"
|
||||
"cosmossdk.io/core/legacy"
|
||||
"cosmossdk.io/depinject"
|
||||
"cosmossdk.io/log"
|
||||
storetypes "cosmossdk.io/store/types"
|
||||
"cosmossdk.io/x/accounts"
|
||||
"cosmossdk.io/x/auth"
|
||||
"cosmossdk.io/x/auth/ante"
|
||||
@ -44,7 +41,6 @@ import (
|
||||
|
||||
"github.com/cosmos/cosmos-sdk/baseapp"
|
||||
"github.com/cosmos/cosmos-sdk/client"
|
||||
"github.com/cosmos/cosmos-sdk/client/flags"
|
||||
"github.com/cosmos/cosmos-sdk/codec"
|
||||
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
|
||||
"github.com/cosmos/cosmos-sdk/runtime"
|
||||
@ -74,8 +70,6 @@ type SimApp struct {
|
||||
txConfig client.TxConfig
|
||||
interfaceRegistry codectypes.InterfaceRegistry
|
||||
|
||||
UnorderedTxManager *unorderedtx.Manager
|
||||
|
||||
// keepers
|
||||
AccountsKeeper accounts.Keeper
|
||||
AuthKeeper authkeeper.AccountKeeper
|
||||
@ -244,23 +238,6 @@ func NewSimApp(
|
||||
|
||||
app.App = appBuilder.Build(db, traceStore, baseAppOptions...)
|
||||
|
||||
if indexerOpts := appOpts.Get("indexer"); indexerOpts != nil {
|
||||
// if we have indexer options in app.toml, then enable the built-in indexer framework
|
||||
moduleSet := map[string]any{}
|
||||
for modName, mod := range appModules {
|
||||
moduleSet[modName] = mod
|
||||
}
|
||||
err := app.EnableIndexer(indexerOpts, app.kvStoreKeys(), moduleSet)
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
} else {
|
||||
// register legacy streaming services if we don't have the built-in indexer enabled
|
||||
if err := app.RegisterStreamingServices(appOpts, app.kvStoreKeys()); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
|
||||
/**** Module Options ****/
|
||||
|
||||
// RegisterUpgradeHandlers is used for registering any on-chain upgrades.
|
||||
@ -286,26 +263,16 @@ func NewSimApp(
|
||||
// However, when registering a module manually (i.e. that does not support app wiring), the module version map
|
||||
// must be set manually as follow. The upgrade module will de-duplicate the module version map.
|
||||
//
|
||||
// app.SetInitChainer(func(ctx sdk.Context, req *abci.RequestInitChain) (*abci.InitChainResponse, error) {
|
||||
// app.SetInitChainer(func(ctx sdk.Context, req *abci.InitChainRequest) (*abci.InitChainResponse, error) {
|
||||
// app.UpgradeKeeper.SetModuleVersionMap(ctx, app.ModuleManager.GetVersionMap())
|
||||
// return app.App.InitChainer(ctx, req)
|
||||
// })
|
||||
|
||||
// create, start, and load the unordered tx manager
|
||||
utxDataDir := filepath.Join(cast.ToString(appOpts.Get(flags.FlagHome)), "data")
|
||||
app.UnorderedTxManager = unorderedtx.NewManager(utxDataDir)
|
||||
app.UnorderedTxManager.Start()
|
||||
|
||||
if err := app.UnorderedTxManager.OnInit(); err != nil {
|
||||
panic(fmt.Errorf("failed to initialize unordered tx manager: %w", err))
|
||||
}
|
||||
|
||||
// register custom snapshot extensions (if any)
|
||||
if manager := app.SnapshotManager(); manager != nil {
|
||||
err := manager.RegisterExtensions(
|
||||
if err := manager.RegisterExtensions(
|
||||
unorderedtx.NewSnapshotter(app.UnorderedTxManager),
|
||||
)
|
||||
if err != nil {
|
||||
); err != nil {
|
||||
panic(fmt.Errorf("failed to register snapshot extension: %w", err))
|
||||
}
|
||||
}
|
||||
@ -326,15 +293,15 @@ func (app *SimApp) setCustomAnteHandler() {
|
||||
anteHandler, err := NewAnteHandler(
|
||||
HandlerOptions{
|
||||
ante.HandlerOptions{
|
||||
AccountKeeper: app.AuthKeeper,
|
||||
BankKeeper: app.BankKeeper,
|
||||
SignModeHandler: app.txConfig.SignModeHandler(),
|
||||
FeegrantKeeper: app.FeeGrantKeeper,
|
||||
SigGasConsumer: ante.DefaultSigVerificationGasConsumer,
|
||||
Environment: app.AuthKeeper.Environment,
|
||||
AccountKeeper: app.AuthKeeper,
|
||||
BankKeeper: app.BankKeeper,
|
||||
SignModeHandler: app.txConfig.SignModeHandler(),
|
||||
FeegrantKeeper: app.FeeGrantKeeper,
|
||||
SigGasConsumer: ante.DefaultSigVerificationGasConsumer,
|
||||
UnorderedTxManager: app.UnorderedTxManager,
|
||||
Environment: app.AuthKeeper.Environment,
|
||||
},
|
||||
&app.CircuitBreakerKeeper,
|
||||
app.UnorderedTxManager,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
@ -345,12 +312,6 @@ func (app *SimApp) setCustomAnteHandler() {
|
||||
app.SetAnteHandler(anteHandler)
|
||||
}
|
||||
|
||||
// Close implements the Application interface and closes all necessary application
|
||||
// resources.
|
||||
func (app *SimApp) Close() error {
|
||||
return app.UnorderedTxManager.Close()
|
||||
}
|
||||
|
||||
// LegacyAmino returns SimApp's amino codec.
|
||||
//
|
||||
// NOTE: This is solely to be used for testing purposes as it may be desirable
|
||||
@ -382,29 +343,6 @@ func (app *SimApp) TxConfig() client.TxConfig {
|
||||
return app.txConfig
|
||||
}
|
||||
|
||||
// GetKey returns the KVStoreKey for the provided store key.
|
||||
//
|
||||
// NOTE: This is solely to be used for testing purposes.
|
||||
func (app *SimApp) GetKey(storeKey string) *storetypes.KVStoreKey {
|
||||
sk := app.UnsafeFindStoreKey(storeKey)
|
||||
kvStoreKey, ok := sk.(*storetypes.KVStoreKey)
|
||||
if !ok {
|
||||
return nil
|
||||
}
|
||||
return kvStoreKey
|
||||
}
|
||||
|
||||
func (app *SimApp) kvStoreKeys() map[string]*storetypes.KVStoreKey {
|
||||
keys := make(map[string]*storetypes.KVStoreKey)
|
||||
for _, k := range app.GetStoreKeys() {
|
||||
if kv, ok := k.(*storetypes.KVStoreKey); ok {
|
||||
keys[kv.Name()] = kv
|
||||
}
|
||||
}
|
||||
|
||||
return keys
|
||||
}
|
||||
|
||||
// SimulationManager implements the SimulationApp interface
|
||||
func (app *SimApp) SimulationManager() *module.SimulationManager {
|
||||
return app.sm
|
||||
|
||||
@ -103,7 +103,6 @@ func initAppConfig() (string, interface{}) {
|
||||
//
|
||||
// In simapp, we set the min gas prices to 0.
|
||||
srvCfg.MinGasPrices = "0stake"
|
||||
// srvCfg.BaseConfig.IAVLDisableFastNode = true // disable fastnode by default
|
||||
|
||||
// Now we set the custom config default values.
|
||||
customAppConfig := CustomAppConfig{
|
||||
|
||||
@ -1,4 +1,4 @@
|
||||
//nolint:unused,nolintlint // ignore unused code linting and directive `//nolint:unused // ignore unused code linting` is unused for linter "unused"
|
||||
//nolint:unused,nolintlint // ignore unused code linting
|
||||
package simapp
|
||||
|
||||
import (
|
||||
|
||||
@ -49,6 +49,7 @@ import (
|
||||
srvconfig "github.com/cosmos/cosmos-sdk/server/config"
|
||||
servertypes "github.com/cosmos/cosmos-sdk/server/types"
|
||||
"github.com/cosmos/cosmos-sdk/testutil"
|
||||
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
|
||||
"github.com/cosmos/cosmos-sdk/testutil/testdata"
|
||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||
moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil"
|
||||
@ -210,7 +211,10 @@ func DefaultConfigWithAppConfig(appConfig depinject.Config, baseappOpts ...func(
|
||||
if err := depinject.Inject(
|
||||
depinject.Configs(
|
||||
appConfig,
|
||||
depinject.Supply(val.GetLogger()),
|
||||
depinject.Supply(
|
||||
val.GetLogger(),
|
||||
simtestutil.NewAppOptionsWithFlagHome(val.GetViper().GetString(flags.FlagHome)),
|
||||
),
|
||||
),
|
||||
&appBuilder); err != nil {
|
||||
panic(err)
|
||||
|
||||
@ -4,6 +4,7 @@ import (
|
||||
"cosmossdk.io/core/appmodule"
|
||||
"cosmossdk.io/core/gas"
|
||||
errorsmod "cosmossdk.io/errors"
|
||||
"cosmossdk.io/x/auth/ante/unorderedtx"
|
||||
"cosmossdk.io/x/auth/types"
|
||||
txsigning "cosmossdk.io/x/tx/signing"
|
||||
|
||||
@ -23,6 +24,7 @@ type HandlerOptions struct {
|
||||
SignModeHandler *txsigning.HandlerMap
|
||||
SigGasConsumer func(meter gas.Meter, sig signing.SignatureV2, params types.Params) error
|
||||
TxFeeChecker TxFeeChecker
|
||||
UnorderedTxManager *unorderedtx.Manager
|
||||
}
|
||||
|
||||
// NewAnteHandler returns an AnteHandler that checks and increments sequence
|
||||
@ -53,5 +55,9 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) {
|
||||
NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler, options.SigGasConsumer, options.AccountAbstractionKeeper),
|
||||
}
|
||||
|
||||
if options.UnorderedTxManager != nil {
|
||||
anteDecorators = append(anteDecorators, NewUnorderedTxDecorator(unorderedtx.DefaultMaxTimeoutDuration, options.UnorderedTxManager, options.Environment, DefaultSha256Cost))
|
||||
}
|
||||
|
||||
return sdk.ChainAnteDecorators(anteDecorators...), nil
|
||||
}
|
||||
|
||||
@ -20,6 +20,7 @@ import (
|
||||
"cosmossdk.io/depinject"
|
||||
"cosmossdk.io/depinject/appconfig"
|
||||
"cosmossdk.io/x/auth/ante"
|
||||
"cosmossdk.io/x/auth/ante/unorderedtx"
|
||||
"cosmossdk.io/x/auth/posthandler"
|
||||
"cosmossdk.io/x/auth/tx"
|
||||
authtypes "cosmossdk.io/x/auth/types"
|
||||
@ -58,6 +59,7 @@ type ModuleInputs struct {
|
||||
AccountAbstractionKeeper ante.AccountAbstractionKeeper `optional:"true"`
|
||||
CustomSignModeHandlers func() []txsigning.SignModeHandler `optional:"true"`
|
||||
CustomGetSigners []txsigning.CustomGetSigner `optional:"true"`
|
||||
UnorderedTxManager *unorderedtx.Manager `optional:"true"`
|
||||
}
|
||||
|
||||
type ModuleOutputs struct {
|
||||
@ -162,12 +164,13 @@ func newAnteHandler(txConfig client.TxConfig, in ModuleInputs) (sdk.AnteHandler,
|
||||
|
||||
anteHandler, err := ante.NewAnteHandler(
|
||||
ante.HandlerOptions{
|
||||
AccountKeeper: in.AccountKeeper,
|
||||
BankKeeper: in.BankKeeper,
|
||||
SignModeHandler: txConfig.SignModeHandler(),
|
||||
FeegrantKeeper: in.FeeGrantKeeper,
|
||||
SigGasConsumer: ante.DefaultSigVerificationGasConsumer,
|
||||
Environment: in.Environment,
|
||||
Environment: in.Environment,
|
||||
AccountKeeper: in.AccountKeeper,
|
||||
BankKeeper: in.BankKeeper,
|
||||
SignModeHandler: txConfig.SignModeHandler(),
|
||||
FeegrantKeeper: in.FeeGrantKeeper,
|
||||
SigGasConsumer: ante.DefaultSigVerificationGasConsumer,
|
||||
UnorderedTxManager: in.UnorderedTxManager,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user