native: optimize policy check for transaction's signers

Do not retrieve RO cache for each signer, make it ones per transaction
instead.

Signed-off-by: Anna Shaleva <shaleva.ann@nspcc.ru>
This commit is contained in:
Anna Shaleva 2023-11-02 17:57:45 +03:00
parent de38163f89
commit ba4c58780c

View file

@ -365,8 +365,9 @@ func (p *Policy) unblockAccount(ic *interop.Context, args []stackitem.Item) stac
// like not being signed by a blocked account or not exceeding the block-level system // like not being signed by a blocked account or not exceeding the block-level system
// fee limit. // fee limit.
func (p *Policy) CheckPolicy(d *dao.Simple, tx *transaction.Transaction) error { func (p *Policy) CheckPolicy(d *dao.Simple, tx *transaction.Transaction) error {
cache := d.GetROCache(p.ID).(*PolicyCache)
for _, signer := range tx.Signers { for _, signer := range tx.Signers {
if _, isBlocked := p.isBlockedInternal(d.GetROCache(p.ID).(*PolicyCache), signer.Account); isBlocked { if _, isBlocked := p.isBlockedInternal(cache, signer.Account); isBlocked {
return fmt.Errorf("account %s is blocked", signer.Account.StringLE()) return fmt.Errorf("account %s is blocked", signer.Account.StringLE())
} }
} }