refactor!: deprecate blocktime on context (#17738)
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user