mirror of
https://github.com/0glabs/0g-chain.git
synced 2024-12-27 00:35:18 +00:00
fix: set previous block time correctly on block one (#868)
* fix: set previous block time correctly on block one * fix failing tests
This commit is contained in:
parent
829aed5256
commit
e21a04ca57
@ -2,9 +2,6 @@ package validatorvesting
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"time"
|
|
||||||
|
|
||||||
tmtime "github.com/tendermint/tendermint/types/time"
|
|
||||||
|
|
||||||
sdk "github.com/cosmos/cosmos-sdk/types"
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
||||||
|
|
||||||
@ -15,9 +12,10 @@ import (
|
|||||||
|
|
||||||
// BeginBlocker updates the vote signing information for each validator vesting account, updates account when period changes, and updates the previousBlockTime value in the store.
|
// BeginBlocker updates the vote signing information for each validator vesting account, updates account when period changes, and updates the previousBlockTime value in the store.
|
||||||
func BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock, k keeper.Keeper) {
|
func BeginBlocker(ctx sdk.Context, req abci.RequestBeginBlock, k keeper.Keeper) {
|
||||||
previousBlockTime := tmtime.Canonical(time.Unix(0, 0))
|
previousBlockTime, found := k.GetPreviousBlockTime(ctx)
|
||||||
if ctx.BlockHeight() > 1 {
|
if !found {
|
||||||
previousBlockTime = k.GetPreviousBlockTime(ctx)
|
k.SetPreviousBlockTime(ctx, ctx.BlockTime())
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
currentBlockTime := ctx.BlockTime()
|
currentBlockTime := ctx.BlockTime()
|
||||||
|
@ -69,7 +69,7 @@ func TestBeginBlockerZeroHeight(t *testing.T) {
|
|||||||
}},
|
}},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
vvk.SetPreviousBlockTime(ctx, now)
|
||||||
BeginBlocker(ctx, req, vvk)
|
BeginBlocker(ctx, req, vvk)
|
||||||
|
|
||||||
vva = vvk.GetAccountFromAuthKeeper(ctx, vva.Address)
|
vva = vvk.GetAccountFromAuthKeeper(ctx, vva.Address)
|
||||||
@ -147,6 +147,7 @@ func TestBeginBlockerSignedBlock(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
vvk.SetPreviousBlockTime(ctx, now)
|
||||||
BeginBlocker(ctx, req, vvk)
|
BeginBlocker(ctx, req, vvk)
|
||||||
height++
|
height++
|
||||||
blockTime = addHour(blockTime)
|
blockTime = addHour(blockTime)
|
||||||
|
@ -22,6 +22,9 @@ func InitGenesis(ctx sdk.Context, keeper Keeper, accountKeeper types.AccountKeep
|
|||||||
|
|
||||||
// ExportGenesis returns empty genesis state because auth exports all the genesis state we need.
|
// ExportGenesis returns empty genesis state because auth exports all the genesis state we need.
|
||||||
func ExportGenesis(ctx sdk.Context, keeper Keeper) types.GenesisState {
|
func ExportGenesis(ctx sdk.Context, keeper Keeper) types.GenesisState {
|
||||||
prevBlockTime := keeper.GetPreviousBlockTime(ctx)
|
prevBlockTime, found := keeper.GetPreviousBlockTime(ctx)
|
||||||
|
if !found {
|
||||||
|
prevBlockTime = ctx.BlockTime()
|
||||||
|
}
|
||||||
return NewGenesisState(prevBlockTime)
|
return NewGenesisState(prevBlockTime)
|
||||||
}
|
}
|
||||||
|
@ -43,14 +43,14 @@ func (k Keeper) Logger(ctx sdk.Context) log.Logger {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// GetPreviousBlockTime get the blocktime for the previous block
|
// GetPreviousBlockTime get the blocktime for the previous block
|
||||||
func (k Keeper) GetPreviousBlockTime(ctx sdk.Context) (blockTime time.Time) {
|
func (k Keeper) GetPreviousBlockTime(ctx sdk.Context) (blockTime time.Time, found bool) {
|
||||||
store := ctx.KVStore(k.storeKey)
|
store := ctx.KVStore(k.storeKey)
|
||||||
b := store.Get(types.BlocktimeKey)
|
b := store.Get(types.BlocktimeKey)
|
||||||
if b == nil {
|
if b == nil {
|
||||||
panic("Previous block time not set")
|
return time.Time{}, false
|
||||||
}
|
}
|
||||||
k.cdc.MustUnmarshalBinaryLengthPrefixed(b, &blockTime)
|
k.cdc.MustUnmarshalBinaryLengthPrefixed(b, &blockTime)
|
||||||
return blockTime
|
return blockTime, true
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetPreviousBlockTime set the time of the previous block
|
// SetPreviousBlockTime set the time of the previous block
|
||||||
|
@ -67,19 +67,22 @@ func TestGetSetPreviousBlock(t *testing.T) {
|
|||||||
now := tmtime.Now()
|
now := tmtime.Now()
|
||||||
|
|
||||||
// require panic if the previous blocktime was never set
|
// require panic if the previous blocktime was never set
|
||||||
require.Panics(t, func() { keeper.GetPreviousBlockTime(ctx) })
|
_, found := keeper.GetPreviousBlockTime(ctx)
|
||||||
|
require.False(t, found)
|
||||||
|
|
||||||
// require that passing a valid time to SetPreviousBlockTime does not panic
|
// require that passing a valid time to SetPreviousBlockTime does not panic
|
||||||
require.NotPanics(t, func() { keeper.SetPreviousBlockTime(ctx, now) })
|
require.NotPanics(t, func() { keeper.SetPreviousBlockTime(ctx, now) })
|
||||||
|
|
||||||
// require that the value from GetPreviousBlockTime equals what was set
|
// require that the value from GetPreviousBlockTime equals what was set
|
||||||
bpt := keeper.GetPreviousBlockTime(ctx)
|
bpt, found := keeper.GetPreviousBlockTime(ctx)
|
||||||
|
require.True(t, found)
|
||||||
require.Equal(t, now, bpt)
|
require.Equal(t, now, bpt)
|
||||||
|
|
||||||
// require that the zero value is safe
|
// require that the zero value is safe
|
||||||
require.NotPanics(t, func() { keeper.SetPreviousBlockTime(ctx, tmtime.Canonical(time.Unix(0, 0))) })
|
require.NotPanics(t, func() { keeper.SetPreviousBlockTime(ctx, tmtime.Canonical(time.Unix(0, 0))) })
|
||||||
|
|
||||||
bpt = keeper.GetPreviousBlockTime(ctx)
|
bpt, found = keeper.GetPreviousBlockTime(ctx)
|
||||||
|
require.True(t, found)
|
||||||
require.Equal(t, tmtime.Canonical(time.Unix(0, 0)), bpt)
|
require.Equal(t, tmtime.Canonical(time.Unix(0, 0)), bpt)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user