Merge pull request #1549 from nspcc-dev/core/fix_committee_update

core: update committee every [committee length] blocks
This commit is contained in:
Roman Khimov 2020-11-27 11:04:40 +03:00 committed by GitHub
commit 7044e9be40
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 21 deletions

View file

@ -121,7 +121,7 @@ func TestService_NextConsensus(t *testing.T) {
require.Equal(t, h, hdr.NextConsensus) require.Equal(t, h, hdr.NextConsensus)
} }
t.Run("vote 1 block before update", func(t *testing.T) { t.Run("vote 1 block before update", func(t *testing.T) { // voting occurs every block in SingleTestChain
srv, acc := initServiceNextConsensus(t, newAcc, 1) srv, acc := initServiceNextConsensus(t, newAcc, 1)
bc := srv.Chain.(*core.Blockchain) bc := srv.Chain.(*core.Blockchain)
defer bc.Close() defer bc.Close()
@ -135,27 +135,28 @@ func TestService_NextConsensus(t *testing.T) {
srv.dbft.OnTimeout(timer.HV{Height: srv.dbft.BlockIndex}) srv.dbft.OnTimeout(timer.HV{Height: srv.dbft.BlockIndex})
checkNextConsensus(t, bc, height+1, hash.Hash160(script)) checkNextConsensus(t, bc, height+1, hash.Hash160(script))
}) })
/*
t.Run("vote 2 blocks before update", func(t *testing.T) {
srv, acc := initServiceNextConsensus(t, newAcc, 2)
bc := srv.Chain.(*core.Blockchain)
defer bc.Close()
t.Run("vote 2 blocks before update", func(t *testing.T) { height := bc.BlockHeight()
srv, acc := initServiceNextConsensus(t, newAcc, 2) checkNextConsensus(t, bc, height, acc.Contract.ScriptHash())
bc := srv.Chain.(*core.Blockchain) // Reset <- we are here
defer bc.Close() // OnPersist <- nothing to do
// Block <-
//
// Reset <- update next consensus
// OnPersist <- update committee
// Block <-
srv.dbft.OnTimeout(timer.HV{Height: srv.dbft.BlockIndex})
checkNextConsensus(t, bc, height+1, acc.Contract.ScriptHash())
height := bc.BlockHeight() srv.dbft.OnTimeout(timer.HV{Height: srv.dbft.BlockIndex})
checkNextConsensus(t, bc, height, acc.Contract.ScriptHash()) checkNextConsensus(t, bc, height+2, hash.Hash160(script))
// Reset <- we are here })
// OnPersist <- nothing to do */
// Block <-
//
// Reset <- update next consensus
// OnPersist <- update committee
// Block <-
srv.dbft.OnTimeout(timer.HV{Height: srv.dbft.BlockIndex})
checkNextConsensus(t, bc, height+1, acc.Contract.ScriptHash())
srv.dbft.OnTimeout(timer.HV{Height: srv.dbft.BlockIndex})
checkNextConsensus(t, bc, height+2, hash.Hash160(script))
})
} }
func TestService_GetVerified(t *testing.T) { func TestService_GetVerified(t *testing.T) {

View file

@ -273,7 +273,7 @@ func (n *NEO) updateCommittee(ic *interop.Context) error {
// ShouldUpdateCommittee returns true if committee is updated at block h. // ShouldUpdateCommittee returns true if committee is updated at block h.
func ShouldUpdateCommittee(h uint32, bc blockchainer.Blockchainer) bool { func ShouldUpdateCommittee(h uint32, bc blockchainer.Blockchainer) bool {
cfg := bc.GetConfig() cfg := bc.GetConfig()
r := cfg.ValidatorsCount + len(cfg.StandbyCommittee) r := len(cfg.StandbyCommittee)
return h%uint32(r) == 0 return h%uint32(r) == 0
} }