refactor!: deprecate blocktime on context (#17738)

This commit is contained in:
Marko 2023-09-18 15:55:21 +02:00 committed by GitHub
parent 8df065b611
commit 6615ff4f76
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
89 changed files with 379 additions and 369 deletions

View File

@ -147,6 +147,9 @@ Ref: https://keepachangelog.com/en/1.0.0/
* `WithChainID` / `WithBlockHeight` / `WithBlockHeader` must be used to set values on the context
* (x/bank) [#17569](https://github.com/cosmos/cosmos-sdk/pull/17569) `BurnCoins` takes an address instead of a module name
* (x/distribution) [#17670](https://github.com/cosmos/cosmos-sdk/pull/17670) `AllocateTokens` takes `comet.VoteInfos` instead of `[]abci.VoteInfo`
* (types) [#17738](https://github.com/cosmos/cosmos-sdk/pull/17738) `WithBlockTime()` was removed & `BlockTime()` were deprecated in favor of `WithHeaderInfo()` & `HeaderInfo()`. `BlockTime` now gets data from `HeaderInfo()` instead of `BlockHeader()`.
* (client) [#17746](https://github.com/cosmos/cosmos-sdk/pull/17746) `txEncodeAmino` & `txDecodeAmino` txs via grpc and rest were removed
* `RegisterLegacyAmino` was removed from `AppModuleBasic`
### CLI Breaking Changes

View File

@ -426,7 +426,6 @@ func (app *BaseApp) PrepareProposal(req *abci.RequestPrepareProposal) (resp *abc
app.prepareProposalState.ctx = app.getContextForProposal(app.prepareProposalState.ctx, req.Height).
WithVoteInfos(toVoteInfo(req.LocalLastCommit.Votes)). // this is a set of votes that are not finalized yet, wait for commit
WithBlockHeight(req.Height).
WithBlockTime(req.Time).
WithProposer(req.ProposerAddress).
WithExecMode(sdk.ExecModePrepareProposal).
WithCometInfo(corecomet.Info{
@ -519,7 +518,6 @@ func (app *BaseApp) ProcessProposal(req *abci.RequestProcessProposal) (resp *abc
app.processProposalState.ctx = app.getContextForProposal(app.processProposalState.ctx, req.Height).
WithVoteInfos(req.ProposedLastCommit.Votes). // this is a set of votes that are not finalized yet, wait for commit
WithBlockHeight(req.Height).
WithBlockTime(req.Time).
WithHeaderHash(req.Hash).
WithProposer(req.ProposerAddress).
WithCometInfo(corecomet.Info{
@ -1220,7 +1218,7 @@ func (app *BaseApp) CreateQueryContext(height int64, prove bool) (sdk.Context, e
if ok {
cInfo, err := rms.GetCommitInfo(height)
if cInfo != nil && err == nil {
ctx = ctx.WithBlockTime(cInfo.Timestamp)
ctx = ctx.WithHeaderInfo(coreheader.Info{Time: cInfo.Timestamp})
}
}
}

View File

@ -48,7 +48,7 @@ func (s queryServer) Config(ctx context.Context, _ *ConfigRequest) (*ConfigRespo
func (s queryServer) Status(ctx context.Context, _ *StatusRequest) (*StatusResponse, error) {
sdkCtx := sdk.UnwrapSDKContext(ctx)
blockTime := sdkCtx.BlockTime()
blockTime := sdkCtx.HeaderInfo().Time
return &StatusResponse{
// TODO: Get earliest version from store.

View File

@ -6,9 +6,9 @@ import (
"testing"
"time"
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
"github.com/stretchr/testify/require"
"cosmossdk.io/core/header"
"cosmossdk.io/depinject"
"cosmossdk.io/log"
sdkmath "cosmossdk.io/math"
@ -73,7 +73,8 @@ func TestMigrateVestingAccounts(t *testing.T) {
legacySubspace := newMockSubspace(authtypes.DefaultParams())
require.NoError(t, v4.Migrate(ctx, storeService, legacySubspace, cdc))
ctx = app.BaseApp.NewContextLegacy(false, cmtproto.Header{Time: time.Now()})
ctx = app.BaseApp.NewContext(false)
ctx = ctx.WithHeaderInfo(header.Info{Time: time.Now()})
err = stakingKeeper.SetParams(ctx, stakingtypes.DefaultParams())
require.NoError(t, err)
lastAccNum := uint64(1000)
@ -99,10 +100,10 @@ func TestMigrateVestingAccounts(t *testing.T) {
bondDenom, err := stakingKeeper.BondDenom(ctx)
require.NoError(t, err)
vestedCoins := sdk.NewCoins(sdk.NewCoin(bondDenom, sdkmath.NewInt(200)))
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.BlockTime().Unix())
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.HeaderInfo().Time.Unix())
require.NoError(t, err)
ctx = ctx.WithBlockTime(ctx.BlockTime().AddDate(1, 0, 0))
ctx = ctx.WithHeaderInfo(header.Info{Time: ctx.HeaderInfo().Time.AddDate(1, 0, 0)})
err = accountKeeper.Params.Set(ctx, authtypes.DefaultParams())
require.NoError(t, err)
@ -129,10 +130,10 @@ func TestMigrateVestingAccounts(t *testing.T) {
require.NoError(t, err)
baseAccount := createBaseAccount(delegatorAddr)
vestedCoins := sdk.NewCoins(sdk.NewCoin(bondDenom, sdkmath.NewInt(200)))
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.BlockTime().Unix())
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.HeaderInfo().Time.Unix())
require.NoError(t, err)
ctx = ctx.WithBlockTime(ctx.BlockTime().AddDate(1, 0, 0))
ctx = ctx.WithHeaderInfo(header.Info{Time: ctx.HeaderInfo().Time.AddDate(1, 0, 0)})
accountKeeper.SetAccount(ctx, delayedAccount)
@ -152,10 +153,10 @@ func TestMigrateVestingAccounts(t *testing.T) {
bondDenom, err := stakingKeeper.BondDenom(ctx)
require.NoError(t, err)
vestedCoins := sdk.NewCoins(sdk.NewCoin(bondDenom, sdkmath.NewInt(200)))
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.BlockTime().Unix())
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.HeaderInfo().Time.Unix())
require.NoError(t, err)
ctx = ctx.WithBlockTime(ctx.BlockTime().AddDate(1, 0, 0))
ctx = ctx.WithHeaderInfo(header.Info{Time: ctx.HeaderInfo().Time.AddDate(1, 0, 0)})
accountKeeper.SetAccount(ctx, delayedAccount)
@ -179,7 +180,7 @@ func TestMigrateVestingAccounts(t *testing.T) {
bondDenom, err := stakingKeeper.BondDenom(ctx)
require.NoError(t, err)
vestedCoins := sdk.NewCoins(sdk.NewCoin(bondDenom, sdkmath.NewInt(200)))
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.BlockTime().AddDate(1, 0, 0).Unix())
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.HeaderInfo().Time.AddDate(1, 0, 0).Unix())
require.NoError(t, err)
accountKeeper.SetAccount(ctx, delayedAccount)
@ -200,7 +201,7 @@ func TestMigrateVestingAccounts(t *testing.T) {
bondDenom, err := stakingKeeper.BondDenom(ctx)
require.NoError(t, err)
vestedCoins := sdk.NewCoins(sdk.NewCoin(bondDenom, sdkmath.NewInt(200)))
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.BlockTime().AddDate(1, 0, 0).Unix())
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.HeaderInfo().Time.AddDate(1, 0, 0).Unix())
require.NoError(t, err)
accountKeeper.SetAccount(ctx, delayedAccount)
@ -225,7 +226,7 @@ func TestMigrateVestingAccounts(t *testing.T) {
bondDenom, err := stakingKeeper.BondDenom(ctx)
require.NoError(t, err)
vestedCoins := sdk.NewCoins(sdk.NewCoin(bondDenom, sdkmath.NewInt(300)))
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.BlockTime().AddDate(1, 0, 0).Unix())
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.HeaderInfo().Time.AddDate(1, 0, 0).Unix())
require.NoError(t, err)
accountKeeper.SetAccount(ctx, delayedAccount)
@ -250,7 +251,7 @@ func TestMigrateVestingAccounts(t *testing.T) {
bondDenom, err := stakingKeeper.BondDenom(ctx)
require.NoError(t, err)
vestedCoins := sdk.NewCoins(sdk.NewCoin(bondDenom, sdkmath.NewInt(300)))
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.BlockTime().AddDate(1, 0, 0).Unix())
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.HeaderInfo().Time.AddDate(1, 0, 0).Unix())
require.NoError(t, err)
accountKeeper.SetAccount(ctx, delayedAccount)
@ -271,10 +272,10 @@ func TestMigrateVestingAccounts(t *testing.T) {
bondDenom, err := stakingKeeper.BondDenom(ctx)
require.NoError(t, err)
vestedCoins := sdk.NewCoins(sdk.NewCoin(bondDenom, sdkmath.NewInt(300)))
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.BlockTime().Unix())
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.HeaderInfo().Time.Unix())
require.NoError(t, err)
ctx = ctx.WithBlockTime(ctx.BlockTime().AddDate(1, 0, 0))
ctx = ctx.WithHeaderInfo(header.Info{Time: ctx.HeaderInfo().Time.AddDate(1, 0, 0)})
accountKeeper.SetAccount(ctx, delayedAccount)
@ -290,8 +291,8 @@ func TestMigrateVestingAccounts(t *testing.T) {
{
"continuous vesting, start time after blocktime",
func(ctx sdk.Context, validator stakingtypes.Validator, delegatorAddr sdk.AccAddress) {
startTime := ctx.BlockTime().AddDate(1, 0, 0).Unix()
endTime := ctx.BlockTime().AddDate(2, 0, 0).Unix()
startTime := ctx.HeaderInfo().Time.AddDate(1, 0, 0).Unix()
endTime := ctx.HeaderInfo().Time.AddDate(2, 0, 0).Unix()
baseAccount := createBaseAccount(delegatorAddr)
bondDenom, err := stakingKeeper.BondDenom(ctx)
require.NoError(t, err)
@ -299,7 +300,7 @@ func TestMigrateVestingAccounts(t *testing.T) {
delayedAccount, err := types.NewContinuousVestingAccount(baseAccount, vestedCoins, startTime, endTime)
require.NoError(t, err)
ctx = ctx.WithBlockTime(ctx.BlockTime().AddDate(1, 0, 0))
ctx = ctx.WithHeaderInfo(header.Info{Time: ctx.HeaderInfo().Time.AddDate(1, 0, 0)})
accountKeeper.SetAccount(ctx, delayedAccount)
@ -315,8 +316,8 @@ func TestMigrateVestingAccounts(t *testing.T) {
{
"continuous vesting, start time passed but not ended",
func(ctx sdk.Context, validator stakingtypes.Validator, delegatorAddr sdk.AccAddress) {
startTime := ctx.BlockTime().AddDate(-1, 0, 0).Unix()
endTime := ctx.BlockTime().AddDate(2, 0, 0).Unix()
startTime := ctx.HeaderInfo().Time.AddDate(-1, 0, 0).Unix()
endTime := ctx.HeaderInfo().Time.AddDate(2, 0, 0).Unix()
baseAccount := createBaseAccount(delegatorAddr)
bondDenom, err := stakingKeeper.BondDenom(ctx)
require.NoError(t, err)
@ -324,7 +325,7 @@ func TestMigrateVestingAccounts(t *testing.T) {
delayedAccount, err := types.NewContinuousVestingAccount(baseAccount, vestedCoins, startTime, endTime)
require.NoError(t, err)
ctx = ctx.WithBlockTime(ctx.BlockTime().AddDate(1, 0, 0))
ctx = ctx.WithHeaderInfo(header.Info{Time: ctx.HeaderInfo().Time.AddDate(1, 0, 0)})
accountKeeper.SetAccount(ctx, delayedAccount)
@ -340,8 +341,8 @@ func TestMigrateVestingAccounts(t *testing.T) {
{
"continuous vesting, start time and endtime passed",
func(ctx sdk.Context, validator stakingtypes.Validator, delegatorAddr sdk.AccAddress) {
startTime := ctx.BlockTime().AddDate(-2, 0, 0).Unix()
endTime := ctx.BlockTime().AddDate(-1, 0, 0).Unix()
startTime := ctx.HeaderInfo().Time.AddDate(-2, 0, 0).Unix()
endTime := ctx.HeaderInfo().Time.AddDate(-1, 0, 0).Unix()
baseAccount := createBaseAccount(delegatorAddr)
bondDenom, err := stakingKeeper.BondDenom(ctx)
require.NoError(t, err)
@ -349,7 +350,7 @@ func TestMigrateVestingAccounts(t *testing.T) {
delayedAccount, err := types.NewContinuousVestingAccount(baseAccount, vestedCoins, startTime, endTime)
require.NoError(t, err)
ctx = ctx.WithBlockTime(ctx.BlockTime().AddDate(1, 0, 0))
ctx = ctx.WithHeaderInfo(header.Info{Time: ctx.HeaderInfo().Time.AddDate(1, 0, 0)})
accountKeeper.SetAccount(ctx, delayedAccount)
@ -370,7 +371,7 @@ func TestMigrateVestingAccounts(t *testing.T) {
require.NoError(t, err)
vestedCoins := sdk.NewCoins(sdk.NewCoin(bondDenom, sdkmath.NewInt(100)))
start := ctx.BlockTime().Unix() + int64(time.Hour/time.Second)
start := ctx.HeaderInfo().Time.Unix() + int64(time.Hour/time.Second)
periods := []types.Period{
{
@ -475,7 +476,7 @@ func TestMigrateVestingAccounts(t *testing.T) {
delayedAccount, err := types.NewPeriodicVestingAccount(baseAccount, vestedCoins, startTime, periods)
require.NoError(t, err)
ctx = ctx.WithBlockTime(time.Unix(1601042400+31536000+15897600+15897600+1, 0))
ctx = ctx.WithHeaderInfo(header.Info{Time: time.Unix(1601042400+31536000+15897600+15897600+1, 0)})
accountKeeper.SetAccount(ctx, delayedAccount)
@ -524,7 +525,7 @@ func TestMigrateVestingAccounts(t *testing.T) {
delayedAccount, err := types.NewPeriodicVestingAccount(baseAccount, vestedCoins, startTime, periods)
require.NoError(t, err)
ctx = ctx.WithBlockTime(time.Unix(1601042400+31536000+1, 0))
ctx = ctx.WithHeaderInfo(header.Info{Time: time.Unix(1601042400+31536000+1, 0)})
accountKeeper.SetAccount(ctx, delayedAccount)
@ -573,7 +574,7 @@ func TestMigrateVestingAccounts(t *testing.T) {
delayedAccount, err := types.NewPeriodicVestingAccount(baseAccount, vestedCoins, startTime, periods)
require.NoError(t, err)
ctx = ctx.WithBlockTime(time.Unix(1601042400+31536000+15638400+1, 0))
ctx = ctx.WithHeaderInfo(header.Info{Time: time.Unix(1601042400+31536000+15638400+1, 0)})
accountKeeper.SetAccount(ctx, delayedAccount)
@ -595,7 +596,7 @@ func TestMigrateVestingAccounts(t *testing.T) {
require.NoError(t, err)
vestedCoins := sdk.NewCoins(sdk.NewCoin(bondDenom, sdkmath.NewInt(300)))
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.BlockTime().AddDate(10, 0, 0).Unix())
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.HeaderInfo().Time.AddDate(10, 0, 0).Unix())
require.NoError(t, err)
accountKeeper.SetAccount(ctx, delayedAccount)
@ -604,7 +605,7 @@ func TestMigrateVestingAccounts(t *testing.T) {
_, err = stakingKeeper.Delegate(ctx, delegatorAddr, sdkmath.NewInt(300), stakingtypes.Unbonded, validator, true)
require.NoError(t, err)
ctx = ctx.WithBlockTime(ctx.BlockTime().AddDate(1, 0, 0))
ctx = ctx.WithHeaderInfo(header.Info{Time: ctx.HeaderInfo().Time.AddDate(1, 0, 0)})
valAddr, err := sdk.ValAddressFromBech32(validator.OperatorAddress)
require.NoError(t, err)
@ -627,7 +628,7 @@ func TestMigrateVestingAccounts(t *testing.T) {
require.NoError(t, err)
vestedCoins := sdk.NewCoins(sdk.NewCoin(bondDenom, sdkmath.NewInt(300)))
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.BlockTime().AddDate(10, 0, 0).Unix())
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.HeaderInfo().Time.AddDate(10, 0, 0).Unix())
require.NoError(t, err)
accountKeeper.SetAccount(ctx, delayedAccount)
@ -646,7 +647,7 @@ func TestMigrateVestingAccounts(t *testing.T) {
require.NoError(t, err)
vestedCoins := sdk.NewCoins(sdk.NewCoin(bondDenom, sdkmath.NewInt(300)))
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.BlockTime().AddDate(10, 0, 0).Unix())
delayedAccount, err := types.NewDelayedVestingAccount(baseAccount, vestedCoins, ctx.HeaderInfo().Time.AddDate(10, 0, 0).Unix())
require.NoError(t, err)
accountKeeper.SetAccount(ctx, delayedAccount)
@ -675,7 +676,7 @@ func TestMigrateVestingAccounts(t *testing.T) {
tc.prepareFunc(ctx, validator, delegatorAddr)
if tc.blockTime != 0 {
ctx = ctx.WithBlockTime(time.Unix(tc.blockTime, 0))
ctx = ctx.WithHeaderInfo(header.Info{Time: time.Unix(tc.blockTime, 0)})
}
// We introduce the bug

View File

@ -13,6 +13,7 @@ import (
"cosmossdk.io/collections"
"cosmossdk.io/core/appmodule"
"cosmossdk.io/core/comet"
"cosmossdk.io/core/header"
"cosmossdk.io/log"
storetypes "cosmossdk.io/store/types"
"cosmossdk.io/x/evidence"
@ -236,7 +237,7 @@ func TestHandleDoubleSign(t *testing.T) {
assert.Assert(t, val.GetTokens().Equal(newTokens))
// jump to past the unbonding period
ctx = ctx.WithBlockTime(time.Unix(1, 0).Add(stakingParams.UnbondingTime))
ctx = ctx.WithHeaderInfo(header.Info{Time: time.Unix(1, 0).Add(stakingParams.UnbondingTime)})
// require we cannot unjail
assert.Error(t, f.slashingKeeper.Unjail(ctx, operatorAddr), slashingtypes.ErrValidatorJailed.Error())
@ -262,7 +263,7 @@ func TestHandleDoubleSign_TooOld(t *testing.T) {
t.Parallel()
f := initFixture(t)
ctx := f.sdkCtx.WithIsCheckTx(false).WithBlockHeight(1).WithBlockTime(time.Now())
ctx := f.sdkCtx.WithIsCheckTx(false).WithBlockHeight(1).WithHeaderInfo(header.Info{Time: time.Now()})
populateValidators(t, f)
power := int64(100)
@ -288,7 +289,7 @@ func TestHandleDoubleSign_TooOld(t *testing.T) {
nci := comet.Info{Evidence: []comet.Evidence{{
Validator: comet.Validator{Address: valpubkey.Address(), Power: power},
Type: comet.MisbehaviorType(abci.MisbehaviorType_DUPLICATE_VOTE),
Time: ctx.BlockTime(),
Time: ctx.HeaderInfo().Time,
Height: 0,
}}}
@ -297,7 +298,7 @@ func TestHandleDoubleSign_TooOld(t *testing.T) {
ctx = ctx.WithCometInfo(nci)
ctx = ctx.WithConsensusParams(cp)
ctx = ctx.WithBlockTime(ctx.BlockTime().Add(cp.Evidence.MaxAgeDuration + 1))
ctx = ctx.WithHeaderInfo(header.Info{Time: ctx.HeaderInfo().Time.Add(cp.Evidence.MaxAgeDuration + 1)})
ctx = ctx.WithBlockHeight(ctx.BlockHeight() + cp.Evidence.MaxAgeNumBlocks + 1)
assert.NilError(t, f.evidenceKeeper.BeginBlocker(ctx))

View File

@ -8,6 +8,7 @@ import (
dbm "github.com/cosmos/cosmos-db"
"gotest.tools/v3/assert"
"cosmossdk.io/core/header"
"cosmossdk.io/depinject"
"cosmossdk.io/log"
@ -163,7 +164,7 @@ func TestImportExportQueues(t *testing.T) {
params, err = s2.GovKeeper.Params.Get(ctx2)
assert.NilError(t, err)
// Jump the time forward past the DepositPeriod and VotingPeriod
ctx2 = ctx2.WithBlockTime(ctx2.BlockHeader().Time.Add(*params.MaxDepositPeriod).Add(*params.VotingPeriod))
ctx2 = ctx2.WithHeaderInfo(header.Info{Time: ctx2.BlockHeader().Time.Add(*params.MaxDepositPeriod).Add(*params.VotingPeriod)})
// Make sure that they are still in the DepositPeriod and VotingPeriod respectively
proposal1, err = s2.GovKeeper.Proposals.Get(ctx2, proposalID1)

View File

@ -6,6 +6,7 @@ import (
"gotest.tools/v3/assert"
"cosmossdk.io/core/header"
"cosmossdk.io/math"
sdk "github.com/cosmos/cosmos-sdk/types"
@ -93,7 +94,7 @@ func TestUnbondingDelegationsMaxEntries(t *testing.T) {
assert.Assert(math.IntEq(t, newNotBonded, oldNotBonded))
// mature unbonding delegations
ctx = ctx.WithBlockTime(completionTime)
ctx = ctx.WithHeaderInfo(header.Info{Time: completionTime})
_, err = f.stakingKeeper.CompleteUnbonding(ctx, addrDel, addrVal)
assert.NilError(t, err)

View File

@ -53,7 +53,7 @@ func TestCancelUnbondingDelegation(t *testing.T) {
unbondingAmount := sdk.NewInt64Coin(bondDenom, 5)
ubd := types.NewUnbondingDelegation(
delegatorAddr, validatorAddr, 10,
ctx.BlockTime().Add(time.Minute*10),
ctx.HeaderInfo().Time.Add(time.Minute*10),
unbondingAmount.Amount,
0,
address.NewBech32Codec("cosmosvaloper"), address.NewBech32Codec("cosmos"),

View File

@ -4,11 +4,11 @@ import (
"testing"
"time"
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
"github.com/stretchr/testify/require"
"gotest.tools/v3/assert"
"cosmossdk.io/collections"
"cosmossdk.io/core/header"
"cosmossdk.io/math"
"github.com/cosmos/cosmos-sdk/codec/address"
@ -74,7 +74,7 @@ func TestSlashUnbondingDelegation(t *testing.T) {
assert.Assert(t, slashAmount.Equal(math.NewInt(0)))
// after the expiration time, no longer eligible for slashing
f.sdkCtx = f.sdkCtx.WithBlockHeader(cmtproto.Header{Time: time.Unix(10, 0)})
f.sdkCtx = f.sdkCtx.WithHeaderInfo(header.Info{Time: time.Unix(10, 0)})
assert.NilError(t, f.stakingKeeper.SetUnbondingDelegation(f.sdkCtx, ubd))
slashAmount, err = f.stakingKeeper.SlashUnbondingDelegation(f.sdkCtx, ubd, 0, fraction)
assert.NilError(t, err)
@ -83,7 +83,7 @@ func TestSlashUnbondingDelegation(t *testing.T) {
// test valid slash, before expiration timestamp and to which stake contributed
notBondedPool := f.stakingKeeper.GetNotBondedPool(f.sdkCtx)
oldUnbondedPoolBalances := f.bankKeeper.GetAllBalances(f.sdkCtx, notBondedPool.GetAddress())
f.sdkCtx = f.sdkCtx.WithBlockHeader(cmtproto.Header{Time: time.Unix(0, 0)})
f.sdkCtx = f.sdkCtx.WithHeaderInfo(header.Info{Time: time.Unix(0, 0)})
assert.NilError(t, f.stakingKeeper.SetUnbondingDelegation(f.sdkCtx, ubd))
slashAmount, err = f.stakingKeeper.SlashUnbondingDelegation(f.sdkCtx, ubd, 0, fraction)
assert.NilError(t, err)
@ -139,7 +139,7 @@ func TestSlashRedelegation(t *testing.T) {
assert.Assert(t, slashAmount.Equal(math.NewInt(0)))
// after the expiration time, no longer eligible for slashing
f.sdkCtx = f.sdkCtx.WithBlockHeader(cmtproto.Header{Time: time.Unix(10, 0)})
f.sdkCtx = f.sdkCtx.WithHeaderInfo(header.Info{Time: time.Unix(10, 0)})
assert.NilError(t, f.stakingKeeper.SetRedelegation(f.sdkCtx, rd))
validator, found = f.stakingKeeper.GetValidator(f.sdkCtx, addrVals[1])
assert.Assert(t, found)
@ -150,7 +150,7 @@ func TestSlashRedelegation(t *testing.T) {
balances := f.bankKeeper.GetAllBalances(f.sdkCtx, bondedPool.GetAddress())
// test valid slash, before expiration timestamp and to which stake contributed
f.sdkCtx = f.sdkCtx.WithBlockHeader(cmtproto.Header{Time: time.Unix(0, 0)})
f.sdkCtx = f.sdkCtx.WithHeaderInfo(header.Info{Time: time.Unix(0, 0)})
assert.NilError(t, f.stakingKeeper.SetRedelegation(f.sdkCtx, rd))
validator, found = f.stakingKeeper.GetValidator(f.sdkCtx, addrVals[1])
assert.Assert(t, found)

View File

@ -7,6 +7,7 @@ import (
"github.com/golang/mock/gomock"
"gotest.tools/v3/assert"
"cosmossdk.io/core/header"
"cosmossdk.io/math"
simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims"
@ -207,7 +208,7 @@ func TestValidatorUnbondingOnHold1(t *testing.T) {
assert.Equal(t, validator.OperatorAddress, unbondingVals[0])
// PROVIDER CHAIN'S UNBONDING PERIOD ENDS - BUT UNBONDING CANNOT COMPLETE
f.sdkCtx = f.sdkCtx.WithBlockTime(completionTime.Add(time.Duration(1)))
f.sdkCtx = f.sdkCtx.WithHeaderInfo(header.Info{Time: completionTime.Add(time.Duration(1))})
f.sdkCtx = f.sdkCtx.WithBlockHeight(completionHeight + 1)
assert.NilError(t, f.stakingKeeper.UnbondAllMatureValidators(f.sdkCtx))
@ -253,7 +254,7 @@ func TestValidatorUnbondingOnHold2(t *testing.T) {
completionHeight := validator1.UnbondingHeight
// PROVIDER CHAIN'S UNBONDING PERIOD ENDS - BUT UNBONDING CANNOT COMPLETE
f.sdkCtx = f.sdkCtx.WithBlockTime(completionTime.Add(time.Duration(1)))
f.sdkCtx = f.sdkCtx.WithHeaderInfo(header.Info{Time: completionTime.Add(time.Duration(1))})
f.sdkCtx = f.sdkCtx.WithBlockHeight(completionHeight + 1)
assert.NilError(t, f.stakingKeeper.UnbondAllMatureValidators(f.sdkCtx))
@ -328,7 +329,7 @@ func TestRedelegationOnHold1(t *testing.T) {
assert.Equal(t, 1, len(redelegations))
// PROVIDER CHAIN'S UNBONDING PERIOD ENDS - STOPPED UNBONDING CAN NOW COMPLETE
f.sdkCtx = f.sdkCtx.WithBlockTime(completionTime)
f.sdkCtx = f.sdkCtx.WithHeaderInfo(header.Info{Time: completionTime})
_, err = f.stakingKeeper.CompleteRedelegation(f.sdkCtx, addrDels[0], addrVals[0], addrVals[1])
assert.NilError(t, err)
@ -352,7 +353,7 @@ func TestRedelegationOnHold2(t *testing.T) {
completionTime := doRedelegation(t, f.stakingKeeper, f.sdkCtx, addrDels, addrVals, &hookCalled)
// PROVIDER CHAIN'S UNBONDING PERIOD ENDS - BUT UNBONDING CANNOT COMPLETE
f.sdkCtx = f.sdkCtx.WithBlockTime(completionTime)
f.sdkCtx = f.sdkCtx.WithHeaderInfo(header.Info{Time: completionTime})
_, err := f.stakingKeeper.CompleteRedelegation(f.sdkCtx, addrDels[0], addrVals[0], addrVals[1])
assert.NilError(t, err)
@ -397,7 +398,7 @@ func TestUnbondingDelegationOnHold1(t *testing.T) {
assert.Assert(math.IntEq(t, notBondedAmt1, notBondedAmt3))
// PROVIDER CHAIN'S UNBONDING PERIOD ENDS - STOPPED UNBONDING CAN NOW COMPLETE
f.sdkCtx = f.sdkCtx.WithBlockTime(completionTime)
f.sdkCtx = f.sdkCtx.WithHeaderInfo(header.Info{Time: completionTime})
_, err = f.stakingKeeper.CompleteUnbonding(f.sdkCtx, addrDels[0], addrVals[0])
assert.NilError(t, err)
@ -424,7 +425,7 @@ func TestUnbondingDelegationOnHold2(t *testing.T) {
completionTime, bondedAmt1, notBondedAmt1 := doUnbondingDelegation(t, f.stakingKeeper, f.bankKeeper, f.sdkCtx, bondDenom, addrDels, addrVals, &hookCalled)
// PROVIDER CHAIN'S UNBONDING PERIOD ENDS - BUT UNBONDING CANNOT COMPLETE
f.sdkCtx = f.sdkCtx.WithBlockTime(completionTime)
f.sdkCtx = f.sdkCtx.WithHeaderInfo(header.Info{Time: completionTime})
_, err := f.stakingKeeper.CompleteUnbonding(f.sdkCtx, addrDels[0], addrVals[0])
assert.NilError(t, err)

View File

@ -13,6 +13,7 @@ import (
"github.com/stretchr/testify/suite"
"cosmossdk.io/collections"
"cosmossdk.io/core/header"
"cosmossdk.io/depinject"
sdklog "cosmossdk.io/log"
"cosmossdk.io/math"
@ -188,7 +189,7 @@ func (s *SimTestSuite) TestSimulateMsgCreateValidator() {
func (s *SimTestSuite) TestSimulateMsgCancelUnbondingDelegation() {
require := s.Require()
blockTime := time.Now().UTC()
ctx := s.ctx.WithBlockTime(blockTime)
ctx := s.ctx.WithHeaderInfo(header.Info{Time: blockTime})
// setup accounts[1] as validator
validator0 := s.getTestingValidator0(ctx)
@ -233,7 +234,7 @@ func (s *SimTestSuite) TestSimulateMsgCancelUnbondingDelegation() {
func (s *SimTestSuite) TestSimulateMsgEditValidator() {
require := s.Require()
blockTime := time.Now().UTC()
ctx := s.ctx.WithBlockTime(blockTime)
ctx := s.ctx.WithHeaderInfo(header.Info{Time: blockTime})
// setup accounts[0] as validator
_ = s.getTestingValidator0(ctx)
@ -259,7 +260,7 @@ func (s *SimTestSuite) TestSimulateMsgEditValidator() {
func (s *SimTestSuite) TestSimulateMsgDelegate() {
require := s.Require()
blockTime := time.Now().UTC()
ctx := s.ctx.WithBlockTime(blockTime)
ctx := s.ctx.WithHeaderInfo(header.Info{Time: blockTime})
// execute operation
op := simulation.SimulateMsgDelegate(s.txConfig, s.accountKeeper, s.bankKeeper, s.stakingKeeper)
@ -282,7 +283,7 @@ func (s *SimTestSuite) TestSimulateMsgDelegate() {
func (s *SimTestSuite) TestSimulateMsgUndelegate() {
require := s.Require()
blockTime := time.Now().UTC()
ctx := s.ctx.WithBlockTime(blockTime)
ctx := s.ctx.WithHeaderInfo(header.Info{Time: blockTime})
// setup accounts[1] as validator
validator0 := s.getTestingValidator0(ctx)
@ -323,7 +324,7 @@ func (s *SimTestSuite) TestSimulateMsgUndelegate() {
func (s *SimTestSuite) TestSimulateMsgBeginRedelegate() {
require := s.Require()
blockTime := time.Now().UTC()
ctx := s.ctx.WithBlockTime(blockTime)
ctx := s.ctx.WithHeaderInfo(header.Info{Time: blockTime})
// setup accounts[1] as validator0 and accounts[2] as validator1
validator0 := s.getTestingValidator0(ctx)

View File

@ -7,6 +7,7 @@ import (
dbm "github.com/cosmos/cosmos-db"
"github.com/stretchr/testify/assert"
"cosmossdk.io/core/header"
"cosmossdk.io/log"
"cosmossdk.io/store"
"cosmossdk.io/store/metrics"
@ -75,7 +76,7 @@ func DefaultContextWithDB(tb testing.TB, key, tkey storetypes.StoreKey) TestCont
err := cms.LoadLatestVersion()
assert.NoError(tb, err)
ctx := sdk.NewContext(cms, false, log.NewNopLogger()).WithBlockTime(time.Now())
ctx := sdk.NewContext(cms, false, log.NewNopLogger()).WithHeaderInfo(header.Info{Time: time.Now()})
return TestContext{ctx, db, cms}
}

View File

@ -45,7 +45,7 @@ type Context struct {
chainID string // Deprecated: Use HeaderService for chainID and CometService for the rest
txBytes []byte
logger log.Logger
voteInfo []abci.VoteInfo // Deprecated: use Cometinfo.GetLastCommit().Votes() instead, will be removed in 0.51
voteInfo []abci.VoteInfo // Deprecated: use Cometinfo.LastCommit.Votes instead, will be removed after 0.51
gasMeter storetypes.GasMeter
blockGasMeter storetypes.GasMeter
checkTx bool
@ -66,15 +66,13 @@ type Context struct {
type Request = Context
// Read-only accessors
func (c Context) Context() context.Context { return c.baseCtx }
func (c Context) MultiStore() storetypes.MultiStore { return c.ms }
func (c Context) BlockHeight() int64 { return c.header.Height }
func (c Context) BlockTime() time.Time { return c.header.Time }
func (c Context) ChainID() string { return c.chainID }
func (c Context) TxBytes() []byte { return c.txBytes }
func (c Context) Logger() log.Logger { return c.logger }
// Deprecated: use Cometinfo.GetLastCommit().Votes() instead, will be removed after 0.51
func (c Context) Context() context.Context { return c.baseCtx }
func (c Context) MultiStore() storetypes.MultiStore { return c.ms }
func (c Context) BlockHeight() int64 { return c.header.Height }
func (c Context) BlockTime() time.Time { return c.headerInfo.Time } // Deprecated: use HeaderInfo().Time
func (c Context) ChainID() string { return c.chainID }
func (c Context) TxBytes() []byte { return c.txBytes }
func (c Context) Logger() log.Logger { return c.logger }
func (c Context) VoteInfos() []abci.VoteInfo { return c.voteInfo }
func (c Context) GasMeter() storetypes.GasMeter { return c.gasMeter }
func (c Context) BlockGasMeter() storetypes.GasMeter { return c.blockGasMeter }
@ -173,15 +171,6 @@ func (c Context) WithHeaderHash(hash []byte) Context {
return c
}
// WithBlockTime returns a Context with an updated CometBFT block header time in UTC with no monotonic component.
// Stripping the monotonic component is for time equality.
func (c Context) WithBlockTime(newTime time.Time) Context {
newHeader := c.BlockHeader()
// https://github.com/gogo/protobuf/issues/519
newHeader.Time = newTime.Round(0).UTC()
return c.WithBlockHeader(newHeader)
}
// WithProposer returns a Context with an updated proposer consensus address.
func (c Context) WithProposer(addr ConsAddress) Context {
newHeader := c.BlockHeader()

View File

@ -7,7 +7,6 @@ import (
abci "github.com/cometbft/cometbft/abci/types"
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
cmttime "github.com/cometbft/cometbft/types/time"
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/suite"
@ -147,7 +146,6 @@ func (s *contextTestSuite) TestContextHeader() {
var ctx types.Context
height := int64(5)
time := time.Now()
addr := secp256k1.GenPrivKey().PubKey().Address()
proposer := types.ConsAddress(addr)
@ -155,22 +153,12 @@ func (s *contextTestSuite) TestContextHeader() {
ctx = ctx.
WithBlockHeight(height).
WithBlockTime(time).
WithProposer(proposer)
s.Require().Equal(height, ctx.BlockHeight())
s.Require().Equal(height, ctx.BlockHeader().Height)
s.Require().Equal(time.UTC(), ctx.BlockHeader().Time)
s.Require().Equal(proposer.Bytes(), ctx.BlockHeader().ProposerAddress)
}
func (s *contextTestSuite) TestWithBlockTime() {
now := time.Now()
ctx := types.NewContext(nil, false, nil)
ctx = ctx.WithBlockTime(now)
cmttime2 := cmttime.Canonical(now)
s.Require().Equal(ctx.BlockTime(), cmttime2)
}
func (s *contextTestSuite) TestContextHeaderClone() {
cases := map[string]struct {
h cmtproto.Header
@ -216,13 +204,13 @@ func (s *contextTestSuite) TestContextHeaderClone() {
s.T().Run(name, func(t *testing.T) {
ctx := types.NewContext(nil, false, nil).WithBlockHeader(tc.h)
s.Require().Equal(tc.h.Height, ctx.BlockHeight())
s.Require().Equal(tc.h.Time.UTC(), ctx.BlockTime())
s.Require().Equal(tc.h.Time.UTC(), ctx.BlockHeader().Time)
// update only changes one field
var newHeight int64 = 17
ctx = ctx.WithBlockHeight(newHeight)
s.Require().Equal(newHeight, ctx.BlockHeight())
s.Require().Equal(tc.h.Time.UTC(), ctx.BlockTime())
s.Require().Equal(tc.h.Time.UTC(), ctx.BlockHeader().Time)
})
}
}

View File

@ -100,7 +100,7 @@ func migrateVestingAccounts(ctx sdk.Context, account sdk.AccountI, queryServer g
balance = balance.Add(coin)
}
asVesting.TrackDelegation(ctx.BlockTime(), balance, delegations)
asVesting.TrackDelegation(ctx.HeaderInfo().Time, balance, delegations)
return asVesting.(sdk.AccountI), nil
}

View File

@ -256,7 +256,7 @@ func (k Keeper) LockedCoins(ctx Context, addr AccAddress) Coins {
acc := k.GetAccount(ctx, addr)
if acc != nil {
if acc.IsVesting() {
return acc.LockedCoins(ctx.BlockTime())
return acc.LockedCoins(ctx.HeaderInfo().Time)
}
}

View File

@ -70,8 +70,8 @@ func (s msgServer) CreateVestingAccount(ctx context.Context, msg *types.MsgCreat
if msg.Delayed {
vestingAccount = types.NewDelayedVestingAccountRaw(baseVestingAccount)
} else {
sdkCtx := sdk.UnwrapSDKContext(ctx)
vestingAccount = types.NewContinuousVestingAccountRaw(baseVestingAccount, sdkCtx.BlockTime().Unix())
sdkctx := sdk.UnwrapSDKContext(ctx)
vestingAccount = types.NewContinuousVestingAccountRaw(baseVestingAccount, sdkctx.HeaderInfo().Time.Unix())
}
s.AccountKeeper.SetAccount(ctx, vestingAccount)

View File

@ -7,7 +7,7 @@ import (
// InitGenesis initializes new authz genesis
func (k Keeper) InitGenesis(ctx sdk.Context, data *authz.GenesisState) {
now := ctx.BlockTime()
now := ctx.HeaderInfo().Time
for _, entry := range data.Authorization {
// ignore expired authorizations
if entry.Expiration != nil && entry.Expiration.Before(now) {

View File

@ -73,7 +73,7 @@ func (suite *GenesisTestSuite) SetupTest() {
func (suite *GenesisTestSuite) TestImportExportGenesis() {
coins := sdk.NewCoins(sdk.NewCoin("foo", sdkmath.NewInt(1_000)))
now := suite.ctx.BlockTime()
now := suite.ctx.HeaderInfo().Time
expires := now.Add(time.Hour)
grant := &bank.SendAuthorization{SpendLimit: coins}
err := suite.keeper.SaveGrant(suite.ctx, granteeAddr, granterAddr, grant, &expires)

View File

@ -277,7 +277,7 @@ func (suite *TestSuite) TestGRPCQueryGranteeGrants() {
}
func (suite *TestSuite) createSendAuthorization(grantee, granter sdk.AccAddress) authz.Authorization {
exp := suite.ctx.BlockHeader().Time.Add(time.Hour)
exp := suite.ctx.HeaderInfo().Time.Add(time.Hour)
newCoins := sdk.NewCoins(sdk.NewInt64Coin("steak", 100))
authorization := &banktypes.SendAuthorization{SpendLimit: newCoins}
err := suite.authzKeeper.SaveGrant(suite.ctx, grantee, granter, authorization, &exp)
@ -286,7 +286,7 @@ func (suite *TestSuite) createSendAuthorization(grantee, granter sdk.AccAddress)
}
func (suite *TestSuite) createSendAuthorizationWithAllowList(grantee, granter sdk.AccAddress) authz.Authorization {
exp := suite.ctx.BlockHeader().Time.Add(time.Hour)
exp := suite.ctx.HeaderInfo().Time.Add(time.Hour)
newCoins := sdk.NewCoins(sdk.NewInt64Coin("steak", 100))
authorization := &banktypes.SendAuthorization{SpendLimit: newCoins, AllowList: []string{suite.addrs[5].String()}}
err := suite.authzKeeper.SaveGrant(suite.ctx, grantee, granter, authorization, &exp)

View File

@ -95,7 +95,7 @@ func (k Keeper) update(ctx context.Context, grantee, granter sdk.AccAddress, upd
func (k Keeper) DispatchActions(ctx context.Context, grantee sdk.AccAddress, msgs []sdk.Msg) ([][]byte, error) {
results := make([][]byte, len(msgs))
sdkCtx := sdk.UnwrapSDKContext(ctx)
now := sdkCtx.BlockTime()
now := sdkCtx.HeaderInfo().Time
for i, msg := range msgs {
signers, _, err := k.cdc.GetMsgV1Signers(msg)
@ -189,7 +189,7 @@ func (k Keeper) SaveGrant(ctx context.Context, grantee, granter sdk.AccAddress,
store := k.storeService.OpenKVStore(ctx)
skey := grantStoreKey(grantee, granter, msgType)
grant, err := authz.NewGrant(sdkCtx.BlockTime(), authorization, expiration)
grant, err := authz.NewGrant(sdkCtx.HeaderInfo().Time, authorization, expiration)
if err != nil {
return err
}
@ -292,7 +292,7 @@ func (k Keeper) GetAuthorizations(ctx context.Context, grantee, granter sdk.AccA
func (k Keeper) GetAuthorization(ctx context.Context, grantee, granter sdk.AccAddress, msgType string) (authz.Authorization, *time.Time) {
sdkCtx := sdk.UnwrapSDKContext(ctx)
grant, found := k.getGrant(ctx, grantStoreKey(grantee, granter, msgType))
if !found || (grant.Expiration != nil && grant.Expiration.Before(sdkCtx.BlockHeader().Time)) {
if !found || (grant.Expiration != nil && grant.Expiration.Before(sdkCtx.HeaderInfo().Time)) {
return nil, nil
}
@ -411,7 +411,7 @@ func (k Keeper) DequeueAndDeleteExpiredGrants(ctx context.Context) error {
store := k.storeService.OpenKVStore(ctx)
sdkCtx := sdk.UnwrapSDKContext(ctx)
iterator, err := store.Iterator(GrantQueuePrefix, storetypes.InclusiveEndBytes(GrantQueueTimePrefix(sdkCtx.BlockTime())))
iterator, err := store.Iterator(GrantQueuePrefix, storetypes.InclusiveEndBytes(GrantQueueTimePrefix(sdkCtx.HeaderInfo().Time)))
if err != nil {
return err
}

View File

@ -4,11 +4,10 @@ import (
"testing"
"time"
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
cmttime "github.com/cometbft/cometbft/types/time"
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/suite"
"cosmossdk.io/core/header"
"cosmossdk.io/log"
storetypes "cosmossdk.io/store/types"
@ -51,7 +50,7 @@ func (s *TestSuite) SetupTest() {
key := storetypes.NewKVStoreKey(authzkeeper.StoreKey)
storeService := runtime.NewKVStoreService(key)
testCtx := testutil.DefaultContextWithDB(s.T(), key, storetypes.NewTransientStoreKey("transient_test"))
s.ctx = testCtx.Ctx.WithBlockHeader(cmtproto.Header{Time: cmttime.Now()})
s.ctx = testCtx.Ctx.WithHeaderInfo(header.Info{Time: time.Now().Round(0).UTC()})
s.encCfg = moduletestutil.MakeTestEncodingConfig(authzmodule.AppModuleBasic{})
s.baseApp = baseapp.NewBaseApp(
@ -87,7 +86,7 @@ func (s *TestSuite) SetupTest() {
func (s *TestSuite) TestKeeper() {
ctx, addrs := s.ctx, s.addrs
now := ctx.BlockTime()
now := ctx.HeaderInfo().Time
require := s.Require()
granterAddr := addrs[0]
@ -145,7 +144,7 @@ func (s *TestSuite) TestKeeperIter() {
granterAddr := addrs[0]
granteeAddr := addrs[1]
granter2Addr := addrs[2]
e := ctx.BlockTime().AddDate(1, 0, 0)
e := ctx.HeaderInfo().Time.AddDate(1, 0, 0)
sendAuthz := banktypes.NewSendAuthorization(coins100, nil)
err := s.authzKeeper.SaveGrant(ctx, granteeAddr, granterAddr, sendAuthz, &e)
@ -164,7 +163,7 @@ func (s *TestSuite) TestKeeperIter() {
func (s *TestSuite) TestDispatchAction() {
addrs := s.addrs
require := s.Require()
now := s.ctx.BlockTime()
now := s.ctx.HeaderInfo().Time
granterAddr := addrs[0]
granteeAddr := addrs[1]
@ -213,7 +212,7 @@ func (s *TestSuite) TestDispatchAction() {
e := now.AddDate(0, 0, 1)
err := s.authzKeeper.SaveGrant(s.ctx, granteeAddr, granterAddr, a, &e)
require.NoError(err)
return s.ctx.WithBlockTime(s.ctx.BlockTime().AddDate(0, 0, 2))
return s.ctx.WithHeaderInfo(header.Info{Time: s.ctx.HeaderInfo().Time.AddDate(0, 0, 2)})
},
func() {},
},
@ -314,7 +313,7 @@ func (s *TestSuite) TestDispatchedEvents() {
granterAddr := addrs[0]
granteeAddr := addrs[1]
recipientAddr := addrs[2]
expiration := s.ctx.BlockTime().Add(1 * time.Second) // must be in the future
expiration := s.ctx.HeaderInfo().Time.Add(1 * time.Second) // must be in the future
msgs := authz.NewMsgExec(granteeAddr, []sdk.Msg{
&banktypes.MsgSend{
@ -363,7 +362,7 @@ func (s *TestSuite) TestDequeueAllGrantsQueue() {
granter := addrs[0]
grantee := addrs[1]
grantee1 := addrs[2]
exp := s.ctx.BlockTime().AddDate(0, 0, 1)
exp := s.ctx.HeaderInfo().Time.AddDate(0, 0, 1)
a := banktypes.SendAuthorization{SpendLimit: coins100}
// create few authorizations
@ -381,7 +380,7 @@ func (s *TestSuite) TestDequeueAllGrantsQueue() {
err = s.authzKeeper.SaveGrant(s.ctx, granter, grantee, &a, &exp2)
require.NoError(err)
newCtx := s.ctx.WithBlockTime(exp.AddDate(1, 0, 0))
newCtx := s.ctx.WithHeaderInfo(header.Info{Time: exp.AddDate(1, 0, 0)})
err = s.authzKeeper.DequeueAndDeleteExpiredGrants(newCtx)
require.NoError(err)
@ -413,7 +412,7 @@ func (s *TestSuite) TestGetAuthorization() {
genAuthSend := authz.NewGenericAuthorization(sdk.MsgTypeURL(&banktypes.MsgSend{}))
sendAuth := banktypes.NewSendAuthorization(coins10, nil)
start := s.ctx.BlockHeader().Time
start := s.ctx.HeaderInfo().Time
expired := start.Add(time.Duration(1) * time.Second)
notExpired := start.Add(time.Duration(5) * time.Hour)
@ -421,7 +420,7 @@ func (s *TestSuite) TestGetAuthorization() {
s.Require().NoError(s.authzKeeper.SaveGrant(s.ctx, addr1, addr3, genAuthSend, &expired), "creating grant 1->3")
s.Require().NoError(s.authzKeeper.SaveGrant(s.ctx, addr1, addr4, sendAuth, &notExpired), "creating grant 1->4")
// Without access to private keeper methods, I don't know how to save a grant with an invalid authorization.
newCtx := s.ctx.WithBlockTime(start.Add(time.Duration(1) * time.Minute))
newCtx := s.ctx.WithHeaderInfo(header.Info{Time: start.Add(time.Duration(1) * time.Minute)})
tests := []struct {
name string
@ -490,7 +489,7 @@ func (s *TestSuite) TestGetAuthorizations() {
genAuthMulti := authz.NewGenericAuthorization(sdk.MsgTypeURL(&banktypes.MsgMultiSend{}))
genAuthSend := authz.NewGenericAuthorization(sdk.MsgTypeURL(&banktypes.MsgSend{}))
start := s.ctx.BlockHeader().Time
start := s.ctx.HeaderInfo().Time
expired := start.Add(time.Duration(1) * time.Second)
s.Require().NoError(s.authzKeeper.SaveGrant(s.ctx, addr1, addr2, genAuthMulti, &expired), "creating multi send grant 1->2")

View File

@ -5,6 +5,7 @@ import (
"github.com/golang/mock/gomock"
"cosmossdk.io/core/header"
sdkmath "cosmossdk.io/math"
"github.com/cosmos/cosmos-sdk/codec/address"
@ -23,9 +24,9 @@ func (suite *TestSuite) createAccounts(accs int) []sdk.AccAddress {
}
func (suite *TestSuite) TestGrant() {
ctx := suite.ctx.WithBlockTime(time.Now())
ctx := suite.ctx.WithHeaderInfo(header.Info{Time: time.Now()})
addrs := suite.createAccounts(2)
curBlockTime := ctx.BlockTime()
curBlockTime := ctx.HeaderInfo().Time
suite.accountKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes()

View File

@ -37,7 +37,7 @@ func addExpiredGrantsIndex(ctx sdk.Context, store storetypes.KVStore, cdc codec.
defer grantsIter.Close()
queueItems := make(map[string][]string)
now := ctx.BlockTime()
now := ctx.HeaderInfo().Time
for ; grantsIter.Valid(); grantsIter.Next() {
var grant authz.Grant
bz := grantsIter.Value()

View File

@ -6,6 +6,7 @@ import (
"github.com/stretchr/testify/require"
"cosmossdk.io/core/header"
storetypes "cosmossdk.io/store/types"
codectypes "github.com/cosmos/cosmos-sdk/codec/types"
@ -36,7 +37,7 @@ func TestMigration(t *testing.T) {
sendMsgType := banktypes.SendAuthorization{}.MsgTypeURL()
genericMsgType := sdk.MsgTypeURL(&govtypes.MsgVote{})
coins100 := sdk.NewCoins(sdk.NewInt64Coin("atom", 100))
blockTime := ctx.BlockTime()
blockTime := ctx.HeaderInfo().Time
oneDay := blockTime.AddDate(0, 0, 1)
oneYear := blockTime.AddDate(1, 0, 0)
sendAuthz := banktypes.NewSendAuthorization(coins100, nil)
@ -110,7 +111,7 @@ func TestMigration(t *testing.T) {
require.NoError(t, err)
}
ctx = ctx.WithBlockTime(ctx.BlockTime().Add(1 * time.Hour))
ctx = ctx.WithHeaderInfo(header.Info{Time: ctx.HeaderInfo().Time.Add(1 * time.Hour)})
require.NoError(t, v2.MigrateStore(ctx, storeService, cdc))
bz, err := store.Get(v2.GrantStoreKey(grantee1, granter2, genericMsgType))

View File

@ -7,6 +7,7 @@ import (
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/require"
"cosmossdk.io/core/header"
"cosmossdk.io/log"
storetypes "cosmossdk.io/store/types"
@ -49,7 +50,7 @@ func TestExpiredGrantsQueue(t *testing.T) {
grantee2 := addrs[2]
grantee3 := addrs[3]
grantee4 := addrs[4]
expiration := ctx.BlockTime().AddDate(0, 1, 0)
expiration := ctx.HeaderInfo().Time.AddDate(0, 1, 0)
expiration2 := expiration.AddDate(1, 0, 0)
smallCoins := sdk.NewCoins(sdk.NewInt64Coin("stake", 10))
sendAuthz := banktypes.NewSendAuthorization(smallCoins, nil)
@ -94,12 +95,12 @@ func TestExpiredGrantsQueue(t *testing.T) {
checkGrants(ctx, 4)
// expiration is exclusive!
ctx = ctx.WithBlockTime(expiration)
ctx = ctx.WithHeaderInfo(header.Info{Time: expiration})
checkGrants(ctx, 4)
ctx = ctx.WithBlockTime(expiration.AddDate(0, 0, 1))
ctx = ctx.WithHeaderInfo(header.Info{Time: expiration.AddDate(0, 0, 1)})
checkGrants(ctx, 2)
ctx = ctx.WithBlockTime(expiration2.AddDate(0, 0, 1))
ctx = ctx.WithHeaderInfo(header.Info{Time: expiration2.AddDate(0, 0, 1)})
checkGrants(ctx, 1)
}

View File

@ -117,7 +117,7 @@ func SimulateMsgGrant(
var expiration *time.Time
t1 := simtypes.RandTimestamp(r)
if !t1.Before(ctx.BlockTime()) {
if !t1.Before(ctx.HeaderInfo().Time) {
expiration = &t1
}
randomAuthz := generateRandomAuthorization(r, spendLimit)

View File

@ -9,6 +9,7 @@ import (
"github.com/cosmos/gogoproto/proto"
"github.com/stretchr/testify/suite"
"cosmossdk.io/core/header"
"cosmossdk.io/depinject"
"cosmossdk.io/log"
@ -120,7 +121,7 @@ func (suite *SimTestSuite) TestSimulateGrant() {
r := rand.New(s)
accounts := suite.getTestingAccounts(r, 2)
blockTime := time.Now().UTC()
ctx := suite.ctx.WithBlockTime(blockTime)
ctx := suite.ctx.WithHeaderInfo(header.Info{Time: blockTime})
_, err := suite.app.FinalizeBlock(&abci.RequestFinalizeBlock{
Height: suite.app.LastBlockHeight() + 1,
@ -195,7 +196,7 @@ func (suite *SimTestSuite) TestSimulateExec() {
granter := accounts[0]
grantee := accounts[1]
a := banktypes.NewSendAuthorization(initCoins, nil)
expire := suite.ctx.BlockTime().Add(1 * time.Hour)
expire := suite.ctx.HeaderInfo().Time.Add(1 * time.Hour)
err = suite.authzKeeper.SaveGrant(suite.ctx, grantee.Address, granter.Address, a, &expire)
suite.Require().NoError(err)

View File

@ -5,6 +5,8 @@ import (
"fmt"
"time"
"cosmossdk.io/core/header"
"github.com/cosmos/cosmos-sdk/testutil/testdata"
sdk "github.com/cosmos/cosmos-sdk/types"
"github.com/cosmos/cosmos-sdk/types/query"
@ -173,7 +175,7 @@ func (suite *KeeperTestSuite) TestSpendableBalances() {
_, _, addr := testdata.KeyTestPubAddr()
ctx := sdk.UnwrapSDKContext(suite.ctx)
ctx = ctx.WithBlockTime(time.Now())
ctx = ctx.WithHeaderInfo(header.Info{Time: time.Now()})
queryClient := suite.mockQueryClient(ctx)
_, err := queryClient.SpendableBalances(ctx, &types.QuerySpendableBalancesRequest{})
@ -200,8 +202,8 @@ func (suite *KeeperTestSuite) TestSpendableBalances() {
vacc, err := vestingtypes.NewContinuousVestingAccount(
acc,
sdk.NewCoins(fooCoins),
ctx.BlockTime().Unix(),
ctx.BlockTime().Add(time.Hour).Unix(),
ctx.HeaderInfo().Time.Unix(),
ctx.HeaderInfo().Time.Add(time.Hour).Unix(),
)
suite.Require().NoError(err)
@ -209,7 +211,7 @@ func (suite *KeeperTestSuite) TestSpendableBalances() {
suite.Require().NoError(testutil.FundAccount(suite.ctx, suite.bankKeeper, addr, origCoins))
// move time forward for some tokens to vest
ctx = ctx.WithBlockTime(ctx.BlockTime().Add(30 * time.Minute))
ctx = ctx.WithHeaderInfo(header.Info{Time: ctx.HeaderInfo().Time.Add(30 * time.Minute)})
queryClient = suite.mockQueryClient(ctx)
suite.mockSpendableCoins(ctx, vacc)
@ -226,7 +228,7 @@ func (suite *KeeperTestSuite) TestSpendableBalanceByDenom() {
_, _, addr := testdata.KeyTestPubAddr()
ctx := sdk.UnwrapSDKContext(suite.ctx)
ctx = ctx.WithBlockTime(time.Now())
ctx = ctx.WithHeaderInfo(header.Info{Time: time.Now()})
queryClient := suite.mockQueryClient(ctx)
_, err := queryClient.SpendableBalanceByDenom(ctx, &types.QuerySpendableBalanceByDenomRequest{})
@ -248,8 +250,8 @@ func (suite *KeeperTestSuite) TestSpendableBalanceByDenom() {
vacc, err := vestingtypes.NewContinuousVestingAccount(
acc,
sdk.NewCoins(fooCoins),
ctx.BlockTime().Unix(),
ctx.BlockTime().Add(time.Hour).Unix(),
ctx.HeaderInfo().Time.Unix(),
ctx.HeaderInfo().Time.Add(time.Hour).Unix(),
)
suite.Require().NoError(err)
@ -257,7 +259,7 @@ func (suite *KeeperTestSuite) TestSpendableBalanceByDenom() {
suite.Require().NoError(testutil.FundAccount(suite.ctx, suite.bankKeeper, addr, origCoins))
// move time forward for half of the tokens to vest
ctx = ctx.WithBlockTime(ctx.BlockTime().Add(30 * time.Minute))
ctx = ctx.WithHeaderInfo(header.Info{Time: ctx.HeaderInfo().Time.Add(30 * time.Minute)})
queryClient = suite.mockQueryClient(ctx)
// check fooCoins first, it has some vested and some vesting

View File

@ -435,7 +435,7 @@ func (k BaseKeeper) trackDelegation(ctx context.Context, addr sdk.AccAddress, ba
if ok {
// TODO: return error on account.TrackDelegation
sdkCtx := sdk.UnwrapSDKContext(ctx)
vacc.TrackDelegation(sdkCtx.BlockHeader().Time, balance, amt)
vacc.TrackDelegation(sdkCtx.HeaderInfo().Time, balance, amt)
k.ak.SetAccount(ctx, acc)
}

View File

@ -16,6 +16,7 @@ import (
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/suite"
"cosmossdk.io/core/header"
errorsmod "cosmossdk.io/errors"
"cosmossdk.io/log"
"cosmossdk.io/math"
@ -1476,7 +1477,7 @@ func (suite *KeeperTestSuite) TestSpendableCoins() {
suite.mockSpendableCoins(ctx, acc1)
require.Equal(origCoins[0], suite.bankKeeper.SpendableCoin(ctx, accAddrs[1], "stake"))
ctx = ctx.WithBlockTime(now.Add(12 * time.Hour))
ctx = ctx.WithHeaderInfo(header.Info{Time: now.Add(12 * time.Hour)})
suite.mockSpendableCoins(ctx, vacc)
require.Equal(origCoins.Sub(lockedCoins...), suite.bankKeeper.SpendableCoins(ctx, accAddrs[0]))
@ -1508,7 +1509,7 @@ func (suite *KeeperTestSuite) TestVestingAccountSend() {
suite.mockFundAccount(accAddrs[0])
require.NoError(banktestutil.FundAccount(ctx, suite.bankKeeper, accAddrs[0], sendCoins))
// require that all vested coins are spendable plus any received
ctx = ctx.WithBlockTime(now.Add(12 * time.Hour))
ctx = ctx.WithHeaderInfo(header.Info{Time: now.Add(12 * time.Hour)})
suite.mockSendCoins(ctx, vacc, accAddrs[1])
require.NoError(suite.bankKeeper.SendCoins(ctx, accAddrs[0], accAddrs[1], sendCoins))
require.Equal(origCoins, suite.bankKeeper.GetAllBalances(ctx, accAddrs[0]))
@ -1543,7 +1544,7 @@ func (suite *KeeperTestSuite) TestPeriodicVestingAccountSend() {
require.NoError(banktestutil.FundAccount(ctx, suite.bankKeeper, accAddrs[0], sendCoins))
// require that all vested coins are spendable plus any received
ctx = ctx.WithBlockTime(now.Add(12 * time.Hour))
ctx = ctx.WithHeaderInfo(header.Info{Time: now.Add(12 * time.Hour)})
suite.mockSendCoins(ctx, vacc, accAddrs[1])
require.NoError(suite.bankKeeper.SendCoins(ctx, accAddrs[0], accAddrs[1], sendCoins))
require.Equal(origCoins, suite.bankKeeper.GetAllBalances(ctx, accAddrs[0]))
@ -1640,7 +1641,7 @@ func (suite *KeeperTestSuite) TestDelegateCoins() {
suite.mockFundAccount(accAddrs[1])
require.NoError(banktestutil.FundAccount(ctx, suite.bankKeeper, accAddrs[1], origCoins))
ctx = ctx.WithBlockTime(now.Add(12 * time.Hour))
ctx = ctx.WithHeaderInfo(header.Info{Time: now.Add(12 * time.Hour)})
// require the ability for a non-vesting account to delegate
suite.mockDelegateCoins(ctx, acc1, holderAcc)
@ -1698,7 +1699,7 @@ func (suite *KeeperTestSuite) TestUndelegateCoins() {
suite.mockFundAccount(accAddrs[1])
require.NoError(banktestutil.FundAccount(ctx, suite.bankKeeper, accAddrs[1], origCoins))
ctx = ctx.WithBlockTime(now.Add(12 * time.Hour))
ctx = ctx.WithHeaderInfo(header.Info{Time: now.Add(12 * time.Hour)})
// require the ability for a non-vesting account to delegate
suite.mockDelegateCoins(ctx, acc1, holderAcc)

View File

@ -183,7 +183,7 @@ func (k BaseViewKeeper) LockedCoins(ctx context.Context, addr sdk.AccAddress) sd
vacc, ok := acc.(types.VestingAccount)
if ok {
sdkCtx := sdk.UnwrapSDKContext(ctx)
return vacc.LockedCoins(sdkCtx.BlockTime())
return vacc.LockedCoins(sdkCtx.HeaderInfo().Time)
}
}

View File

@ -58,7 +58,7 @@ func (k Keeper) handleEquivocationEvidence(ctx context.Context, evidence *types.
// calculate the age of the evidence
infractionHeight := evidence.GetHeight()
infractionTime := evidence.GetTime()
ageDuration := sdkCtx.BlockHeader().Time.Sub(infractionTime)
ageDuration := sdkCtx.HeaderInfo().Time.Sub(infractionTime)
ageBlocks := sdkCtx.BlockHeader().Height - infractionHeight
// Reject evidence if the double-sign is too old. Evidence is considered stale

View File

@ -23,7 +23,7 @@ var _ FeeAllowanceI = (*BasicAllowance)(nil)
// If remove is true (regardless of the error), the FeeAllowance will be deleted from storage
// (eg. when it is used up). (See call to RevokeAllowance in Keeper.UseGrantedFees)
func (a *BasicAllowance) Accept(ctx context.Context, fee sdk.Coins, _ []sdk.Msg) (bool, error) {
if a.Expiration != nil && a.Expiration.Before(sdk.UnwrapSDKContext(ctx).BlockTime()) {
if a.Expiration != nil && a.Expiration.Before(sdk.UnwrapSDKContext(ctx).HeaderInfo().Time) {
return true, errorsmod.Wrap(ErrFeeLimitExpired, "basic allowance")
}

View File

@ -4,10 +4,10 @@ import (
"testing"
"time"
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"cosmossdk.io/core/header"
storetypes "cosmossdk.io/store/types"
"cosmossdk.io/x/feegrant"
@ -19,23 +19,21 @@ func TestBasicFeeValidAllow(t *testing.T) {
key := storetypes.NewKVStoreKey(feegrant.StoreKey)
testCtx := testutil.DefaultContextWithDB(t, key, storetypes.NewTransientStoreKey("transient_test"))
ctx := testCtx.Ctx.WithBlockHeader(cmtproto.Header{Height: 1})
ctx := testCtx.Ctx.WithHeaderInfo(header.Info{Height: 1})
badTime := ctx.BlockTime().AddDate(0, 0, -1)
badTime := ctx.HeaderInfo().Time.AddDate(0, 0, -1)
allowace := &feegrant.BasicAllowance{
Expiration: &badTime,
}
require.Error(t, allowace.ValidateBasic())
ctx = ctx.WithBlockHeader(cmtproto.Header{
Time: time.Now(),
})
ctx = ctx.WithHeaderInfo(header.Info{Time: time.Now()})
eth := sdk.NewCoins(sdk.NewInt64Coin("eth", 10))
atom := sdk.NewCoins(sdk.NewInt64Coin("atom", 555))
smallAtom := sdk.NewCoins(sdk.NewInt64Coin("atom", 43))
bigAtom := sdk.NewCoins(sdk.NewInt64Coin("atom", 1000))
leftAtom := sdk.NewCoins(sdk.NewInt64Coin("atom", 512))
now := ctx.BlockTime()
now := ctx.HeaderInfo().Time
oneHour := now.Add(1 * time.Hour)
cases := map[string]struct {
@ -135,7 +133,7 @@ func TestBasicFeeValidAllow(t *testing.T) {
err := tc.allowance.ValidateBasic()
require.NoError(t, err)
ctx := testCtx.Ctx.WithBlockTime(tc.blockTime)
ctx := testCtx.Ctx.WithHeaderInfo(header.Info{Time: tc.blockTime})
// now try to deduct
removed, err := tc.allowance.Accept(ctx, tc.fee, []sdk.Msg{})

View File

@ -4,10 +4,10 @@ import (
"testing"
"time"
ocproto "github.com/cometbft/cometbft/proto/tendermint/types"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"cosmossdk.io/core/header"
storetypes "cosmossdk.io/store/types"
"cosmossdk.io/x/feegrant"
"cosmossdk.io/x/feegrant/module"
@ -23,14 +23,14 @@ func TestFilteredFeeValidAllow(t *testing.T) {
testCtx := testutil.DefaultContextWithDB(t, key, storetypes.NewTransientStoreKey("transient_test"))
encCfg := moduletestutil.MakeTestEncodingConfig(module.AppModuleBasic{})
ctx := testCtx.Ctx.WithBlockHeader(ocproto.Header{Time: time.Now()})
ctx := testCtx.Ctx.WithHeaderInfo(header.Info{Time: time.Now()})
eth := sdk.NewCoins(sdk.NewInt64Coin("eth", 10))
atom := sdk.NewCoins(sdk.NewInt64Coin("atom", 555))
smallAtom := sdk.NewCoins(sdk.NewInt64Coin("atom", 43))
bigAtom := sdk.NewCoins(sdk.NewInt64Coin("atom", 1000))
leftAtom := sdk.NewCoins(sdk.NewInt64Coin("atom", 512))
now := ctx.BlockTime()
now := ctx.HeaderInfo().Time
oneHour := now.Add(1 * time.Hour)
// msg we will call in the all cases
@ -140,7 +140,7 @@ func TestFilteredFeeValidAllow(t *testing.T) {
err := tc.allowance.ValidateBasic()
require.NoError(t, err)
ctx := testCtx.Ctx.WithBlockTime(tc.blockTime)
ctx := testCtx.Ctx.WithHeaderInfo(header.Info{Time: tc.blockTime})
// create grant
var granter, grantee sdk.AccAddress

View File

@ -4,9 +4,9 @@ import (
"testing"
"time"
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
"github.com/stretchr/testify/require"
"cosmossdk.io/core/header"
storetypes "cosmossdk.io/store/types"
"cosmossdk.io/x/feegrant"
"cosmossdk.io/x/feegrant/module"
@ -23,14 +23,14 @@ func TestGrant(t *testing.T) {
testCtx := testutil.DefaultContextWithDB(t, key, storetypes.NewTransientStoreKey("transient_test"))
encCfg := moduletestutil.MakeTestEncodingConfig(module.AppModuleBasic{})
ctx := testCtx.Ctx.WithBlockHeader(cmtproto.Header{Time: time.Now()})
ctx := testCtx.Ctx.WithHeaderInfo(header.Info{Time: time.Now()})
addr, err := addressCodec.StringToBytes("cosmos1qk93t4j0yyzgqgt6k5qf8deh8fq6smpn3ntu3x")
require.NoError(t, err)
addr2, err := addressCodec.StringToBytes("cosmos1p9qh4ldfd6n0qehujsal4k7g0e37kel90rc4ts")
require.NoError(t, err)
atom := sdk.NewCoins(sdk.NewInt64Coin("atom", 555))
now := ctx.BlockTime()
now := ctx.HeaderInfo().Time
oneYear := now.AddDate(1, 0, 0)
zeroAtoms := sdk.NewCoins(sdk.NewInt64Coin("atom", 0))

View File

@ -62,7 +62,7 @@ func TestImportExportGenesis(t *testing.T) {
f.accountKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes()
coins := sdk.NewCoins(sdk.NewCoin("foo", math.NewInt(1_000)))
now := f.ctx.BlockHeader().Time
now := f.ctx.HeaderInfo().Time
oneYear := now.AddDate(1, 0, 0)
msgSrvr := keeper.NewMsgServerImpl(f.feegrantKeeper)

View File

@ -234,7 +234,7 @@ func (suite *KeeperTestSuite) TestFeeAllowancesByGranter() {
}
func (suite *KeeperTestSuite) grantFeeAllowance(granter, grantee sdk.AccAddress) {
exp := suite.ctx.BlockTime().AddDate(1, 0, 0)
exp := suite.ctx.HeaderInfo().Time.AddDate(1, 0, 0)
err := suite.feegrantKeeper.GrantAllowance(suite.ctx, granter, grantee, &feegrant.BasicAllowance{
SpendLimit: sdk.NewCoins(sdk.NewInt64Coin("atom", 555)),
Expiration: &exp,

View File

@ -85,7 +85,7 @@ func (k Keeper) GrantAllowance(ctx context.Context, granter, grantee sdk.AccAddr
// expiration shouldn't be in the past.
sdkCtx := sdk.UnwrapSDKContext(ctx)
if exp != nil && exp.Before(sdkCtx.BlockTime()) {
if exp != nil && exp.Before(sdkCtx.HeaderInfo().Time) {
return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "expiration is before current block time")
}
@ -299,7 +299,7 @@ func (k Keeper) ExportGenesis(ctx context.Context) (*feegrant.GenesisState, erro
// RemoveExpiredAllowances iterates grantsByExpiryQueue and deletes the expired grants.
func (k Keeper) RemoveExpiredAllowances(ctx context.Context) error {
exp := sdk.UnwrapSDKContext(ctx).BlockTime()
exp := sdk.UnwrapSDKContext(ctx).HeaderInfo().Time
rng := collections.NewPrefixUntilTripleRange[time.Time, sdk.AccAddress, sdk.AccAddress](exp)
err := k.FeeAllowanceQueue.Walk(ctx, rng, func(key collections.Triple[time.Time, sdk.AccAddress, sdk.AccAddress], value bool) (stop bool, err error) {

View File

@ -6,6 +6,7 @@ import (
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/suite"
"cosmossdk.io/core/header"
sdkmath "cosmossdk.io/math"
storetypes "cosmossdk.io/store/types"
"cosmossdk.io/x/feegrant"
@ -62,8 +63,8 @@ func (suite *KeeperTestSuite) SetupTest() {
func (suite *KeeperTestSuite) TestKeeperCrud() {
// some helpers
eth := sdk.NewCoins(sdk.NewInt64Coin("eth", 123))
exp := suite.ctx.BlockTime().AddDate(1, 0, 0)
exp2 := suite.ctx.BlockTime().AddDate(2, 0, 0)
exp := suite.ctx.HeaderInfo().Time.AddDate(1, 0, 0)
exp2 := suite.ctx.HeaderInfo().Time.AddDate(2, 0, 0)
basic := &feegrant.BasicAllowance{
SpendLimit: suite.atom,
Expiration: &exp,
@ -188,7 +189,7 @@ func (suite *KeeperTestSuite) TestKeeperCrud() {
func (suite *KeeperTestSuite) TestUseGrantedFee() {
eth := sdk.NewCoins(sdk.NewInt64Coin("eth", 123))
blockTime := suite.ctx.BlockTime()
blockTime := suite.ctx.HeaderInfo().Time
oneYear := blockTime.AddDate(1, 0, 0)
future := &feegrant.BasicAllowance{
@ -281,7 +282,7 @@ func (suite *KeeperTestSuite) TestUseGrantedFee() {
suite.Require().NoError(err)
// waiting for future blocks, allowance to be pruned.
ctx := suite.ctx.WithBlockTime(oneYear)
ctx := suite.ctx.WithHeaderInfo(header.Info{Time: oneYear})
// expect error: feegrant expired
err = suite.feegrantKeeper.UseGrantedFees(ctx, suite.addrs[0], suite.addrs[2], eth, []sdk.Msg{})
@ -296,7 +297,7 @@ func (suite *KeeperTestSuite) TestUseGrantedFee() {
func (suite *KeeperTestSuite) TestIterateGrants() {
eth := sdk.NewCoins(sdk.NewInt64Coin("eth", 123))
exp := suite.ctx.BlockTime().AddDate(1, 0, 0)
exp := suite.ctx.HeaderInfo().Time.AddDate(1, 0, 0)
allowance := &feegrant.BasicAllowance{
SpendLimit: suite.atom,
@ -322,7 +323,7 @@ func (suite *KeeperTestSuite) TestIterateGrants() {
func (suite *KeeperTestSuite) TestPruneGrants() {
eth := sdk.NewCoins(sdk.NewInt64Coin("eth", 123))
now := suite.ctx.BlockTime()
now := suite.ctx.HeaderInfo().Time
oneDay := now.AddDate(0, 0, 1)
oneYearExpiry := now.AddDate(1, 0, 0)
@ -359,7 +360,7 @@ func (suite *KeeperTestSuite) TestPruneGrants() {
},
{
name: "grant pruned from state after a day: error",
ctx: suite.ctx.WithBlockTime(now.AddDate(0, 0, 1)),
ctx: suite.ctx.WithHeaderInfo(header.Info{Time: now.AddDate(0, 0, 1)}),
granter: suite.addrs[1],
grantee: suite.addrs[0],
expErrMsg: "not found",
@ -370,7 +371,7 @@ func (suite *KeeperTestSuite) TestPruneGrants() {
},
{
name: "grant not pruned from state after a day: no error",
ctx: suite.ctx.WithBlockTime(now.AddDate(0, 0, 1)),
ctx: suite.ctx.WithHeaderInfo(header.Info{Time: now.AddDate(0, 0, 1)}),
granter: suite.addrs[1],
grantee: suite.addrs[0],
allowance: &feegrant.BasicAllowance{
@ -380,7 +381,7 @@ func (suite *KeeperTestSuite) TestPruneGrants() {
},
{
name: "grant pruned from state after a year: error",
ctx: suite.ctx.WithBlockTime(now.AddDate(1, 0, 0)),
ctx: suite.ctx.WithHeaderInfo(header.Info{Time: now.AddDate(1, 0, 0)}),
granter: suite.addrs[1],
grantee: suite.addrs[2],
expErrMsg: "not found",
@ -391,7 +392,7 @@ func (suite *KeeperTestSuite) TestPruneGrants() {
},
{
name: "no expiry: no error",
ctx: suite.ctx.WithBlockTime(now.AddDate(1, 0, 0)),
ctx: suite.ctx.WithHeaderInfo(header.Info{Time: now.AddDate(1, 0, 0)}),
granter: suite.addrs[1],
grantee: suite.addrs[2],
allowance: &feegrant.BasicAllowance{

View File

@ -5,6 +5,7 @@ import (
"github.com/golang/mock/gomock"
"cosmossdk.io/core/header"
"cosmossdk.io/x/feegrant"
codecaddress "github.com/cosmos/cosmos-sdk/codec/address"
@ -13,9 +14,9 @@ import (
)
func (suite *KeeperTestSuite) TestGrantAllowance() {
ctx := suite.ctx.WithBlockTime(time.Now())
oneYear := ctx.BlockTime().AddDate(1, 0, 0)
yesterday := ctx.BlockTime().AddDate(0, 0, -1)
ctx := suite.ctx.WithHeaderInfo(header.Info{Time: time.Now()})
oneYear := ctx.HeaderInfo().Time.AddDate(1, 0, 0)
yesterday := ctx.HeaderInfo().Time.AddDate(0, 0, -1)
addressCodec := codecaddress.NewBech32Codec("cosmos")
@ -190,7 +191,8 @@ func (suite *KeeperTestSuite) TestGrantAllowance() {
}
func (suite *KeeperTestSuite) TestRevokeAllowance() {
oneYear := suite.ctx.BlockTime().AddDate(1, 0, 0)
suite.ctx = suite.ctx.WithHeaderInfo(header.Info{Time: time.Now()})
oneYear := suite.ctx.HeaderInfo().Time.AddDate(1, 0, 0)
testCases := []struct {
name string

View File

@ -37,7 +37,7 @@ func addAllowancesByExpTimeQueue(ctx context.Context, store store.KVStore, cdc c
if exp != nil {
// store key is not changed in 0.46
key := iterator.Key()
if exp.Before(types.UnwrapSDKContext(ctx).BlockTime()) {
if exp.Before(types.UnwrapSDKContext(ctx).HeaderInfo().Time) {
prefixStore.Delete(key)
} else {
grantByExpTimeQueueKey := FeeAllowancePrefixQueue(exp, key)

View File

@ -6,6 +6,7 @@ import (
"github.com/stretchr/testify/require"
"cosmossdk.io/core/header"
sdkmath "cosmossdk.io/math"
storetypes "cosmossdk.io/store/types"
"cosmossdk.io/x/feegrant"
@ -31,7 +32,7 @@ func TestMigration(t *testing.T) {
grantee2 := sdk.AccAddress(ed25519.GenPrivKey().PubKey().Address())
spendLimit := sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(1000)))
now := ctx.BlockTime()
now := ctx.HeaderInfo().Time
oneDay := now.AddDate(0, 0, 1)
twoDays := now.AddDate(0, 0, 2)
@ -79,7 +80,7 @@ func TestMigration(t *testing.T) {
store.Set(v2.FeeAllowanceKey(grant.granter, grant.grantee), bz)
}
ctx = ctx.WithBlockTime(now.Add(30 * time.Hour))
ctx = ctx.WithHeaderInfo(header.Info{Time: now.Add(30 * time.Hour)})
require.NoError(t, v2.MigrateStore(ctx, runtime.NewKVStoreService(feegrantKey), cdc))
store = ctx.KVStore(feegrantKey)

View File

@ -6,6 +6,7 @@ import (
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/require"
"cosmossdk.io/core/header"
sdkmath "cosmossdk.io/math"
storetypes "cosmossdk.io/store/types"
"cosmossdk.io/x/feegrant"
@ -34,7 +35,7 @@ func TestFeegrantPruning(t *testing.T) {
granter3 := addrs[2]
grantee := addrs[3]
spendLimit := sdk.NewCoins(sdk.NewCoin("stake", sdkmath.NewInt(1000)))
now := testCtx.Ctx.BlockTime()
now := testCtx.Ctx.HeaderInfo().Time
oneDay := now.AddDate(0, 0, 1)
ctrl := gomock.NewController(t)
@ -91,7 +92,7 @@ func TestFeegrantPruning(t *testing.T) {
require.NotNil(t, res)
require.Len(t, res.Allowances, 2)
testCtx.Ctx = testCtx.Ctx.WithBlockTime(now.AddDate(0, 0, 2))
testCtx.Ctx = testCtx.Ctx.WithHeaderInfo(header.Info{Time: now.AddDate(0, 0, 2)})
module.EndBlocker(testCtx.Ctx, feegrantKeeper)
res, err = queryClient.Allowances(testCtx.Ctx.Context(), &feegrant.QueryAllowancesRequest{

View File

@ -23,7 +23,7 @@ var _ FeeAllowanceI = (*PeriodicAllowance)(nil)
// If remove is true (regardless of the error), the FeeAllowance will be deleted from storage
// (eg. when it is used up). (See call to RevokeAllowance in Keeper.UseGrantedFees)
func (a *PeriodicAllowance) Accept(ctx context.Context, fee sdk.Coins, _ []sdk.Msg) (bool, error) {
blockTime := sdk.UnwrapSDKContext(ctx).BlockTime()
blockTime := sdk.UnwrapSDKContext(ctx).HeaderInfo().Time
if a.Basic.Expiration != nil && blockTime.After(*a.Basic.Expiration) {
return true, errorsmod.Wrap(ErrFeeLimitExpired, "absolute limit")

View File

@ -4,10 +4,10 @@ import (
"testing"
"time"
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"cosmossdk.io/core/header"
storetypes "cosmossdk.io/store/types"
"cosmossdk.io/x/feegrant"
@ -19,7 +19,7 @@ func TestPeriodicFeeValidAllow(t *testing.T) {
key := storetypes.NewKVStoreKey(feegrant.StoreKey)
testCtx := testutil.DefaultContextWithDB(t, key, storetypes.NewTransientStoreKey("transient_test"))
ctx := testCtx.Ctx.WithBlockHeader(cmtproto.Header{Time: time.Now()})
ctx := testCtx.Ctx.WithHeaderInfo(header.Info{Time: time.Now()})
atom := sdk.NewCoins(sdk.NewInt64Coin("atom", 555))
smallAtom := sdk.NewCoins(sdk.NewInt64Coin("atom", 43))
@ -28,7 +28,7 @@ func TestPeriodicFeeValidAllow(t *testing.T) {
eth := sdk.NewCoins(sdk.NewInt64Coin("eth", 1))
emptyCoins := sdk.Coins{}
now := ctx.BlockTime()
now := ctx.HeaderInfo().Time
oneHour := now.Add(1 * time.Hour)
twoHours := now.Add(2 * time.Hour)
tenMinutes := time.Duration(10) * time.Minute
@ -197,7 +197,7 @@ func TestPeriodicFeeValidAllow(t *testing.T) {
}
require.NoError(t, err)
ctx := testCtx.Ctx.WithBlockTime(tc.blockTime)
ctx := testCtx.Ctx.WithHeaderInfo(header.Info{Time: tc.blockTime})
// now try to deduct
remove, err := tc.allow.Accept(ctx, tc.fee, []sdk.Msg{})
if !tc.accept {

View File

@ -98,7 +98,7 @@ func SimulateMsgGrantAllowance(
return simtypes.NoOpMsg(feegrant.ModuleName, TypeMsgGrantAllowance, "unable to grant empty coins as SpendLimit"), nil, nil
}
oneYear := ctx.BlockTime().AddDate(1, 0, 0)
oneYear := ctx.HeaderInfo().Time.AddDate(1, 0, 0)
msg, err := feegrant.NewMsgGrantAllowance(&feegrant.BasicAllowance{
SpendLimit: spendableCoins,
Expiration: &oneYear,

View File

@ -10,6 +10,7 @@ import (
"github.com/cosmos/gogoproto/proto"
"github.com/stretchr/testify/suite"
"cosmossdk.io/core/header"
"cosmossdk.io/depinject"
"cosmossdk.io/log"
"cosmossdk.io/x/feegrant"
@ -99,8 +100,6 @@ func (suite *SimTestSuite) getTestingAccounts(r *rand.Rand, n int) []simtypes.Ac
func (suite *SimTestSuite) TestWeightedOperations() {
require := suite.Require()
suite.ctx.WithChainID("test-chain")
appParams := make(simtypes.AppParams)
weightedOps := simulation.WeightedOperations(
@ -131,7 +130,7 @@ func (suite *SimTestSuite) TestWeightedOperations() {
}
for i, w := range weightedOps {
operationMsg, _, err := w.Op()(r, suite.app.BaseApp, suite.ctx, accs, suite.ctx.ChainID())
operationMsg, _, err := w.Op()(r, suite.app.BaseApp, suite.ctx.WithHeaderInfo(header.Info{Time: time.Now()}), accs, suite.ctx.ChainID())
require.NoError(err)
// the following checks are very much dependent from the ordering of the output given
@ -157,7 +156,7 @@ func (suite *SimTestSuite) TestSimulateMsgGrantAllowance() {
// execute operation
op := simulation.SimulateMsgGrantAllowance(codec.NewProtoCodec(suite.interfaceRegistry), suite.txConfig, suite.accountKeeper, suite.bankKeeper, suite.feegrantKeeper)
operationMsg, futureOperations, err := op(r, app.BaseApp, ctx, accounts, "")
operationMsg, futureOperations, err := op(r, app.BaseApp, ctx.WithHeaderInfo(header.Info{Time: time.Now()}), accounts, "")
require.NoError(err)
var msg feegrant.MsgGrantAllowance
@ -185,7 +184,7 @@ func (suite *SimTestSuite) TestSimulateMsgRevokeAllowance() {
granter, grantee := accounts[0], accounts[1]
oneYear := ctx.BlockTime().AddDate(1, 0, 0)
oneYear := ctx.HeaderInfo().Time.AddDate(1, 0, 0)
err = suite.feegrantKeeper.GrantAllowance(
ctx,
granter.Address,

View File

@ -20,7 +20,7 @@ func EndBlocker(ctx sdk.Context, keeper *keeper.Keeper) error {
logger := ctx.Logger().With("module", "x/"+types.ModuleName)
// delete dead proposals from store and returns theirs deposits.
// A proposal is dead when it's inactive and didn't get enough deposit on time to get into voting phase.
rng := collections.NewPrefixUntilPairRange[time.Time, uint64](ctx.BlockTime())
rng := collections.NewPrefixUntilPairRange[time.Time, uint64](ctx.HeaderInfo().Time)
err := keeper.InactiveProposalsQueue.Walk(ctx, rng, func(key collections.Pair[time.Time, uint64], _ uint64) (bool, error) {
proposal, err := keeper.Proposals.Get(ctx, key.K2())
if err != nil {
@ -72,7 +72,7 @@ func EndBlocker(ctx sdk.Context, keeper *keeper.Keeper) error {
}
// fetch active proposals whose voting periods have ended (are passed the block time)
rng = collections.NewPrefixUntilPairRange[time.Time, uint64](ctx.BlockTime())
rng = collections.NewPrefixUntilPairRange[time.Time, uint64](ctx.HeaderInfo().Time)
err = keeper.ActiveProposalsQueue.Walk(ctx, rng, func(key collections.Pair[time.Time, uint64], _ uint64) (bool, error) {
proposal, err := keeper.Proposals.Get(ctx, key.K2())
if err != nil {

View File

@ -54,16 +54,16 @@ func TestTickExpiredDepositPeriod(t *testing.T) {
checkInactiveProposalsQueue(t, ctx, suite.GovKeeper)
newHeader := ctx.BlockHeader()
newHeader.Time = ctx.BlockHeader().Time.Add(time.Duration(1) * time.Second)
ctx = ctx.WithBlockHeader(newHeader)
newHeader := ctx.HeaderInfo()
newHeader.Time = ctx.HeaderInfo().Time.Add(time.Duration(1) * time.Second)
ctx = ctx.WithHeaderInfo(newHeader)
checkInactiveProposalsQueue(t, ctx, suite.GovKeeper)
params, _ := suite.GovKeeper.Params.Get(ctx)
newHeader = ctx.BlockHeader()
newHeader.Time = ctx.BlockHeader().Time.Add(*params.MaxDepositPeriod)
ctx = ctx.WithBlockHeader(newHeader)
newHeader = ctx.HeaderInfo()
newHeader.Time = ctx.HeaderInfo().Time.Add(*params.MaxDepositPeriod)
ctx = ctx.WithHeaderInfo(newHeader)
checkInactiveProposalsQueue(t, ctx, suite.GovKeeper)
@ -105,9 +105,9 @@ func TestTickMultipleExpiredDepositPeriod(t *testing.T) {
checkInactiveProposalsQueue(t, ctx, suite.GovKeeper)
newHeader := ctx.BlockHeader()
newHeader.Time = ctx.BlockHeader().Time.Add(time.Duration(2) * time.Second)
ctx = ctx.WithBlockHeader(newHeader)
newHeader := ctx.HeaderInfo()
newHeader.Time = ctx.HeaderInfo().Time.Add(time.Duration(2) * time.Second)
ctx = ctx.WithHeaderInfo(newHeader)
checkInactiveProposalsQueue(t, ctx, suite.GovKeeper)
@ -126,18 +126,18 @@ func TestTickMultipleExpiredDepositPeriod(t *testing.T) {
require.NoError(t, err)
require.NotNil(t, res)
newHeader = ctx.BlockHeader()
newHeader = ctx.HeaderInfo()
params, _ := suite.GovKeeper.Params.Get(ctx)
newHeader.Time = ctx.BlockHeader().Time.Add(*params.MaxDepositPeriod).Add(time.Duration(-1) * time.Second)
ctx = ctx.WithBlockHeader(newHeader)
newHeader.Time = ctx.HeaderInfo().Time.Add(*params.MaxDepositPeriod).Add(time.Duration(-1) * time.Second)
ctx = ctx.WithHeaderInfo(newHeader)
checkInactiveProposalsQueue(t, ctx, suite.GovKeeper)
require.NoError(t, gov.EndBlocker(ctx, suite.GovKeeper))
checkInactiveProposalsQueue(t, ctx, suite.GovKeeper)
newHeader = ctx.BlockHeader()
newHeader.Time = ctx.BlockHeader().Time.Add(time.Duration(5) * time.Second)
ctx = ctx.WithBlockHeader(newHeader)
newHeader = ctx.HeaderInfo()
newHeader.Time = ctx.HeaderInfo().Time.Add(time.Duration(5) * time.Second)
ctx = ctx.WithHeaderInfo(newHeader)
checkInactiveProposalsQueue(t, ctx, suite.GovKeeper)
require.NoError(t, gov.EndBlocker(ctx, suite.GovKeeper))
@ -176,9 +176,9 @@ func TestTickPassedDepositPeriod(t *testing.T) {
checkInactiveProposalsQueue(t, ctx, suite.GovKeeper)
newHeader := ctx.BlockHeader()
newHeader.Time = ctx.BlockHeader().Time.Add(time.Duration(1) * time.Second)
ctx = ctx.WithBlockHeader(newHeader)
newHeader := ctx.HeaderInfo()
newHeader.Time = ctx.HeaderInfo().Time.Add(time.Duration(1) * time.Second)
ctx = ctx.WithHeaderInfo(newHeader)
checkInactiveProposalsQueue(t, ctx, suite.GovKeeper)
@ -235,9 +235,9 @@ func TestTickPassedVotingPeriod(t *testing.T) {
proposalID := res.ProposalId
newHeader := ctx.BlockHeader()
newHeader.Time = ctx.BlockHeader().Time.Add(time.Duration(1) * time.Second)
ctx = ctx.WithBlockHeader(newHeader)
newHeader := ctx.HeaderInfo()
newHeader.Time = ctx.HeaderInfo().Time.Add(time.Duration(1) * time.Second)
ctx = ctx.WithHeaderInfo(newHeader)
newDepositMsg := v1.NewMsgDeposit(addrs[1], proposalID, proposalCoins)
@ -251,9 +251,9 @@ func TestTickPassedVotingPeriod(t *testing.T) {
votingPeriod = params.ExpeditedVotingPeriod
}
newHeader = ctx.BlockHeader()
newHeader.Time = ctx.BlockHeader().Time.Add(*params.MaxDepositPeriod).Add(*votingPeriod)
ctx = ctx.WithBlockHeader(newHeader)
newHeader = ctx.HeaderInfo()
newHeader.Time = ctx.HeaderInfo().Time.Add(*params.MaxDepositPeriod).Add(*votingPeriod)
ctx = ctx.WithHeaderInfo(newHeader)
checkInactiveProposalsQueue(t, ctx, suite.GovKeeper)
checkActiveProposalsQueue(t, ctx, suite.GovKeeper)
@ -345,10 +345,10 @@ func TestProposalPassedEndblocker(t *testing.T) {
err = suite.GovKeeper.AddVote(ctx, proposal.Id, addrs[0], v1.NewNonSplitVoteOption(v1.OptionYes), "")
require.NoError(t, err)
newHeader := ctx.BlockHeader()
newHeader := ctx.HeaderInfo()
params, _ := suite.GovKeeper.Params.Get(ctx)
newHeader.Time = ctx.BlockHeader().Time.Add(*params.MaxDepositPeriod).Add(*params.VotingPeriod)
ctx = ctx.WithBlockHeader(newHeader)
newHeader.Time = ctx.HeaderInfo().Time.Add(*params.MaxDepositPeriod).Add(*params.VotingPeriod)
ctx = ctx.WithHeaderInfo(newHeader)
err = gov.EndBlocker(ctx, suite.GovKeeper)
require.NoError(t, err)
@ -397,9 +397,9 @@ func TestEndBlockerProposalHandlerFailed(t *testing.T) {
require.NoError(t, err)
params, _ := suite.GovKeeper.Params.Get(ctx)
newHeader := ctx.BlockHeader()
newHeader.Time = ctx.BlockHeader().Time.Add(*params.MaxDepositPeriod).Add(*params.VotingPeriod)
ctx = ctx.WithBlockHeader(newHeader)
newHeader := ctx.HeaderInfo()
newHeader.Time = ctx.HeaderInfo().Time.Add(*params.MaxDepositPeriod).Add(*params.VotingPeriod)
ctx = ctx.WithHeaderInfo(newHeader)
// validate that the proposal fails/has been rejected
err = gov.EndBlocker(ctx, suite.GovKeeper)
@ -487,9 +487,9 @@ func TestExpeditedProposal_PassAndConversionToRegular(t *testing.T) {
proposalID := res.ProposalId
newHeader := ctx.BlockHeader()
newHeader.Time = ctx.BlockHeader().Time.Add(time.Duration(1) * time.Second)
ctx = ctx.WithBlockHeader(newHeader)
newHeader := ctx.HeaderInfo()
newHeader.Time = ctx.HeaderInfo().Time.Add(time.Duration(1) * time.Second)
ctx = ctx.WithHeaderInfo(newHeader)
newDepositMsg := v1.NewMsgDeposit(addrs[1], proposalID, proposalCoins)
@ -497,9 +497,9 @@ func TestExpeditedProposal_PassAndConversionToRegular(t *testing.T) {
require.NoError(t, err)
require.NotNil(t, res1)
newHeader = ctx.BlockHeader()
newHeader.Time = ctx.BlockHeader().Time.Add(*params.MaxDepositPeriod).Add(*params.ExpeditedVotingPeriod)
ctx = ctx.WithBlockHeader(newHeader)
newHeader = ctx.HeaderInfo()
newHeader.Time = ctx.HeaderInfo().Time.Add(*params.MaxDepositPeriod).Add(*params.ExpeditedVotingPeriod)
ctx = ctx.WithHeaderInfo(newHeader)
checkInactiveProposalsQueue(t, ctx, suite.GovKeeper)
checkActiveProposalsQueue(t, ctx, suite.GovKeeper)
@ -557,8 +557,8 @@ func TestExpeditedProposal_PassAndConversionToRegular(t *testing.T) {
require.Equal(t, expectedIntermediateMofuleAccCoings, intermediateModuleAccCoins)
// block header time at the voting period
newHeader.Time = ctx.BlockHeader().Time.Add(*params.MaxDepositPeriod).Add(*params.VotingPeriod)
ctx = ctx.WithBlockHeader(newHeader)
newHeader.Time = ctx.HeaderInfo().Time.Add(*params.MaxDepositPeriod).Add(*params.VotingPeriod)
ctx = ctx.WithHeaderInfo(newHeader)
checkInactiveProposalsQueue(t, ctx, suite.GovKeeper)
checkActiveProposalsQueue(t, ctx, suite.GovKeeper)
@ -634,7 +634,7 @@ func getDepositMultiplier(expedited bool) int64 {
func checkActiveProposalsQueue(t *testing.T, ctx sdk.Context, k *keeper.Keeper) {
t.Helper()
err := k.ActiveProposalsQueue.Walk(ctx, collections.NewPrefixUntilPairRange[time.Time, uint64](ctx.BlockTime()), func(key collections.Pair[time.Time, uint64], value uint64) (stop bool, err error) {
err := k.ActiveProposalsQueue.Walk(ctx, collections.NewPrefixUntilPairRange[time.Time, uint64](ctx.HeaderInfo().Time), func(key collections.Pair[time.Time, uint64], value uint64) (stop bool, err error) {
return false, err
})
@ -643,7 +643,7 @@ func checkActiveProposalsQueue(t *testing.T, ctx sdk.Context, k *keeper.Keeper)
func checkInactiveProposalsQueue(t *testing.T, ctx sdk.Context, k *keeper.Keeper) {
t.Helper()
err := k.InactiveProposalsQueue.Walk(ctx, collections.NewPrefixUntilPairRange[time.Time, uint64](ctx.BlockTime()), func(key collections.Pair[time.Time, uint64], value uint64) (stop bool, err error) {
err := k.InactiveProposalsQueue.Walk(ctx, collections.NewPrefixUntilPairRange[time.Time, uint64](ctx.HeaderInfo().Time), func(key collections.Pair[time.Time, uint64], value uint64) (stop bool, err error) {
return false, err
})

View File

@ -3,12 +3,12 @@ package keeper_test
import (
"fmt"
"testing"
"time"
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
cmttime "github.com/cometbft/cometbft/types/time"
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/require"
"cosmossdk.io/core/header"
"cosmossdk.io/math"
storetypes "cosmossdk.io/store/types"
@ -93,7 +93,7 @@ func setupGovKeeper(t *testing.T, expectations ...func(sdk.Context, mocks)) (
key := storetypes.NewKVStoreKey(types.StoreKey)
storeService := runtime.NewKVStoreService(key)
testCtx := testutil.DefaultContextWithDB(t, key, storetypes.NewTransientStoreKey("transient_test"))
ctx := testCtx.Ctx.WithBlockHeader(cmtproto.Header{Time: cmttime.Now()})
ctx := testCtx.Ctx.WithHeaderInfo(header.Info{Time: time.Now()})
encCfg := moduletestutil.MakeTestEncodingConfig()
v1.RegisterInterfaces(encCfg.InterfaceRegistry)
v1beta1.RegisterInterfaces(encCfg.InterfaceRegistry)

View File

@ -115,7 +115,7 @@ func TestDeposits(t *testing.T) {
// Check that proposal moved to voting period
proposal, err = govKeeper.Proposals.Get(ctx, proposalID)
require.Nil(t, err)
require.True(t, proposal.VotingStartTime.Equal(ctx.BlockHeader().Time))
require.True(t, proposal.VotingStartTime.Equal(ctx.HeaderInfo().Time))
// Test deposit iterator
// NOTE order of deposits is determined by the addresses

View File

@ -74,9 +74,9 @@ func TestHooks(t *testing.T) {
require.True(t, govHooksReceiver.AfterProposalSubmissionValid)
params, _ := govKeeper.Params.Get(ctx)
newHeader := ctx.BlockHeader()
newHeader.Time = ctx.BlockHeader().Time.Add(*params.MaxDepositPeriod).Add(time.Duration(1) * time.Second)
ctx = ctx.WithBlockHeader(newHeader)
newHeader := ctx.HeaderInfo()
newHeader.Time = ctx.HeaderInfo().Time.Add(*params.MaxDepositPeriod).Add(time.Duration(1) * time.Second)
ctx = ctx.WithHeaderInfo(newHeader)
err = gov.EndBlocker(ctx, govKeeper)
require.NoError(t, err)
@ -94,9 +94,9 @@ func TestHooks(t *testing.T) {
require.NoError(t, err)
require.True(t, govHooksReceiver.AfterProposalVoteValid)
newHeader = ctx.BlockHeader()
newHeader.Time = ctx.BlockHeader().Time.Add(*params.VotingPeriod).Add(time.Duration(1) * time.Second)
ctx = ctx.WithBlockHeader(newHeader)
newHeader = ctx.HeaderInfo()
newHeader.Time = ctx.HeaderInfo().Time.Add(*params.VotingPeriod).Add(time.Duration(1) * time.Second)
ctx = ctx.WithHeaderInfo(newHeader)
err = gov.EndBlocker(ctx, govKeeper)
require.NoError(t, err)
require.True(t, govHooksReceiver.AfterProposalVotingPeriodEndedValid)

View File

@ -141,7 +141,7 @@ func (k msgServer) CancelProposal(goCtx context.Context, msg *v1.MsgCancelPropos
return &v1.MsgCancelProposalResponse{
ProposalId: msg.ProposalId,
CanceledTime: ctx.BlockTime(),
CanceledTime: ctx.HeaderInfo().Time,
CanceledHeight: uint64(ctx.BlockHeight()),
}, nil
}

View File

@ -96,7 +96,7 @@ func (keeper Keeper) SubmitProposal(ctx context.Context, messages []sdk.Msg, met
return v1.Proposal{}, err
}
submitTime := sdkCtx.BlockHeader().Time
submitTime := sdkCtx.HeaderInfo().Time
depositPeriod := params.MaxDepositPeriod
proposal, err := v1.NewProposal(messages, proposalID, submitTime, submitTime.Add(*depositPeriod), metadata, title, summary, proposer, expedited)
@ -152,7 +152,7 @@ func (keeper Keeper) CancelProposal(ctx context.Context, proposalID uint64, prop
}
// Check proposal voting period is ended.
if proposal.VotingEndTime != nil && proposal.VotingEndTime.Before(sdkCtx.BlockTime()) {
if proposal.VotingEndTime != nil && proposal.VotingEndTime.Before(sdkCtx.HeaderInfo().Time) {
return types.ErrVotingPeriodEnded.Wrapf("voting period is already ended for this proposal %d", proposalID)
}
@ -237,7 +237,7 @@ func (keeper Keeper) DeleteProposal(ctx context.Context, proposalID uint64) erro
// ActivateVotingPeriod activates the voting period of a proposal
func (keeper Keeper) ActivateVotingPeriod(ctx context.Context, proposal v1.Proposal) error {
sdkCtx := sdk.UnwrapSDKContext(ctx)
startTime := sdkCtx.BlockHeader().Time
startTime := sdkCtx.HeaderInfo().Time
proposal.VotingStartTime = &startTime
var votingPeriod *time.Duration
params, err := keeper.Params.Get(ctx)

View File

@ -2,6 +2,7 @@ package keeper_test
import (
"errors"
"fmt"
"strings"
"testing"
@ -91,7 +92,7 @@ func (suite *KeeperTestSuite) TestActivateVotingPeriod() {
proposal, err = suite.govKeeper.Proposals.Get(suite.ctx, proposal.Id)
suite.Require().Nil(err)
suite.Require().True(proposal.VotingStartTime.Equal(suite.ctx.BlockHeader().Time))
suite.Require().True(proposal.VotingStartTime.Equal(suite.ctx.HeaderInfo().Time))
has, err := suite.govKeeper.ActiveProposalsQueue.Has(suite.ctx, collections.Join(*proposal.VotingEndTime, proposal.Id))
suite.Require().NoError(err)
@ -120,7 +121,7 @@ func (suite *KeeperTestSuite) TestDeleteProposalInVotingPeriod() {
proposal, err = suite.govKeeper.Proposals.Get(suite.ctx, proposal.Id)
suite.Require().Nil(err)
suite.Require().True(proposal.VotingStartTime.Equal(suite.ctx.BlockHeader().Time))
suite.Require().True(proposal.VotingStartTime.Equal(suite.ctx.HeaderInfo().Time))
has, err := suite.govKeeper.ActiveProposalsQueue.Has(suite.ctx, collections.Join(*proposal.VotingEndTime, proposal.Id))
suite.Require().NoError(err)
@ -201,7 +202,8 @@ func (suite *KeeperTestSuite) TestCancelProposal() {
proposal3, err = suite.govKeeper.Proposals.Get(suite.ctx, proposal3ID)
suite.Require().Nil(err)
suite.Require().True(proposal3.VotingStartTime.Equal(suite.ctx.BlockHeader().Time))
fmt.Println(suite.ctx.HeaderInfo().Time, proposal3.VotingStartTime)
suite.Require().True(proposal3.VotingStartTime.Equal(suite.ctx.HeaderInfo().Time))
// add vote
voteOptions := []*v1.WeightedVoteOption{{Option: v1.OptionYes, Weight: "1.0"}}
err = suite.govKeeper.AddVote(suite.ctx, proposal3ID, suite.addrs[0], voteOptions, "")
@ -263,7 +265,7 @@ func (suite *KeeperTestSuite) TestCancelProposal() {
proposal, err = suite.govKeeper.Proposals.Get(suite.ctx, proposal.Id)
suite.Require().Nil(err)
suite.Require().True(proposal.VotingStartTime.Equal(suite.ctx.BlockHeader().Time))
suite.Require().True(proposal.VotingStartTime.Equal(suite.ctx.HeaderInfo().Time))
// add vote
voteOptions := []*v1.WeightedVoteOption{{Option: v1.OptionYes, Weight: "1.0"}}

View File

@ -294,7 +294,7 @@ func simulateMsgSubmitProposal(
fops := make([]simtypes.FutureOperation, numVotes+1)
for i := 0; i < numVotes; i++ {
whenVote := ctx.BlockHeader().Time.Add(time.Duration(r.Int63n(int64(votingPeriod.Seconds()))) * time.Second)
whenVote := ctx.HeaderInfo().Time.Add(time.Duration(r.Int63n(int64(votingPeriod.Seconds()))) * time.Second)
fops[i] = simtypes.FutureOperation{
BlockTime: whenVote,
Op: operationSimulateMsgVote(txGen, ak, bk, k, accs[whoVotes[i]], int64(proposalID)),

View File

@ -10,6 +10,7 @@ import (
"github.com/cosmos/gogoproto/proto"
"github.com/stretchr/testify/require"
"cosmossdk.io/core/header"
"cosmossdk.io/depinject"
"cosmossdk.io/log"
@ -213,7 +214,7 @@ func TestSimulateMsgCancelProposal(t *testing.T) {
suite, ctx := createTestSuite(t, false)
app := suite.App
blockTime := time.Now().UTC()
ctx = ctx.WithBlockTime(blockTime)
ctx = ctx.WithHeaderInfo(header.Info{Time: blockTime})
// setup 3 accounts
s := rand.NewSource(1)
@ -225,7 +226,7 @@ func TestSimulateMsgCancelProposal(t *testing.T) {
contentMsg, err := v1.NewLegacyContent(content, suite.GovKeeper.GetGovernanceAccount(ctx).GetAddress().String())
require.NoError(t, err)
submitTime := ctx.BlockHeader().Time
submitTime := ctx.HeaderInfo().Time
params, _ := suite.GovKeeper.Params.Get(ctx)
depositPeriod := params.MaxDepositPeriod
@ -262,7 +263,7 @@ func TestSimulateMsgDeposit(t *testing.T) {
suite, ctx := createTestSuite(t, false)
app := suite.App
blockTime := time.Now().UTC()
ctx = ctx.WithBlockTime(blockTime)
ctx = ctx.WithHeaderInfo(header.Info{Time: blockTime})
// setup 3 accounts
s := rand.NewSource(1)
@ -274,7 +275,7 @@ func TestSimulateMsgDeposit(t *testing.T) {
contentMsg, err := v1.NewLegacyContent(content, suite.GovKeeper.GetGovernanceAccount(ctx).GetAddress().String())
require.NoError(t, err)
submitTime := ctx.BlockHeader().Time
submitTime := ctx.HeaderInfo().Time
params, _ := suite.GovKeeper.Params.Get(ctx)
depositPeriod := params.MaxDepositPeriod
@ -312,7 +313,7 @@ func TestSimulateMsgVote(t *testing.T) {
suite, ctx := createTestSuite(t, false)
app := suite.App
blockTime := time.Now().UTC()
ctx = ctx.WithBlockTime(blockTime)
ctx = ctx.WithHeaderInfo(header.Info{Time: blockTime})
// setup 3 accounts
s := rand.NewSource(1)
@ -324,7 +325,7 @@ func TestSimulateMsgVote(t *testing.T) {
contentMsg, err := v1.NewLegacyContent(v1beta1.NewTextProposal("Test", "description"), govAcc)
require.NoError(t, err)
submitTime := ctx.BlockHeader().Time
submitTime := ctx.HeaderInfo().Time
params, _ := suite.GovKeeper.Params.Get(ctx)
depositPeriod := params.MaxDepositPeriod
@ -361,7 +362,7 @@ func TestSimulateMsgVoteWeighted(t *testing.T) {
suite, ctx := createTestSuite(t, false)
app := suite.App
blockTime := time.Now().UTC()
ctx = ctx.WithBlockTime(blockTime)
ctx = ctx.WithHeaderInfo(header.Info{Time: blockTime})
// setup 3 accounts
s := rand.NewSource(1)
@ -372,7 +373,7 @@ func TestSimulateMsgVoteWeighted(t *testing.T) {
govAcc := suite.GovKeeper.GetGovernanceAccount(ctx).GetAddress().String()
contentMsg, err := v1.NewLegacyContent(v1beta1.NewTextProposal("Test", "description"), govAcc)
require.NoError(t, err)
submitTime := ctx.BlockHeader().Time
submitTime := ctx.HeaderInfo().Time
params, _ := suite.GovKeeper.Params.Get(ctx)
depositPeriod := params.MaxDepositPeriod

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
}

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))

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
}

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)

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)
}

View File

@ -62,7 +62,7 @@ func createGroupPolicies(ctx sdk.Context, storeKey storetypes.StoreKey, cdc code
groupPolicySeq := orm.NewSequence(v2.GroupPolicyTableSeqPrefix)
for _, policyAddr := range policies {
groupPolicyInfo, err := group.NewGroupPolicyInfo(policyAddr, 1, authorityAddr, "", 1, group.NewPercentageDecisionPolicy("1", 1, 1), ctx.BlockTime())
groupPolicyInfo, err := group.NewGroupPolicyInfo(policyAddr, 1, authorityAddr, "", 1, group.NewPercentageDecisionPolicy("1", 1, 1), ctx.HeaderInfo().Time)
if err != nil {
return orm.PrimaryKeyTable{}, orm.Sequence{}, err
}

View File

@ -5,11 +5,10 @@ import (
"testing"
"time"
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
cmttime "github.com/cometbft/cometbft/types/time"
"github.com/stretchr/testify/suite"
"cosmossdk.io/core/address"
"cosmossdk.io/core/header"
"cosmossdk.io/depinject"
"cosmossdk.io/log"
"cosmossdk.io/math"
@ -62,7 +61,7 @@ func (s *IntegrationTestSuite) SetupTest() {
ctx := app.BaseApp.NewContext(false)
ctx = ctx.WithBlockHeader(cmtproto.Header{Time: cmttime.Now()})
ctx = ctx.WithHeaderInfo(header.Info{Time: time.Now()})
s.ctx = ctx
@ -265,7 +264,7 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() {
s.Require().NoError(err)
return pID
},
newCtx: ctx.WithBlockTime(ctx.BlockTime().Add(votingPeriod).Add(time.Hour)),
newCtx: ctx.WithHeaderInfo(header.Info{Time: ctx.HeaderInfo().Time.Add(votingPeriod).Add(time.Hour)}),
expErrMsg: "load proposal: not found",
expStatus: group.PROPOSAL_STATUS_WITHDRAWN,
},
@ -302,7 +301,7 @@ func (s *IntegrationTestSuite) TestEndBlockerPruning() {
return pID
},
newCtx: ctx.WithBlockTime(ctx.BlockTime().Add(votingPeriod).Add(time.Hour)),
newCtx: ctx.WithHeaderInfo(header.Info{Time: ctx.HeaderInfo().Time.Add(votingPeriod).Add(time.Hour)}),
expErrMsg: "load proposal: not found",
expStatus: group.PROPOSAL_STATUS_ABORTED,
expExecutorResult: group.PROPOSAL_EXECUTOR_RESULT_NOT_RUN,
@ -432,7 +431,7 @@ func (s *IntegrationTestSuite) TestEndBlockerTallying() {
return pID
},
admin: proposers[0],
newCtx: ctx.WithBlockTime(ctx.BlockTime().Add(votingPeriod).Add(time.Hour)),
newCtx: ctx.WithHeaderInfo(header.Info{Time: ctx.HeaderInfo().Time.Add(votingPeriod).Add(time.Hour)}),
tallyRes: group.DefaultTallyResult(),
expStatus: group.PROPOSAL_STATUS_REJECTED,
},
@ -469,7 +468,7 @@ func (s *IntegrationTestSuite) TestEndBlockerTallying() {
return pID
},
admin: proposers[0],
newCtx: ctx.WithBlockTime(ctx.BlockTime().Add(votingPeriod).Add(time.Hour)),
newCtx: ctx.WithHeaderInfo(header.Info{Time: ctx.HeaderInfo().Time.Add(votingPeriod).Add(time.Hour)}),
tallyRes: group.TallyResult{
YesCount: "1",
NoCount: "0",
@ -486,7 +485,7 @@ func (s *IntegrationTestSuite) TestEndBlockerTallying() {
return pID
},
admin: proposers[0],
newCtx: ctx.WithBlockTime(ctx.BlockTime().Add(votingPeriod).Add(time.Hour)),
newCtx: ctx.WithHeaderInfo(header.Info{Time: ctx.HeaderInfo().Time.Add(votingPeriod).Add(time.Hour)}),
tallyRes: group.TallyResult{
YesCount: "2",
NoCount: "0",

View File

@ -912,7 +912,7 @@ func SimulateMsgWithdrawProposal(
timeout := p.VotingPeriodEnd
proposal = p
proposalID = int(p.Id)
if timeout.Before(sdkCtx.BlockTime()) || timeout.Equal(sdkCtx.BlockTime()) {
if timeout.Before(sdkCtx.HeaderInfo().Time) || timeout.Equal(sdkCtx.HeaderInfo().Time) {
return simtypes.NoOpMsg(group.ModuleName, TypeMsgWithdrawProposal, "voting period ended: skipping"), nil, nil
}
break
@ -1023,7 +1023,7 @@ func SimulateMsgVote(
if p.Status == group.PROPOSAL_STATUS_SUBMITTED {
timeout := p.VotingPeriodEnd
proposalID = int(p.Id)
if timeout.Before(sdkCtx.BlockTime()) || timeout.Equal(sdkCtx.BlockTime()) {
if timeout.Before(sdkCtx.HeaderInfo().Time) || timeout.Equal(sdkCtx.HeaderInfo().Time) {
return simtypes.NoOpMsg(group.ModuleName, TypeMsgVote, "voting period ended: skipping"), nil, nil
}
break

View File

@ -7,6 +7,7 @@ import (
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/suite"
"cosmossdk.io/core/header"
storetypes "cosmossdk.io/store/types"
"cosmossdk.io/x/nft"
"cosmossdk.io/x/nft/keeper"
@ -54,7 +55,7 @@ func (s *TestSuite) SetupTest() {
key := storetypes.NewKVStoreKey(nft.StoreKey)
storeService := runtime.NewKVStoreService(key)
testCtx := testutil.DefaultContextWithDB(s.T(), key, storetypes.NewTransientStoreKey("transient_test"))
ctx := testCtx.Ctx.WithBlockTime(time.Now().Round(0).UTC())
ctx := testCtx.Ctx.WithHeaderInfo(header.Info{Time: time.Now().Round(0).UTC()})
// gomock initializations
ctrl := gomock.NewController(s.T())

View File

@ -9,6 +9,7 @@ import (
"github.com/cosmos/gogoproto/proto"
"github.com/stretchr/testify/suite"
"cosmossdk.io/core/header"
"cosmossdk.io/depinject"
"cosmossdk.io/log"
"cosmossdk.io/x/nft"
@ -122,7 +123,7 @@ func (suite *SimTestSuite) TestSimulateMsgSend() {
r := rand.New(s)
accounts := suite.getTestingAccounts(r, 2)
blockTime := time.Now().UTC()
ctx := suite.ctx.WithBlockTime(blockTime)
ctx := suite.ctx.WithHeaderInfo(header.Info{Time: blockTime})
// begin new block
_, err := suite.app.FinalizeBlock(&abci.RequestFinalizeBlock{

View File

@ -13,6 +13,8 @@ import (
abci "github.com/cometbft/cometbft/abci/types"
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
"cosmossdk.io/core/header"
"github.com/cosmos/cosmos-sdk/baseapp"
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"
@ -190,6 +192,10 @@ func SimulateFromSeed(
Time: blockTime,
ProposerAddress: proposerAddress,
ChainID: config.ChainID,
}).WithHeaderInfo(header.Info{
Height: blockHeight,
Time: blockTime,
ChainID: config.ChainID,
})
// run queued operations; ignores block size if block size is too small

View File

@ -152,7 +152,7 @@ func (k Keeper) HandleValidatorSignature(ctx context.Context, addr cryptotypes.A
if err != nil {
return err
}
signInfo.JailedUntil = sdkCtx.BlockHeader().Time.Add(downtimeJailDur)
signInfo.JailedUntil = sdkCtx.HeaderInfo().Time.Add(downtimeJailDur)
// We need to reset the counter & bitmap so that the validator won't be
// immediately slashed for downtime upon re-bonding.

View File

@ -3,13 +3,13 @@ package keeper_test
import (
"encoding/binary"
"testing"
"time"
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
cmttime "github.com/cometbft/cometbft/types/time"
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/suite"
st "cosmossdk.io/api/cosmos/staking/v1beta1"
"cosmossdk.io/core/header"
sdkmath "cosmossdk.io/math"
storetypes "cosmossdk.io/store/types"
@ -46,7 +46,7 @@ func (s *KeeperTestSuite) SetupTest() {
s.key = key
storeService := runtime.NewKVStoreService(key)
testCtx := sdktestutil.DefaultContextWithDB(s.T(), key, storetypes.NewTransientStoreKey("transient_test"))
ctx := testCtx.Ctx.WithBlockHeader(cmtproto.Header{Time: cmttime.Now()})
ctx := testCtx.Ctx.WithHeaderInfo(header.Info{Time: time.Now().Round(0).UTC()})
encCfg := moduletestutil.MakeTestEncodingConfig()
// gomock initializations

View File

@ -267,7 +267,7 @@ func (s *KeeperTestSuite) TestUnjail() {
s.Require().NoError(err)
info := slashingtypes.NewValidatorSigningInfo(sdk.ConsAddress(addr), int64(4), int64(3),
s.ctx.BlockTime().AddDate(0, 0, 1), false, int64(10))
s.ctx.HeaderInfo().Time.AddDate(0, 0, 1), false, int64(10))
s.Require().NoError(s.slashingKeeper.ValidatorSigningInfo.Set(s.ctx, sdk.ConsAddress(addr), info))
s.stakingKeeper.EXPECT().Validator(s.ctx, valAddr).Return(val, nil)
@ -303,7 +303,7 @@ func (s *KeeperTestSuite) TestUnjail() {
del := types.NewDelegation(addr.String(), valAddr.String(), sdkmath.LegacyNewDec(100))
s.stakingKeeper.EXPECT().Delegation(s.ctx, addr, valAddr).Return(del, nil)
s.stakingKeeper.EXPECT().Unjail(s.ctx, sdk.ConsAddress(addr)).Return(nil)
s.stakingKeeper.EXPECT().Unjail(s.ctx, sdk.ConsAddress(addr)).Return(nil).AnyTimes()
return &slashingtypes.MsgUnjail{
ValidatorAddr: sdk.ValAddress(addr).String(),

View File

@ -64,7 +64,7 @@ func (k Keeper) Unjail(ctx context.Context, validatorAddr sdk.ValAddress) error
// cannot be unjailed until out of jail
sdkCtx := sdk.UnwrapSDKContext(ctx)
if sdkCtx.BlockHeader().Time.Before(info.JailedUntil) {
if sdkCtx.HeaderInfo().Time.Before(info.JailedUntil) {
return types.ErrValidatorJailed
}
}

View File

@ -138,13 +138,13 @@ func SimulateMsgUnjail(
// - validator is still in jailed period
// - self delegation too low
if info.Tombstoned ||
ctx.BlockHeader().Time.Before(info.JailedUntil) ||
ctx.HeaderInfo().Time.Before(info.JailedUntil) ||
validator.TokensFromShares(selfDel.GetShares()).TruncateInt().LT(validator.GetMinSelfDelegation()) {
if res != nil && err == nil {
if info.Tombstoned {
return simtypes.NewOperationMsg(msg, true, ""), nil, errors.New("validator should not have been unjailed if validator tombstoned")
}
if ctx.BlockHeader().Time.Before(info.JailedUntil) {
if ctx.HeaderInfo().Time.Before(info.JailedUntil) {
return simtypes.NewOperationMsg(msg, true, ""), nil, errors.New("validator unjailed while validator still in jail period")
}
if validator.TokensFromShares(selfDel.GetShares()).TruncateInt().LT(validator.GetMinSelfDelegation()) {

View File

@ -12,6 +12,7 @@ import (
"github.com/stretchr/testify/suite"
"cosmossdk.io/collections"
"cosmossdk.io/core/header"
"cosmossdk.io/depinject"
"cosmossdk.io/log"
"cosmossdk.io/math"
@ -153,7 +154,7 @@ func (suite *SimTestSuite) TestWeightedOperations() {
// Abonormal scenarios, where the message is created by an errors, are not tested here.
func (suite *SimTestSuite) TestSimulateMsgUnjail() {
blockTime := time.Now().UTC()
ctx := suite.ctx.WithBlockTime(blockTime)
ctx := suite.ctx.WithHeaderInfo(header.Info{Time: blockTime})
// setup accounts[0] as validator0
validator0, err := getTestingValidator0(ctx, suite.stakingKeeper, suite.accounts)

View File

@ -385,7 +385,7 @@ func (k Keeper) InsertUBDQueue(ctx context.Context, ubd types.UnbondingDelegatio
// DequeueAllMatureUBDQueue returns a concatenated list of all the timeslices inclusively previous to
// currTime, and deletes the timeslices from the queue.
func (k Keeper) DequeueAllMatureUBDQueue(ctx context.Context, currTime time.Time) (matureUnbonds []types.DVPair, err error) {
// get an iterator for all timeslices from time 0 until the current Blockheader time
// get an iterator for all timeslices from time 0 until the current HeaderInfo time
iter, err := k.UnbondingQueue.Iterate(ctx, (&collections.Range[time.Time]{}).EndInclusive(currTime))
if err != nil {
return matureUnbonds, err
@ -894,7 +894,7 @@ func (k Keeper) getBeginInfo(
switch {
case errors.Is(err, types.ErrNoValidatorFound) || validator.IsBonded():
// the longest wait - just unbonding period from now
completionTime = sdkCtx.BlockHeader().Time.Add(unbondingTime)
completionTime = sdkCtx.HeaderInfo().Time.Add(unbondingTime)
height = sdkCtx.BlockHeight()
return completionTime, height, false, nil
@ -951,7 +951,7 @@ func (k Keeper) Undelegate(
}
sdkCtx := sdk.UnwrapSDKContext(ctx)
completionTime := sdkCtx.BlockHeader().Time.Add(unbondingTime)
completionTime := sdkCtx.HeaderInfo().Time.Add(unbondingTime)
ubd, err := k.SetUnbondingDelegationEntry(ctx, delAddr, valAddr, sdkCtx.BlockHeight(), completionTime, returnAmount)
if err != nil {
return time.Time{}, math.Int{}, err
@ -981,7 +981,7 @@ func (k Keeper) CompleteUnbonding(ctx context.Context, delAddr sdk.AccAddress, v
balances := sdk.NewCoins()
sdkCtx := sdk.UnwrapSDKContext(ctx)
ctxTime := sdkCtx.BlockHeader().Time
ctxTime := sdkCtx.HeaderInfo().Time
delegatorAddress, err := k.authKeeper.AddressCodec().StringToBytes(ubd.DelegatorAddress)
if err != nil {
@ -1126,7 +1126,7 @@ func (k Keeper) CompleteRedelegation(
balances := sdk.NewCoins()
sdkCtx := sdk.UnwrapSDKContext(ctx)
ctxTime := sdkCtx.BlockHeader().Time
ctxTime := sdkCtx.HeaderInfo().Time
// loop through all the entries and complete mature redelegation entries
for i := 0; i < len(red.Entries); i++ {

View File

@ -6,6 +6,7 @@ import (
"github.com/golang/mock/gomock"
"cosmossdk.io/collections"
coreheader "cosmossdk.io/core/header"
"cosmossdk.io/math"
"github.com/cosmos/cosmos-sdk/codec/address"
@ -478,12 +479,12 @@ func (s *KeeperTestSuite) TestUndelegateFromUnbondingValidator() {
delegation := stakingtypes.NewDelegation(addrDels[1].String(), addrVals[0].String(), issuedShares)
require.NoError(keeper.SetDelegation(ctx, delegation))
header := ctx.BlockHeader()
header := ctx.HeaderInfo()
blockHeight := int64(10)
header.Height = blockHeight
blockTime := time.Unix(333, 0)
header.Time = blockTime
ctx = ctx.WithBlockHeader(header)
ctx = ctx.WithHeaderInfo(header)
// unbond the all self-delegation to put validator in unbonding state
val0AccAddr := sdk.AccAddress(addrVals[0])
@ -506,7 +507,7 @@ func (s *KeeperTestSuite) TestUndelegateFromUnbondingValidator() {
blockHeight2 := int64(20)
blockTime2 := time.Unix(444, 0).UTC()
ctx = ctx.WithBlockHeight(blockHeight2)
ctx = ctx.WithBlockTime(blockTime2)
ctx = ctx.WithHeaderInfo(coreheader.Info{Height: blockHeight2, Time: blockTime2})
// unbond some of the other delegation's shares
undelegateAmount := math.LegacyNewDec(6)
@ -555,7 +556,7 @@ func (s *KeeperTestSuite) TestUndelegateFromUnbondedValidator() {
require.NoError(keeper.SetDelegation(ctx, delegation))
ctx = ctx.WithBlockHeight(10)
ctx = ctx.WithBlockTime(time.Unix(333, 0))
ctx = ctx.WithHeaderInfo(coreheader.Info{Height: 10, Time: time.Unix(333, 0)})
// unbond the all self-delegation to put validator in unbonding state
s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.BondedPoolName, stakingtypes.NotBondedPoolName, gomock.Any())
@ -572,10 +573,10 @@ func (s *KeeperTestSuite) TestUndelegateFromUnbondedValidator() {
require.Equal(ctx.BlockHeight(), validator.UnbondingHeight)
params, err := keeper.GetParams(ctx)
require.NoError(err)
require.True(ctx.BlockHeader().Time.Add(params.UnbondingTime).Equal(validator.UnbondingTime))
require.True(ctx.HeaderInfo().Time.Add(params.UnbondingTime).Equal(validator.UnbondingTime))
// unbond the validator
ctx = ctx.WithBlockTime(validator.UnbondingTime)
ctx = ctx.WithHeaderInfo(coreheader.Info{Time: validator.UnbondingTime})
err = keeper.UnbondAllMatureValidators(ctx)
require.NoError(err)
@ -636,7 +637,7 @@ func (s *KeeperTestSuite) TestUnbondingAllDelegationFromValidator() {
require.NoError(keeper.SetDelegation(ctx, delegation))
ctx = ctx.WithBlockHeight(10)
ctx = ctx.WithBlockTime(time.Unix(333, 0))
ctx = ctx.WithHeaderInfo(coreheader.Info{Height: 10, Time: time.Unix(333, 0)})
// unbond the all self-delegation to put validator in unbonding state
s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.BondedPoolName, stakingtypes.NotBondedPoolName, gomock.Any())
@ -659,7 +660,7 @@ func (s *KeeperTestSuite) TestUnbondingAllDelegationFromValidator() {
require.Equal(validator.Status, stakingtypes.Unbonding)
// unbond the validator
ctx = ctx.WithBlockTime(validator.UnbondingTime)
ctx = ctx.WithHeaderInfo(coreheader.Info{Time: validator.UnbondingTime})
err = keeper.UnbondAllMatureValidators(ctx)
require.NoError(err)
@ -842,7 +843,7 @@ func (s *KeeperTestSuite) TestRedelegationMaxEntries() {
require.Error(err)
// mature redelegations
ctx = ctx.WithBlockTime(completionTime)
ctx = ctx.WithHeaderInfo(coreheader.Info{Time: completionTime})
_, err = keeper.CompleteRedelegation(ctx, val0AccAddr, addrVals[0], addrVals[1])
require.NoError(err)
@ -937,12 +938,12 @@ func (s *KeeperTestSuite) TestRedelegateFromUnbondingValidator() {
s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.NotBondedPoolName, stakingtypes.BondedPoolName, gomock.Any())
_ = stakingkeeper.TestingUpdateValidator(keeper, ctx, validator2, true)
header := ctx.BlockHeader()
header := ctx.HeaderInfo()
blockHeight := int64(10)
header.Height = blockHeight
blockTime := time.Unix(333, 0)
header.Time = blockTime
ctx = ctx.WithBlockHeader(header)
ctx = ctx.WithHeaderInfo(header)
// unbond the all self-delegation to put validator in unbonding state
s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.BondedPoolName, stakingtypes.NotBondedPoolName, gomock.Any())
@ -962,12 +963,12 @@ func (s *KeeperTestSuite) TestRedelegateFromUnbondingValidator() {
require.True(blockTime.Add(params.UnbondingTime).Equal(validator.UnbondingTime))
// change the context
header = ctx.BlockHeader()
header = ctx.HeaderInfo()
blockHeight2 := int64(20)
header.Height = blockHeight2
blockTime2 := time.Unix(444, 0)
header.Time = blockTime2
ctx = ctx.WithBlockHeader(header)
ctx = ctx.WithHeaderInfo(header)
// unbond some of the other delegation's shares
redelegateTokens := keeper.TokensFromConsensusPower(ctx, 6)
@ -1020,7 +1021,7 @@ func (s *KeeperTestSuite) TestRedelegateFromUnbondedValidator() {
require.Equal(stakingtypes.Bonded, validator2.Status)
ctx = ctx.WithBlockHeight(10)
ctx = ctx.WithBlockTime(time.Unix(333, 0))
ctx = ctx.WithHeaderInfo(coreheader.Info{Height: 10, Time: time.Unix(333, 0)})
// unbond the all self-delegation to put validator in unbonding state
s.bankKeeper.EXPECT().SendCoinsFromModuleToModule(gomock.Any(), stakingtypes.BondedPoolName, stakingtypes.NotBondedPoolName, gomock.Any())
@ -1034,10 +1035,10 @@ func (s *KeeperTestSuite) TestRedelegateFromUnbondedValidator() {
validator, err = keeper.GetValidator(ctx, addrVals[0])
require.NoError(err)
require.Equal(ctx.BlockHeight(), validator.UnbondingHeight)
require.Equal(ctx.HeaderInfo().Height, validator.UnbondingHeight)
params, err := keeper.GetParams(ctx)
require.NoError(err)
require.True(ctx.BlockHeader().Time.Add(params.UnbondingTime).Equal(validator.UnbondingTime))
require.True(ctx.HeaderInfo().Time.Add(params.UnbondingTime).Equal(validator.UnbondingTime))
// unbond the validator
_, err = keeper.UnbondingToUnbonded(ctx, validator)

View File

@ -4,6 +4,7 @@ import (
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
"cosmossdk.io/collections"
coreheader "cosmossdk.io/core/header"
"cosmossdk.io/math"
"github.com/cosmos/cosmos-sdk/x/staking/testutil"
@ -108,7 +109,7 @@ func (s *KeeperTestSuite) TestTrackHistoricalInfo() {
ChainID: "HelloChain",
Height: 10,
}
ctx = ctx.WithBlockHeader(header)
ctx = ctx.WithBlockHeader(header).WithHeaderInfo(coreheader.Info{ChainID: header.ChainID, Height: header.Height})
require.NoError(keeper.TrackHistoricalInfo(ctx))

View File

@ -4,13 +4,12 @@ import (
"testing"
"time"
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
cmttime "github.com/cometbft/cometbft/types/time"
gogotypes "github.com/cosmos/gogoproto/types"
"github.com/golang/mock/gomock"
"github.com/stretchr/testify/suite"
"cosmossdk.io/collections"
"cosmossdk.io/core/header"
"cosmossdk.io/math"
storetypes "cosmossdk.io/store/types"
@ -56,7 +55,7 @@ func (s *KeeperTestSuite) SetupTest() {
storeService := runtime.NewKVStoreService(key)
testCtx := testutil.DefaultContextWithDB(s.T(), key, storetypes.NewTransientStoreKey("transient_test"))
s.key = key
ctx := testCtx.Ctx.WithBlockHeader(cmtproto.Header{Time: cmttime.Now()})
ctx := testCtx.Ctx.WithHeaderInfo(header.Info{Time: time.Now()})
encCfg := moduletestutil.MakeTestEncodingConfig()
s.cdc = encCfg.Codec

View File

@ -106,7 +106,7 @@ func (k msgServer) CreateValidator(ctx context.Context, msg *types.MsgCreateVali
commission := types.NewCommissionWithTime(
msg.Commission.Rate, msg.Commission.MaxRate,
msg.Commission.MaxChangeRate, sdkCtx.BlockHeader().Time,
msg.Commission.MaxChangeRate, sdkCtx.HeaderInfo().Time,
)
validator, err = validator.SetInitialCommission(commission)
@ -541,7 +541,7 @@ func (k msgServer) CancelUnbondingDelegation(ctx context.Context, msg *types.Msg
}
sdkCtx := sdk.UnwrapSDKContext(ctx)
if unbondEntry.CompletionTime.Before(sdkCtx.BlockTime()) {
if unbondEntry.CompletionTime.Before(sdkCtx.HeaderInfo().Time) {
return nil, sdkerrors.ErrInvalidRequest.Wrap("unbonding delegation is already processed")
}

View File

@ -7,6 +7,7 @@ import (
"github.com/golang/mock/gomock"
"cosmossdk.io/collections"
"cosmossdk.io/core/header"
"cosmossdk.io/math"
"github.com/cosmos/cosmos-sdk/codec/address"
@ -247,8 +248,7 @@ func (s *KeeperTestSuite) TestMsgEditValidator() {
s.execExpectCalls()
// create new context with updated block time
newCtx := ctx.WithBlockTime(ctx.BlockTime().AddDate(0, 0, 1))
newCtx := ctx.WithHeaderInfo(header.Info{Time: ctx.HeaderInfo().Time.AddDate(0, 0, 1)})
pk := ed25519.GenPrivKey().PubKey()
require.NotNil(pk)
@ -852,7 +852,7 @@ func (s *KeeperTestSuite) TestMsgCancelUnbondingDelegation() {
require.NoError(err)
require.Equal(del, resDel)
ubd := stakingtypes.NewUnbondingDelegation(Addr, ValAddr, 10, ctx.BlockTime().Add(time.Minute*10), shares.RoundInt(), 0, keeper.ValidatorAddressCodec(), ak.AddressCodec())
ubd := stakingtypes.NewUnbondingDelegation(Addr, ValAddr, 10, ctx.HeaderInfo().Time.Add(time.Minute*10), shares.RoundInt(), 0, keeper.ValidatorAddressCodec(), ak.AddressCodec())
require.NoError(keeper.SetUnbondingDelegation(ctx, ubd))
resUnbond, err := keeper.GetUnbondingDelegation(ctx, Addr, ValAddr)
require.NoError(err)

View File

@ -226,7 +226,7 @@ func (k Keeper) SlashUnbondingDelegation(ctx context.Context, unbondingDelegatio
infractionHeight int64, slashFactor math.LegacyDec,
) (totalSlashAmount math.Int, err error) {
sdkCtx := sdk.UnwrapSDKContext(ctx)
now := sdkCtx.BlockHeader().Time
now := sdkCtx.HeaderInfo().Time
totalSlashAmount = math.ZeroInt()
burnedAmount := math.ZeroInt()
@ -283,7 +283,7 @@ func (k Keeper) SlashRedelegation(ctx context.Context, srcValidator types.Valida
infractionHeight int64, slashFactor math.LegacyDec,
) (totalSlashAmount math.Int, err error) {
sdkCtx := sdk.UnwrapSDKContext(ctx)
now := sdkCtx.BlockHeader().Time
now := sdkCtx.HeaderInfo().Time
totalSlashAmount = math.ZeroInt()
bondedBurnedAmount, notBondedBurnedAmount := math.ZeroInt(), math.ZeroInt()

View File

@ -284,7 +284,7 @@ func (k Keeper) unbondingDelegationEntryCanComplete(ctx context.Context, id uint
sdkCtx := sdk.UnwrapSDKContext(ctx)
// Check if entry is matured.
if !ubd.Entries[i].OnHold() && ubd.Entries[i].IsMature(sdkCtx.BlockHeader().Time) {
if !ubd.Entries[i].OnHold() && ubd.Entries[i].IsMature(sdkCtx.HeaderInfo().Time) {
// If matured, complete it.
delegatorAddress, err := k.authKeeper.AddressCodec().StringToBytes(ubd.DelegatorAddress)
if err != nil {
@ -346,7 +346,7 @@ func (k Keeper) redelegationEntryCanComplete(ctx context.Context, id uint64) err
red.Entries[i].UnbondingOnHoldRefCount--
sdkCtx := sdk.UnwrapSDKContext(ctx)
if !red.Entries[i].OnHold() && red.Entries[i].IsMature(sdkCtx.BlockHeader().Time) {
if !red.Entries[i].OnHold() && red.Entries[i].IsMature(sdkCtx.HeaderInfo().Time) {
// If matured, complete it.
// Remove entry
red.RemoveEntry(int64(i))

View File

@ -41,7 +41,7 @@ func (k Keeper) BlockValidatorUpdates(ctx context.Context) ([]abci.ValidatorUpda
sdkCtx := sdk.UnwrapSDKContext(ctx)
// Remove all mature unbonding delegations from the ubd queue.
matureUnbonds, err := k.DequeueAllMatureUBDQueue(ctx, sdkCtx.BlockHeader().Time)
matureUnbonds, err := k.DequeueAllMatureUBDQueue(ctx, sdkCtx.HeaderInfo().Time)
if err != nil {
return nil, err
}
@ -72,7 +72,7 @@ func (k Keeper) BlockValidatorUpdates(ctx context.Context) ([]abci.ValidatorUpda
}
// Remove all mature redelegations from the red queue.
matureRedelegations, err := k.DequeueAllMatureRedelegationQueue(ctx, sdkCtx.BlockHeader().Time)
matureRedelegations, err := k.DequeueAllMatureRedelegationQueue(ctx, sdkCtx.HeaderInfo().Time)
if err != nil {
return nil, err
}
@ -400,8 +400,8 @@ func (k Keeper) BeginUnbondingValidator(ctx context.Context, validator types.Val
sdkCtx := sdk.UnwrapSDKContext(ctx)
// set the unbonding completion time and completion height appropriately
validator.UnbondingTime = sdkCtx.BlockHeader().Time.Add(params.UnbondingTime)
validator.UnbondingHeight = sdkCtx.BlockHeader().Height
validator.UnbondingTime = sdkCtx.HeaderInfo().Time.Add(params.UnbondingTime)
validator.UnbondingHeight = sdkCtx.HeaderInfo().Height
validator.UnbondingIds = append(validator.UnbondingIds, id)

View File

@ -185,7 +185,7 @@ func (k Keeper) UpdateValidatorCommission(ctx context.Context,
) (types.Commission, error) {
commission := validator.Commission
sdkCtx := sdk.UnwrapSDKContext(ctx)
blockTime := sdkCtx.BlockHeader().Time
blockTime := sdkCtx.HeaderInfo().Time
if err := commission.ValidateNewRate(newRate, blockTime); err != nil {
return commission, err
@ -476,7 +476,7 @@ func (k Keeper) DeleteValidatorQueue(ctx context.Context, val types.Validator) e
// have finished their unbonding period.
func (k Keeper) UnbondAllMatureValidators(ctx context.Context) error {
sdkCtx := sdk.UnwrapSDKContext(ctx)
blockTime := sdkCtx.BlockTime()
blockTime := sdkCtx.HeaderInfo().Time
blockHeight := uint64(sdkCtx.BlockHeight())
rng := new(collections.Range[collections.Triple[uint64, time.Time, uint64]]).

View File

@ -7,6 +7,7 @@ import (
"github.com/golang/mock/gomock"
"cosmossdk.io/collections"
"cosmossdk.io/core/header"
"cosmossdk.io/math"
sdk "github.com/cosmos/cosmos-sdk/types"
@ -342,7 +343,7 @@ func (s *KeeperTestSuite) TestUpdateValidatorCommission() {
require.Equal(tc.newRate, val.Commission.Rate,
"expected new validator commission rate for test case #%d with rate: %s", i, tc.newRate,
)
require.Equal(ctx.BlockHeader().Time, val.Commission.UpdateTime,
require.Equal(ctx.HeaderInfo().Time, val.Commission.UpdateTime,
"expected new validator commission update time for test case #%d with rate: %s", i, tc.newRate,
)
}
@ -415,12 +416,12 @@ func (s *KeeperTestSuite) TestUnbondingValidator() {
require.Equal(valAddr.String(), resVals[0])
// check unbonding mature validators
ctx = ctx.WithBlockHeight(endHeight).WithBlockTime(endTime)
ctx = ctx.WithBlockHeight(endHeight).WithHeaderInfo(header.Info{Time: endTime})
err = keeper.UnbondAllMatureValidators(ctx)
require.EqualError(err, "validator in the unbonding queue was not found: validator does not exist")
require.NoError(keeper.SetValidator(ctx, validator))
ctx = ctx.WithBlockHeight(endHeight).WithBlockTime(endTime)
ctx = ctx.WithBlockHeight(endHeight).WithHeaderInfo(header.Info{Time: endTime})
err = keeper.UnbondAllMatureValidators(ctx)
require.EqualError(err, "unexpected validator in unbonding queue; status was not unbonding")

View File

@ -221,7 +221,7 @@ func SimulateMsgEditValidator(
address := val.GetOperator()
newCommissionRate := simtypes.RandomDecAmount(r, val.Commission.MaxRate)
if err := val.Commission.ValidateNewRate(newCommissionRate, ctx.BlockHeader().Time); err != nil {
if err := val.Commission.ValidateNewRate(newCommissionRate, ctx.HeaderInfo().Time); err != nil {
// skip as the commission is invalid
return simtypes.NoOpMsg(types.ModuleName, msgType, "invalid commission rate"), nil, nil
}
@ -517,7 +517,7 @@ func SimulateMsgCancelUnbondingDelegate(
}
}
if unbondingDelegationEntry.CompletionTime.Before(ctx.BlockTime()) {
if unbondingDelegationEntry.CompletionTime.Before(ctx.HeaderInfo().Time) {
return simtypes.NoOpMsg(types.ModuleName, msgType, "unbonding delegation is already processed"), nil, nil
}

View File

@ -7,6 +7,7 @@ import (
"github.com/stretchr/testify/require"
"cosmossdk.io/core/header"
"cosmossdk.io/math"
cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types"
@ -121,7 +122,7 @@ func (sh *Helper) CheckValidator(addr sdk.ValAddress, status stakingtypes.BondSt
// TurnBlock calls EndBlocker and updates the block time
func (sh *Helper) TurnBlock(newTime time.Time) sdk.Context {
sh.Ctx = sh.Ctx.WithBlockTime(newTime)
sh.Ctx = sh.Ctx.WithHeaderInfo(header.Info{Time: newTime})
_, err := sh.k.EndBlocker(sh.Ctx)
require.NoError(sh.t, err)
return sh.Ctx
@ -130,7 +131,7 @@ func (sh *Helper) TurnBlock(newTime time.Time) sdk.Context {
// TurnBlockTimeDiff calls EndBlocker and updates the block time by adding the
// duration to the current block time
func (sh *Helper) TurnBlockTimeDiff(diff time.Duration) sdk.Context {
sh.Ctx = sh.Ctx.WithBlockTime(sh.Ctx.BlockHeader().Time.Add(diff))
sh.Ctx = sh.Ctx.WithHeaderInfo(header.Info{Time: sh.Ctx.HeaderInfo().Time.Add(diff)})
_, err := sh.k.EndBlocker(sh.Ctx)
require.NoError(sh.t, err)
return sh.Ctx