2021-08-25 16:39:12 +00:00
|
|
|
package cache
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/binary"
|
|
|
|
"math"
|
|
|
|
"testing"
|
|
|
|
|
|
|
|
types "github.com/prysmaticlabs/eth2-types"
|
|
|
|
state "github.com/prysmaticlabs/prysm/beacon-chain/state/v1"
|
2021-09-15 01:18:39 +00:00
|
|
|
"github.com/prysmaticlabs/prysm/config/features"
|
2021-08-25 16:39:12 +00:00
|
|
|
ethpb "github.com/prysmaticlabs/prysm/proto/prysm/v1alpha1"
|
|
|
|
"github.com/prysmaticlabs/prysm/shared/params"
|
|
|
|
"github.com/prysmaticlabs/prysm/shared/testutil/require"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestBalanceCache_AddGetBalance(t *testing.T) {
|
2021-09-15 01:18:39 +00:00
|
|
|
resetCfg := features.InitWithReset(&features.Flags{
|
2021-08-26 14:32:40 +00:00
|
|
|
EnableActiveBalanceCache: true,
|
|
|
|
})
|
|
|
|
defer resetCfg()
|
|
|
|
|
2021-08-25 16:39:12 +00:00
|
|
|
blockRoots := make([][]byte, params.BeaconConfig().SlotsPerHistoricalRoot)
|
|
|
|
for i := 0; i < len(blockRoots); i++ {
|
|
|
|
b := make([]byte, 8)
|
|
|
|
binary.LittleEndian.PutUint64(b, uint64(i))
|
|
|
|
blockRoots[i] = b
|
|
|
|
}
|
|
|
|
raw := ðpb.BeaconState{
|
|
|
|
BlockRoots: blockRoots,
|
|
|
|
}
|
|
|
|
st, err := state.InitializeFromProto(raw)
|
|
|
|
require.NoError(t, err)
|
|
|
|
|
|
|
|
cache := NewEffectiveBalanceCache()
|
|
|
|
_, err = cache.Get(st)
|
|
|
|
require.ErrorContains(t, ErrNotFound.Error(), err)
|
|
|
|
|
|
|
|
b := uint64(100)
|
|
|
|
require.NoError(t, cache.AddTotalEffectiveBalance(st, b))
|
|
|
|
cachedB, err := cache.Get(st)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, b, cachedB)
|
|
|
|
|
|
|
|
require.NoError(t, st.SetSlot(1000))
|
|
|
|
_, err = cache.Get(st)
|
|
|
|
require.ErrorContains(t, ErrNotFound.Error(), err)
|
|
|
|
|
|
|
|
b = uint64(200)
|
|
|
|
require.NoError(t, cache.AddTotalEffectiveBalance(st, b))
|
|
|
|
cachedB, err = cache.Get(st)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, b, cachedB)
|
|
|
|
|
|
|
|
require.NoError(t, st.SetSlot(1000+params.BeaconConfig().SlotsPerHistoricalRoot))
|
|
|
|
_, err = cache.Get(st)
|
|
|
|
require.ErrorContains(t, ErrNotFound.Error(), err)
|
|
|
|
|
|
|
|
b = uint64(300)
|
|
|
|
require.NoError(t, cache.AddTotalEffectiveBalance(st, b))
|
|
|
|
cachedB, err = cache.Get(st)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, b, cachedB)
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestBalanceCache_BalanceKey(t *testing.T) {
|
|
|
|
blockRoots := make([][]byte, params.BeaconConfig().SlotsPerHistoricalRoot)
|
|
|
|
for i := 0; i < len(blockRoots); i++ {
|
|
|
|
b := make([]byte, 8)
|
|
|
|
binary.LittleEndian.PutUint64(b, uint64(i))
|
|
|
|
blockRoots[i] = b
|
|
|
|
}
|
|
|
|
raw := ðpb.BeaconState{
|
|
|
|
BlockRoots: blockRoots,
|
|
|
|
}
|
|
|
|
st, err := state.InitializeFromProto(raw)
|
|
|
|
require.NoError(t, err)
|
|
|
|
require.NoError(t, st.SetSlot(types.Slot(math.MaxUint64)))
|
|
|
|
|
|
|
|
_, err = balanceCacheKey(st)
|
|
|
|
require.NoError(t, err)
|
|
|
|
}
|