From fe1f1d19beafbeacd691bb069ff2fda7395d9af6 Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Mon, 31 Aug 2020 23:57:10 +0300 Subject: [PATCH] mempool: store only pointer in the verifiedMap It's only used for presence checks, there is no need for metadata here. --- pkg/core/mempool/mem_pool.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/pkg/core/mempool/mem_pool.go b/pkg/core/mempool/mem_pool.go index 06693c239..9e82c6b25 100644 --- a/pkg/core/mempool/mem_pool.go +++ b/pkg/core/mempool/mem_pool.go @@ -46,7 +46,7 @@ type utilityBalanceAndFees struct { // Pool stores the unconfirms transactions. type Pool struct { lock sync.RWMutex - verifiedMap map[util.Uint256]item + verifiedMap map[util.Uint256]*transaction.Transaction verifiedTxes items fees map[util.Uint160]utilityBalanceAndFees @@ -156,7 +156,7 @@ func (mp *Pool) Add(t *transaction.Transaction, fee Feer) error { return err } - mp.verifiedMap[t.Hash()] = pItem + mp.verifiedMap[t.Hash()] = t // Insert into sorted array (from max to min, that could also be done // using sort.Sort(sort.Reverse()), but it incurs more overhead. Notice // also that we're searching for position that is strictly more @@ -197,7 +197,7 @@ func (mp *Pool) Add(t *transaction.Transaction, fee Feer) error { // nothing if it doesn't). func (mp *Pool) Remove(hash util.Uint256) { mp.lock.Lock() - if it, ok := mp.verifiedMap[hash]; ok { + if tx, ok := mp.verifiedMap[hash]; ok { var num int delete(mp.verifiedMap, hash) for num = range mp.verifiedTxes { @@ -210,9 +210,9 @@ func (mp *Pool) Remove(hash util.Uint256) { } else if num == len(mp.verifiedTxes)-1 { mp.verifiedTxes = mp.verifiedTxes[:num] } - senderFee := mp.fees[it.txn.Sender()] - senderFee.feeSum.Sub(senderFee.feeSum, big.NewInt(it.txn.SystemFee+it.txn.NetworkFee)) - mp.fees[it.txn.Sender()] = senderFee + senderFee := mp.fees[tx.Sender()] + senderFee.feeSum.Sub(senderFee.feeSum, big.NewInt(tx.SystemFee+tx.NetworkFee)) + mp.fees[tx.Sender()] = senderFee } updateMempoolMetrics(len(mp.verifiedTxes)) mp.lock.Unlock() @@ -261,7 +261,7 @@ func (mp *Pool) checkPolicy(tx *transaction.Transaction, policyChanged bool) boo // New returns a new Pool struct. func New(capacity int) *Pool { return &Pool{ - verifiedMap: make(map[util.Uint256]item), + verifiedMap: make(map[util.Uint256]*transaction.Transaction), verifiedTxes: make([]item, 0, capacity), capacity: capacity, fees: make(map[util.Uint160]utilityBalanceAndFees), @@ -272,8 +272,8 @@ func New(capacity int) *Pool { func (mp *Pool) TryGetValue(hash util.Uint256) (*transaction.Transaction, bool) { mp.lock.RLock() defer mp.lock.RUnlock() - if pItem, ok := mp.verifiedMap[hash]; ok { - return pItem.txn, ok + if tx, ok := mp.verifiedMap[hash]; ok { + return tx, ok } return nil, false