diff --git a/nano/secure/blockstore.hpp b/nano/secure/blockstore.hpp index 6ea27168d4..b298ddbb78 100644 --- a/nano/secure/blockstore.hpp +++ b/nano/secure/blockstore.hpp @@ -629,8 +629,6 @@ class block_store virtual void account_del (nano::write_transaction const &, nano::account const &) = 0; virtual bool account_exists (nano::transaction const &, nano::account const &) = 0; virtual size_t account_count (nano::transaction const &) = 0; - virtual void confirmation_height_clear (nano::write_transaction const &, nano::account const &) = 0; - virtual void confirmation_height_clear (nano::write_transaction const &) = 0; virtual nano::store_iterator accounts_begin (nano::transaction const &, nano::account const &) const = 0; virtual nano::store_iterator accounts_begin (nano::transaction const &) const = 0; virtual nano::store_iterator accounts_end () const = 0; @@ -693,6 +691,8 @@ class block_store virtual bool confirmation_height_exists (nano::transaction const & transaction_a, nano::account const & account_a) const = 0; virtual void confirmation_height_del (nano::write_transaction const & transaction_a, nano::account const & account_a) = 0; virtual uint64_t confirmation_height_count (nano::transaction const & transaction_a) = 0; + virtual void confirmation_height_clear (nano::write_transaction const &, nano::account const &) = 0; + virtual void confirmation_height_clear (nano::write_transaction const &) = 0; virtual nano::store_iterator confirmation_height_begin (nano::transaction const & transaction_a, nano::account const & account_a) const = 0; virtual nano::store_iterator confirmation_height_begin (nano::transaction const & transaction_a) const = 0; virtual nano::store_iterator confirmation_height_end () const = 0; diff --git a/nano/secure/blockstore_partial.hpp b/nano/secure/blockstore_partial.hpp index d29e9355ea..63cc6161c6 100644 --- a/nano/secure/blockstore_partial.hpp +++ b/nano/secure/blockstore_partial.hpp @@ -56,50 +56,6 @@ class block_store_partial : public block_store frontier_put (transaction_a, hash_l, network_params.ledger.genesis_account); } - nano::uint128_t block_balance (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override - { - auto block (block_get (transaction_a, hash_a)); - release_assert (block); - nano::uint128_t result (block_balance_calculated (block)); - return result; - } - - bool account_exists (nano::transaction const & transaction_a, nano::account const & account_a) override - { - auto iterator (accounts_begin (transaction_a, account_a)); - return iterator != accounts_end () && nano::account (iterator->first) == account_a; - } - - void confirmation_height_clear (nano::write_transaction const & transaction_a, nano::account const & account_a) override - { - confirmation_height_del (transaction_a, account_a); - } - - void confirmation_height_clear (nano::write_transaction const & transaction_a) override - { - drop (transaction_a, nano::tables::confirmation_height); - } - - bool pending_exists (nano::transaction const & transaction_a, nano::pending_key const & key_a) override - { - auto iterator (pending_begin (transaction_a, key_a)); - return iterator != pending_end () && nano::pending_key (iterator->first) == key_a; - } - - bool pending_any (nano::transaction const & transaction_a, nano::account const & account_a) override - { - auto iterator (pending_begin (transaction_a, nano::pending_key (account_a, 0))); - return iterator != pending_end () && nano::pending_key (iterator->first).account == account_a; - } - - bool unchecked_exists (nano::transaction const & transaction_a, nano::unchecked_key const & unchecked_key_a) override - { - nano::db_val value; - auto status (get (transaction_a, tables::unchecked, nano::db_val (unchecked_key_a), value)); - release_assert (success (status) || not_found (status)); - return (success (status)); - } - void block_put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a, nano::block const & block_a) override { debug_assert (block_a.sideband ().successor.is_zero () || block_exists (transaction_a, block_a.sideband ().successor)); @@ -122,6 +78,14 @@ class block_store_partial : public block_store return block->sideband ().height; } + nano::uint128_t block_balance (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override + { + auto block (block_get (transaction_a, hash_a)); + release_assert (block); + nano::uint128_t result (block_balance_calculated (block)); + return result; + } + std::shared_ptr block_get (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override { auto value (block_raw_get (transaction_a, hash_a)); @@ -239,13 +203,6 @@ class block_store_partial : public block_store block_raw_put (transaction_a, data, hash_a); } - void unchecked_put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a, std::shared_ptr const & block_a) override - { - nano::unchecked_key key (hash_a, block_a->hash ()); - nano::unchecked_info info (block_a, block_a->account (), nano::seconds_since_epoch (), nano::signature_verification::unknown); - unchecked_put (transaction_a, key, info); - } - nano::store_iterator unchecked_end () const override { return nano::store_iterator (nullptr); @@ -291,12 +248,6 @@ class block_store_partial : public block_store return nano::store_iterator (nullptr); } - void block_del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override - { - auto status = del (transaction_a, tables::blocks, hash_a); - release_assert_success (status); - } - int version_get (nano::transaction const & transaction_a) const override { nano::uint256_union version_key (1); @@ -312,6 +263,12 @@ class block_store_partial : public block_store return result; } + void block_del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override + { + auto status = del (transaction_a, tables::blocks, hash_a); + release_assert_success (status); + } + nano::epoch block_version (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override { auto block = block_get (transaction_a, hash_a); @@ -358,6 +315,18 @@ class block_store_partial : public block_store return result; } + bool pending_exists (nano::transaction const & transaction_a, nano::pending_key const & key_a) override + { + auto iterator (pending_begin (transaction_a, key_a)); + return iterator != pending_end () && nano::pending_key (iterator->first) == key_a; + } + + bool pending_any (nano::transaction const & transaction_a, nano::account const & account_a) override + { + auto iterator (pending_begin (transaction_a, nano::pending_key (account_a, 0))); + return iterator != pending_end () && nano::pending_key (iterator->first).account == account_a; + } + void frontier_put (nano::write_transaction const & transaction_a, nano::block_hash const & block_a, nano::account const & account_a) override { nano::db_val account (account_a); @@ -397,16 +366,24 @@ class block_store_partial : public block_store release_assert_success (status); } - void online_weight_put (nano::write_transaction const & transaction_a, uint64_t time_a, nano::amount const & amount_a) override + bool unchecked_exists (nano::transaction const & transaction_a, nano::unchecked_key const & unchecked_key_a) override { - nano::db_val value (amount_a); - auto status (put (transaction_a, tables::online_weight, time_a, value)); - release_assert_success (status); + nano::db_val value; + auto status (get (transaction_a, tables::unchecked, nano::db_val (unchecked_key_a), value)); + release_assert (success (status) || not_found (status)); + return (success (status)); } - void online_weight_del (nano::write_transaction const & transaction_a, uint64_t time_a) override + void unchecked_put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a, std::shared_ptr const & block_a) override { - auto status (del (transaction_a, tables::online_weight, time_a)); + nano::unchecked_key key (hash_a, block_a->hash ()); + nano::unchecked_info info (block_a, block_a->account (), nano::seconds_since_epoch (), nano::signature_verification::unknown); + unchecked_put (transaction_a, key, info); + } + + void unchecked_clear (nano::write_transaction const & transaction_a) override + { + auto status = drop (transaction_a, tables::unchecked); release_assert_success (status); } @@ -439,9 +416,22 @@ class block_store_partial : public block_store return result; } - void unchecked_clear (nano::write_transaction const & transaction_a) override + bool account_exists (nano::transaction const & transaction_a, nano::account const & account_a) override { - auto status = drop (transaction_a, tables::unchecked); + auto iterator (accounts_begin (transaction_a, account_a)); + return iterator != accounts_end () && nano::account (iterator->first) == account_a; + } + + void online_weight_put (nano::write_transaction const & transaction_a, uint64_t time_a, nano::amount const & amount_a) override + { + nano::db_val value (amount_a); + auto status (put (transaction_a, tables::online_weight, time_a, value)); + release_assert_success (status); + } + + void online_weight_del (nano::write_transaction const & transaction_a, uint64_t time_a) override + { + auto status (del (transaction_a, tables::online_weight, time_a)); release_assert_success (status); } @@ -602,6 +592,16 @@ class block_store_partial : public block_store return exists (transaction_a, tables::confirmation_height, nano::db_val (account_a)); } + void confirmation_height_clear (nano::write_transaction const & transaction_a, nano::account const & account_a) override + { + confirmation_height_del (transaction_a, account_a); + } + + void confirmation_height_clear (nano::write_transaction const & transaction_a) override + { + drop (transaction_a, nano::tables::confirmation_height); + } + nano::store_iterator accounts_begin (nano::transaction const & transaction_a, nano::account const & account_a) const override { return make_iterator (transaction_a, tables::accounts, nano::db_val (account_a));