From 92b6835c4f352419cb8a2bfd0870c73471927a8f Mon Sep 17 00:00:00 2001 From: chyngyz Date: Wed, 8 Jan 2020 16:25:00 +0600 Subject: [PATCH] Remove outpoints from bloom filter when transaction comes in block. --- .../bitcoincore/transactions/TransactionProcessor.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/bitcoincore/src/main/kotlin/io/horizontalsystems/bitcoincore/transactions/TransactionProcessor.kt b/bitcoincore/src/main/kotlin/io/horizontalsystems/bitcoincore/transactions/TransactionProcessor.kt index 5cf981d60..aa43afca9 100644 --- a/bitcoincore/src/main/kotlin/io/horizontalsystems/bitcoincore/transactions/TransactionProcessor.kt +++ b/bitcoincore/src/main/kotlin/io/horizontalsystems/bitcoincore/transactions/TransactionProcessor.kt @@ -52,6 +52,8 @@ class TransactionProcessor( val inserted = mutableListOf() val updated = mutableListOf() + val pendingExists = storage.getIncomingPendingTxHashes().isNotEmpty() || block == null + // when the same transaction came in merkle block and from another peer's mempool we need to process it serial synchronized(this) { for ((index, transaction) in transactions.inTopologicalOrder().withIndex()) { @@ -74,6 +76,7 @@ class TransactionProcessor( if (transactionInDB.blockHash != null) { transactionInDB.conflictingTxHash = null + needToUpdateBloomFilter = needToUpdateBloomFilter || !transaction.header.isOutgoing } storage.updateTransaction(transactionInDB) @@ -105,12 +108,13 @@ class TransactionProcessor( if (!skipCheckBloomFilter) { + val checkDoubleSpend = !transaction.header.isOutgoing && block == null needToUpdateBloomFilter = needToUpdateBloomFilter || - !transaction.header.isOutgoing || // need update outpoints for incoming tx to check double spend txs + checkDoubleSpend || publicKeyManager.gapShifts() || irregularOutputFinder.hasIrregularOutput(transaction.outputs) } - } else { + } else if (pendingExists) { processedNotMineTransactions.add(notMineTransaction)