From c8f0f1bb3e627ce65669d3714aea5685960ba7a7 Mon Sep 17 00:00:00 2001 From: David Terpay <35130517+davidterpay@users.noreply.github.com> Date: Fri, 28 Apr 2023 10:45:52 -0400 Subject: [PATCH] feat(v1): Init vote extension handlers (#95) --- abci/{abci.go => proposals.go} | 25 ++++++---- abci/{abci_test.go => proposals_test.go} | 0 abci/vote_extensions.go | 58 ++++++++++++++++++++++++ abci/vote_extensions_test.go | 1 + 4 files changed, 75 insertions(+), 9 deletions(-) rename abci/{abci.go => proposals.go} (94%) rename abci/{abci_test.go => proposals_test.go} (100%) create mode 100644 abci/vote_extensions.go create mode 100644 abci/vote_extensions_test.go diff --git a/abci/abci.go b/abci/proposals.go similarity index 94% rename from abci/abci.go rename to abci/proposals.go index fea89ad..d01480b 100644 --- a/abci/abci.go +++ b/abci/proposals.go @@ -15,7 +15,9 @@ import ( ) type ( - Mempool interface { + // ProposalMempool contains the methods required by the ProposalHandler + // to interact with the local mempool. + ProposalMempool interface { sdkmempool.Mempool AuctionBidSelect(ctx context.Context) sdkmempool.Iterator GetBundledTransactions(tx sdk.Tx) ([][]byte, error) @@ -23,8 +25,10 @@ type ( IsAuctionTx(tx sdk.Tx) (bool, error) } + // ProposalHandler contains the functionality and handlers required to\ + // process, validate and build blocks. ProposalHandler struct { - mempool Mempool + mempool ProposalMempool logger log.Logger anteHandler sdk.AnteHandler txEncoder sdk.TxEncoder @@ -32,8 +36,10 @@ type ( } ) +// NewProposalHandler returns a ProposalHandler that contains the functionality and handlers +// required to process, validate and build blocks. func NewProposalHandler( - mp Mempool, + mp ProposalMempool, logger log.Logger, anteHandler sdk.AnteHandler, txEncoder sdk.TxEncoder, @@ -265,6 +271,13 @@ func (h *ProposalHandler) ProcessProposalVerifyTx(ctx sdk.Context, txBz []byte) return tx, h.verifyTx(ctx, tx) } +// RemoveTx removes a transaction from the application-side mempool. +func (h *ProposalHandler) RemoveTx(tx sdk.Tx) { + if err := h.mempool.Remove(tx); err != nil && !errors.Is(err, sdkmempool.ErrTxNotFound) { + panic(fmt.Errorf("failed to remove invalid transaction from the mempool: %w", err)) + } +} + // VerifyTx verifies a transaction against the application's state. func (h *ProposalHandler) verifyTx(ctx sdk.Context, tx sdk.Tx) error { if h.anteHandler != nil { @@ -274,9 +287,3 @@ func (h *ProposalHandler) verifyTx(ctx sdk.Context, tx sdk.Tx) error { return nil } - -func (h *ProposalHandler) RemoveTx(tx sdk.Tx) { - if err := h.mempool.Remove(tx); err != nil && !errors.Is(err, sdkmempool.ErrTxNotFound) { - panic(fmt.Errorf("failed to remove invalid transaction from the mempool: %w", err)) - } -} diff --git a/abci/abci_test.go b/abci/proposals_test.go similarity index 100% rename from abci/abci_test.go rename to abci/proposals_test.go diff --git a/abci/vote_extensions.go b/abci/vote_extensions.go new file mode 100644 index 0000000..9bcfda5 --- /dev/null +++ b/abci/vote_extensions.go @@ -0,0 +1,58 @@ +package abci + +import ( + "context" + + sdk "github.com/cosmos/cosmos-sdk/types" + sdkmempool "github.com/cosmos/cosmos-sdk/types/mempool" +) + +type ( + // VoteExtensionMempool contains the methods required by the VoteExtensionHandler + // to interact with the local mempool. + VoteExtensionMempool interface { + Remove(tx sdk.Tx) error + AuctionBidSelect(ctx context.Context) sdkmempool.Iterator + IsAuctionTx(tx sdk.Tx) (bool, error) + } + + // VoteExtensionHandler contains the functionality and handlers required to + // process, validate and build vote extensions. + VoteExtensionHandler struct { + mempool VoteExtensionMempool + txDecoder sdk.TxDecoder + txEncoder sdk.TxEncoder + anteHandler sdk.AnteHandler + } +) + +// NewVoteExtensionHandler returns an VoteExtensionHandler that contains the functionality and handlers +// required to inject, process, and validate vote extensions. +func NewVoteExtensionHandler(mp VoteExtensionMempool, txDecoder sdk.TxDecoder, + txEncoder sdk.TxEncoder, ah sdk.AnteHandler, +) *VoteExtensionHandler { + return &VoteExtensionHandler{ + mempool: mp, + txDecoder: txDecoder, + txEncoder: txEncoder, + anteHandler: ah, + } +} + +// ExtendVoteHandler returns the ExtendVoteHandler ABCI handler that extracts +// the top bidding valid auction transaction from a validator's local mempool and +// returns it in its vote extension. +func (h *VoteExtensionHandler) ExtendVoteHandler() ExtendVoteHandler { + return func(ctx sdk.Context, req *RequestExtendVote) (*ResponseExtendVote, error) { + panic("implement me") + } +} + +// VerifyVoteExtensionHandler returns the VerifyVoteExtensionHandler ABCI handler +// that verifies the vote extension included in RequestVerifyVoteExtension. +// In particular, it verifies that the vote extension is a valid auction transaction. +func (h *VoteExtensionHandler) VerifyVoteExtensionHandler() VerifyVoteExtensionHandler { + return func(ctx sdk.Context, req *RequestVerifyVoteExtension) (*ResponseVerifyVoteExtension, error) { + panic("implement me") + } +} diff --git a/abci/vote_extensions_test.go b/abci/vote_extensions_test.go new file mode 100644 index 0000000..8478231 --- /dev/null +++ b/abci/vote_extensions_test.go @@ -0,0 +1 @@ +package abci_test