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:
parent
de38163f89
commit
ba4c58780c
1 changed files with 2 additions and 1 deletions
|
@ -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())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue