Not loading send block for every receive, instead using frontier.
This commit is contained in:
parent
6c36b4d445
commit
1806a80540
2 changed files with 12 additions and 15 deletions
|
@ -35,13 +35,12 @@ TEST (processor_service, bad_receive_signature)
|
|||
genesis.initialize (transaction, store);
|
||||
rai::account_info info1;
|
||||
ASSERT_FALSE (store.account_get (transaction, rai::test_genesis_key.pub, info1));
|
||||
rai::keypair key2;
|
||||
rai::send_block send (info1.head, key2.pub, 50, rai::test_genesis_key.prv, rai::test_genesis_key.pub, 0);
|
||||
rai::send_block send (info1.head, rai::test_genesis_key.pub, 50, rai::test_genesis_key.prv, rai::test_genesis_key.pub, 0);
|
||||
rai::block_hash hash1 (send.hash ());
|
||||
ASSERT_EQ (rai::process_result::progress, ledger.process (transaction, send).code);
|
||||
rai::account_info info2;
|
||||
ASSERT_FALSE (store.account_get (transaction, rai::test_genesis_key.pub, info2));
|
||||
rai::receive_block receive (key2.pub, hash1, key2.prv, key2.pub, 0);
|
||||
rai::receive_block receive (hash1, hash1, rai::test_genesis_key.prv, rai::test_genesis_key.pub, 0);
|
||||
receive.signature.bytes [32] ^= 0x1;
|
||||
ASSERT_EQ (rai::process_result::bad_signature, ledger.process (transaction, receive).code);
|
||||
}
|
||||
|
|
|
@ -2996,20 +2996,18 @@ void ledger_processor::receive_block (rai::receive_block const & block_a)
|
|||
result.code = existing ? rai::process_result::old : rai::process_result::progress; // Have we seen this block already? (Harmless)
|
||||
if (result.code == rai::process_result::progress)
|
||||
{
|
||||
auto block (ledger.store.block_get (transaction, block_a.hashables.source));
|
||||
auto source_missing (block == nullptr);
|
||||
result.code = source_missing ? rai::process_result::gap_source : rai::process_result::progress; // Have we seen the source block already? (Harmless)
|
||||
result.code = ledger.store.block_exists (transaction, block_a.hashables.source) ? rai::process_result::progress: rai::process_result::gap_source; // Have we seen the source block already? (Harmless)
|
||||
if (result.code == rai::process_result::progress)
|
||||
{
|
||||
assert (dynamic_cast <rai::send_block *> (block.get ()) != nullptr);
|
||||
auto source (static_cast <rai::send_block *> (block.get ()));
|
||||
result.code = rai::validate_message (source->hashables.destination, hash, block_a.signature) ? rai::process_result::bad_signature : rai::process_result::progress; // Is the signature valid (Malformed)
|
||||
auto account (ledger.store.frontier_get (transaction, block_a.hashables.previous));
|
||||
result.code = account.is_zero () ? rai::process_result::gap_previous : rai::process_result::progress; //Have we seen the previous block? No entries for account at all (Harmless)
|
||||
if (result.code == rai::process_result::progress)
|
||||
{
|
||||
rai::account_info info;
|
||||
result.code = ledger.store.account_get (transaction, source->hashables.destination, info) ? rai::process_result::gap_previous : rai::process_result::progress; //Have we seen the previous block? No entries for account at all (Harmless)
|
||||
result.code = rai::validate_message (account, hash, block_a.signature) ? rai::process_result::bad_signature : rai::process_result::progress; // Is the signature valid (Malformed)
|
||||
if (result.code == rai::process_result::progress)
|
||||
{
|
||||
rai::account_info info;
|
||||
ledger.store.account_get (transaction, account, info);
|
||||
result.code = info.head == block_a.hashables.previous ? rai::process_result::progress : rai::process_result::gap_previous; // Block doesn't immediately follow latest block (Harmless)
|
||||
if (result.code == rai::process_result::progress)
|
||||
{
|
||||
|
@ -3032,12 +3030,12 @@ void ledger_processor::receive_block (rai::receive_block const & block_a)
|
|||
result.amount = pending.amount;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
result.code = ledger.store.block_exists (transaction, block_a.hashables.previous) ? rai::process_result::fork : rai::process_result::gap_previous; // If we have the block but it's not the latest we have a signed fork (Malicious)
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
result.code = ledger.store.block_exists (transaction, block_a.hashables.previous) ? rai::process_result::fork : rai::process_result::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