Merge pull request #2225

5d91b26c blockchain: skip checking tx semantics in embedded block hash range (moneromooo-monero)
This commit is contained in:
Riccardo Spagni 2017-08-07 22:10:09 +02:00
commit 62610a3a53
No known key found for this signature in database
GPG Key ID: 55432DF31CCD4FCD
3 changed files with 17 additions and 1 deletions

View File

@ -4171,6 +4171,15 @@ void Blockchain::load_compiled_in_block_hashes()
} }
#endif #endif
bool Blockchain::is_within_compiled_block_hash_area(uint64_t height) const
{
#if defined(PER_BLOCK_CHECKPOINT)
return height < m_blocks_hash_check.size();
#else
return false;
#endif
}
void Blockchain::lock() void Blockchain::lock()
{ {
m_blockchain_lock.lock(); m_blockchain_lock.lock();

View File

@ -865,6 +865,9 @@ namespace cryptonote
cryptonote::blobdata get_txpool_tx_blob(const crypto::hash& txid) const; cryptonote::blobdata get_txpool_tx_blob(const crypto::hash& txid) const;
bool for_all_txpool_txes(std::function<bool(const crypto::hash&, const txpool_tx_meta_t&, const cryptonote::blobdata*)>, bool include_blob = false) const; bool for_all_txpool_txes(std::function<bool(const crypto::hash&, const txpool_tx_meta_t&, const cryptonote::blobdata*)>, bool include_blob = false) const;
bool is_within_compiled_block_hash_area(uint64_t height) const;
bool is_within_compiled_block_hash_area() const { return is_within_compiled_block_hash_area(m_db->height()); }
void lock(); void lock();
void unlock(); void unlock();

View File

@ -562,7 +562,11 @@ namespace cryptonote
rv.outPk[n].dest = rct::pk2rct(boost::get<txout_to_key>(tx.vout[n].target).key); rv.outPk[n].dest = rct::pk2rct(boost::get<txout_to_key>(tx.vout[n].target).key);
} }
if(!check_tx_semantic(tx, keeped_by_block)) if (keeped_by_block && get_blockchain_storage().is_within_compiled_block_hash_area())
{
MTRACE("Skipping semantics check for tx kept by block in embedded hash area");
}
else if(!check_tx_semantic(tx, keeped_by_block))
{ {
LOG_PRINT_L1("WRONG TRANSACTION BLOB, Failed to check tx " << tx_hash << " semantic, rejected"); LOG_PRINT_L1("WRONG TRANSACTION BLOB, Failed to check tx " << tx_hash << " semantic, rejected");
tvc.m_verifivation_failed = true; tvc.m_verifivation_failed = true;