mirror of
				https://github.com/0glabs/0g-chain.git
				synced 2025-11-04 07:07:26 +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