From ba4c58780c46e0663ed2d58756735a56bed04298 Mon Sep 17 00:00:00 2001 From: Anna Shaleva Date: Thu, 2 Nov 2023 17:57:45 +0300 Subject: [PATCH] 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 --- pkg/core/native/policy.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pkg/core/native/policy.go b/pkg/core/native/policy.go index 6a044d4b8..d3fb5c001 100644 --- a/pkg/core/native/policy.go +++ b/pkg/core/native/policy.go @@ -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 // fee limit. func (p *Policy) CheckPolicy(d *dao.Simple, tx *transaction.Transaction) error { + cache := d.GetROCache(p.ID).(*PolicyCache) 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()) } }