97 lines
3.3 KiB
Go
97 lines
3.3 KiB
Go
package appmodule
|
|
|
|
import (
|
|
"context"
|
|
|
|
"google.golang.org/grpc"
|
|
|
|
"cosmossdk.io/depinject"
|
|
)
|
|
|
|
// AppModule is a tag interface for app module implementations to use as a basis
|
|
// 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 interface {
|
|
depinject.OnePerModuleType
|
|
|
|
// IsAppModule is a dummy method to tag a struct as implementing an AppModule.
|
|
IsAppModule()
|
|
}
|
|
|
|
// HasServices is the extension interface that modules should implement to register
|
|
// implementations of services defined in .proto files.
|
|
type HasServices interface {
|
|
AppModule
|
|
|
|
// RegisterServices registers the module's services with the app's service
|
|
// registrar.
|
|
//
|
|
// Two types of services are currently supported:
|
|
// - read-only gRPC query services, which are the default.
|
|
// - transaction message services, which must have the protobuf service
|
|
// option "cosmos.msg.v1.service" (defined in "cosmos/msg/v1/service.proto")
|
|
// set to true.
|
|
//
|
|
// The service registrar will figure out which type of service you are
|
|
// implementing based on the presence (or absence) of protobuf options. You
|
|
// do not need to specify this in golang code.
|
|
RegisterServices(grpc.ServiceRegistrar) error
|
|
}
|
|
|
|
// HasPrepareCheckState is an extension interface that contains information about the AppModule
|
|
// and PrepareCheckState.
|
|
type HasPrepareCheckState interface {
|
|
AppModule
|
|
PrepareCheckState(context.Context) error
|
|
}
|
|
|
|
// HasPrecommit is an extension interface that contains information about the AppModule and Precommit.
|
|
type HasPrecommit interface {
|
|
AppModule
|
|
Precommit(context.Context) error
|
|
}
|
|
|
|
// ResponsePreBlock represents the response from the PreBlock method.
|
|
// It can modify consensus parameters in storage and signal the caller through the return value.
|
|
// When it returns ConsensusParamsChanged=true, the caller must refresh the consensus parameter in the finalize context.
|
|
// The new context (ctx) must be passed to all the other lifecycle methods.
|
|
type ResponsePreBlock interface {
|
|
IsConsensusParamsChanged() bool
|
|
}
|
|
|
|
// HasPreBlocker is the extension interface that modules should implement to run
|
|
// custom logic before BeginBlock.
|
|
type HasPreBlocker interface {
|
|
AppModule
|
|
// PreBlock is method that will be run before BeginBlock.
|
|
PreBlock(context.Context) (ResponsePreBlock, error)
|
|
}
|
|
|
|
// HasBeginBlocker is the extension interface that modules should implement to run
|
|
// custom logic before transaction processing in a block.
|
|
type HasBeginBlocker interface {
|
|
AppModule
|
|
|
|
// BeginBlock is a method that will be run before transactions are processed in
|
|
// a block.
|
|
BeginBlock(context.Context) error
|
|
}
|
|
|
|
// HasEndBlocker is the extension interface that modules should implement to run
|
|
// custom logic after transaction processing in a block.
|
|
type HasEndBlocker interface {
|
|
AppModule
|
|
|
|
// EndBlock is a method that will be run after transactions are processed in
|
|
// a block.
|
|
EndBlock(context.Context) error
|
|
}
|
|
|
|
// UpgradeModule is the extension interface that upgrade module should implement to differentiate
|
|
// it from other modules, migration handler need ensure the upgrade module's migration is executed
|
|
// before the rest of the modules.
|
|
type UpgradeModule interface {
|
|
IsUpgradeModule()
|
|
}
|