From 5df726db68afc87bfbac11194b3f925ce4efd2fd Mon Sep 17 00:00:00 2001 From: Roman Khimov Date: Wed, 9 Sep 2020 15:32:31 +0300 Subject: [PATCH] mempool: replace timeStamp with blockStamp Time is not really relevant for us here and we don't use this timestamp in any way. Yet it occupies 24 bytes and we do two clock_gettime calls to get it. Replace it with blockStamp which is going to be used in the future for transaction retransmissions. It allows to improve single-node TPS by another 3%. --- pkg/core/blockchainer/blockchainer.go | 1 - pkg/core/mempool/feer.go | 1 + pkg/core/mempool/mem_pool.go | 9 ++++----- pkg/core/mempool/mem_pool_test.go | 4 ++++ pkg/rpc/server/server_helper_test.go | 4 ++++ 5 files changed, 13 insertions(+), 6 deletions(-) diff --git a/pkg/core/blockchainer/blockchainer.go b/pkg/core/blockchainer/blockchainer.go index 318ad2b72..dfbd4b39a 100644 --- a/pkg/core/blockchainer/blockchainer.go +++ b/pkg/core/blockchainer/blockchainer.go @@ -22,7 +22,6 @@ type Blockchainer interface { AddHeaders(...*block.Header) error AddBlock(*block.Block) error AddStateRoot(r *state.MPTRoot) error - BlockHeight() uint32 CalculateClaimable(value *big.Int, startHeight, endHeight uint32) *big.Int Close() HeaderHeight() uint32 diff --git a/pkg/core/mempool/feer.go b/pkg/core/mempool/feer.go index b2333f755..cc86de243 100644 --- a/pkg/core/mempool/feer.go +++ b/pkg/core/mempool/feer.go @@ -10,4 +10,5 @@ import ( type Feer interface { FeePerByte() int64 GetUtilityTokenBalance(util.Uint160) *big.Int + BlockHeight() uint32 } diff --git a/pkg/core/mempool/mem_pool.go b/pkg/core/mempool/mem_pool.go index 883890c8f..060b7f3d6 100644 --- a/pkg/core/mempool/mem_pool.go +++ b/pkg/core/mempool/mem_pool.go @@ -5,7 +5,6 @@ import ( "math/big" "sort" "sync" - "time" "github.com/nspcc-dev/neo-go/pkg/core/transaction" "github.com/nspcc-dev/neo-go/pkg/util" @@ -30,8 +29,8 @@ var ( // item represents a transaction in the the Memory pool. type item struct { - txn *transaction.Transaction - timeStamp time.Time + txn *transaction.Transaction + blockStamp uint32 } // items is a slice of item. @@ -148,8 +147,8 @@ func checkBalance(tx *transaction.Transaction, balance utilityBalanceAndFees) er // Add tries to add given transaction to the Pool. func (mp *Pool) Add(t *transaction.Transaction, fee Feer) error { var pItem = item{ - txn: t, - timeStamp: time.Now().UTC(), + txn: t, + blockStamp: fee.BlockHeight(), } mp.lock.Lock() if mp.containsKey(t.Hash()) { diff --git a/pkg/core/mempool/mem_pool_test.go b/pkg/core/mempool/mem_pool_test.go index d297efbb4..e2a1f670c 100644 --- a/pkg/core/mempool/mem_pool_test.go +++ b/pkg/core/mempool/mem_pool_test.go @@ -23,6 +23,10 @@ func (fs *FeerStub) FeePerByte() int64 { return fs.feePerByte } +func (fs *FeerStub) BlockHeight() uint32 { + return 0 +} + func (fs *FeerStub) GetUtilityTokenBalance(uint160 util.Uint160) *big.Int { return balance } diff --git a/pkg/rpc/server/server_helper_test.go b/pkg/rpc/server/server_helper_test.go index 391fdf7da..d10b473ee 100644 --- a/pkg/rpc/server/server_helper_test.go +++ b/pkg/rpc/server/server_helper_test.go @@ -91,6 +91,10 @@ func (fs *FeerStub) FeePerByte() int64 { return 0 } +func (fs *FeerStub) BlockHeight() uint32 { + return 0 +} + func (fs *FeerStub) GetUtilityTokenBalance(acc util.Uint160) *big.Int { return big.NewInt(1000000 * native.GASFactor) }