Moving ::account off of nano::store and on to nano::ledger

This commit is contained in:
Colin LeMahieu 2023-09-14 19:56:29 +01:00
commit ac56df90d2
No known key found for this signature in database
GPG key ID: 43708520C8DFB938
6 changed files with 26 additions and 31 deletions

View file

@ -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);

View file

@ -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<bool> ("secondary_work_peers", false));

View file

@ -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
{

View file

@ -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<nano::account_info> account_info (nano::transaction const & transaction, nano::account const & account) const;
/**

View file

@ -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
{

View file

@ -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<nano::block_hash, block_w_sideband> begin (nano::transaction const &, nano::block_hash const &) const = 0;
virtual nano::store_iterator<nano::block_hash, block_w_sideband> begin (nano::transaction const &) const = 0;
virtual nano::store_iterator<nano::block_hash, block_w_sideband> end () const = 0;