diff --git a/abci/example/kvstore/kvstore.go b/abci/example/kvstore/kvstore.go index 6b98d54bb..dab2f0e19 100644 --- a/abci/example/kvstore/kvstore.go +++ b/abci/example/kvstore/kvstore.go @@ -290,10 +290,10 @@ func (app *Application) PrepareProposal(req types.RequestPrepareProposal) types. func (*Application) ProcessProposal(req types.RequestProcessProposal) types.ResponseProcessProposal { for _, tx := range req.Txs { if len(tx) == 0 { - return types.ResponseProcessProposal{Accept: false} + return types.ResponseProcessProposal{Status: types.ResponseProcessProposal_REJECT} } } - return types.ResponseProcessProposal{Accept: true} + return types.ResponseProcessProposal{Status: types.ResponseProcessProposal_ACCEPT} } //--------------------------------------------- diff --git a/abci/types/types.go b/abci/types/types.go index 4240301b5..eba606b54 100644 --- a/abci/types/types.go +++ b/abci/types/types.go @@ -53,6 +53,22 @@ func (r ResponseQuery) IsErr() bool { return r.Code != CodeTypeOK } +func (r ResponsePrepareProposal) UnknownModifiedTx() bool { + return r.ModifiedTxStatus == ResponsePrepareProposal_UNKNOWN +} + +func (r ResponsePrepareProposal) TxModified() bool { + return r.ModifiedTxStatus == ResponsePrepareProposal_MODIFIED +} + +func (r ResponseProcessProposal) IsAccepted() bool { + return r.Status == ResponseProcessProposal_ACCEPT +} + +func (r ResponseProcessProposal) IsStatusUnknown() bool { + return r.Status == ResponseProcessProposal_ACCEPT +} + // IsUnknown returns true if Code is Unknown func (r ResponseVerifyVoteExtension) IsUnknown() bool { return r.Result == ResponseVerifyVoteExtension_UNKNOWN diff --git a/internal/consensus/mempool_test.go b/internal/consensus/mempool_test.go index e527e8598..3c1dc8064 100644 --- a/internal/consensus/mempool_test.go +++ b/internal/consensus/mempool_test.go @@ -315,5 +315,5 @@ func (app *CounterApplication) PrepareProposal( func (app *CounterApplication) ProcessProposal( req abci.RequestProcessProposal) abci.ResponseProcessProposal { - return abci.ResponseProcessProposal{Accept: true} + return abci.ResponseProcessProposal{Status: abci.ResponseProcessProposal_ACCEPT} } diff --git a/internal/consensus/state_test.go b/internal/consensus/state_test.go index f008e75d3..4c8886853 100644 --- a/internal/consensus/state_test.go +++ b/internal/consensus/state_test.go @@ -1988,7 +1988,7 @@ func TestFinalizeBlockCalled(t *testing.T) { defer cancel() m := abcimocks.NewBaseMock() - m.On("ProcessProposal", mock.Anything).Return(abcitypes.ResponseProcessProposal{Accept: true}) + m.On("ProcessProposal", mock.Anything).Return(abcitypes.ResponseProcessProposal{Status: abci.ResponseProcessProposal_ACCEPT}) m.On("VerifyVoteExtension", mock.Anything).Return(abcitypes.ResponseVerifyVoteExtension{ Result: abcitypes.ResponseVerifyVoteExtension_ACCEPT, }) diff --git a/internal/state/execution.go b/internal/state/execution.go index 3423b00f6..906a7ec3f 100644 --- a/internal/state/execution.go +++ b/internal/state/execution.go @@ -140,8 +140,11 @@ func (blockExec *BlockExecutor) CreateProposalBlock( // purpose for now. panic(err) } + if rpp.UnknownModifiedTx() { + panic(fmt.Sprintf("PrepareProposal responded with ModifiedTxStatus %s", rpp.ModifiedTxStatus.String())) + } - if !rpp.ModifiedTx { + if !rpp.TxModified() { return block, nil } txrSet := types.NewTxRecordSet(rpp.TxRecords) @@ -181,8 +184,11 @@ func (blockExec *BlockExecutor) ProcessProposal( if err != nil { return false, ErrInvalidBlock(err) } + if resp.IsStatusUnknown() { + panic(fmt.Sprintf("ProcessProposal responded with status %s", resp.Status.String())) + } - return resp.Accept, nil + return resp.IsAccepted(), nil } // ValidateBlock validates the given block against the given state. diff --git a/internal/state/execution_test.go b/internal/state/execution_test.go index 3df5afab7..471effa5a 100644 --- a/internal/state/execution_test.go +++ b/internal/state/execution_test.go @@ -338,7 +338,7 @@ func TestProcessProposal(t *testing.T) { }, } - app.On("ProcessProposal", mock.Anything).Return(abci.ResponseProcessProposal{Accept: true}) + app.On("ProcessProposal", mock.Anything).Return(abci.ResponseProcessProposal{Status: abci.ResponseProcessProposal_ACCEPT}) acceptBlock, err := blockExec.ProcessProposal(ctx, block1, state) require.NoError(t, err) require.True(t, acceptBlock) diff --git a/internal/state/helpers_test.go b/internal/state/helpers_test.go index dffb6f256..1e0187247 100644 --- a/internal/state/helpers_test.go +++ b/internal/state/helpers_test.go @@ -320,8 +320,8 @@ func (app *testApp) Query(reqQuery abci.RequestQuery) (resQuery abci.ResponseQue func (app *testApp) ProcessProposal(req abci.RequestProcessProposal) abci.ResponseProcessProposal { for _, tx := range req.Txs { if len(tx) == 0 { - return abci.ResponseProcessProposal{Accept: false} + return abci.ResponseProcessProposal{Status: abci.ResponseProcessProposal_REJECT} } } - return abci.ResponseProcessProposal{Accept: true} + return abci.ResponseProcessProposal{Status: abci.ResponseProcessProposal_ACCEPT} } diff --git a/test/e2e/app/app.go b/test/e2e/app/app.go index 4b5a88821..1ed1055ca 100644 --- a/test/e2e/app/app.go +++ b/test/e2e/app/app.go @@ -315,10 +315,10 @@ func (app *Application) ProcessProposal(req abci.RequestProcessProposal) abci.Re for _, tx := range req.Txs { _, _, err := parseTx(tx) if err != nil { - return abci.ResponseProcessProposal{Accept: false} + return abci.ResponseProcessProposal{Status: abci.ResponseProcessProposal_REJECT} } } - return abci.ResponseProcessProposal{Accept: true} + return abci.ResponseProcessProposal{Status: abci.ResponseProcessProposal_ACCEPT} } func (app *Application) Rollback() error {