From 6fc677faecf83178114d9d1e9b6e2378b6f7f4ca Mon Sep 17 00:00:00 2001 From: Julien Robert Date: Wed, 4 Sep 2024 00:20:05 +0200 Subject: [PATCH] docs(core): add core documentation and principles (#21511) Co-authored-by: Aaron Craelius --- core/README.md | 22 +++++++++++------ core/appmodule/README.md | 7 ------ core/appmodule/doc.go | 7 +++--- core/appmodule/environment.go | 8 +++---- core/appmodule/genesis.go | 10 ++++---- core/appmodule/migrations.go | 12 +++++----- core/appmodule/module.go | 18 +++++++------- core/appmodule/v2/doc.go | 3 +++ core/appmodule/v2/environment.go | 6 ++--- core/appmodule/v2/genesis.go | 2 +- core/appmodule/v2/handlers.go | 2 +- core/appmodule/v2/migrations.go | 2 +- core/appmodule/v2/module.go | 2 +- core/appmodule/v2/tx_validator.go | 2 +- core/context/context.go | 4 ++-- core/context/server_context.go | 4 +++- core/gas/service.go | 1 + core/genesis/doc.go | 3 +++ core/legacy/amino.go | 2 ++ core/registry/legacy.go | 2 ++ core/transaction/service.go | 1 + core/transaction/transaction.go | 2 ++ server/v2/cometbft/abci.go | 2 +- server/v2/stf/stf_router_test.go | 4 ++-- testutil/mock/types_mock_appmodule.go | 6 ++--- x/accounts/defaults/base/utils_test.go | 4 ++-- x/accounts/defaults/lockup/utils_test.go | 4 ++-- x/accounts/defaults/multisig/utils_test.go | 4 ++-- x/auth/ante/basic.go | 10 ++++---- x/auth/ante/basic_test.go | 4 ++-- x/auth/ante/unordered.go | 6 ++--- x/auth/tx/config/depinject.go | 28 +++++++++++----------- x/bank/types/send_authorization.go | 4 ++-- x/bank/types/send_authorization_test.go | 4 ++-- x/consensus/keeper/keeper.go | 2 +- x/feegrant/basic_fee_test.go | 4 ++-- x/feegrant/filtered_fee_test.go | 4 ++-- x/feegrant/periodic_fee_test.go | 4 ++-- x/staking/types/authz_test.go | 4 ++-- 39 files changed, 118 insertions(+), 102 deletions(-) delete mode 100644 core/appmodule/README.md create mode 100644 core/appmodule/v2/doc.go create mode 100644 core/genesis/doc.go diff --git a/core/README.md b/core/README.md index 0fa09f5975..6ab95a67a6 100644 --- a/core/README.md +++ b/core/README.md @@ -1,11 +1,19 @@ # Cosmos SDK Core -The [cosmossdk.io/core](https://pkg.go.dev/cosmossdk.io/core) go module defines -"core" functionality for the Cosmos SDK. +The [cosmossdk.io/core](https://pkg.go.dev/cosmossdk.io/core) Go module defines essential APIs and interfaces for the Cosmos SDK ecosystem. It serves as a foundation for building modular blockchain applications. -Currently functionality for registering modules using the [appmodule](https://pkg.go.dev/cosmossdk.io/core/appmodule) -package and composing apps using the [appconfig](https://pkg.go.dev/cosmossdk.io/core/appconfig) -package is provided. +Key features and principles: -In the future core functionality for building Cosmos SDK app modules will be -provided in this go module. +1. Provides stable, long-term maintained APIs for module development and app composition. +2. Focuses on interface definitions without implementation details. +3. Implementations are housed in the runtime(/v2) or individual modules. +4. Modules depend solely on core APIs for maximum compatibility. +5. New API additions undergo thorough consideration to maintain stability. +6. Adheres to a no-breaking-changes policy for reliable dependency management. +7. Aimed to have zero dependencies, ensuring a lightweight and self-contained foundation. + +The core module offers the [appmodule](https://pkg.go.dev/cosmossdk.io/core/appmodule) and [appmodule/v2](https://pkg.go.dev/cosmossdk.io/core/appmodule/v2) packages that include APIs to describe how modules can be written. +Additionally, it contains all core services APIs that can be used in modules to interact with the SDK, majoritarily via the `appmodule.Environment` struct. +Last but not least, it provides codecs and packages for the Cosmos SDK's core types (think of, for instance, logger, store interface or an address codec). + +Developers and contributors approach core API design with careful deliberation, ensuring that additions provide significant value while maintaining the module's stability and simplicity. diff --git a/core/appmodule/README.md b/core/appmodule/README.md deleted file mode 100644 index f41dd41a9d..0000000000 --- a/core/appmodule/README.md +++ /dev/null @@ -1,7 +0,0 @@ -# Appmodule - - - -This package defines what is needed for an module to be used in the Cosmos SDK. - -If you are looking at integrating Dependency injection into your module please see [depinject appconfig documentation](../../depinject/appconfig/README.md) \ No newline at end of file diff --git a/core/appmodule/doc.go b/core/appmodule/doc.go index bf64ed40d5..311f6e25a2 100644 --- a/core/appmodule/doc.go +++ b/core/appmodule/doc.go @@ -1,5 +1,4 @@ -// Package appmodule defines the functionality for registering Cosmos SDK app -// modules that are assembled using the cosmossdk.io/depinject -// dependency injection system and the declarative app configuration format -// handled by the appconfig package. +// Package appmodule defines what is needed for an module to be used in the Cosmos SDK (runtime). +// It is equivalent to the appmodulev2 package, but less flexible to stay compatible with baseapp instead of server/v2. +// If you are looking at integrating dependency injection into your module please see depinject appconfig documentation. package appmodule diff --git a/core/appmodule/environment.go b/core/appmodule/environment.go index 6b5c09bb4f..8e40790666 100644 --- a/core/appmodule/environment.go +++ b/core/appmodule/environment.go @@ -1,9 +1,9 @@ package appmodule import ( - "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" ) -// Environment is used to get all services to their respective module -// Contract: All fields of environment are always populated. -type Environment = appmodule.Environment +// Environment is used to get all services to their respective module. +// Contract: All fields of environment are always populated by runtime. +type Environment = appmodulev2.Environment diff --git a/core/appmodule/genesis.go b/core/appmodule/genesis.go index a7f1155a59..ca312a2b8c 100644 --- a/core/appmodule/genesis.go +++ b/core/appmodule/genesis.go @@ -5,7 +5,7 @@ import ( "encoding/json" "io" - "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" ) // HasGenesisBasics is the legacy interface for stateless genesis methods. @@ -15,18 +15,18 @@ type HasGenesisBasics interface { } // HasGenesis defines a custom genesis handling API implementation. -type HasGenesis = appmodule.HasGenesis +type HasGenesis = appmodulev2.HasGenesis // HasABCIGenesis defines a custom genesis handling API implementation for ABCI. // (stateful genesis methods which returns validator updates) // Most modules should not implement this interface. -type HasABCIGenesis = appmodule.HasABCIGenesis +type HasABCIGenesis = appmodulev2.HasABCIGenesis // HasGenesisAuto is the extension interface that modules should implement to handle // genesis data and state initialization. -// WARNING: This interface is experimental and may change at any time. +// WARNING: This interface is experimental and may change at any time and has been dropped in v2. type HasGenesisAuto interface { - appmodule.AppModule + appmodulev2.AppModule // DefaultGenesis writes the default genesis for this module to the target. DefaultGenesis(GenesisTarget) error diff --git a/core/appmodule/migrations.go b/core/appmodule/migrations.go index 8c4ec594f6..5632e55424 100644 --- a/core/appmodule/migrations.go +++ b/core/appmodule/migrations.go @@ -1,20 +1,20 @@ package appmodule import ( - "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" ) // HasConsensusVersion is the interface for declaring a module consensus version. -type HasConsensusVersion = appmodule.HasConsensusVersion +type HasConsensusVersion = appmodulev2.HasConsensusVersion // HasMigrations is implemented by a module which upgrades or has upgraded to a new consensus version. -type HasMigrations = appmodule.HasMigrations +type HasMigrations = appmodulev2.HasMigrations // MigrationRegistrar is the interface for registering in-place store migrations. -type MigrationRegistrar = appmodule.MigrationRegistrar +type MigrationRegistrar = appmodulev2.MigrationRegistrar // MigrationHandler is the migration function that each module registers. -type MigrationHandler = appmodule.MigrationHandler +type MigrationHandler = appmodulev2.MigrationHandler // VersionMap is a map of moduleName -> version -type VersionMap = appmodule.VersionMap +type VersionMap = appmodulev2.VersionMap diff --git a/core/appmodule/module.go b/core/appmodule/module.go index 7caca99870..279b3c8d6f 100644 --- a/core/appmodule/module.go +++ b/core/appmodule/module.go @@ -3,7 +3,7 @@ package appmodule import ( "context" - "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" "cosmossdk.io/core/legacy" ) @@ -11,25 +11,25 @@ import ( // for extension interfaces. It provides no functionality itself, but is the // type that all valid app modules should provide so that they can be identified // by other modules (usually via depinject) as app modules. -type AppModule = appmodule.AppModule +type AppModule = appmodulev2.AppModule // HasPreBlocker is the extension interface that modules should implement to run // custom logic before BeginBlock. -type HasPreBlocker = appmodule.HasPreBlocker +type HasPreBlocker = appmodulev2.HasPreBlocker // HasBeginBlocker is the extension interface that modules should implement to run // custom logic before transaction processing in a block. -type HasBeginBlocker = appmodule.HasBeginBlocker +type HasBeginBlocker = appmodulev2.HasBeginBlocker // HasEndBlocker is the extension interface that modules should implement to run // custom logic after transaction processing in a block. -type HasEndBlocker = appmodule.HasEndBlocker +type HasEndBlocker = appmodulev2.HasEndBlocker // HasRegisterInterfaces is the interface for modules to register their msg types. -type HasRegisterInterfaces = appmodule.HasRegisterInterfaces +type HasRegisterInterfaces = appmodulev2.HasRegisterInterfaces // ValidatorUpdate defines a validator update. -type ValidatorUpdate = appmodule.ValidatorUpdate +type ValidatorUpdate = appmodulev2.ValidatorUpdate // HasServices is the extension interface that modules should implement to register // implementations of services defined in .proto files. @@ -55,13 +55,13 @@ type ValidatorUpdate = appmodule.ValidatorUpdate // HasPrepareCheckState is an extension interface that contains information about the AppModule // and PrepareCheckState. type HasPrepareCheckState interface { - appmodule.AppModule + appmodulev2.AppModule PrepareCheckState(context.Context) error } // HasPrecommit is an extension interface that contains information about the appmodule.AppModule and Precommit. type HasPrecommit interface { - appmodule.AppModule + appmodulev2.AppModule Precommit(context.Context) error } diff --git a/core/appmodule/v2/doc.go b/core/appmodule/v2/doc.go new file mode 100644 index 0000000000..4953f90ac4 --- /dev/null +++ b/core/appmodule/v2/doc.go @@ -0,0 +1,3 @@ +// Package appmodule defines what is needed for an module to be used in the Cosmos SDK (runtime/v2). +// If you are looking at integrating dependency injection into your module please see depinject appconfig documentation. +package appmodulev2 diff --git a/core/appmodule/v2/environment.go b/core/appmodule/v2/environment.go index 6d64d9b1eb..450e10e162 100644 --- a/core/appmodule/v2/environment.go +++ b/core/appmodule/v2/environment.go @@ -1,4 +1,4 @@ -package appmodule +package appmodulev2 import ( "cosmossdk.io/core/branch" @@ -11,8 +11,8 @@ import ( "cosmossdk.io/core/transaction" ) -// Environment is used to get all services to their respective module -// Contract: All fields of environment are always populated. +// Environment is used to get all services to their respective module. +// Contract: All fields of environment are always populated by runtime. type Environment struct { Logger log.Logger diff --git a/core/appmodule/v2/genesis.go b/core/appmodule/v2/genesis.go index 629ac02ac6..907d29f864 100644 --- a/core/appmodule/v2/genesis.go +++ b/core/appmodule/v2/genesis.go @@ -1,4 +1,4 @@ -package appmodule +package appmodulev2 import ( "context" diff --git a/core/appmodule/v2/handlers.go b/core/appmodule/v2/handlers.go index 91c488773c..c446a46ceb 100644 --- a/core/appmodule/v2/handlers.go +++ b/core/appmodule/v2/handlers.go @@ -1,4 +1,4 @@ -package appmodule +package appmodulev2 import ( "context" diff --git a/core/appmodule/v2/migrations.go b/core/appmodule/v2/migrations.go index 3e62ad7dfe..a363e1a4a3 100644 --- a/core/appmodule/v2/migrations.go +++ b/core/appmodule/v2/migrations.go @@ -1,4 +1,4 @@ -package appmodule +package appmodulev2 import "context" diff --git a/core/appmodule/v2/module.go b/core/appmodule/v2/module.go index f934be5127..e01818cdaf 100644 --- a/core/appmodule/v2/module.go +++ b/core/appmodule/v2/module.go @@ -1,4 +1,4 @@ -package appmodule +package appmodulev2 import ( "context" diff --git a/core/appmodule/v2/tx_validator.go b/core/appmodule/v2/tx_validator.go index 0ef877af00..0886fe03ef 100644 --- a/core/appmodule/v2/tx_validator.go +++ b/core/appmodule/v2/tx_validator.go @@ -1,4 +1,4 @@ -package appmodule +package appmodulev2 import ( "context" diff --git a/core/context/context.go b/core/context/context.go index 54ed6b4623..2d97bacbd6 100644 --- a/core/context/context.go +++ b/core/context/context.go @@ -12,8 +12,8 @@ var ( ExecModeKey = execModeKey{} // CometInfoKey is the context key for allowing modules to get CometInfo. CometInfoKey = cometInfoKey{} - // InitInfoKey is the context key for setting consensus params from genesis in the consensus module. - InitInfoKey = initInfoKey{} + // CometParamsInitInfoKey is the context key for setting consensus params from genesis in the consensus module. + CometParamsInitInfoKey = initInfoKey{} // EnvironmentContextKey is the context key for the environment. // A caller should not assume the environment is available in each context. diff --git a/core/context/server_context.go b/core/context/server_context.go index 93975078cc..82b725f860 100644 --- a/core/context/server_context.go +++ b/core/context/server_context.go @@ -6,6 +6,8 @@ type ( ) var ( + // LoggerContextKey is the context key where the logger can be found. LoggerContextKey loggerContextKey - ViperContextKey viperContextKey + // ViperContextKey is the context key where the viper instance can be found. + ViperContextKey viperContextKey ) diff --git a/core/gas/service.go b/core/gas/service.go index 7077ef1a51..ca095a9aa3 100644 --- a/core/gas/service.go +++ b/core/gas/service.go @@ -42,6 +42,7 @@ type Meter interface { Limit() Gas } +// GasConfig defines the gas costs for the application. type GasConfig struct { HasCost Gas DeleteCost Gas diff --git a/core/genesis/doc.go b/core/genesis/doc.go new file mode 100644 index 0000000000..1891fdc183 --- /dev/null +++ b/core/genesis/doc.go @@ -0,0 +1,3 @@ +// package genesis is used to define appmodule.HasGenesisAuto experimental auto genesis. +// This genesis package isn't supported in server/v2. +package genesis diff --git a/core/legacy/amino.go b/core/legacy/amino.go index 63ae965ee0..eefcfd0c55 100644 --- a/core/legacy/amino.go +++ b/core/legacy/amino.go @@ -1,5 +1,6 @@ package legacy +// Amino is an interface that allow to register concrete types and interfaces with the Amino codec. type Amino interface { // RegisterInterface registers an interface and its concrete type with the Amino codec. RegisterInterface(interfacePtr any, iopts *InterfaceOptions) @@ -8,6 +9,7 @@ type Amino interface { RegisterConcrete(cdcType interface{}, name string) } +// InterfaceOptions defines options for registering an interface with the Amino codec. type InterfaceOptions struct { Priority []string // Disamb priority. AlwaysDisambiguate bool // If true, include disamb for all types. diff --git a/core/registry/legacy.go b/core/registry/legacy.go index c0f45883ef..c1141751e1 100644 --- a/core/registry/legacy.go +++ b/core/registry/legacy.go @@ -4,6 +4,8 @@ import ( "cosmossdk.io/core/transaction" ) +// InterfaceRegistrar is an interface for registering interfaces and their implementation. +// It is a subset of the Cosmos SDK InterfaceRegistry for registration only. type InterfaceRegistrar interface { // RegisterInterface associates protoName as the public name for the // interface passed in as iface. This is to be used primarily to create diff --git a/core/transaction/service.go b/core/transaction/service.go index 627fb3f85d..57ec9c7be6 100644 --- a/core/transaction/service.go +++ b/core/transaction/service.go @@ -20,5 +20,6 @@ const ( // Service creates a transaction service. type Service interface { + // ExecMode returns the current execution mode. ExecMode(ctx context.Context) ExecMode } diff --git a/core/transaction/transaction.go b/core/transaction/transaction.go index 312ca6137b..5211c54c66 100644 --- a/core/transaction/transaction.go +++ b/core/transaction/transaction.go @@ -19,6 +19,8 @@ type Codec[T Tx] interface { DecodeJSON([]byte) (T, error) } +// Tx defines the interface for a transaction. +// All custom transactions must implement this interface. type Tx interface { // Hash returns the unique identifier for the Tx. Hash() [32]byte diff --git a/server/v2/cometbft/abci.go b/server/v2/cometbft/abci.go index f842bfc56f..9b510924fb 100644 --- a/server/v2/cometbft/abci.go +++ b/server/v2/cometbft/abci.go @@ -245,7 +245,7 @@ func (c *Consensus[T]) InitChain(ctx context.Context, req *abciproto.InitChainRe } if req.ConsensusParams != nil { - ctx = context.WithValue(ctx, corecontext.InitInfoKey, &consensustypes.MsgUpdateParams{ + ctx = context.WithValue(ctx, corecontext.CometParamsInitInfoKey, &consensustypes.MsgUpdateParams{ Authority: c.consensusAuthority, Block: req.ConsensusParams.Block, Evidence: req.ConsensusParams.Evidence, diff --git a/server/v2/stf/stf_router_test.go b/server/v2/stf/stf_router_test.go index 32057e7e84..0a63ae4b79 100644 --- a/server/v2/stf/stf_router_test.go +++ b/server/v2/stf/stf_router_test.go @@ -8,7 +8,7 @@ import ( gogoproto "github.com/cosmos/gogoproto/proto" gogotypes "github.com/cosmos/gogoproto/types" - "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" "cosmossdk.io/core/transaction" ) @@ -18,7 +18,7 @@ func TestRouter(t *testing.T) { expectedResp := &gogotypes.StringValue{Value: "test"} - router := coreRouterImpl{handlers: map[string]appmodule.Handler{ + router := coreRouterImpl{handlers: map[string]appmodulev2.Handler{ gogoproto.MessageName(expectedMsg): func(ctx context.Context, gotMsg transaction.Msg) (msgResp transaction.Msg, err error) { if !reflect.DeepEqual(expectedMsg, gotMsg) { t.Errorf("expected message: %v, got: %v", expectedMsg, gotMsg) diff --git a/testutil/mock/types_mock_appmodule.go b/testutil/mock/types_mock_appmodule.go index b0b94179ae..016660bb0f 100644 --- a/testutil/mock/types_mock_appmodule.go +++ b/testutil/mock/types_mock_appmodule.go @@ -10,7 +10,7 @@ import ( reflect "reflect" appmodule "cosmossdk.io/core/appmodule" - appmodule0 "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" types "github.com/cosmos/cosmos-sdk/types" module "github.com/cosmos/cosmos-sdk/types/module" gomock "github.com/golang/mock/gomock" @@ -269,10 +269,10 @@ func (mr *MockAppModuleWithAllExtensionsABCIMockRecorder) ExportGenesis(ctx inte } // InitGenesis mocks base method. -func (m *MockAppModuleWithAllExtensionsABCI) InitGenesis(ctx context.Context, data json.RawMessage) ([]appmodule0.ValidatorUpdate, error) { +func (m *MockAppModuleWithAllExtensionsABCI) InitGenesis(ctx context.Context, data json.RawMessage) ([]appmodulev2.ValidatorUpdate, error) { m.ctrl.T.Helper() ret := m.ctrl.Call(m, "InitGenesis", ctx, data) - ret0, _ := ret[0].([]appmodule0.ValidatorUpdate) + ret0, _ := ret[0].([]appmodulev2.ValidatorUpdate) ret1, _ := ret[1].(error) return ret0, ret1 } diff --git a/x/accounts/defaults/base/utils_test.go b/x/accounts/defaults/base/utils_test.go index 1be354d043..93cd76ea84 100644 --- a/x/accounts/defaults/base/utils_test.go +++ b/x/accounts/defaults/base/utils_test.go @@ -8,7 +8,7 @@ import ( signingv1beta1 "cosmossdk.io/api/cosmos/tx/signing/v1beta1" "cosmossdk.io/collections" - "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" "cosmossdk.io/core/event" "cosmossdk.io/core/header" "cosmossdk.io/core/store" @@ -73,7 +73,7 @@ func makeMockDependencies(storeservice store.KVStoreService) accountstd.Dependen SchemaBuilder: sb, AddressCodec: addressCodec{}, LegacyStateCodec: mockStateCodec{}, - Environment: appmodule.Environment{ + Environment: appmodulev2.Environment{ EventService: eventService{}, HeaderService: headerService{}, }, diff --git a/x/accounts/defaults/lockup/utils_test.go b/x/accounts/defaults/lockup/utils_test.go index 79104e356f..6d5ce14af7 100644 --- a/x/accounts/defaults/lockup/utils_test.go +++ b/x/accounts/defaults/lockup/utils_test.go @@ -9,7 +9,7 @@ import ( "github.com/stretchr/testify/require" "cosmossdk.io/collections" - "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" "cosmossdk.io/core/header" "cosmossdk.io/core/store" "cosmossdk.io/core/transaction" @@ -114,7 +114,7 @@ func makeMockDependencies(storeservice store.KVStoreService) accountstd.Dependen SchemaBuilder: sb, AddressCodec: addressCodec{}, LegacyStateCodec: mockStateCodec{}, - Environment: appmodule.Environment{ + Environment: appmodulev2.Environment{ HeaderService: headerService{}, }, } diff --git a/x/accounts/defaults/multisig/utils_test.go b/x/accounts/defaults/multisig/utils_test.go index 86f6c62551..586be634a3 100644 --- a/x/accounts/defaults/multisig/utils_test.go +++ b/x/accounts/defaults/multisig/utils_test.go @@ -11,7 +11,7 @@ import ( "google.golang.org/protobuf/reflect/protoreflect" "cosmossdk.io/collections" - "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" "cosmossdk.io/core/event" "cosmossdk.io/core/header" "cosmossdk.io/core/store" @@ -185,7 +185,7 @@ func makeMockDependencies(storeservice store.KVStoreService, timefn func() time. SchemaBuilder: sb, AddressCodec: addressCodec{}, LegacyStateCodec: mockStateCodec{}, - Environment: appmodule.Environment{ + Environment: appmodulev2.Environment{ HeaderService: headerService{timefn}, EventService: eventService{}, }, diff --git a/x/auth/ante/basic.go b/x/auth/ante/basic.go index 6e568ab5c0..3f288460e8 100644 --- a/x/auth/ante/basic.go +++ b/x/auth/ante/basic.go @@ -4,7 +4,7 @@ import ( "context" "time" - "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" "cosmossdk.io/core/transaction" errorsmod "cosmossdk.io/errors" storetypes "cosmossdk.io/store/types" @@ -24,10 +24,10 @@ import ( // ValidateBasicDecorator decorator will not get executed on ReCheckTx since it // is not dependent on application state. type ValidateBasicDecorator struct { - env appmodule.Environment + env appmodulev2.Environment } -func NewValidateBasicDecorator(env appmodule.Environment) ValidateBasicDecorator { +func NewValidateBasicDecorator(env appmodulev2.Environment) ValidateBasicDecorator { return ValidateBasicDecorator{ env: env, } @@ -219,7 +219,7 @@ type ( // TxTimeoutHeightDecorator defines an AnteHandler decorator that checks for a // tx height timeout. TxTimeoutHeightDecorator struct { - env appmodule.Environment + env appmodulev2.Environment } // TxWithTimeoutHeight defines the interface a tx must implement in order for @@ -234,7 +234,7 @@ type ( // TxTimeoutHeightDecorator defines an AnteHandler decorator that checks for a // tx height timeout. -func NewTxTimeoutHeightDecorator(env appmodule.Environment) TxTimeoutHeightDecorator { +func NewTxTimeoutHeightDecorator(env appmodulev2.Environment) TxTimeoutHeightDecorator { return TxTimeoutHeightDecorator{ env: env, } diff --git a/x/auth/ante/basic_test.go b/x/auth/ante/basic_test.go index 18af011dd5..389096d3d7 100644 --- a/x/auth/ante/basic_test.go +++ b/x/auth/ante/basic_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/require" - "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" "cosmossdk.io/core/header" storetypes "cosmossdk.io/store/types" @@ -189,7 +189,7 @@ func TestTxHeightTimeoutDecorator(t *testing.T) { suite := SetupTestSuite(t, true) mockHeaderService := &mockHeaderService{} - antehandler := sdk.ChainAnteDecorators(ante.NewTxTimeoutHeightDecorator(appmodule.Environment{HeaderService: mockHeaderService})) + antehandler := sdk.ChainAnteDecorators(ante.NewTxTimeoutHeightDecorator(appmodulev2.Environment{HeaderService: mockHeaderService})) // keys and addresses priv1, _, addr1 := testdata.KeyTestPubAddr() diff --git a/x/auth/ante/unordered.go b/x/auth/ante/unordered.go index 39ea3ab5a1..f494c78c49 100644 --- a/x/auth/ante/unordered.go +++ b/x/auth/ante/unordered.go @@ -11,7 +11,7 @@ import ( "github.com/cosmos/gogoproto/proto" - "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" "cosmossdk.io/core/transaction" errorsmod "cosmossdk.io/errors" @@ -47,14 +47,14 @@ type UnorderedTxDecorator struct { // maxUnOrderedTTL defines the maximum TTL a transaction can define. maxTimeoutDuration time.Duration txManager *unorderedtx.Manager - env appmodule.Environment + env appmodulev2.Environment sha256Cost uint64 } func NewUnorderedTxDecorator( maxDuration time.Duration, m *unorderedtx.Manager, - env appmodule.Environment, + env appmodulev2.Environment, gasCost uint64, ) *UnorderedTxDecorator { return &UnorderedTxDecorator{ diff --git a/x/auth/tx/config/depinject.go b/x/auth/tx/config/depinject.go index 9b7d8f0268..7bd438c676 100644 --- a/x/auth/tx/config/depinject.go +++ b/x/auth/tx/config/depinject.go @@ -15,7 +15,7 @@ import ( bankv1beta1 "cosmossdk.io/api/cosmos/bank/v1beta1" txconfigv1 "cosmossdk.io/api/cosmos/tx/config/v1" "cosmossdk.io/core/address" - "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" "cosmossdk.io/core/transaction" "cosmossdk.io/depinject" "cosmossdk.io/depinject/appconfig" @@ -53,25 +53,25 @@ type ModuleInputs struct { ValidatorAddressCodec address.ValidatorAddressCodec Codec codec.Codec ProtoFileResolver txsigning.ProtoFileResolver - Environment appmodule.Environment + Environment appmodulev2.Environment // BankKeeper is the expected bank keeper to be passed to AnteHandlers / Tx Validators - BankKeeper authtypes.BankKeeper `optional:"true"` - MetadataBankKeeper BankKeeper `optional:"true"` - AccountKeeper ante.AccountKeeper `optional:"true"` - FeeGrantKeeper ante.FeegrantKeeper `optional:"true"` - AccountAbstractionKeeper ante.AccountAbstractionKeeper `optional:"true"` - CustomSignModeHandlers func() []txsigning.SignModeHandler `optional:"true"` - CustomGetSigners []txsigning.CustomGetSigner `optional:"true"` - ExtraTxValidators []appmodule.TxValidator[transaction.Tx] `optional:"true"` - UnorderedTxManager *unorderedtx.Manager `optional:"true"` - TxFeeChecker ante.TxFeeChecker `optional:"true"` - Viper *viper.Viper `optional:"true"` // server v2 + BankKeeper authtypes.BankKeeper `optional:"true"` + MetadataBankKeeper BankKeeper `optional:"true"` + AccountKeeper ante.AccountKeeper `optional:"true"` + FeeGrantKeeper ante.FeegrantKeeper `optional:"true"` + AccountAbstractionKeeper ante.AccountAbstractionKeeper `optional:"true"` + CustomSignModeHandlers func() []txsigning.SignModeHandler `optional:"true"` + CustomGetSigners []txsigning.CustomGetSigner `optional:"true"` + ExtraTxValidators []appmodulev2.TxValidator[transaction.Tx] `optional:"true"` + UnorderedTxManager *unorderedtx.Manager `optional:"true"` + TxFeeChecker ante.TxFeeChecker `optional:"true"` + Viper *viper.Viper `optional:"true"` // server v2 } type ModuleOutputs struct { depinject.Out - Module appmodule.AppModule // This is only useful for chains using server/v2. It setup tx validators that don't belong to other modules. + Module appmodulev2.AppModule // This is only useful for chains using server/v2. It setup tx validators that don't belong to other modules. BaseAppOption runtime.BaseAppOption // This is only useful for chains using baseapp. Server/v2 chains use TxValidator. TxConfig client.TxConfig TxConfigOptions tx.ConfigOptions diff --git a/x/bank/types/send_authorization.go b/x/bank/types/send_authorization.go index 9aefd18ddd..405cdcae39 100644 --- a/x/bank/types/send_authorization.go +++ b/x/bank/types/send_authorization.go @@ -4,7 +4,7 @@ import ( "context" "cosmossdk.io/core/address" - "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" corecontext "cosmossdk.io/core/context" sdk "github.com/cosmos/cosmos-sdk/types" @@ -42,7 +42,7 @@ func (a SendAuthorization) Accept(ctx context.Context, msg sdk.Msg) (authz.Accep return authz.AcceptResponse{}, sdkerrors.ErrInsufficientFunds.Wrapf("requested amount is more than spend limit") } - authzEnv, ok := ctx.Value(corecontext.EnvironmentContextKey).(appmodule.Environment) + authzEnv, ok := ctx.Value(corecontext.EnvironmentContextKey).(appmodulev2.Environment) if !ok { return authz.AcceptResponse{}, sdkerrors.ErrUnauthorized.Wrap("environment not set") } diff --git a/x/bank/types/send_authorization_test.go b/x/bank/types/send_authorization_test.go index 7c9473c501..bb12f5d2a5 100644 --- a/x/bank/types/send_authorization_test.go +++ b/x/bank/types/send_authorization_test.go @@ -7,7 +7,7 @@ import ( "github.com/stretchr/testify/require" - "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" corecontext "cosmossdk.io/core/context" coregas "cosmossdk.io/core/gas" coreheader "cosmossdk.io/core/header" @@ -54,7 +54,7 @@ func (m mockGasMeter) Consume(amount coregas.Gas, descriptor string) error { func TestSendAuthorization(t *testing.T) { ac := codectestutil.CodecOptions{}.GetAddressCodec() sdkCtx := testutil.DefaultContextWithDB(t, storetypes.NewKVStoreKey(types.StoreKey), storetypes.NewTransientStoreKey("transient_test")).Ctx.WithHeaderInfo(coreheader.Info{}) - ctx := context.WithValue(sdkCtx.Context(), corecontext.EnvironmentContextKey, appmodule.Environment{ + ctx := context.WithValue(sdkCtx.Context(), corecontext.EnvironmentContextKey, appmodulev2.Environment{ HeaderService: headerService{}, GasService: mockGasService{}, }) diff --git a/x/consensus/keeper/keeper.go b/x/consensus/keeper/keeper.go index 77de268293..76f74ffbae 100644 --- a/x/consensus/keeper/keeper.go +++ b/x/consensus/keeper/keeper.go @@ -47,7 +47,7 @@ func (k *Keeper) GetAuthority() string { // InitGenesis initializes the initial state of the module func (k *Keeper) InitGenesis(ctx context.Context) error { - value, ok := ctx.Value(corecontext.InitInfoKey).(*types.MsgUpdateParams) + value, ok := ctx.Value(corecontext.CometParamsInitInfoKey).(*types.MsgUpdateParams) if !ok || value == nil { // no error for appv1 and appv2 return nil diff --git a/x/feegrant/basic_fee_test.go b/x/feegrant/basic_fee_test.go index 5f086ebc43..cde6d2877e 100644 --- a/x/feegrant/basic_fee_test.go +++ b/x/feegrant/basic_fee_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" corecontext "cosmossdk.io/core/context" "cosmossdk.io/core/header" storetypes "cosmossdk.io/store/types" @@ -140,7 +140,7 @@ func TestBasicFeeValidAllow(t *testing.T) { ctx := testCtx.Ctx.WithHeaderInfo(header.Info{Time: tc.blockTime}) // now try to deduct - removed, err := tc.allowance.Accept(context.WithValue(ctx, corecontext.EnvironmentContextKey, appmodule.Environment{ + removed, err := tc.allowance.Accept(context.WithValue(ctx, corecontext.EnvironmentContextKey, appmodulev2.Environment{ HeaderService: mockHeaderService{}, GasService: mockGasService{}, }), tc.fee, []sdk.Msg{}) diff --git a/x/feegrant/filtered_fee_test.go b/x/feegrant/filtered_fee_test.go index 9ca967bc0d..8d9b5c60e9 100644 --- a/x/feegrant/filtered_fee_test.go +++ b/x/feegrant/filtered_fee_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" corecontext "cosmossdk.io/core/context" "cosmossdk.io/core/header" storetypes "cosmossdk.io/store/types" @@ -158,7 +158,7 @@ func TestFilteredFeeValidAllow(t *testing.T) { require.NoError(t, err) // now try to deduct - removed, err := allowance.Accept(context.WithValue(ctx, corecontext.EnvironmentContextKey, appmodule.Environment{ + removed, err := allowance.Accept(context.WithValue(ctx, corecontext.EnvironmentContextKey, appmodulev2.Environment{ HeaderService: mockHeaderService{}, GasService: mockGasService{}, }), tc.fee, []sdk.Msg{&call}) diff --git a/x/feegrant/periodic_fee_test.go b/x/feegrant/periodic_fee_test.go index 6a675beb39..5c5e46b7fb 100644 --- a/x/feegrant/periodic_fee_test.go +++ b/x/feegrant/periodic_fee_test.go @@ -8,7 +8,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" corecontext "cosmossdk.io/core/context" "cosmossdk.io/core/header" storetypes "cosmossdk.io/store/types" @@ -223,7 +223,7 @@ func TestPeriodicFeeValidAllow(t *testing.T) { ctx := testCtx.Ctx.WithHeaderInfo(header.Info{Time: tc.blockTime}) // now try to deduct // Set environment to ctx - remove, err := tc.allow.Accept(context.WithValue(ctx, corecontext.EnvironmentContextKey, appmodule.Environment{ + remove, err := tc.allow.Accept(context.WithValue(ctx, corecontext.EnvironmentContextKey, appmodulev2.Environment{ HeaderService: mockHeaderService{}, GasService: mockGasService{}, }), tc.fee, []sdk.Msg{}) diff --git a/x/staking/types/authz_test.go b/x/staking/types/authz_test.go index 62b939e794..1a8a66420d 100644 --- a/x/staking/types/authz_test.go +++ b/x/staking/types/authz_test.go @@ -7,7 +7,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - "cosmossdk.io/core/appmodule/v2" + appmodulev2 "cosmossdk.io/core/appmodule/v2" corecontext "cosmossdk.io/core/context" coregas "cosmossdk.io/core/gas" coreheader "cosmossdk.io/core/header" @@ -69,7 +69,7 @@ func TestAuthzAuthorizations(t *testing.T) { key := storetypes.NewKVStoreKey(stakingtypes.StoreKey) testCtx := testutil.DefaultContextWithDB(t, key, storetypes.NewTransientStoreKey("transient_test")) sdkCtx := testCtx.Ctx.WithHeaderInfo(coreheader.Info{}) - ctx := context.WithValue(sdkCtx.Context(), corecontext.EnvironmentContextKey, appmodule.Environment{ + ctx := context.WithValue(sdkCtx.Context(), corecontext.EnvironmentContextKey, appmodulev2.Environment{ HeaderService: headerService{}, GasService: mockGasService{}, })