actor: take ValidatorsHistory into account for CalculateValidUntilBlock

Which makes permanent result.Version caching safe for all cases.
This commit is contained in:
Roman Khimov 2022-08-08 16:16:53 +03:00
parent 95b72db707
commit ff72ed5715
2 changed files with 27 additions and 1 deletions

View file

@ -191,5 +191,14 @@ func (a *Actor) CalculateValidUntilBlock() (uint32, error) {
if err != nil {
return 0, fmt.Errorf("can't get block count: %w", err)
}
return blockCount + uint32(a.version.Protocol.ValidatorsCount) + 1, nil
var vc = int(a.version.Protocol.ValidatorsCount)
var bestH = uint32(0)
for h, n := range a.version.Protocol.ValidatorsHistory { // In case it's enabled.
if h >= bestH && h <= blockCount {
vc = n
bestH = h
}
}
return blockCount + uint32(vc+1), nil
}

View file

@ -24,6 +24,23 @@ func TestCalculateValidUntilBlock(t *testing.T) {
vub, err := a.CalculateValidUntilBlock()
require.NoError(t, err)
require.Equal(t, uint32(42+7+1), vub)
client.version.Protocol.ValidatorsHistory = map[uint32]int{
0: 7,
40: 4,
80: 10,
}
a, err = NewSimple(client, acc)
require.NoError(t, err)
vub, err = a.CalculateValidUntilBlock()
require.NoError(t, err)
require.Equal(t, uint32(42+4+1), vub)
client.bCount = 101
vub, err = a.CalculateValidUntilBlock()
require.NoError(t, err)
require.Equal(t, uint32(101+10+1), vub)
}
func TestMakeUnsigned(t *testing.T) {