From 2d8dc01d517b3e29f3d0a75b9ff0791e5e86865f Mon Sep 17 00:00:00 2001 From: Colin LeMahieu Date: Thu, 14 Sep 2023 20:36:32 +0100 Subject: [PATCH] Moving ::version function off of nano::store and on to nano::ledger --- nano/core_test/block_store.cpp | 4 ++-- nano/core_test/wallet.cpp | 4 ++-- nano/nano_node/entry.cpp | 2 +- nano/node/lmdb/block_store.cpp | 11 ----------- nano/node/lmdb/block_store.hpp | 1 - nano/node/rocksdb/block_store.cpp | 11 ----------- nano/node/rocksdb/block_store.hpp | 1 - nano/secure/ledger.cpp | 22 +++++++++++++++++++++- nano/secure/ledger.hpp | 2 ++ nano/secure/store.hpp | 1 - 10 files changed, 28 insertions(+), 31 deletions(-) diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 08f0bd9b..370e11ed 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -1100,7 +1100,7 @@ TEST (mdb_block_store, sideband_height) .work (*pool.generate (state_open->hash ())) .build (); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *epoch).code); - ASSERT_EQ (nano::epoch::epoch_1, store.block.version (transaction, epoch->hash ())); + ASSERT_EQ (nano::epoch::epoch_1, ledger.version (*epoch)); auto epoch_open = builder .state () .account (key2.pub) @@ -1112,7 +1112,7 @@ TEST (mdb_block_store, sideband_height) .work (*pool.generate (key2.pub)) .build (); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *epoch_open).code); - ASSERT_EQ (nano::epoch::epoch_1, store.block.version (transaction, epoch_open->hash ())); + ASSERT_EQ (nano::epoch::epoch_1, ledger.version (*epoch_open)); auto state_receive = builder .state () .account (key2.pub) diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index 799466e2..e3d82d68 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -1072,7 +1072,7 @@ TEST (wallet, epoch_2_receive_propagation) if (nano::dev::network_params.work.difficulty (*receive2) < node.network_params.work.base) { ASSERT_GE (nano::dev::network_params.work.difficulty (*receive2), node.network_params.work.epoch_2_receive); - ASSERT_EQ (nano::epoch::epoch_2, node.store.block.version (node.store.tx_begin_read (), receive2->hash ())); + ASSERT_EQ (nano::epoch::epoch_2, node.ledger.version (*receive2)); ASSERT_EQ (nano::epoch::epoch_2, receive2->sideband ().source_epoch); break; } @@ -1125,7 +1125,7 @@ TEST (wallet, epoch_2_receive_unopened) if (nano::dev::network_params.work.difficulty (*receive1) < node.network_params.work.base) { ASSERT_GE (nano::dev::network_params.work.difficulty (*receive1), node.network_params.work.epoch_2_receive); - ASSERT_EQ (nano::epoch::epoch_2, node.store.block.version (node.store.tx_begin_read (), receive1->hash ())); + ASSERT_EQ (nano::epoch::epoch_2, node.ledger.version (*receive1)); ASSERT_EQ (nano::epoch::epoch_1, receive1->sideband ().source_epoch); break; } diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 690f64cc..78698432 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -1570,7 +1570,7 @@ int main (int argc, char * const * argv) // Check link epoch version if (sideband.details.is_receive && (!node->ledger.pruning || !node->store.pruned.exists (transaction, block->link ().as_block_hash ()))) { - if (sideband.source_epoch != node->store.block.version (transaction, block->link ().as_block_hash ())) + if (sideband.source_epoch != node->ledger.version (*block)) { print_error_message (boost::str (boost::format ("Incorrect source epoch for block %1%\n") % hash.to_string ())); } diff --git a/nano/node/lmdb/block_store.cpp b/nano/node/lmdb/block_store.cpp index d495dc95..aabc66fd 100644 --- a/nano/node/lmdb/block_store.cpp +++ b/nano/node/lmdb/block_store.cpp @@ -147,17 +147,6 @@ nano::store_iterator nano::lmdb::block return nano::store_iterator (nullptr); } -nano::epoch nano::lmdb::block_store::version (nano::transaction const & transaction_a, nano::block_hash const & hash_a) -{ - auto block = get (transaction_a, hash_a); - if (block && block->type () == nano::block_type::state) - { - return block->sideband ().details.epoch; - } - - return nano::epoch::epoch_0; -} - void nano::lmdb::block_store::for_each_par (std::function, nano::store_iterator)> const & action_a) const { parallel_traversal ( diff --git a/nano/node/lmdb/block_store.hpp b/nano/node/lmdb/block_store.hpp index 65c52c0c..1815b533 100644 --- a/nano/node/lmdb/block_store.hpp +++ b/nano/node/lmdb/block_store.hpp @@ -30,7 +30,6 @@ namespace lmdb nano::store_iterator begin (nano::transaction const & transaction_a) const override; nano::store_iterator begin (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override; nano::store_iterator end () const override; - nano::epoch version (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override; void for_each_par (std::function, nano::store_iterator)> const & action_a) const override; // Converts a block hash to a block height uint64_t account_height (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override; diff --git a/nano/node/rocksdb/block_store.cpp b/nano/node/rocksdb/block_store.cpp index 89cba8ed..81f4ef37 100644 --- a/nano/node/rocksdb/block_store.cpp +++ b/nano/node/rocksdb/block_store.cpp @@ -147,17 +147,6 @@ nano::store_iterator nano::rocksdb::bl return nano::store_iterator (nullptr); } -nano::epoch nano::rocksdb::block_store::version (nano::transaction const & transaction_a, nano::block_hash const & hash_a) -{ - auto block = get (transaction_a, hash_a); - if (block && block->type () == nano::block_type::state) - { - return block->sideband ().details.epoch; - } - - return nano::epoch::epoch_0; -} - void nano::rocksdb::block_store::for_each_par (std::function, nano::store_iterator)> const & action_a) const { parallel_traversal ( diff --git a/nano/node/rocksdb/block_store.hpp b/nano/node/rocksdb/block_store.hpp index b01cbc78..b8e8941c 100644 --- a/nano/node/rocksdb/block_store.hpp +++ b/nano/node/rocksdb/block_store.hpp @@ -30,7 +30,6 @@ namespace rocksdb nano::store_iterator begin (nano::transaction const & transaction_a) const override; nano::store_iterator begin (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override; nano::store_iterator end () const override; - nano::epoch version (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override; void for_each_par (std::function, nano::store_iterator)> const & action_a) const override; // Converts a block hash to a block height uint64_t account_height (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override; diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 3974ed4c..232addf4 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -152,7 +152,7 @@ public: } debug_assert (!error); - auto previous_version (ledger.store.block.version (transaction, block_a.hashables.previous)); + auto previous_version (ledger.version (transaction, block_a.hashables.previous)); nano::account_info new_info (block_a.hashables.previous, representative, info->open_block, balance, nano::seconds_since_epoch (), info->block_count - 1, previous_version); ledger.update_account (transaction, block_a.hashables.account, *info, new_info); @@ -1613,6 +1613,26 @@ bool nano::ledger::bootstrap_weight_reached () const return cache.block_count >= bootstrap_weight_max_blocks; } +nano::epoch nano::ledger::version (nano::block const & block) +{ + if (block.type () == nano::block_type::state) + { + return block.sideband ().details.epoch; + } + + return nano::epoch::epoch_0; +} + +nano::epoch nano::ledger::version (nano::transaction const & transaction, nano::block_hash const & hash) const +{ + auto block = store.block.get (transaction, hash); + if (block == nullptr) + { + return nano::epoch::epoch_0; + } + return version (*block); +} + nano::uncemented_info::uncemented_info (nano::block_hash const & cemented_frontier, nano::block_hash const & frontier, nano::account const & account) : cemented_frontier (cemented_frontier), frontier (frontier), account (account) { diff --git a/nano/secure/ledger.hpp b/nano/secure/ledger.hpp index 762e438d..c31f35c7 100644 --- a/nano/secure/ledger.hpp +++ b/nano/secure/ledger.hpp @@ -87,6 +87,8 @@ public: std::multimap> unconfirmed_frontiers () const; bool migrate_lmdb_to_rocksdb (boost::filesystem::path const &) const; bool bootstrap_weight_reached () const; + static nano::epoch version (nano::block const & block); + nano::epoch version (nano::transaction const & transaction, nano::block_hash const & hash) const; static nano::uint128_t const unit; nano::ledger_constants & constants; nano::store & store; diff --git a/nano/secure/store.hpp b/nano/secure/store.hpp index 6832501a..c9a0b5cb 100644 --- a/nano/secure/store.hpp +++ b/nano/secure/store.hpp @@ -755,7 +755,6 @@ public: virtual nano::store_iterator begin (nano::transaction const &, nano::block_hash const &) const = 0; virtual nano::store_iterator begin (nano::transaction const &) const = 0; virtual nano::store_iterator end () const = 0; - virtual nano::epoch version (nano::transaction const &, nano::block_hash const &) = 0; virtual void for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; virtual uint64_t account_height (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const = 0; };