Skip to content

Commit

Permalink
#48 - check number of votes (#522)
Browse files Browse the repository at this point in the history
  • Loading branch information
tkernell authored Jan 27, 2025
1 parent d38b5ce commit 23e66df
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 2 deletions.
1 change: 1 addition & 0 deletions app/extend_vote.go
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ type BridgeKeeper interface {

type StakingKeeper interface {
GetValidatorByConsAddr(ctx context.Context, consAddr sdk.ConsAddress) (validator stakingtypes.Validator, err error)
GetBondedValidatorsByPower(ctx context.Context) ([]stakingtypes.Validator, error)
}

type VoteExtHandler struct {
Expand Down
25 changes: 23 additions & 2 deletions app/proposal_handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,19 @@ func NewProposalHandler(logger log.Logger, valStore baseapp.ValidatorStore, appC
}

func (h *ProposalHandler) PrepareProposalHandler(ctx sdk.Context, req *abci.RequestPrepareProposal) (*abci.ResponsePrepareProposal, error) {
err := baseapp.ValidateVoteExtensions(ctx, h.valStore, req.Height, ctx.ChainID(), req.LocalLastCommit)
// Verify number of votes doesn't exceed bonded validators
bondedVals, err := h.stakingKeeper.GetBondedValidatorsByPower(ctx)
if err != nil {
h.logger.Error("PrepareProposalHandler: failed to get bonded validators", "error", err)
return nil, err
}
if len(req.LocalLastCommit.Votes) > len(bondedVals) {
h.logger.Error("PrepareProposalHandler: number of votes exceeds bonded validators",
"votes", len(req.LocalLastCommit.Votes),
"bonded_validators", len(bondedVals))
return nil, errors.New("number of votes exceeds bonded validators")
}
err = baseapp.ValidateVoteExtensions(ctx, h.valStore, req.Height, ctx.ChainID(), req.LocalLastCommit)
if err != nil {
h.logger.Info("PrepareProposalHandler: failed to validate vote extensions", "error", err, "votes", req.LocalLastCommit.Votes)
return nil, err
Expand Down Expand Up @@ -126,7 +138,16 @@ func (h *ProposalHandler) ProcessProposalHandler(ctx sdk.Context, req *abci.Requ
h.logger.Error("ProcessProposalHandler: rejecting proposal, failed to validate vote extension", "error", err)
return &abci.ResponseProcessProposal{Status: abci.ResponseProcessProposal_REJECT}, nil
}

// Verify number of votes doesn't exceed bonded validators
bondedVals, err := h.stakingKeeper.GetBondedValidatorsByPower(ctx)
if err != nil {
h.logger.Error("ProcessProposalHandler: failed to get bonded validators", "error", err)
return nil, err
}
if len(injectedVoteExtTx.ExtendedCommitInfo.Votes) > len(bondedVals) {
h.logger.Error("ProcessProposalHandler: number of votes exceeds bonded validators", "votes", len(injectedVoteExtTx.ExtendedCommitInfo.Votes), "bonded_validators", len(bondedVals))
return &abci.ResponseProcessProposal{Status: abci.ResponseProcessProposal_REJECT}, nil
}
operatorAddresses, evmAddresses := h.CheckInitialSignaturesFromLastCommit(ctx, injectedVoteExtTx.ExtendedCommitInfo)

if !reflect.DeepEqual(operatorAddresses, injectedVoteExtTx.OpAndEVMAddrs.OperatorAddresses) {
Expand Down

0 comments on commit 23e66df

Please sign in to comment.