func (gs GlobalStorage) GetGlobalTime(ctx sdk.Context) *GlobalTime {
	store := ctx.KVStore(gs.key)
	timeBytes := store.Get(GetTimeKey())
	if timeBytes == nil {
		panic("Global Time is not Initialized at genesis")
	}
	globalTime := new(GlobalTime)
	gs.cdc.MustUnmarshalBinaryLengthPrefixed(timeBytes, globalTime)
	return globalTime
}
GetGlobalTime - get global time from KVStore
package model
import (
	"strconv"
	wire "github.com/cosmos/cosmos-sdk/codec"
	sdk "github.com/cosmos/cosmos-sdk/types"
	"github.com/lino-network/lino/types"
	"github.com/lino-network/lino/utils"
)
var (
	TimeEventListSubStore = []byte{0x00}  
	TimeSubStore          = []byte{0x01}  
	EventErrorSubStore    = []byte{0x02}  
	BCErrorSubStore       = []byte{0x03}  
)
type GlobalStorage struct {
	key sdk.StoreKey
	cdc *wire.Codec
}
func NewGlobalStorage(key sdk.StoreKey, cdc *wire.Codec) GlobalStorage {
	return GlobalStorage{
		key: key,
		cdc: cdc,
	}
}
func (gs GlobalStorage) CanEncode(event types.Event) bool {
	_, err := gs.cdc.MarshalBinaryLengthPrefixed(event)
	return err == nil
}
func (gs GlobalStorage) GetTimeEventList(ctx sdk.Context, unixTime int64) *types.TimeEventList {
	store := ctx.KVStore(gs.key)
	listByte := store.Get(GetTimeEventListKey(unixTime))
	if listByte == nil {
		return &types.TimeEventList{
			Events: nil,
		}
	}
	lst := new(types.TimeEventList)
	gs.cdc.MustUnmarshalBinaryLengthPrefixed(listByte, lst)
	return lst
}
func (gs GlobalStorage) SetTimeEventList(ctx sdk.Context, unixTime int64, lst *types.TimeEventList) {
	store := ctx.KVStore(gs.key)
	listByte := gs.cdc.MustMarshalBinaryLengthPrefixed(*lst)
	store.Set(GetTimeEventListKey(unixTime), listByte)
}
func (gs GlobalStorage) RemoveTimeEventList(ctx sdk.Context, unixTime int64) {
	store := ctx.KVStore(gs.key)
	store.Delete(GetTimeEventListKey(unixTime))
}