From ac56df90d2d8e9614825dc567b054d145e6ce6f2 Mon Sep 17 00:00:00 2001 From: Colin LeMahieu Date: Thu, 14 Sep 2023 19:56:29 +0100 Subject: [PATCH] Moving ::account off of nano::store and on to nano::ledger --- nano/core_test/ledger.cpp | 10 +++++----- nano/node/json_handler.cpp | 2 +- nano/secure/ledger.cpp | 24 +++++++++++++++++++----- nano/secure/ledger.hpp | 1 + nano/secure/store.cpp | 18 ------------------ nano/secure/store.hpp | 2 -- 6 files changed, 26 insertions(+), 31 deletions(-) diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 870331d4..8339eda1 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -112,7 +112,7 @@ TEST (ledger, process_send) ASSERT_TRUE (store.frontier.get (transaction, info1->head).is_zero ()); ASSERT_EQ (nano::dev::genesis_key.pub, store.frontier.get (transaction, hash1)); ASSERT_EQ (nano::process_result::progress, return1.code); - ASSERT_EQ (nano::dev::genesis_key.pub, store.block.account (*send)); + ASSERT_EQ (nano::dev::genesis_key.pub, ledger.account (*send)); ASSERT_EQ (50, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.account_receivable (transaction, key2.pub)); auto info2 = ledger.account_info (transaction, nano::dev::genesis_key.pub); @@ -141,7 +141,7 @@ TEST (ledger, process_send) ASSERT_EQ (1, open->sideband ().height); ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.amount (transaction, hash2)); ASSERT_EQ (nano::process_result::progress, return2.code); - ASSERT_EQ (key2.pub, store.block.account (*open)); + ASSERT_EQ (key2.pub, ledger.account (*open)); ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.amount (transaction, hash2)); ASSERT_EQ (key2.pub, store.frontier.get (transaction, hash2)); ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); @@ -225,7 +225,7 @@ TEST (ledger, process_receive) nano::block_hash hash2 (open->hash ()); auto return1 = ledger.process (transaction, *open); ASSERT_EQ (nano::process_result::progress, return1.code); - ASSERT_EQ (key2.pub, store.block.account (*open)); + ASSERT_EQ (key2.pub, ledger.account (*open)); ASSERT_EQ (key2.pub, open->sideband ().account); ASSERT_EQ (nano::dev::constants.genesis_amount - 50, open->sideband ().balance.number ()); ASSERT_EQ (1, open->sideband ().height); @@ -258,7 +258,7 @@ TEST (ledger, process_receive) ASSERT_TRUE (store.frontier.get (transaction, hash2).is_zero ()); ASSERT_EQ (key2.pub, store.frontier.get (transaction, hash4)); ASSERT_EQ (nano::process_result::progress, return2.code); - ASSERT_EQ (key2.pub, store.block.account (*receive)); + ASSERT_EQ (key2.pub, ledger.account (*receive)); ASSERT_EQ (hash4, ledger.latest (transaction, key2.pub)); ASSERT_EQ (25, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.account_receivable (transaction, key2.pub)); @@ -525,7 +525,7 @@ TEST (ledger, representative_change) ASSERT_TRUE (store.frontier.get (transaction, info1->head).is_zero ()); ASSERT_EQ (nano::dev::genesis_key.pub, store.frontier.get (transaction, block->hash ())); ASSERT_EQ (nano::process_result::progress, return1.code); - ASSERT_EQ (nano::dev::genesis_key.pub, store.block.account (*block)); + ASSERT_EQ (nano::dev::genesis_key.pub, ledger.account (*block)); ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (key2.pub)); auto info2 = ledger.account_info (transaction, nano::dev::genesis_key.pub); diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index a62f1ad3..ef4e9eab 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -5095,7 +5095,7 @@ void nano::json_handler::work_generate () auto transaction_l (node.store.tx_begin_read ()); if (node.store.block.exists (transaction_l, hash)) { - account = node.store.block.account (transaction_l, hash); + account = node.ledger.account (transaction_l, hash); } } auto secondary_work_peers_l (request.get ("secondary_work_peers", false)); diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 9579b253..2322a9f1 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -1031,23 +1031,37 @@ bool nano::ledger::rollback (nano::write_transaction const & transaction_a, nano return rollback (transaction_a, block_a, rollback_list); } -nano::account nano::ledger::account (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const +nano::account nano::ledger::account (nano::block const & block) const { - return store.block.account (transaction_a, hash_a); + debug_assert (block.has_sideband ()); + nano::account result (block.account ()); + if (result.is_zero ()) + { + result = block.sideband ().account; + } + debug_assert (!result.is_zero ()); + return result; +} + +nano::account nano::ledger::account (nano::transaction const & transaction, nano::block_hash const & hash) const +{ + auto block = store.block.get (transaction, hash); + debug_assert (block != nullptr); + return account (*block); } nano::account nano::ledger::account_safe (nano::transaction const & transaction_a, nano::block_hash const & hash_a, bool & error_a) const { if (!pruning) { - return store.block.account (transaction_a, hash_a); + return account (transaction_a, hash_a); } else { auto block (store.block.get (transaction_a, hash_a)); if (block != nullptr) { - return store.block.account (*block); + return account (*block); } else { @@ -1062,7 +1076,7 @@ nano::account nano::ledger::account_safe (nano::transaction const & transaction, auto block = store.block.get (transaction, hash); if (block) { - return store.block.account (*block); + return account (*block); } else { diff --git a/nano/secure/ledger.hpp b/nano/secure/ledger.hpp index 6284ee04..9af41ee2 100644 --- a/nano/secure/ledger.hpp +++ b/nano/secure/ledger.hpp @@ -31,6 +31,7 @@ public: /** * Return account containing hash, expects that block hash exists in ledger */ + nano::account account (nano::block const & block) const; nano::account account (nano::transaction const &, nano::block_hash const &) const; std::optional account_info (nano::transaction const & transaction, nano::account const & account) const; /** diff --git a/nano/secure/store.cpp b/nano/secure/store.cpp index 45cd33d8..d4667288 100644 --- a/nano/secure/store.cpp +++ b/nano/secure/store.cpp @@ -106,24 +106,6 @@ bool nano::write_transaction::contains (nano::tables table_a) const return impl->contains (table_a); } -nano::account nano::block_store::account (nano::block const & block) const -{ - debug_assert (block.has_sideband ()); - nano::account result (block.account ()); - if (result.is_zero ()) - { - result = block.sideband ().account; - } - debug_assert (!result.is_zero ()); - return result; -} - -nano::account nano::block_store::account (nano::transaction const & transaction, nano::block_hash const & hash) const -{ - auto block = get (transaction, hash); - debug_assert (block != nullptr); - return account (*block); -} nano::uint128_t nano::block_store::balance (nano::block const & block) const { diff --git a/nano/secure/store.hpp b/nano/secure/store.hpp index 3f141a6d..8be2e7d0 100644 --- a/nano/secure/store.hpp +++ b/nano/secure/store.hpp @@ -752,8 +752,6 @@ public: virtual void del (nano::write_transaction const &, nano::block_hash const &) = 0; virtual bool exists (nano::transaction const &, nano::block_hash const &) = 0; virtual uint64_t count (nano::transaction const &) = 0; - nano::account account (nano::block const & block) const; - nano::account account (nano::transaction const & transaction, nano::block_hash const & hash) const; 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;