refactor(baseapp): move handler retrieval per sdk.Msg into validateBasicTxMsgs (#18731)

This commit is contained in:
Emmanuel T Odeke 2023-12-13 10:25:57 -08:00 committed by GitHub
parent 14e261eb73
commit 8fe6d84f2c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -601,20 +601,22 @@ func (app *BaseApp) validateFinalizeBlockHeight(req *abci.RequestFinalizeBlock)
return nil
}
// validateBasicTxMsgs executes basic validator calls for messages.
func validateBasicTxMsgs(msgs []sdk.Msg) error {
// validateBasicTxMsgs executes basic validator calls for messages firstly by invoking
// .ValidateBasic if possible, then checking if the message has a known handler.
func validateBasicTxMsgs(router *MsgServiceRouter, msgs []sdk.Msg) error {
if len(msgs) == 0 {
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "must contain at least one message")
}
for _, msg := range msgs {
m, ok := msg.(sdk.HasValidateBasic)
if !ok {
continue
if m, ok := msg.(sdk.HasValidateBasic); ok {
if err := m.ValidateBasic(); err != nil {
return err
}
}
if err := m.ValidateBasic(); err != nil {
return err
if router != nil && router.Handler(msg) == nil {
return errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "no message handler found for %T", msg)
}
}
@ -862,17 +864,10 @@ func (app *BaseApp) runTx(mode execMode, txBytes []byte) (gInfo sdk.GasInfo, res
}
msgs := tx.GetMsgs()
if err := validateBasicTxMsgs(msgs); err != nil {
if err := validateBasicTxMsgs(app.msgServiceRouter, msgs); err != nil {
return sdk.GasInfo{}, nil, nil, err
}
for _, msg := range msgs {
handler := app.msgServiceRouter.Handler(msg)
if handler == nil {
return sdk.GasInfo{}, nil, nil, errorsmod.Wrapf(sdkerrors.ErrUnknownRequest, "no message handler found for %T", msg)
}
}
if app.anteHandler != nil {
var (
anteCtx sdk.Context