From b7d7c9ebeaa67f8e8d097ae8d790d137b174704c Mon Sep 17 00:00:00 2001 From: Shargon Date: Wed, 28 Aug 2019 09:30:09 +0200 Subject: [PATCH 1/4] Optimization --- neo/Ledger/Blockchain.cs | 6 ++++++ neo/Ledger/MemoryPool.cs | 5 ++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/neo/Ledger/Blockchain.cs b/neo/Ledger/Blockchain.cs index a74bfa981c..5d81fa036f 100644 --- a/neo/Ledger/Blockchain.cs +++ b/neo/Ledger/Blockchain.cs @@ -405,6 +405,12 @@ protected override void OnReceive(object message) case Block block: Sender.Tell(OnNewBlock(block)); break; + case Transaction[] transactions: + { + foreach (var tx in transactions) + Sender.Tell(OnNewTransaction(tx)); + break; + } case Transaction transaction: Sender.Tell(OnNewTransaction(transaction)); break; diff --git a/neo/Ledger/MemoryPool.cs b/neo/Ledger/MemoryPool.cs index 739085f5b6..6c4de204a5 100644 --- a/neo/Ledger/MemoryPool.cs +++ b/neo/Ledger/MemoryPool.cs @@ -360,9 +360,12 @@ internal void UpdatePoolForBlockPersisted(Block block, Snapshot snapshot) if (policyChanged) { + var tx = new List(); foreach (PoolItem item in _unverifiedSortedTransactions.Reverse()) if (item.Tx.FeePerByte >= _feePerByte) - _system.Blockchain.Tell(item.Tx, ActorRefs.NoSender); + tx.Add(item.Tx); + + _system.Blockchain.Tell(tx.ToArray(), ActorRefs.NoSender); _unverifiedTransactions.Clear(); _unverifiedSortedTransactions.Clear(); } From db404ce1a111f7988581cb5d04f6aedc8a34f6ce Mon Sep 17 00:00:00 2001 From: Shargon Date: Wed, 28 Aug 2019 09:33:08 +0200 Subject: [PATCH 2/4] Prevent relay --- neo/Ledger/Blockchain.cs | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/neo/Ledger/Blockchain.cs b/neo/Ledger/Blockchain.cs index 5d81fa036f..22a2f7f364 100644 --- a/neo/Ledger/Blockchain.cs +++ b/neo/Ledger/Blockchain.cs @@ -364,7 +364,7 @@ private void OnNewHeaders(Header[] headers) system.TaskManager.Tell(new TaskManager.HeaderTaskCompleted(), Sender); } - private RelayResultReason OnNewTransaction(Transaction transaction) + private RelayResultReason OnNewTransaction(Transaction transaction, bool relay) { if (ContainsTransaction(transaction.Hash)) return RelayResultReason.AlreadyExists; @@ -377,8 +377,8 @@ private RelayResultReason OnNewTransaction(Transaction transaction) if (!MemPool.TryAdd(transaction.Hash, transaction)) return RelayResultReason.OutOfMemory; - - system.LocalNode.Tell(new LocalNode.RelayDirectly { Inventory = transaction }); + if (relay) + system.LocalNode.Tell(new LocalNode.RelayDirectly { Inventory = transaction }); return RelayResultReason.Succeed; } @@ -407,12 +407,13 @@ protected override void OnReceive(object message) break; case Transaction[] transactions: { + // This message comes from a revalidation of the mempool, already relayed foreach (var tx in transactions) - Sender.Tell(OnNewTransaction(tx)); + Sender.Tell(OnNewTransaction(tx, false)); break; } case Transaction transaction: - Sender.Tell(OnNewTransaction(transaction)); + Sender.Tell(OnNewTransaction(transaction, true)); break; case ConsensusPayload payload: Sender.Tell(OnNewConsensus(payload)); From 63ab3772eb740682845dd73cd2701425fc7c908f Mon Sep 17 00:00:00 2001 From: Shargon Date: Wed, 28 Aug 2019 09:39:04 +0200 Subject: [PATCH 3/4] Change comment --- neo/Ledger/Blockchain.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/neo/Ledger/Blockchain.cs b/neo/Ledger/Blockchain.cs index 22a2f7f364..d4b45ed272 100644 --- a/neo/Ledger/Blockchain.cs +++ b/neo/Ledger/Blockchain.cs @@ -407,7 +407,7 @@ protected override void OnReceive(object message) break; case Transaction[] transactions: { - // This message comes from a revalidation of the mempool, already relayed + // This message comes from a mempool's revalidation, already relayed foreach (var tx in transactions) Sender.Tell(OnNewTransaction(tx, false)); break; From 77a47477da1e9008a4f7e4dec28939ea59672593 Mon Sep 17 00:00:00 2001 From: Shargon Date: Wed, 28 Aug 2019 12:18:43 +0200 Subject: [PATCH 4/4] Optimizations --- neo/Ledger/Blockchain.cs | 3 +-- neo/Ledger/MemoryPool.cs | 4 +++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/neo/Ledger/Blockchain.cs b/neo/Ledger/Blockchain.cs index d4b45ed272..50393d4c8e 100644 --- a/neo/Ledger/Blockchain.cs +++ b/neo/Ledger/Blockchain.cs @@ -408,8 +408,7 @@ protected override void OnReceive(object message) case Transaction[] transactions: { // This message comes from a mempool's revalidation, already relayed - foreach (var tx in transactions) - Sender.Tell(OnNewTransaction(tx, false)); + foreach (var tx in transactions) OnNewTransaction(tx, false); break; } case Transaction transaction: diff --git a/neo/Ledger/MemoryPool.cs b/neo/Ledger/MemoryPool.cs index 6c4de204a5..a6af9fc721 100644 --- a/neo/Ledger/MemoryPool.cs +++ b/neo/Ledger/MemoryPool.cs @@ -365,7 +365,9 @@ internal void UpdatePoolForBlockPersisted(Block block, Snapshot snapshot) if (item.Tx.FeePerByte >= _feePerByte) tx.Add(item.Tx); - _system.Blockchain.Tell(tx.ToArray(), ActorRefs.NoSender); + if (tx.Count > 0) + _system.Blockchain.Tell(tx.ToArray(), ActorRefs.NoSender); + _unverifiedTransactions.Clear(); _unverifiedSortedTransactions.Clear(); }