diff --git a/CHANGELOG.md b/CHANGELOG.md index 10f0a01cf9..26ef6d1fc4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -108,6 +108,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ * (x/staking) [\#726](https://github.com/line/lbm-sdk/pull/726) check allowedList size in StakeAuthorization.Accept() * (x/staking) [\#728](https://github.com/line/lbm-sdk/pull/728) fix typo in unbondingToUnbonded() panic * (x/foundation) [\#732](https://github.com/line/lbm-sdk/pull/732) add verification on accounts into x/foundation Grants cli +* (x/foundation) [\#730](https://github.com/line/lbm-sdk/pull/730) prune stale x/foundation proposals at voting period end ### Breaking Changes * (proto) [\#564](https://github.com/line/lbm-sdk/pull/564) change gRPC path to original cosmos path diff --git a/x/foundation/keeper/abci_test.go b/x/foundation/keeper/abci_test.go index 46e3de8a9f..80a7572024 100644 --- a/x/foundation/keeper/abci_test.go +++ b/x/foundation/keeper/abci_test.go @@ -66,27 +66,32 @@ func (s *KeeperTestSuite) TestEndBlocker() { keeper.EndBlocker(ctx, s.keeper) for name, tc := range map[string]struct { - id uint64 - status foundation.ProposalStatus + id uint64 + removed bool + status foundation.ProposalStatus }{ "active proposal": { - s.activeProposal, - foundation.PROPOSAL_STATUS_ACCEPTED, + id: s.activeProposal, + status: foundation.PROPOSAL_STATUS_ACCEPTED, }, "voted proposal": { - s.votedProposal, - foundation.PROPOSAL_STATUS_REJECTED, + id: s.votedProposal, + status: foundation.PROPOSAL_STATUS_REJECTED, }, "withdrawn proposal": { - s.withdrawnProposal, - foundation.PROPOSAL_STATUS_WITHDRAWN, + id: s.withdrawnProposal, + removed: true, }, "invalid proposal": { - s.invalidProposal, - foundation.PROPOSAL_STATUS_ACCEPTED, + id: s.invalidProposal, + status: foundation.PROPOSAL_STATUS_ACCEPTED, }, } { proposal, err := s.keeper.GetProposal(ctx, tc.id) + if tc.removed { + s.Require().Error(err, name) + continue + } s.Require().NoError(err, name) s.Require().NotNil(proposal, name) s.Require().Equal(tc.status, proposal.Status, name) diff --git a/x/foundation/keeper/proposal.go b/x/foundation/keeper/proposal.go index b44e87eeb4..2a7768ffdd 100644 --- a/x/foundation/keeper/proposal.go +++ b/x/foundation/keeper/proposal.go @@ -189,15 +189,25 @@ func (k Keeper) iterateProposalsByVPEnd(ctx sdk.Context, endTime time.Time, fn f } func (k Keeper) UpdateTallyOfVPEndProposals(ctx sdk.Context) { + var proposals []foundation.Proposal k.iterateProposalsByVPEnd(ctx, ctx.BlockTime(), func(proposal foundation.Proposal) (stop bool) { + proposals = append(proposals, proposal) + return false + }) + + for _, proposal := range proposals { + proposal := proposal + + if proposal.Status == foundation.PROPOSAL_STATUS_ABORTED || proposal.Status == foundation.PROPOSAL_STATUS_WITHDRAWN { + k.pruneProposal(ctx, proposal) + continue + } + if err := k.doTallyAndUpdate(ctx, &proposal); err != nil { panic(err) } - k.setProposal(ctx, proposal) - - return false - }) + } } func (k Keeper) GetProposal(ctx sdk.Context, id uint64) (*foundation.Proposal, error) {