Remove usages of frontiers table from ledger_processor block checks (#4460)
The account can be derived from the previous block's account field.
This commit is contained in:
parent
7523172634
commit
f109cb1ee9
3 changed files with 14 additions and 41 deletions
|
|
@ -820,11 +820,6 @@ TEST (block_store, frontier)
|
|||
auto transaction (store->tx_begin_write ());
|
||||
nano::block_hash hash (100);
|
||||
nano::account account (200);
|
||||
ASSERT_TRUE (store->frontier.get (transaction, hash).is_zero ());
|
||||
store->frontier.put (transaction, hash, account);
|
||||
ASSERT_EQ (account, store->frontier.get (transaction, hash));
|
||||
store->frontier.del (transaction, hash);
|
||||
ASSERT_TRUE (store->frontier.get (transaction, hash).is_zero ());
|
||||
}
|
||||
|
||||
TEST (block_store, block_replace)
|
||||
|
|
|
|||
|
|
@ -103,16 +103,13 @@ TEST (ledger, process_send)
|
|||
.work (*pool.generate (info1->head))
|
||||
.build ();
|
||||
nano::block_hash hash1 = send->hash ();
|
||||
ASSERT_EQ (nano::dev::genesis_key.pub, store.frontier.get (transaction, info1->head));
|
||||
ASSERT_EQ (1, info1->block_count);
|
||||
// This was a valid block, it should progress.
|
||||
auto return1 = ledger.process (transaction, send);
|
||||
ASSERT_EQ (nano::block_status::progress, return1);
|
||||
ASSERT_EQ (nano::dev::genesis_key.pub, send->sideband ().account);
|
||||
ASSERT_EQ (2, send->sideband ().height);
|
||||
ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.amount (transaction, hash1));
|
||||
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::block_status::progress, return1);
|
||||
ASSERT_EQ (nano::dev::genesis_key.pub, send->account ());
|
||||
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));
|
||||
|
|
@ -144,7 +141,6 @@ TEST (ledger, process_send)
|
|||
ASSERT_EQ (nano::block_status::progress, return2);
|
||||
ASSERT_EQ (key2.pub, open->account ());
|
||||
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));
|
||||
ASSERT_EQ (0, ledger.account_receivable (transaction, key2.pub));
|
||||
ASSERT_EQ (50, ledger.weight (nano::dev::genesis_key.pub));
|
||||
|
|
@ -164,7 +160,6 @@ TEST (ledger, process_send)
|
|||
ASSERT_NE (nullptr, latest5);
|
||||
ASSERT_EQ (*open, *latest5);
|
||||
ASSERT_FALSE (ledger.rollback (transaction, hash2));
|
||||
ASSERT_TRUE (store.frontier.get (transaction, hash2).is_zero ());
|
||||
auto info5 = ledger.account_info (transaction, key2.pub);
|
||||
ASSERT_FALSE (info5);
|
||||
auto pending1 = ledger.pending_info (transaction, nano::pending_key (key2.pub, hash1));
|
||||
|
|
@ -181,8 +176,6 @@ TEST (ledger, process_send)
|
|||
ASSERT_EQ (hash1, info6->head);
|
||||
ASSERT_FALSE (ledger.rollback (transaction, info6->head));
|
||||
ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis_key.pub));
|
||||
ASSERT_EQ (nano::dev::genesis_key.pub, store.frontier.get (transaction, info1->head));
|
||||
ASSERT_TRUE (store.frontier.get (transaction, hash1).is_zero ());
|
||||
auto info7 = ledger.account_info (transaction, nano::dev::genesis_key.pub);
|
||||
ASSERT_TRUE (info7);
|
||||
ASSERT_EQ (1, info7->block_count);
|
||||
|
|
@ -250,14 +243,11 @@ TEST (ledger, process_receive)
|
|||
.work (*pool.generate (hash2))
|
||||
.build ();
|
||||
auto hash4 = receive->hash ();
|
||||
ASSERT_EQ (key2.pub, store.frontier.get (transaction, hash2));
|
||||
auto return2 = ledger.process (transaction, receive);
|
||||
ASSERT_EQ (key2.pub, receive->sideband ().account);
|
||||
ASSERT_EQ (nano::dev::constants.genesis_amount - 25, receive->sideband ().balance.number ());
|
||||
ASSERT_EQ (2, receive->sideband ().height);
|
||||
ASSERT_EQ (25, ledger.amount (transaction, hash4));
|
||||
ASSERT_TRUE (store.frontier.get (transaction, hash2).is_zero ());
|
||||
ASSERT_EQ (key2.pub, store.frontier.get (transaction, hash4));
|
||||
ASSERT_EQ (nano::block_status::progress, return2);
|
||||
ASSERT_EQ (key2.pub, receive->account ());
|
||||
ASSERT_EQ (hash4, ledger.latest (transaction, key2.pub));
|
||||
|
|
@ -267,8 +257,6 @@ TEST (ledger, process_receive)
|
|||
ASSERT_EQ (nano::dev::constants.genesis_amount - 25, ledger.weight (key3.pub));
|
||||
ASSERT_FALSE (ledger.rollback (transaction, hash4));
|
||||
ASSERT_TRUE (store.block.successor (transaction, hash2).is_zero ());
|
||||
ASSERT_EQ (key2.pub, store.frontier.get (transaction, hash2));
|
||||
ASSERT_TRUE (store.frontier.get (transaction, hash4).is_zero ());
|
||||
ASSERT_EQ (25, ledger.account_balance (transaction, nano::dev::genesis_key.pub));
|
||||
ASSERT_EQ (25, ledger.account_receivable (transaction, key2.pub));
|
||||
ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.account_balance (transaction, key2.pub));
|
||||
|
|
@ -520,12 +508,9 @@ TEST (ledger, representative_change)
|
|||
.sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub)
|
||||
.work (*pool.generate (info1->head))
|
||||
.build ();
|
||||
ASSERT_EQ (nano::dev::genesis_key.pub, store.frontier.get (transaction, info1->head));
|
||||
auto return1 (ledger.process (transaction, block));
|
||||
ASSERT_EQ (0, ledger.amount (transaction, block->hash ()));
|
||||
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::block_status::progress, return1);
|
||||
ASSERT_EQ (0, ledger.amount (transaction, block->hash ()));
|
||||
ASSERT_EQ (nano::dev::genesis_key.pub, block->account ());
|
||||
ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub));
|
||||
ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (key2.pub));
|
||||
|
|
@ -533,8 +518,6 @@ TEST (ledger, representative_change)
|
|||
ASSERT_TRUE (info2);
|
||||
ASSERT_EQ (block->hash (), info2->head);
|
||||
ASSERT_FALSE (ledger.rollback (transaction, info2->head));
|
||||
ASSERT_EQ (nano::dev::genesis_key.pub, store.frontier.get (transaction, info1->head));
|
||||
ASSERT_TRUE (store.frontier.get (transaction, block->hash ()).is_zero ());
|
||||
auto info3 = ledger.account_info (transaction, nano::dev::genesis_key.pub);
|
||||
ASSERT_TRUE (info3);
|
||||
ASSERT_EQ (info1->head, info3->head);
|
||||
|
|
@ -5496,7 +5479,6 @@ TEST (ledger, migrate_lmdb_to_rocksdb)
|
|||
ASSERT_EQ (*send, *block1);
|
||||
ASSERT_TRUE (rocksdb_store.peer.exists (rocksdb_transaction, endpoint_key));
|
||||
ASSERT_EQ (rocksdb_store.version.get (rocksdb_transaction), version);
|
||||
ASSERT_EQ (rocksdb_store.frontier.get (rocksdb_transaction, 2), 5);
|
||||
nano::confirmation_height_info confirmation_height_info;
|
||||
ASSERT_FALSE (rocksdb_store.confirmation_height.get (rocksdb_transaction, nano::dev::genesis_key.pub, confirmation_height_info));
|
||||
ASSERT_EQ (confirmation_height_info.height, 2);
|
||||
|
|
|
|||
|
|
@ -464,12 +464,12 @@ void ledger_processor::change_block (nano::change_block & block_a)
|
|||
result = block_a.valid_predecessor (*previous) ? nano::block_status::progress : nano::block_status::block_position;
|
||||
if (result == nano::block_status::progress)
|
||||
{
|
||||
auto account (ledger.store.frontier.get (transaction, block_a.hashables.previous));
|
||||
result = account.is_zero () ? nano::block_status::fork : nano::block_status::progress;
|
||||
auto account = previous->account ();
|
||||
auto info = ledger.account_info (transaction, account);
|
||||
debug_assert (info);
|
||||
result = info->head != block_a.hashables.previous ? nano::block_status::fork : nano::block_status::progress;
|
||||
if (result == nano::block_status::progress)
|
||||
{
|
||||
auto info = ledger.account_info (transaction, account);
|
||||
debug_assert (info);
|
||||
debug_assert (info->head == block_a.hashables.previous);
|
||||
result = validate_message (account, hash, block_a.signature) ? nano::block_status::bad_signature : nano::block_status::progress; // Is this block signed correctly (Malformed)
|
||||
if (result == nano::block_status::progress)
|
||||
|
|
@ -510,8 +510,10 @@ void ledger_processor::send_block (nano::send_block & block_a)
|
|||
result = block_a.valid_predecessor (*previous) ? nano::block_status::progress : nano::block_status::block_position;
|
||||
if (result == nano::block_status::progress)
|
||||
{
|
||||
auto account (ledger.store.frontier.get (transaction, block_a.hashables.previous));
|
||||
result = account.is_zero () ? nano::block_status::fork : nano::block_status::progress;
|
||||
auto account = previous->account ();
|
||||
auto info = ledger.account_info (transaction, account);
|
||||
debug_assert (info);
|
||||
result = info->head != block_a.hashables.previous ? nano::block_status::fork : nano::block_status::progress;
|
||||
if (result == nano::block_status::progress)
|
||||
{
|
||||
result = validate_message (account, hash, block_a.signature) ? nano::block_status::bad_signature : nano::block_status::progress; // Is this block signed correctly (Malformed)
|
||||
|
|
@ -522,8 +524,6 @@ void ledger_processor::send_block (nano::send_block & block_a)
|
|||
if (result == nano::block_status::progress)
|
||||
{
|
||||
debug_assert (!validate_message (account, hash, block_a.signature));
|
||||
auto info = ledger.account_info (transaction, account);
|
||||
debug_assert (info);
|
||||
debug_assert (info->head == block_a.hashables.previous);
|
||||
result = info->balance.number () >= block_a.hashables.balance.number () ? nano::block_status::progress : nano::block_status::negative_spend; // Is this trying to spend a negative amount (Malicious)
|
||||
if (result == nano::block_status::progress)
|
||||
|
|
@ -561,8 +561,10 @@ void ledger_processor::receive_block (nano::receive_block & block_a)
|
|||
result = block_a.valid_predecessor (*previous) ? nano::block_status::progress : nano::block_status::block_position;
|
||||
if (result == nano::block_status::progress)
|
||||
{
|
||||
auto account (ledger.store.frontier.get (transaction, block_a.hashables.previous));
|
||||
result = account.is_zero () ? nano::block_status::gap_previous : nano::block_status::progress; // Have we seen the previous block? No entries for account at all (Harmless)
|
||||
auto account = previous->account ();
|
||||
auto info = ledger.account_info (transaction, account);
|
||||
debug_assert (info);
|
||||
result = info->head != block_a.hashables.previous ? nano::block_status::fork : nano::block_status::progress; // If we have the block but it's not the latest we have a signed fork (Malicious)
|
||||
if (result == nano::block_status::progress)
|
||||
{
|
||||
result = validate_message (account, hash, block_a.signature) ? nano::block_status::bad_signature : nano::block_status::progress; // Is the signature valid (Malformed)
|
||||
|
|
@ -572,8 +574,6 @@ void ledger_processor::receive_block (nano::receive_block & block_a)
|
|||
result = ledger.block_or_pruned_exists (transaction, block_a.hashables.source) ? nano::block_status::progress : nano::block_status::gap_source; // Have we seen the source block already? (Harmless)
|
||||
if (result == nano::block_status::progress)
|
||||
{
|
||||
auto info = ledger.account_info (transaction, account);
|
||||
debug_assert (info);
|
||||
result = info->head == block_a.hashables.previous ? nano::block_status::progress : nano::block_status::gap_previous; // Block doesn't immediately follow latest block (Harmless)
|
||||
if (result == nano::block_status::progress)
|
||||
{
|
||||
|
|
@ -613,10 +613,6 @@ void ledger_processor::receive_block (nano::receive_block & block_a)
|
|||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
result = ledger.store.block.exists (transaction, block_a.hashables.previous) ? nano::block_status::fork : nano::block_status::gap_previous; // If we have the block but it's not the latest we have a signed fork (Malicious)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue