diff --git a/baseapp/abci.go b/baseapp/abci.go index cc4fa14e4c78..8ce81d336637 100644 --- a/baseapp/abci.go +++ b/baseapp/abci.go @@ -442,7 +442,7 @@ func (app *BaseApp) PrepareProposal(req *abci.RequestPrepareProposal) (resp *abc resp, err = app.prepareProposal(app.prepareProposalState.ctx, req) if err != nil { - app.logger.Error("failed to prepare proposal", "height", req.Height, "error", err) + app.logger.Error("failed to prepare proposal", "height", req.Height, "time", req.Time, "err", err) return &abci.ResponsePrepareProposal{}, nil } @@ -528,7 +528,7 @@ func (app *BaseApp) ProcessProposal(req *abci.RequestProcessProposal) (resp *abc resp, err = app.processProposal(app.processProposalState.ctx, req) if err != nil { - app.logger.Error("failed to process proposal", "height", req.Height, "error", err) + app.logger.Error("failed to process proposal", "height", req.Height, "time", req.Time, "hash", fmt.Sprintf("%X", req.Hash), "err", err) return &abci.ResponseProcessProposal{Status: abci.ResponseProcessProposal_REJECT}, nil } @@ -591,7 +591,7 @@ func (app *BaseApp) ExtendVote(_ context.Context, req *abci.RequestExtendVote) ( resp, err = app.extendVote(ctx, req) if err != nil { - app.logger.Error("failed to extend vote", "height", req.Height, "error", err) + app.logger.Error("failed to extend vote", "height", req.Height, "hash", fmt.Sprintf("%X", req.Hash), "err", err) return &abci.ResponseExtendVote{VoteExtension: []byte{}}, nil } @@ -638,7 +638,7 @@ func (app *BaseApp) VerifyVoteExtension(req *abci.RequestVerifyVoteExtension) (r resp, err = app.verifyVoteExt(ctx, req) if err != nil { - app.logger.Error("failed to verify vote extension", "height", req.Height, "error", err) + app.logger.Error("failed to verify vote extension", "height", req.Height, "err", err) return &abci.ResponseVerifyVoteExtension{Status: abci.ResponseVerifyVoteExtension_REJECT}, nil } @@ -725,7 +725,11 @@ func (app *BaseApp) FinalizeBlock(req *abci.RequestFinalizeBlock) (*abci.Respons } } - beginBlock := app.beginBlock(req) + beginBlock, err := app.beginBlock(req) + if err != nil { + return nil, err + } + events = append(events, beginBlock.Events...) // Iterate over all raw transactions in the proposal and attempt to execute diff --git a/baseapp/abci_utils.go b/baseapp/abci_utils.go index 39bb4e938091..82ea3d544e91 100644 --- a/baseapp/abci_utils.go +++ b/baseapp/abci_utils.go @@ -201,7 +201,7 @@ func (h DefaultProposalHandler) PrepareProposalHandler() sdk.PrepareProposalHand if err != nil { err := h.mempool.Remove(memTx) if err != nil && !errors.Is(err, mempool.ErrTxNotFound) { - panic(err) + return nil, err } } else { var txGasLimit uint64 diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index 959ecf80b38e..7db78a04d2bb 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -228,7 +228,7 @@ func NewBaseApp( app.runTxRecoveryMiddleware = newDefaultRecoveryMiddleware() // Initialize with an empty interface registry to avoid nil pointer dereference. - // Unless SetInterfaceRegistry is called with an interface registry with proper address codecs base app will panic. + // Unless SetInterfaceRegistry is called with an interface registry with proper address codecs baseapp will panic. app.cdc = codec.NewProtoCodec(codectypes.NewInterfaceRegistry()) return app @@ -513,7 +513,7 @@ func (app *BaseApp) GetConsensusParams(ctx sdk.Context) cmtproto.ConsensusParams // It's stored instead in the x/upgrade store, with its own bump logic. func (app *BaseApp) StoreConsensusParams(ctx sdk.Context, cp cmtproto.ConsensusParams) error { if app.paramStore == nil { - panic("cannot store consensus params with no params store set") + return errors.New("cannot store consensus params with no params store set") } return app.paramStore.Set(ctx, cp) @@ -664,7 +664,7 @@ func (app *BaseApp) cacheTxContext(ctx sdk.Context, txBytes []byte) (sdk.Context return ctx.WithMultiStore(msCache), msCache } -func (app *BaseApp) beginBlock(req *abci.RequestFinalizeBlock) sdk.BeginBlock { +func (app *BaseApp) beginBlock(req *abci.RequestFinalizeBlock) (sdk.BeginBlock, error) { var ( resp sdk.BeginBlock err error @@ -673,7 +673,7 @@ func (app *BaseApp) beginBlock(req *abci.RequestFinalizeBlock) sdk.BeginBlock { if app.beginBlocker != nil { resp, err = app.beginBlocker(app.finalizeBlockState.ctx) if err != nil { - panic(err) + return resp, err } // append BeginBlock attributes to all events in the EndBlock response @@ -687,7 +687,7 @@ func (app *BaseApp) beginBlock(req *abci.RequestFinalizeBlock) sdk.BeginBlock { resp.Events = sdk.MarkEventsToIndex(resp.Events, app.indexEvents) } - return resp + return resp, nil } func (app *BaseApp) deliverTx(tx []byte) *abci.ExecTxResult { @@ -735,7 +735,7 @@ func (app *BaseApp) endBlock(ctx context.Context) (sdk.EndBlock, error) { if app.endBlocker != nil { eb, err := app.endBlocker(app.finalizeBlockState.ctx) if err != nil { - panic(err) + return endblock, err } // append EndBlock attributes to all events in the EndBlock response @@ -950,7 +950,10 @@ func (app *BaseApp) runMsgs(ctx sdk.Context, msgs []sdk.Msg, msgsV2 []protov2.Me } // create message events - msgEvents := createEvents(app.cdc, msgResult.GetEvents(), msg, msgsV2[i]) + msgEvents, err := createEvents(app.cdc, msgResult.GetEvents(), msg, msgsV2[i]) + if err != nil { + return nil, errorsmod.Wrapf(err, "failed to create message events; message index: %d", i) + } // append message events and data // @@ -995,19 +998,19 @@ func makeABCIData(msgResponses []*codectypes.Any) ([]byte, error) { return proto.Marshal(&sdk.TxMsgData{MsgResponses: msgResponses}) } -func createEvents(cdc codec.Codec, events sdk.Events, msg sdk.Msg, msgV2 protov2.Message) sdk.Events { +func createEvents(cdc codec.Codec, events sdk.Events, msg sdk.Msg, msgV2 protov2.Message) (sdk.Events, error) { eventMsgName := sdk.MsgTypeURL(msg) msgEvent := sdk.NewEvent(sdk.EventTypeMessage, sdk.NewAttribute(sdk.AttributeKeyAction, eventMsgName)) // we set the signer attribute as the sender signers, err := cdc.GetMsgV2Signers(msgV2) if err != nil { - panic(err) + return nil, err } if len(signers) > 0 && signers[0] != nil { addrStr, err := cdc.InterfaceRegistry().SigningContext().AddressCodec().BytesToString(signers[0]) if err != nil { - panic(err) + return nil, err } msgEvent = msgEvent.AppendAttributes(sdk.NewAttribute(sdk.AttributeKeySender, addrStr)) } @@ -1019,7 +1022,7 @@ func createEvents(cdc codec.Codec, events sdk.Events, msg sdk.Msg, msgV2 protov2 } } - return sdk.Events{msgEvent}.AppendEvents(events) + return sdk.Events{msgEvent}.AppendEvents(events), nil } // PrepareProposalVerifyTx performs transaction verification when a proposer is