aboutsummaryrefslogtreecommitdiff
path: root/src/blockchain_db/blockchain_db.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/blockchain_db/blockchain_db.cpp')
-rw-r--r--src/blockchain_db/blockchain_db.cpp61
1 files changed, 51 insertions, 10 deletions
diff --git a/src/blockchain_db/blockchain_db.cpp b/src/blockchain_db/blockchain_db.cpp
index 7eb81d933..136d4fa80 100644
--- a/src/blockchain_db/blockchain_db.cpp
+++ b/src/blockchain_db/blockchain_db.cpp
@@ -1,4 +1,4 @@
-// Copyright (c) 2014-2016, The Monero Project
+// Copyright (c) 2014-2017, The Monero Project
//
// All rights reserved.
//
@@ -29,9 +29,12 @@
#include <boost/range/adaptor/reversed.hpp>
#include "blockchain_db.h"
-#include "cryptonote_core/cryptonote_format_utils.h"
+#include "cryptonote_basic/cryptonote_format_utils.h"
#include "profile_tools.h"
+#undef MONERO_DEFAULT_LOG_CATEGORY
+#define MONERO_DEFAULT_LOG_CATEGORY "blockchain.db"
+
using epee::string_tools::pod_to_hex;
namespace cryptonote
@@ -125,11 +128,7 @@ uint64_t BlockchainDB::add_block( const block& blk
TIME_MEASURE_FINISH(time1);
time_blk_hash += time1;
- // call out to subclass implementation to add the block & metadata
- time1 = epee::misc_utils::get_tick_count();
- add_block(blk, block_size, cumulative_difficulty, coins_generated, blk_hash);
- TIME_MEASURE_FINISH(time1);
- time_add_block1 += time1;
+ uint64_t prev_height = height();
// call out to add the transactions
@@ -146,9 +145,12 @@ uint64_t BlockchainDB::add_block( const block& blk
TIME_MEASURE_FINISH(time1);
time_add_transaction += time1;
- // DB's new height based on this added block is only incremented after this
- // function returns, so height() here returns the new previous height.
- uint64_t prev_height = height();
+ // call out to subclass implementation to add the block & metadata
+ time1 = epee::misc_utils::get_tick_count();
+ add_block(blk, block_size, cumulative_difficulty, coins_generated, blk_hash);
+ TIME_MEASURE_FINISH(time1);
+ time_add_block1 += time1;
+
m_hardfork->add(blk, prev_height);
block_txn_stop();
@@ -198,6 +200,45 @@ void BlockchainDB::remove_transaction(const crypto::hash& tx_hash)
remove_transaction_data(tx_hash, tx);
}
+block BlockchainDB::get_block_from_height(const uint64_t& height) const
+{
+ blobdata bd = get_block_blob_from_height(height);
+ block b;
+ if (!parse_and_validate_block_from_blob(bd, b))
+ throw new DB_ERROR("Failed to parse block from blob retrieved from the db");
+
+ return b;
+}
+
+block BlockchainDB::get_block(const crypto::hash& h) const
+{
+ blobdata bd = get_block_blob(h);
+ block b;
+ if (!parse_and_validate_block_from_blob(bd, b))
+ throw new DB_ERROR("Failed to parse block from blob retrieved from the db");
+
+ return b;
+}
+
+bool BlockchainDB::get_tx(const crypto::hash& h, cryptonote::transaction &tx) const
+{
+ blobdata bd;
+ if (!get_tx_blob(h, bd))
+ return false;
+ if (!parse_and_validate_tx_from_blob(bd, tx))
+ throw new DB_ERROR("Failed to parse transaction from blob retrieved from the db");
+
+ return true;
+}
+
+transaction BlockchainDB::get_tx(const crypto::hash& h) const
+{
+ transaction tx;
+ if (!get_tx(h, tx))
+ throw new TX_DNE(std::string("tx with hash ").append(epee::string_tools::pod_to_hex(h)).append(" not found in db").c_str());
+ return tx;
+}
+
void BlockchainDB::reset_stats()
{
num_calls = 0;