aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2017-01-22 16:13:31 +0000
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2017-01-22 16:13:31 +0000
commitf0989893961d16baec0d4474d0bbc46f0416ff37 (patch)
tree1cad9e1a380e83aff2760063f801de264b0491fd
parentMerge pull request #1585 (diff)
downloadmonero-f0989893961d16baec0d4474d0bbc46f0416ff37.tar.xz
core: cache tx hashes of failing semantics txes
-rw-r--r--src/cryptonote_core/cryptonote_core.cpp8
-rw-r--r--src/cryptonote_core/cryptonote_core.h2
2 files changed, 10 insertions, 0 deletions
diff --git a/src/cryptonote_core/cryptonote_core.cpp b/src/cryptonote_core/cryptonote_core.cpp
index 5294431d6..a92cd2df3 100644
--- a/src/cryptonote_core/cryptonote_core.cpp
+++ b/src/cryptonote_core/cryptonote_core.cpp
@@ -487,6 +487,13 @@ namespace cryptonote
}
//std::cout << "!"<< tx.vin.size() << std::endl;
+ if (bad_semantics_txes.find(tx_hash) != bad_semantics_txes.end())
+ {
+ LOG_PRINT_L1("Transaction already seen with bad semantics, rejected");
+ tvc.m_verifivation_failed = true;
+ return false;
+ }
+
uint8_t version = m_blockchain_storage.get_current_hard_fork_version();
const size_t max_tx_version = version == 1 ? 1 : 2;
if (tx.version == 0 || tx.version > max_tx_version)
@@ -522,6 +529,7 @@ namespace cryptonote
if(!check_tx_semantic(tx, keeped_by_block))
{
LOG_PRINT_L1("WRONG TRANSACTION BLOB, Failed to check tx " << tx_hash << " semantic, rejected");
+ bad_semantics_txes.insert(tx_hash);
tvc.m_verifivation_failed = true;
return false;
}
diff --git a/src/cryptonote_core/cryptonote_core.h b/src/cryptonote_core/cryptonote_core.h
index fa67ff265..12d436e99 100644
--- a/src/cryptonote_core/cryptonote_core.h
+++ b/src/cryptonote_core/cryptonote_core.h
@@ -824,6 +824,8 @@ namespace cryptonote
size_t block_sync_size;
time_t start_time;
+
+ std::unordered_set<crypto::hash> bad_semantics_txes;
};
}