refactor!: deprecate blocktime on context (#17738)

This commit is contained in:
Marko
2023-09-18 13:55:21 +00:00
committed by GitHub
parent 8df065b611
commit 6615ff4f76
89 changed files with 379 additions and 369 deletions
+2 -2
View File
@@ -368,7 +368,7 @@ func (k Keeper) votesByProposal(ctx sdk.Context, proposalID uint64) ([]group.Vot
// `voting_period + max_execution_period` is greater than the current block
// time.
func (k Keeper) PruneProposals(ctx sdk.Context) error {
proposals, err := k.proposalsByVPEnd(ctx, ctx.BlockTime().Add(-k.config.MaxExecutionPeriod))
proposals, err := k.proposalsByVPEnd(ctx, ctx.HeaderInfo().Time.Add(-k.config.MaxExecutionPeriod))
if err != nil {
return nil
}
@@ -397,7 +397,7 @@ func (k Keeper) PruneProposals(ctx sdk.Context) error {
// has ended, tallies their votes, prunes them, and updates the proposal's
// `FinalTallyResult` field.
func (k Keeper) TallyProposalsAtVPEnd(ctx sdk.Context) error {
proposals, err := k.proposalsByVPEnd(ctx, ctx.BlockTime())
proposals, err := k.proposalsByVPEnd(ctx, ctx.HeaderInfo().Time)
if err != nil {
return nil
}
+8 -7
View File
@@ -10,6 +10,7 @@ import (
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/suite"
"cosmossdk.io/core/header"
"cosmossdk.io/log"
storetypes "cosmossdk.io/store/types"
@@ -75,7 +76,7 @@ func (s *TestSuite) SetupTest() {
config := group.DefaultConfig()
s.groupKeeper = keeper.NewKeeper(key, encCfg.Codec, bApp.MsgServiceRouter(), s.accountKeeper, config)
s.ctx = testCtx.Ctx.WithBlockTime(s.blockTime)
s.ctx = testCtx.Ctx.WithHeaderInfo(header.Info{Time: s.blockTime})
s.sdkCtx = sdk.UnwrapSDKContext(s.ctx)
// Initial group, group policy and balance setup
@@ -179,7 +180,7 @@ func (s *TestSuite) TestProposalsByVPEnd() {
return submitProposal(sdkCtx, s, []sdk.Msg{msgSend}, proposers)
},
admin: proposers[0],
newCtx: ctx.WithBlockTime(now.Add(votingPeriod).Add(time.Hour)),
newCtx: ctx.WithHeaderInfo(header.Info{Time: now.Add(votingPeriod).Add(time.Hour)}),
tallyRes: group.DefaultTallyResult(),
expStatus: group.PROPOSAL_STATUS_REJECTED,
},
@@ -206,7 +207,7 @@ func (s *TestSuite) TestProposalsByVPEnd() {
return submitProposalAndVote(s.ctx, s, []sdk.Msg{msgSend}, proposers, group.VOTE_OPTION_YES)
},
admin: proposers[0],
newCtx: ctx.WithBlockTime(now.Add(votingPeriod).Add(time.Hour)),
newCtx: ctx.WithHeaderInfo(header.Info{Time: now.Add(votingPeriod).Add(time.Hour)}),
tallyRes: group.TallyResult{
YesCount: "2",
NoCount: "0",
@@ -221,7 +222,7 @@ func (s *TestSuite) TestProposalsByVPEnd() {
return submitProposalAndVote(s.ctx, s, []sdk.Msg{msgSend}, []string{s.addrs[4].String()}, group.VOTE_OPTION_YES)
},
admin: proposers[0],
newCtx: ctx.WithBlockTime(now.Add(votingPeriod).Add(time.Hour)),
newCtx: ctx.WithHeaderInfo(header.Info{Time: now.Add(votingPeriod).Add(time.Hour)}),
tallyRes: group.TallyResult{
YesCount: "1",
NoCount: "0",
@@ -328,7 +329,7 @@ func (s *TestSuite) TestPruneProposals() {
s.Require().NoError(err)
s.Require().Equal(prePrune.Proposal.Id, submittedProposal.ProposalId)
// Move Forward in time for 15 days, after voting period end + max_execution_period
s.sdkCtx = s.sdkCtx.WithBlockTime(s.sdkCtx.BlockTime().Add(expirationTime))
s.sdkCtx = s.sdkCtx.WithHeaderInfo(header.Info{Time: s.sdkCtx.HeaderInfo().Time.Add(expirationTime)})
// Prune Expired Proposals
err = s.groupKeeper.PruneProposals(s.sdkCtx)
@@ -446,7 +447,7 @@ func (s *TestSuite) TestTallyProposalsAtVPEnd() {
s.Require().NoError(err)
// move forward in time
ctx := s.sdkCtx.WithBlockTime(s.sdkCtx.BlockTime().Add(votingPeriod + 1))
ctx := s.sdkCtx.WithHeaderInfo(header.Info{Time: s.sdkCtx.HeaderInfo().Time.Add(votingPeriod + 1)})
result, err := s.groupKeeper.TallyResult(ctx, &group.QueryTallyResultRequest{
ProposalId: proposalRes.ProposalId,
@@ -518,7 +519,7 @@ func (s *TestSuite) TestTallyProposalsAtVPEnd_GroupMemberLeaving() {
s.Require().NoError(err)
// move forward in time
ctx := s.sdkCtx.WithBlockTime(s.sdkCtx.BlockTime().Add(votingPeriod + 1))
ctx := s.sdkCtx.WithHeaderInfo(header.Info{Time: s.sdkCtx.HeaderInfo().Time.Add(votingPeriod + 1)})
// Tally the result. This saves the tally result to state.
s.Require().NoError(s.groupKeeper.TallyProposalsAtVPEnd(ctx))
+9 -9
View File
@@ -68,7 +68,7 @@ func (k Keeper) CreateGroup(goCtx context.Context, msg *group.MsgCreateGroup) (*
Metadata: msg.Metadata,
Version: 1,
TotalWeight: totalWeight.String(),
CreatedAt: ctx.BlockTime(),
CreatedAt: ctx.HeaderInfo().Time,
}
groupID, err := k.groupTable.Create(ctx.KVStore(k.key), groupInfo)
if err != nil {
@@ -83,7 +83,7 @@ func (k Keeper) CreateGroup(goCtx context.Context, msg *group.MsgCreateGroup) (*
Address: m.Address,
Weight: m.Weight,
Metadata: m.Metadata,
AddedAt: ctx.BlockTime(),
AddedAt: ctx.HeaderInfo().Time,
},
})
if err != nil {
@@ -189,7 +189,7 @@ func (k Keeper) UpdateGroupMembers(goCtx context.Context, msg *group.MsgUpdateGr
return errorsmod.Wrap(err, "add member")
}
} else { // else handle create.
groupMember.Member.AddedAt = ctx.BlockTime()
groupMember.Member.AddedAt = ctx.HeaderInfo().Time
if err := k.groupMemberTable.Create(ctx.KVStore(k.key), &groupMember); err != nil {
return errorsmod.Wrap(err, "add member")
}
@@ -407,7 +407,7 @@ func (k Keeper) CreateGroupPolicy(goCtx context.Context, msg *group.MsgCreateGro
msg.GetMetadata(),
1,
policy,
ctx.BlockTime(),
ctx.HeaderInfo().Time,
)
if err != nil {
return nil, err
@@ -593,12 +593,12 @@ func (k Keeper) SubmitProposal(goCtx context.Context, msg *group.MsgSubmitPropos
GroupPolicyAddress: msg.GroupPolicyAddress,
Metadata: msg.Metadata,
Proposers: msg.Proposers,
SubmitTime: ctx.BlockTime(),
SubmitTime: ctx.HeaderInfo().Time,
GroupVersion: groupInfo.Version,
GroupPolicyVersion: policyAcc.Version,
Status: group.PROPOSAL_STATUS_SUBMITTED,
ExecutorResult: group.PROPOSAL_EXECUTOR_RESULT_NOT_RUN,
VotingPeriodEnd: ctx.BlockTime().Add(policy.GetVotingPeriod()), // The voting window begins as soon as the proposal is submitted.
VotingPeriodEnd: ctx.HeaderInfo().Time.Add(policy.GetVotingPeriod()), // The voting window begins as soon as the proposal is submitted.
FinalTallyResult: group.DefaultTallyResult(),
Title: msg.Title,
Summary: msg.Summary,
@@ -722,7 +722,7 @@ func (k Keeper) Vote(goCtx context.Context, msg *group.MsgVote) (*group.MsgVoteR
return nil, errorsmod.Wrap(errors.ErrInvalid, "proposal not open for voting")
}
if ctx.BlockTime().After(proposal.VotingPeriodEnd) {
if ctx.HeaderInfo().Time.After(proposal.VotingPeriodEnd) {
return nil, errorsmod.Wrap(errors.ErrExpired, "voting period has ended already")
}
@@ -746,7 +746,7 @@ func (k Keeper) Vote(goCtx context.Context, msg *group.MsgVote) (*group.MsgVoteR
Voter: msg.Voter,
Option: msg.Option,
Metadata: msg.Metadata,
SubmitTime: ctx.BlockTime(),
SubmitTime: ctx.HeaderInfo().Time,
}
// The ORM will return an error if the vote already exists,
@@ -791,7 +791,7 @@ func (k Keeper) doTallyAndUpdate(ctx sdk.Context, p *group.Proposal, groupInfo g
// If the result was final (i.e. enough votes to pass) or if the voting
// period ended, then we consider the proposal as final.
if isFinal := result.Final || ctx.BlockTime().After(p.VotingPeriodEnd); isFinal {
if isFinal := result.Final || ctx.HeaderInfo().Time.After(p.VotingPeriodEnd); isFinal {
if err := k.pruneVotes(ctx, p.Id); err != nil {
return err
}
+16 -14
View File
@@ -11,6 +11,8 @@ import (
abci "github.com/cometbft/cometbft/abci/types"
"github.com/golang/mock/gomock"
"cosmossdk.io/core/header"
"github.com/cosmos/cosmos-sdk/codec/address"
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
"github.com/cosmos/cosmos-sdk/testutil/testdata"
@@ -174,7 +176,7 @@ func (s *TestSuite) TestCreateGroup() {
for msg, spec := range specs {
spec := spec
s.Run(msg, func() {
blockTime := sdk.UnwrapSDKContext(s.ctx).BlockTime()
blockTime := sdk.UnwrapSDKContext(s.ctx).HeaderInfo().Time
res, err := s.groupKeeper.CreateGroup(s.ctx, spec.req)
if spec.expErr {
s.Require().Error(err)
@@ -333,7 +335,7 @@ func (s *TestSuite) TestUpdateGroupMembers() {
Member: &group.Member{
Address: member2,
Weight: "2",
AddedAt: s.sdkCtx.BlockTime(),
AddedAt: s.sdkCtx.HeaderInfo().Time,
},
GroupId: groupID,
},
@@ -428,7 +430,7 @@ func (s *TestSuite) TestUpdateGroupMembers() {
Member: &group.Member{
Address: member2,
Weight: "1",
AddedAt: s.sdkCtx.BlockTime(),
AddedAt: s.sdkCtx.HeaderInfo().Time,
},
}},
},
@@ -919,7 +921,7 @@ func (s *TestSuite) TestCreateGroupWithPolicy() {
err := spec.req.SetDecisionPolicy(spec.policy)
s.Require().NoError(err)
blockTime := sdk.UnwrapSDKContext(s.ctx).BlockTime()
blockTime := sdk.UnwrapSDKContext(s.ctx).HeaderInfo().Time
res, err := s.groupKeeper.CreateGroupWithPolicy(s.ctx, spec.req)
if spec.expErr {
s.Require().Error(err)
@@ -1997,8 +1999,8 @@ func (s *TestSuite) TestWithdrawProposal() {
resp, err := s.groupKeeper.Proposal(s.ctx, &group.QueryProposalRequest{ProposalId: proposalID})
s.Require().NoError(err)
vpe := resp.Proposal.VotingPeriodEnd
timeDiff := vpe.Sub(s.sdkCtx.BlockTime())
ctxVPE := sdkCtx.WithBlockTime(s.sdkCtx.BlockTime().Add(timeDiff).Add(time.Second * 1))
timeDiff := vpe.Sub(s.sdkCtx.HeaderInfo().Time)
ctxVPE := sdkCtx.WithHeaderInfo(header.Info{Time: s.sdkCtx.HeaderInfo().Time.Add(timeDiff).Add(time.Second * 1)})
s.Require().NoError(s.groupKeeper.TallyProposalsAtVPEnd(ctxVPE))
events := ctxVPE.EventManager().ABCIEvents()
@@ -2349,7 +2351,7 @@ func (s *TestSuite) TestVote() {
Voter: addr4.String(),
Option: group.VOTE_OPTION_NO,
},
srcCtx: s.sdkCtx.WithBlockTime(s.blockTime.Add(time.Second)),
srcCtx: s.sdkCtx.WithHeaderInfo(header.Info{Time: s.sdkCtx.HeaderInfo().Time.Add(time.Second)}),
expErr: true,
expErrMsg: "voting period has ended already: expired",
postRun: func(sdkCtx sdk.Context) {},
@@ -2697,7 +2699,7 @@ func (s *TestSuite) TestExecProposal() {
// Wait after min execution period end before Exec
sdkCtx := sdk.UnwrapSDKContext(ctx)
sdkCtx = sdkCtx.WithBlockTime(sdkCtx.BlockTime().Add(minExecutionPeriod)) // MinExecutionPeriod is 5s
sdkCtx = sdkCtx.WithHeaderInfo(header.Info{Time: sdkCtx.HeaderInfo().Time.Add(minExecutionPeriod)}) // MinExecutionPeriod is 5s
_, err := s.groupKeeper.Exec(sdkCtx, &group.MsgExec{Executor: addr1.String(), ProposalId: myProposalID})
s.Require().NoError(err)
return myProposalID
@@ -2732,7 +2734,7 @@ func (s *TestSuite) TestExecProposal() {
// Wait after min execution period end before Exec
sdkCtx := sdk.UnwrapSDKContext(ctx)
sdkCtx = sdkCtx.WithBlockTime(sdkCtx.BlockTime().Add(minExecutionPeriod)) // MinExecutionPeriod is 5s
sdkCtx = sdkCtx.WithHeaderInfo(header.Info{Time: sdkCtx.HeaderInfo().Time.Add(minExecutionPeriod)}) // MinExecutionPeriod is 5s
s.bankKeeper.EXPECT().Send(gomock.Any(), msgSend2).Return(nil, fmt.Errorf("error"))
_, err := s.groupKeeper.Exec(sdkCtx, &group.MsgExec{Executor: addr1.String(), ProposalId: myProposalID})
s.bankKeeper.EXPECT().Send(gomock.Any(), msgSend2).Return(nil, nil)
@@ -2755,7 +2757,7 @@ func (s *TestSuite) TestExecProposal() {
proposalID := spec.setupProposal(sdkCtx)
if !spec.srcBlockTime.IsZero() {
sdkCtx = sdkCtx.WithBlockTime(spec.srcBlockTime)
sdkCtx = sdkCtx.WithHeaderInfo(header.Info{Time: spec.srcBlockTime})
}
_, err := s.groupKeeper.Exec(sdkCtx, &group.MsgExec{Executor: addr1.String(), ProposalId: proposalID})
@@ -2938,7 +2940,7 @@ func (s *TestSuite) TestExecPrunedProposalsAndVotes() {
// Wait for min execution period end
sdkCtx := sdk.UnwrapSDKContext(ctx)
sdkCtx = sdkCtx.WithBlockTime(sdkCtx.BlockTime().Add(minExecutionPeriod))
sdkCtx = sdkCtx.WithHeaderInfo(header.Info{Time: sdkCtx.HeaderInfo().Time.Add(minExecutionPeriod)})
_, err := s.groupKeeper.Exec(sdkCtx, &group.MsgExec{Executor: addr1.String(), ProposalId: myProposalID})
s.bankKeeper.EXPECT().Send(gomock.Any(), msgSend2).Return(nil, nil)
@@ -2956,11 +2958,11 @@ func (s *TestSuite) TestExecPrunedProposalsAndVotes() {
proposalID := spec.setupProposal(sdkCtx)
if !spec.srcBlockTime.IsZero() {
sdkCtx = sdkCtx.WithBlockTime(spec.srcBlockTime)
sdkCtx = sdkCtx.WithHeaderInfo(header.Info{Time: spec.srcBlockTime})
}
// Wait for min execution period end
sdkCtx = sdkCtx.WithBlockTime(sdkCtx.BlockTime().Add(minExecutionPeriod))
sdkCtx = sdkCtx.WithHeaderInfo(header.Info{Time: sdkCtx.HeaderInfo().Time.Add(minExecutionPeriod)})
_, err := s.groupKeeper.Exec(sdkCtx, &group.MsgExec{Executor: addr1.String(), ProposalId: proposalID})
if spec.expErr {
s.Require().Error(err)
@@ -3397,7 +3399,7 @@ func (s *TestSuite) TestExecProposalsWhenMemberLeavesOrIsUpdated() {
s.Require().NoError(err)
// travel in time
sdkCtx = sdkCtx.WithBlockTime(s.blockTime.Add(minExecutionPeriod + 1))
sdkCtx = sdkCtx.WithHeaderInfo(header.Info{Time: s.blockTime.Add(minExecutionPeriod + 1)})
_, err = s.groupKeeper.Exec(sdkCtx, &group.MsgExec{Executor: s.addrs[1].String(), ProposalId: proposalID})
if spec.expErrMsg != "" {
s.Require().Contains(err.Error(), spec.expErrMsg)
+2 -2
View File
@@ -19,7 +19,7 @@ import (
func (s Keeper) doExecuteMsgs(ctx sdk.Context, router baseapp.MessageRouter, proposal group.Proposal, groupPolicyAcc sdk.AccAddress, decisionPolicy group.DecisionPolicy) ([]sdk.Result, error) {
// Ensure it's not too early to execute the messages.
minExecutionDate := proposal.SubmitTime.Add(decisionPolicy.GetMinExecutionPeriod())
if ctx.BlockTime().Before(minExecutionDate) {
if ctx.HeaderInfo().Time.Before(minExecutionDate) {
return nil, errors.ErrInvalid.Wrapf("must wait until %s to execute proposal %d", minExecutionDate, proposal.Id)
}
@@ -29,7 +29,7 @@ func (s Keeper) doExecuteMsgs(ctx sdk.Context, router baseapp.MessageRouter, pro
// the proposal doesn't exist in state. For sanity check, we can still keep
// this simple and cheap check.
expiryDate := proposal.VotingPeriodEnd.Add(s.config.MaxExecutionPeriod)
if expiryDate.Before(ctx.BlockTime()) {
if expiryDate.Before(ctx.HeaderInfo().Time) {
return nil, errors.ErrExpired.Wrapf("proposal expired on %s", expiryDate)
}