native: fix Policy's IsBlocked behaviour
Account is blocked when it's in the Policy's storage, not when it's
missing from the Policy storage. Introduced in
bbbc6805a8
.
This bug leads to the fact that during native Neo cache initialization
at the last block in the dBFT epoch, all candidates accounts are
"blocked", and thus, stand-by committee and validators are used in the
subsequent new epoch. Close #3424.
This bug may lead to the consequences described in #3273, but it needs
to be confirmed.
Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
This commit is contained in:
parent
2d4993a837
commit
c43cfae24c
2 changed files with 88 additions and 1 deletions
|
@ -319,7 +319,7 @@ func (p *Policy) IsBlocked(dao *dao.Simple, hash util.Uint160) bool {
|
|||
cache := dao.GetROCache(p.ID)
|
||||
if cache == nil {
|
||||
key := append([]byte{blockedAccountPrefix}, hash.BytesBE()...)
|
||||
return dao.GetStorageItem(p.ID, key) == nil
|
||||
return dao.GetStorageItem(p.ID, key) != nil
|
||||
}
|
||||
_, isBlocked := p.isBlockedInternal(cache.(*PolicyCache), hash)
|
||||
return isBlocked
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue