-
Notifications
You must be signed in to change notification settings - Fork 3.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(x/auth/tx): extend app module + docs #21409
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -0,0 +1,57 @@ | ||||||||||||||||||||||||||||||||||||||||||
package tx | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
import ( | ||||||||||||||||||||||||||||||||||||||||||
"context" | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
appmodulev2 "cosmossdk.io/core/appmodule/v2" | ||||||||||||||||||||||||||||||||||||||||||
"cosmossdk.io/core/transaction" | ||||||||||||||||||||||||||||||||||||||||||
"cosmossdk.io/x/auth/ante" | ||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// TxValidator is appmodulev2.HasTxValidator without the AppModule requirement. | ||||||||||||||||||||||||||||||||||||||||||
type TxValidator = func(context.Context, transaction.Tx) error | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
var ( | ||||||||||||||||||||||||||||||||||||||||||
_ appmodulev2.AppModule = AppModule{} | ||||||||||||||||||||||||||||||||||||||||||
_ appmodulev2.HasTxValidator[transaction.Tx] = AppModule{} | ||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// AppModule is a module that only implements tx validators. | ||||||||||||||||||||||||||||||||||||||||||
// The goal of this module is to allow extensible registration of tx validators provided by chains without requiring a new modules. | ||||||||||||||||||||||||||||||||||||||||||
// Additionally, it registers tx validators that do not really have a place in other modules. | ||||||||||||||||||||||||||||||||||||||||||
// This module is only useful for chains using server/v2. Ante/Post handlers are setup via baseapp options in depinject. | ||||||||||||||||||||||||||||||||||||||||||
type AppModule struct { | ||||||||||||||||||||||||||||||||||||||||||
sigVerification ante.SigVerificationDecorator | ||||||||||||||||||||||||||||||||||||||||||
// txValidators contains tx validator that can be injected into the module via depinject. | ||||||||||||||||||||||||||||||||||||||||||
// tx validators should be module based, but it can happen that you do not want to create a new module | ||||||||||||||||||||||||||||||||||||||||||
// and simply depinject-it. | ||||||||||||||||||||||||||||||||||||||||||
txValidators []TxValidator | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// NewAppModule creates a new AppModule object. | ||||||||||||||||||||||||||||||||||||||||||
func NewAppModule( | ||||||||||||||||||||||||||||||||||||||||||
sigVerification ante.SigVerificationDecorator, | ||||||||||||||||||||||||||||||||||||||||||
txValidators ...TxValidator, | ||||||||||||||||||||||||||||||||||||||||||
) AppModule { | ||||||||||||||||||||||||||||||||||||||||||
return AppModule{ | ||||||||||||||||||||||||||||||||||||||||||
sigVerification: sigVerification, | ||||||||||||||||||||||||||||||||||||||||||
txValidators: txValidators, | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// IsAppModule implements appmodule.AppModule. | ||||||||||||||||||||||||||||||||||||||||||
func (a AppModule) IsAppModule() {} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// IsOnePerModuleType implements appmodule.AppModule. | ||||||||||||||||||||||||||||||||||||||||||
func (a AppModule) IsOnePerModuleType() {} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
// TxValidator implements appmodule.HasTxValidator. | ||||||||||||||||||||||||||||||||||||||||||
func (a AppModule) TxValidator(ctx context.Context, tx transaction.Tx) error { | ||||||||||||||||||||||||||||||||||||||||||
for _, validator := range a.txValidators { | ||||||||||||||||||||||||||||||||||||||||||
if err := validator(ctx, tx); err != nil { | ||||||||||||||||||||||||||||||||||||||||||
return err | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||
return a.sigVerification.ValidateTx(ctx, tx) | ||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Add a check for the presence of The method correctly iterates over the Apply this diff to add the check: func (a AppModule) TxValidator(ctx context.Context, tx transaction.Tx) error {
+ if len(a.txValidators) == 0 {
+ return nil
+ }
for _, validator := range a.txValidators {
if err := validator(ctx, tx); err != nil {
return err
}
}
return a.sigVerification.ValidateTx(ctx, tx)
} Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Correct grammatical error.
The sentence "is there to setup ante/post handlers on an runtime app" contains a grammatical error. Use "a" instead of "an".
Apply this diff to fix the grammatical error:
The depinject module is there to setup ante/post handlers on an runtime app (via baseapp options) and the tx validator on the runtime/v2 app (via app module). It as well outputs the `TxConfig` and `TxConfigOptions` for the app. +The depinject module is there to setup ante/post handlers on a runtime app (via baseapp options) and the tx validator on the runtime/v2 app (via app module). It as well outputs the `TxConfig` and `TxConfigOptions` for the app.
Tools
LanguageTool